mirror of https://github.com/ConsenSys/mythril
parent
ff65853def
commit
8314be6074
@ -0,0 +1,57 @@ |
||||
from mythril.laser.ethereum.transaction.symbolic import execute_message_call, execute_contract_creation |
||||
from mythril.laser.ethereum.transaction import MessageCallTransaction, ContractCreationTransaction |
||||
from mythril.laser.ethereum.svm import LaserEVM |
||||
from mythril.laser.ethereum.state import WorldState |
||||
import unittest.mock as mock |
||||
from unittest.mock import MagicMock |
||||
|
||||
|
||||
def _is_message_call(_, transaction): |
||||
assert isinstance(transaction, MessageCallTransaction) |
||||
|
||||
|
||||
def _is_contract_creation(_, transaction): |
||||
assert isinstance(transaction, ContractCreationTransaction) |
||||
|
||||
|
||||
@mock.patch("mythril.laser.ethereum.transaction.symbolic._setup_global_state_for_execution") |
||||
def test_execute_message_call(mocked_setup: MagicMock): |
||||
# Arrange |
||||
laser_evm = LaserEVM({}) |
||||
|
||||
world_state = WorldState() |
||||
world_state.accounts["address"] = "something" |
||||
|
||||
laser_evm.open_states = [world_state] |
||||
laser_evm.exec = MagicMock() |
||||
|
||||
mocked_setup.side_effect = _is_message_call |
||||
|
||||
# Act |
||||
execute_message_call(laser_evm, "address") |
||||
|
||||
# Assert |
||||
laser_evm.exec.assert_called_once() |
||||
|
||||
assert len(laser_evm.open_states) == 0 |
||||
mocked_setup.assert_called_once() |
||||
|
||||
|
||||
@mock.patch("mythril.laser.ethereum.transaction.symbolic._setup_global_state_for_execution") |
||||
def test_execute_contract_creation(mocked_setup: MagicMock): |
||||
# Arrange |
||||
laser_evm = LaserEVM({}) |
||||
|
||||
laser_evm.open_states = [WorldState(), WorldState()] |
||||
laser_evm.exec = MagicMock() |
||||
mocked_setup.side_effect = _is_contract_creation |
||||
|
||||
# Act |
||||
new_account = execute_contract_creation(laser_evm, "606000") |
||||
|
||||
# Assert |
||||
laser_evm.exec.assert_called_once() |
||||
|
||||
assert len(laser_evm.open_states) == 0 |
||||
mocked_setup.assert_called() |
||||
|
Loading…
Reference in new issue