Skip to content
Snippets Groups Projects
Commit dc606824 authored by vincent's avatar vincent
Browse files

Adapt tests to previous commit

parent 48b2590f
No related branches found
No related tags found
No related merge requests found
......@@ -21,7 +21,8 @@ from symbolic_execution.program.instruction.exceptions import (
)
from symbolic_execution.program.instruction.general import InstructionTag
from z3 import *
import numpy as np
from symbolic_execution.program.block.utils import compute_path_count
class Satifiability(Enum):
SATISFIABLE = 0
......@@ -44,7 +45,7 @@ class Satifiability(Enum):
return self.name.lower()
def __find_unlocking_script_timed(hex_script, return_dict, verbose):
def __find_unlocking_script_timed(hex_script, return_dict, verbose, count_path):
m = ""
satisfiability = unknown
......@@ -77,6 +78,8 @@ def __find_unlocking_script_timed(hex_script, return_dict, verbose):
return_dict["satisfiability"] = Satifiability.z3_to_enum(satisfiability)
return_dict["model"] = str(m)
if count_path:
return_dict["path_count"] = compute_path_count(program)
except InvalidOpCode as e:
return_dict["satisfiability"] = Satifiability.UNSPENDABLE
......@@ -93,20 +96,26 @@ def __find_unlocking_script_timed(hex_script, return_dict, verbose):
except Exception as e:
raise e
finally:
if count_path and "path_count" not in return_dict:
return_dict["path_count"] = np.nan
def find_unlocking_script(hex_script: str, timeout=None, verbose=False):
def find_unlocking_script(hex_script: str, timeout=None, verbose=False, count_path=False):
"""Parse, execute the script. Then, it tries to find a valid unlocking script."""
manager = Manager()
return_dict = manager.dict()
p1 = Process(
target=__find_unlocking_script_timed, args=(hex_script, return_dict, verbose)
target=__find_unlocking_script_timed, args=(hex_script, return_dict, verbose, count_path)
)
p1.start()
p1.join(timeout=timeout)
p1.terminate()
if p1.exitcode is None:
return "", Satifiability.z3_to_enum(unknown)
return "", Satifiability.z3_to_enum(unknown), np.nan
elif count_path:
return return_dict["model"], return_dict["satisfiability"], return_dict["path_count"]
else:
return return_dict["model"], return_dict["satisfiability"]#, return_dict["tokens"], return_dict["program"]
return return_dict["model"], return_dict["satisfiability"], np.nan
\ No newline at end of file
......@@ -92,7 +92,7 @@ class TestParser(unittest.TestCase):
def test_symbolic_execution(self):
for _, scenario in enumerate(SYMBOLIC_TESTING_SCENARII):
with self.subTest(scenario.hex_script):
_, status = find_unlocking_script(scenario.hex_script, timeout=30)
_, status, path_count = find_unlocking_script(scenario.hex_script, timeout=30)
self.assertEqual(status, scenario.execution_status)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment