Skip to content

Commit

Permalink
Add new tests
Browse files Browse the repository at this point in the history
  • Loading branch information
cedelavergne-ledger committed Feb 26, 2025
1 parent 5224a83 commit 15e1d2c
Showing 1 changed file with 43 additions and 51 deletions.
94 changes: 43 additions & 51 deletions tests/ragger/test_tx_simulation.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from pathlib import Path
from enum import IntEnum
from typing import Optional
from web3 import Web3
import pytest

Expand All @@ -26,6 +27,11 @@ class W3CFlags(IntEnum):
W3C_OPT_IN = 0x20


@pytest.fixture(name="config", params=["benign", "threat", "warning", "issue"])
def config_fixture(request) -> str:
return request.param


def __common_setting_handling(firmware: Firmware,
navigator: Navigator,
app_client: EthAppClient,
Expand Down Expand Up @@ -69,6 +75,22 @@ def __get_simu_params(risk: str, simu_type: SimuType, blind: bool = False) -> di
return simu_params


def __handle_simulation(app_client: EthAppClient,
simu_params: dict,
chain_id: int,
tx_hash: Optional[bytes] = None) -> None:
if tx_hash is None:
tx_hash = bytes.fromhex("deadbeaf"*8)
response = app_client.provide_tx_simulation(simu_params["type"],
simu_params["risk"],
simu_params["category"],
simu_params["message"],
simu_params["url"],
tx_hash,
chain_id)
assert response.status == StatusWord.OK


def test_tx_simulation_opt_in(firmware: Firmware,
backend: BackendInterface,
navigator: Navigator,
Expand Down Expand Up @@ -110,16 +132,9 @@ def test_tx_simulation_disabled(firmware: Firmware,

__common_setting_handling(firmware, navigator, app_client, False)

chain_id = 5
simu_params = __get_simu_params("benign", SimuType.TRANSACTION)
try:
app_client.provide_tx_simulation(simu_params["type"],
simu_params["risk"],
simu_params["category"],
simu_params["message"],
simu_params["url"],
bytes.fromhex("deadbeaf"*8),
chain_id)
__handle_simulation(app_client, simu_params, 5)
except ExceptionRAPDU as err:
assert err.status == StatusWord.NOT_IMPLEMENTED
else:
Expand All @@ -138,34 +153,17 @@ def test_tx_simulation_enabled(firmware: Firmware,

__common_setting_handling(firmware, navigator, app_client, True)

chain_id = 5
simu_params = __get_simu_params("benign", SimuType.TRANSACTION)
response = app_client.provide_tx_simulation(simu_params["type"],
simu_params["risk"],
simu_params["category"],
simu_params["message"],
simu_params["url"],
bytes.fromhex("deadbeaf"*8),
chain_id)
assert response.status == StatusWord.OK
__handle_simulation(app_client, simu_params, 5)


@pytest.mark.parametrize(
"name, risk",
[
("good_tx", "threat"),
("benign_tx", "benign"),
("bad_tx", "warning")
]
)
def test_tx_simulation_condition(firmware: Firmware,
backend: BackendInterface,
navigator: Navigator,
scenario_navigator: NavigateWithScenario,
test_name: str,
default_screenshot_path: Path,
name: str,
risk: str) -> None:
def test_tx_simulation_sign(firmware: Firmware,
backend: BackendInterface,
navigator: Navigator,
scenario_navigator: NavigateWithScenario,
test_name: str,
default_screenshot_path: Path,
config: str) -> None:
"""Test the TX Simulation APDU with a simple transaction"""

if firmware.is_nano:
Expand All @@ -175,7 +173,6 @@ def test_tx_simulation_condition(firmware: Firmware,

__common_setting_handling(firmware, navigator, app_client, True)

simu_params = __get_simu_params(risk, SimuType.TRANSACTION)
tx_params: dict = {
"nonce": 21,
"gasPrice": Web3.to_wei(13, 'gwei'),
Expand All @@ -184,29 +181,19 @@ def test_tx_simulation_condition(firmware: Firmware,
"value": Web3.to_wei(1.22, "ether"),
"chainId": 5
}
if name == "bad_tx":
# Wrong tx hash
tx_hash = bytes.fromhex("deadbeaf"*8)
else:
if config != "issue":
simu_params = __get_simu_params(config, SimuType.TRANSACTION)
_, tx_hash = app_client.serialize_tx(tx_params)

response = app_client.provide_tx_simulation(simu_params["type"],
simu_params["risk"],
simu_params["category"],
simu_params["message"],
simu_params["url"],
tx_hash,
tx_params["chainId"])
assert response.status == StatusWord.OK
__handle_simulation(app_client, simu_params, tx_params["chainId"], tx_hash)

sign_tx_common(firmware,
backend,
navigator,
scenario_navigator,
default_screenshot_path,
tx_params,
test_name.replace("condition", name),
with_simu=name == "good_tx")
test_name + f"_{config}",
with_simu=config not in ("benign", "issue"))


def test_tx_simulation_no_simu(firmware: Firmware,
Expand Down Expand Up @@ -279,7 +266,8 @@ def test_tx_simulation_blind_sign(firmware: Firmware,
navigator: Navigator,
scenario_navigator: NavigateWithScenario,
test_name: str,
default_screenshot_path: Path) -> None:
default_screenshot_path: Path,
config: str) -> None:
"""Test the TX Simulation APDU with a Blind Sign transaction"""

if firmware.is_nano:
Expand All @@ -289,8 +277,12 @@ def test_tx_simulation_blind_sign(firmware: Firmware,

__common_setting_handling(firmware, navigator, app_client, True)

simu_params = __get_simu_params("warning", SimuType.TRANSACTION, True)
if config != "issue":
simu_params = __get_simu_params(config, SimuType.TRANSACTION, True)
else:
simu_params = None

test_name += f"_{config}"
blind_sign(firmware,
backend,
navigator,
Expand Down

0 comments on commit 15e1d2c

Please sign in to comment.