mirror of https://github.com/ConsenSys/mythril
blockchainethereumsmart-contractssoliditysecurityprogram-analysissecurity-analysissymbolic-execution
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
46 lines
1.5 KiB
46 lines
1.5 KiB
3 years ago
|
import pytest
|
||
|
import json
|
||
|
import sys
|
||
|
|
||
|
from subprocess import check_output
|
||
|
from tests import PROJECT_DIR, TESTDATA
|
||
|
|
||
|
MYTH = str(PROJECT_DIR / "myth")
|
||
|
test_data = (
|
||
|
("suicide.sol", [], "0.5.0"),
|
||
|
("overflow.sol", ["balanceOf(address)"], "0.5.0"),
|
||
|
(
|
||
|
"ether_send.sol",
|
||
|
["crowdfunding()", "withdrawfunds()", "owner()", "balances(address)"],
|
||
|
"0.5.0",
|
||
|
),
|
||
|
)
|
||
|
|
||
|
bytes_test_data = (
|
||
|
("safe_funcs.sol.o", ["change_val()"]),
|
||
|
("suicide.sol.o", []),
|
||
|
("overflow.sol.o", ["balanceOf(address)", "totalSupply()"]),
|
||
|
(
|
||
|
"ether_send.sol.o",
|
||
|
["crowdfunding()", "withdrawfunds()", "owner()", "balances(address)"],
|
||
|
),
|
||
|
)
|
||
|
|
||
|
|
||
|
@pytest.mark.parametrize("file_name, safe_funcs, version", test_data)
|
||
|
def test_analysis(file_name, safe_funcs, version):
|
||
|
file = str(TESTDATA / "input_contracts" / file_name)
|
||
|
command = f"python3 {MYTH} safe-functions {file} --solv {version}"
|
||
|
output = check_output(command, shell=True).decode("UTF-8")
|
||
|
assert f"{len(safe_funcs)} functions are deemed safe in this contract" in output
|
||
|
for func in safe_funcs:
|
||
|
assert func in output
|
||
|
|
||
|
|
||
|
@pytest.mark.parametrize("file_name, safe_funcs", bytes_test_data)
|
||
|
def test_bytecode_analysis(file_name, safe_funcs):
|
||
|
file = str(TESTDATA / "inputs" / file_name)
|
||
|
command = f"python3 {MYTH} safe-functions --bin-runtime -f {file}"
|
||
|
output = check_output(command, shell=True).decode("UTF-8")
|
||
|
assert f"{len(safe_funcs)} functions are deemed safe in this contract" in output
|