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.
35 lines
898 B
35 lines
898 B
9 months ago
|
import pytest
|
||
|
import os
|
||
|
import subprocess
|
||
|
|
||
|
from tests import PROJECT_DIR, TESTDATA
|
||
|
|
||
|
|
||
|
MYTH = str(PROJECT_DIR / "myth")
|
||
|
|
||
|
|
||
|
def output_with_stderr(command):
|
||
|
return subprocess.run(
|
||
|
command.split(" "), stdout=subprocess.PIPE, stderr=subprocess.PIPE
|
||
|
)
|
||
|
|
||
|
|
||
|
testfile_path = os.path.split(__file__)[0]
|
||
|
|
||
|
"""
|
||
|
calls.bin is the bytecode of
|
||
|
https://github.com/ConsenSys/mythril/blob/develop/solidity_examples/calls.sol
|
||
|
"""
|
||
|
swc_test_data = [
|
||
|
("114", f"{TESTDATA}/inputs/calls.sol.o", (9, 5)),
|
||
|
]
|
||
|
|
||
|
|
||
|
@pytest.mark.parametrize("swc, code, states_reduction", swc_test_data)
|
||
|
def test_merge(swc, code, states_reduction):
|
||
|
output = output_with_stderr(
|
||
|
f"{MYTH} -v4 a -f {code} -t 1 --solver-timeout 500 -mUncheckedRetval --enable-state-merging"
|
||
|
)
|
||
|
output_str = f"States reduced from {states_reduction[0]} to {states_reduction[1]}"
|
||
|
assert output_str in output.stderr.decode("utf-8")
|