Security analysis tool for EVM bytecode. Supports smart contracts built for Ethereum, Hedera, Quorum, Vechain, Roostock, Tron and other EVM-compatible blockchains.
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.
mythril/tests/integration_tests/test_solc_settings.py

51 lines
1.9 KiB

import pytest
import json
import sys
from subprocess import check_output, STDOUT
from tests import PROJECT_DIR, TESTDATA
MYTH = str(PROJECT_DIR / "myth")
def test_positive_solc_settings():
file_dir = str(TESTDATA / "json_test_dir" / "dir_a")
json_file_path = str(TESTDATA / "json_test_dir" / "test_file.json")
file_path = file_dir + "/input_file.sol"
command = f"cd {file_dir} && python3 {MYTH} analyze {file_path} --solc-json {json_file_path} --solv 0.8.0"
output = check_output(command, shell=True, stderr=STDOUT).decode("UTF-8")
assert "The analysis was completed successfully" in output
def test_positive_solc_args():
base_path = str(TESTDATA)
file_dir = str(TESTDATA / "json_test_dir" / "dir_a")
json_file_path = str(TESTDATA / "json_test_dir" / "test_file.json")
file_path = file_dir + "/input_file_args.sol"
command = f"""cd {file_dir} && python3 {MYTH} analyze {file_path} --solc-args "--allow-paths {base_path}" --solv 0.8.0"""
output = check_output(command, shell=True, stderr=STDOUT).decode("UTF-8")
assert "The analysis was completed successfully" in output
def test_neg_optimizer_solc_settings():
file_dir = str(TESTDATA / "json_test_dir" / "dir_a")
json_file_path = str(TESTDATA / "json_test_dir" / "test_file_disable.json")
file_path = file_dir + "/input_file.sol"
command = f"cd {file_dir} && python3 {MYTH} analyze {file_path} --solc-json {json_file_path} --solv 0.8.0"
output = check_output(command, shell=True, stderr=STDOUT).decode("UTF-8")
assert "Stack too deep when compiling inline assembly" in output
def test_negative_solc_settings():
file_path = str(TESTDATA / "json_test_dir" / "dir_a" / "input_file.sol")
command = f"python3 {MYTH} analyze {file_path} --solv 0.8.0"
output = check_output(command, shell=True, stderr=STDOUT).decode("UTF-8")
assert (
"""ParserError: Source "@openzeppelin/contracts/token/PRC20/PRC20.sol"""
in output
)