From 268c21c57a6ef093ffab6c927f13443c53335ca0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Palmer?= Date: Tue, 30 Jan 2024 09:59:43 +0100 Subject: [PATCH 1/7] Tests: better exception handling for parallelism by using ThreadPool --- test/python/utils/helper.py | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/test/python/utils/helper.py b/test/python/utils/helper.py index f8d16d08..d2bdd471 100644 --- a/test/python/utils/helper.py +++ b/test/python/utils/helper.py @@ -2,7 +2,8 @@ from typing import TypeVar, Callable, List, Union -from multiprocessing import Process, Queue +from multiprocessing.pool import ThreadPool +import time import git from ragger.firmware import Firmware @@ -49,29 +50,28 @@ def get_current_commit() -> str: commit += "*" return commit -def run_simultaneously(processes: List[Process]) -> None: - """Runs several processes simultaneously.""" - - for process in processes: - process.start() - - for process in processes: - process.join() - assert process.exitcode == 0, "Should have terminate successfully" - RESPONSE = TypeVar('RESPONSE') def send_and_navigate(send: Callable[[], RESPONSE], navigate: Callable[[], None]) -> RESPONSE: """Sends a request and navigates before receiving a response.""" - def _send(result_queue: Queue) -> None: - result_queue.put(send()) + with ThreadPool(processes=2) as pool: + + send_res = pool.apply_async(send) + navigate_res = pool.apply_async(navigate) + + while True: + if send_res.ready(): + result = send_res.get() + navigate_res.get() + break + if navigate_res.ready(): + navigate_res.get() + result = send_res.get() + break + time.sleep(0.1) - result_queue: Queue = Queue() - send_process = Process(target=_send, args=(result_queue,)) - navigate_process = Process(target=navigate) - run_simultaneously([navigate_process, send_process]) - return result_queue.get() + return result class Instructions: """Class gathering instructions generator needed for navigator.""" From c997f07ec2656e1d20a1ec7c01c29b934fbbec9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Palmer?= Date: Tue, 30 Jan 2024 11:48:46 +0100 Subject: [PATCH 2/7] Tests: create a tezos navigator In order to make tests clearer --- test/python/conftest.py | 11 ++ test/python/test_instructions.py | 234 +++++++++---------------------- test/python/utils/client.py | 4 +- test/python/utils/helper.py | 91 ------------ test/python/utils/navigator.py | 178 +++++++++++++++++++++++ 5 files changed, 258 insertions(+), 260 deletions(-) create mode 100644 test/python/utils/navigator.py diff --git a/test/python/conftest.py b/test/python/conftest.py index 1e40d338..9c68c43d 100644 --- a/test/python/conftest.py +++ b/test/python/conftest.py @@ -3,7 +3,10 @@ import pytest from ragger.backend import BackendInterface from ragger.conftest import configuration +from ragger.firmware import Firmware +from ragger.navigator import Navigator from utils.client import TezosClient +from utils.navigator import TezosNavigator from common import DEFAULT_SEED configuration.OPTIONAL.CUSTOM_SEED = DEFAULT_SEED @@ -15,3 +18,11 @@ def client(backend: BackendInterface): """Get a tezos client.""" return TezosClient(backend) + +@pytest.fixture(scope="function") +def tezos_navigator(backend: BackendInterface, + client: TezosClient, + firmware: Firmware, + navigator: Navigator): + """Get a tezos navigator.""" + return TezosNavigator(backend, firmware, client, navigator) diff --git a/test/python/test_instructions.py b/test/python/test_instructions.py index 9368209f..4fdd8ddf 100644 --- a/test/python/test_instructions.py +++ b/test/python/test_instructions.py @@ -2,15 +2,9 @@ from pathlib import Path import pytest -from ragger.firmware import Firmware -from ragger.navigator import Navigator from utils.client import TezosClient, Version, Hwm from utils.account import Account -from utils.helper import ( - Instructions, - send_and_navigate, - get_current_commit -) +from utils.helper import get_current_commit from utils.message import ( Preattestation, Attestation, @@ -19,8 +13,8 @@ Block, DEFAULT_CHAIN_ID ) +from utils.navigator import TezosNavigator from common import ( - TESTS_ROOT_DIR, DEFAULT_ACCOUNT, EMPTY_PATH ) @@ -47,25 +41,14 @@ def test_git(client: TezosClient) -> None: f"Expected {expected_commit} but got {commit}" - @pytest.mark.parametrize("account", [DEFAULT_ACCOUNT]) def test_authorize_baking( account: Account, - client: TezosClient, - firmware: Firmware, - navigator: Navigator, + tezos_navigator: TezosNavigator, test_name: Path) -> None: """Test the AUTHORIZE_BAKING instruction.""" - instructions = Instructions.get_public_key_flow_instructions(firmware) - - public_key = send_and_navigate( - send=lambda: client.authorize_baking(account), - navigate=lambda: navigator.navigate_and_compare( - TESTS_ROOT_DIR, - test_name, - instructions) - ) + public_key = tezos_navigator.authorize_baking(account, path=test_name) account.check_public_key(public_key) @@ -74,16 +57,10 @@ def test_authorize_baking( def test_deauthorize( account: Account, client: TezosClient, - firmware: Firmware, - navigator: Navigator) -> None: + tezos_navigator: TezosNavigator) -> None: """Test the DEAUTHORIZE instruction.""" - instructions = Instructions.get_public_key_flow_instructions(firmware) - - send_and_navigate( - send=lambda: client.authorize_baking(account), - navigate=lambda: navigator.navigate(instructions) - ) + tezos_navigator.authorize_baking(account) client.deauthorize() @@ -98,16 +75,10 @@ def test_deauthorize( def test_get_auth_key( account: Account, client: TezosClient, - firmware: Firmware, - navigator: Navigator) -> None: + tezos_navigator: TezosNavigator) -> None: """Test the QUERY_AUTH_KEY instruction.""" - instructions = Instructions.get_public_key_flow_instructions(firmware) - - send_and_navigate( - send=lambda: client.authorize_baking(account), - navigate=lambda: navigator.navigate(instructions) - ) + tezos_navigator.authorize_baking(account) path = client.get_auth_key() @@ -118,16 +89,10 @@ def test_get_auth_key( def test_get_auth_key_with_curve( account: Account, client: TezosClient, - firmware: Firmware, - navigator: Navigator) -> None: + tezos_navigator: TezosNavigator) -> None: """Test the QUERY_AUTH_KEY_WITH_CURVE instruction.""" - instructions = Instructions.get_public_key_flow_instructions(firmware) - - send_and_navigate( - send=lambda: client.authorize_baking(account), - navigate=lambda: navigator.navigate(instructions) - ) + tezos_navigator.authorize_baking(account) sig_scheme, path = client.get_auth_key_with_curve() @@ -140,26 +105,13 @@ def test_get_auth_key_with_curve( @pytest.mark.parametrize("account", [DEFAULT_ACCOUNT]) def test_get_public_key_baking( account: Account, - client: TezosClient, - firmware: Firmware, - navigator: Navigator, + tezos_navigator: TezosNavigator, test_name: Path) -> None: """Test the AUTHORIZE_BAKING instruction.""" - instructions = Instructions.get_public_key_flow_instructions(firmware) + tezos_navigator.authorize_baking(account) - send_and_navigate( - send=lambda: client.authorize_baking(account), - navigate=lambda: navigator.navigate(instructions) - ) - - public_key = send_and_navigate( - send=lambda: client.authorize_baking(None), - navigate=lambda: navigator.navigate_and_compare( - TESTS_ROOT_DIR, - test_name, - instructions) - ) + public_key = tezos_navigator.authorize_baking(None, path=test_name) account.check_public_key(public_key) @@ -176,50 +128,27 @@ def test_get_public_key_silent(account: Account, client: TezosClient) -> None: @pytest.mark.parametrize("account", [DEFAULT_ACCOUNT]) def test_get_public_key_prompt( account: Account, - client: TezosClient, - firmware: Firmware, - navigator: Navigator, + tezos_navigator: TezosNavigator, test_name: Path) -> None: """Test the PROMPT_PUBLIC_KEY instruction.""" - instructions = Instructions.get_public_key_flow_instructions(firmware) - - public_key = send_and_navigate( - send=lambda: client.get_public_key_prompt(account), - navigate=lambda: navigator.navigate_and_compare( - TESTS_ROOT_DIR, - test_name, - instructions)) + public_key = tezos_navigator.get_public_key_prompt(account, path=test_name) account.check_public_key(public_key) -def test_reset_app_context( - client: TezosClient, - firmware, - navigator, - test_name) -> None: +def test_reset_app_context(tezos_navigator: TezosNavigator, test_name: Path) -> None: """Test the RESET instruction.""" - instructions = Instructions.get_reset_app_context_instructions(firmware) - reset_level: int = 0 - send_and_navigate( - send=lambda: client.reset_app_context(reset_level), - navigate=lambda: navigator.navigate_and_compare( - TESTS_ROOT_DIR, - test_name, - instructions) - ) + tezos_navigator.reset_app_context(reset_level, path=test_name) @pytest.mark.parametrize("account", [DEFAULT_ACCOUNT]) def test_setup_app_context( account: Account, - client: TezosClient, - firmware: Firmware, - navigator: Navigator, + tezos_navigator: TezosNavigator, test_name: Path) -> None: """Test the SETUP instruction.""" @@ -227,18 +156,13 @@ def test_setup_app_context( main_hwm = Hwm(0) test_hwm = Hwm(0) - instructions = Instructions.get_setup_app_context_instructions(firmware) - - public_key = send_and_navigate( - send=lambda: client.setup_app_context( - account, - main_chain_id, - main_hwm, - test_hwm), - navigate=lambda: navigator.navigate_and_compare( - TESTS_ROOT_DIR, - test_name, - instructions)) + public_key = tezos_navigator.setup_app_context( + account, + main_chain_id, + main_hwm, + test_hwm, + path=test_name + ) account.check_public_key(public_key) @@ -247,23 +171,19 @@ def test_setup_app_context( def test_get_main_hwm( account: Account, client: TezosClient, - firmware: Firmware, - navigator: Navigator) -> None: + tezos_navigator: TezosNavigator) -> None: """Test the QUERY_MAIN_HWM instruction.""" main_chain_id = DEFAULT_CHAIN_ID main_hwm = Hwm(0) test_hwm = Hwm(0) - instructions = Instructions.get_setup_app_context_instructions(firmware) - - send_and_navigate( - send=lambda: client.setup_app_context( - account, - main_chain_id, - main_hwm, - test_hwm), - navigate=lambda: navigator.navigate(instructions)) + tezos_navigator.setup_app_context( + account, + main_chain_id, + main_hwm, + test_hwm + ) received_main_hwm = client.get_main_hwm() @@ -275,23 +195,19 @@ def test_get_main_hwm( def test_get_all_hwm( account: Account, client: TezosClient, - firmware: Firmware, - navigator: Navigator) -> None: + tezos_navigator: TezosNavigator) -> None: """Test the QUERY_ALL_HWM instruction.""" main_chain_id = DEFAULT_CHAIN_ID main_hwm = Hwm(0) test_hwm = Hwm(0) - instructions = Instructions.get_setup_app_context_instructions(firmware) - - send_and_navigate( - send=lambda: client.setup_app_context( - account, - main_chain_id, - main_hwm, - test_hwm), - navigate=lambda: navigator.navigate(instructions)) + tezos_navigator.setup_app_context( + account, + main_chain_id, + main_hwm, + test_hwm + ) received_main_chain_id, received_main_hwm, received_test_hwm = client.get_all_hwm() @@ -311,23 +227,19 @@ def test_sign_preattestation( account: Account, with_hash: bool, client: TezosClient, - firmware: Firmware, - navigator: Navigator) -> None: + tezos_navigator: TezosNavigator) -> None: """Test the SIGN(_WITH_HASH) instruction on preattestation.""" main_chain_id = DEFAULT_CHAIN_ID main_hwm = Hwm(0) test_hwm = Hwm(0) - instructions = Instructions.get_setup_app_context_instructions(firmware) - - send_and_navigate( - send=lambda: client.setup_app_context( - account, - main_chain_id, - main_hwm, - test_hwm), - navigate=lambda: navigator.navigate(instructions)) + tezos_navigator.setup_app_context( + account, + main_chain_id, + main_hwm, + test_hwm + ) preattestation = Preattestation().forge(chain_id=main_chain_id) @@ -347,23 +259,19 @@ def test_sign_attestation( account: Account, with_hash: bool, client: TezosClient, - firmware: Firmware, - navigator: Navigator) -> None: + tezos_navigator: TezosNavigator) -> None: """Test the SIGN(_WITH_HASH) instruction on attestation.""" main_chain_id = DEFAULT_CHAIN_ID main_hwm = Hwm(0) test_hwm = Hwm(0) - instructions = Instructions.get_setup_app_context_instructions(firmware) - - send_and_navigate( - send=lambda: client.setup_app_context( - account, - main_chain_id, - main_hwm, - test_hwm), - navigate=lambda: navigator.navigate(instructions)) + tezos_navigator.setup_app_context( + account, + main_chain_id, + main_hwm, + test_hwm + ) attestation = Attestation().forge(chain_id=main_chain_id) @@ -383,23 +291,19 @@ def test_sign_attestation_dal( account: Account, with_hash: bool, client: TezosClient, - firmware: Firmware, - navigator: Navigator) -> None: + tezos_navigator: TezosNavigator) -> None: """Test the SIGN(_WITH_HASH) instruction on attestation.""" main_chain_id = DEFAULT_CHAIN_ID main_hwm = Hwm(0) test_hwm = Hwm(0) - instructions = Instructions.get_setup_app_context_instructions(firmware) - - send_and_navigate( - send=lambda: client.setup_app_context( - account, - main_chain_id, - main_hwm, - test_hwm), - navigate=lambda: navigator.navigate(instructions)) + tezos_navigator.setup_app_context( + account, + main_chain_id, + main_hwm, + test_hwm + ) attestation = AttestationDal().forge(chain_id=main_chain_id) @@ -421,23 +325,19 @@ def test_sign_block( account: Account, with_hash: bool, client: TezosClient, - firmware: Firmware, - navigator: Navigator) -> None: + tezos_navigator: TezosNavigator) -> None: """Test the SIGN(_WITH_HASH) instruction on block.""" main_chain_id = DEFAULT_CHAIN_ID main_hwm = Hwm(0) test_hwm = Hwm(0) - instructions = Instructions.get_setup_app_context_instructions(firmware) - - send_and_navigate( - send=lambda: client.setup_app_context( - account, - main_chain_id, - main_hwm, - test_hwm), - navigate=lambda: navigator.navigate(instructions)) + tezos_navigator.setup_app_context( + account, + main_chain_id, + main_hwm, + test_hwm + ) block = Block(header=BlockHeader(level=1)).forge(chain_id=main_chain_id) diff --git a/test/python/utils/client.py b/test/python/utils/client.py index e313e147..fc259b5a 100644 --- a/test/python/utils/client.py +++ b/test/python/utils/client.py @@ -153,7 +153,7 @@ class TezosClient: backend: BackendInterface def __init__(self, backend) -> None: - self._client: BackendInterface = backend + self.backend = backend def _exchange(self, ins: Ins, @@ -166,7 +166,7 @@ def _exchange(self, # Set to a non-existent value to ensure that p2 is unused p2: int = sig_scheme if sig_scheme is not None else 0xff - rapdu: RAPDU = self._client.exchange(Cla.DEFAULT, + rapdu: RAPDU = self.backend.exchange(Cla.DEFAULT, ins, p1=index, p2=p2, diff --git a/test/python/utils/helper.py b/test/python/utils/helper.py index d2bdd471..33543a98 100644 --- a/test/python/utils/helper.py +++ b/test/python/utils/helper.py @@ -1,14 +1,7 @@ """Module of test helper functions.""" -from typing import TypeVar, Callable, List, Union - -from multiprocessing.pool import ThreadPool -import time import git -from ragger.firmware import Firmware -from ragger.navigator import NavInsID, NavIns - class BytesReader: """Class representing a bytes reader.""" @@ -49,87 +42,3 @@ def get_current_commit() -> str: if repo.is_dirty(): commit += "*" return commit - -RESPONSE = TypeVar('RESPONSE') - -def send_and_navigate(send: Callable[[], RESPONSE], navigate: Callable[[], None]) -> RESPONSE: - """Sends a request and navigates before receiving a response.""" - - with ThreadPool(processes=2) as pool: - - send_res = pool.apply_async(send) - navigate_res = pool.apply_async(navigate) - - while True: - if send_res.ready(): - result = send_res.get() - navigate_res.get() - break - if navigate_res.ready(): - navigate_res.get() - result = send_res.get() - break - time.sleep(0.1) - - return result - -class Instructions: - """Class gathering instructions generator needed for navigator.""" - - @staticmethod - def get_nano_review_instructions(num_screen_skip) -> List[Union[NavInsID, NavIns]]: - """Generate the instructions needed to review on nano devices.""" - instructions: List[Union[NavInsID, NavIns]] = [] - instructions += [NavInsID.RIGHT_CLICK] * num_screen_skip - instructions.append(NavInsID.BOTH_CLICK) - return instructions - - @staticmethod - def get_stax_review_instructions(num_screen_skip) -> List[Union[NavInsID, NavIns]]: - """Generate the instructions needed to review on stax devices.""" - instructions: List[Union[NavInsID, NavIns]] = [] - instructions += [NavInsID.USE_CASE_REVIEW_TAP] * num_screen_skip - instructions += [ - NavInsID.USE_CASE_CHOICE_CONFIRM, - NavInsID.USE_CASE_STATUS_DISMISS - ] - return instructions - - @staticmethod - def get_stax_address_instructions() -> List[Union[NavInsID, NavIns]]: - """Generate the instructions needed to check address on stax devices.""" - instructions: List[Union[NavInsID, NavIns]] = [ - NavInsID.USE_CASE_REVIEW_TAP, - NavIns(NavInsID.TOUCH, (112, 251)), - NavInsID.USE_CASE_ADDRESS_CONFIRMATION_EXIT_QR, - NavInsID.USE_CASE_ADDRESS_CONFIRMATION_CONFIRM, - NavInsID.USE_CASE_STATUS_DISMISS - ] - return instructions - - @staticmethod - def get_public_key_flow_instructions(firmware: Firmware): - """Generate the instructions needed to check address.""" - if firmware.device == "nanos": - return Instructions.get_nano_review_instructions(5) - if firmware.is_nano: - return Instructions.get_nano_review_instructions(4) - return Instructions.get_stax_address_instructions() - - @staticmethod - def get_setup_app_context_instructions(firmware: Firmware): - """Generate the instructions needed to setup app context.""" - if firmware.device == "nanos": - return Instructions.get_nano_review_instructions(8) - if firmware.is_nano: - return Instructions.get_nano_review_instructions(7) - return Instructions.get_stax_review_instructions(2) - - @staticmethod - def get_reset_app_context_instructions(firmware: Firmware): - """Generate the instructions needed to reset app context.""" - if firmware.device == "nanos": - return Instructions.get_nano_review_instructions(3) - if firmware.is_nano: - return Instructions.get_nano_review_instructions(3) - return Instructions.get_stax_review_instructions(2) diff --git a/test/python/utils/navigator.py b/test/python/utils/navigator.py new file mode 100644 index 00000000..9f176624 --- /dev/null +++ b/test/python/utils/navigator.py @@ -0,0 +1,178 @@ +"""Module providing a tezos navigator.""" + +from pathlib import Path +from typing import TypeVar, Callable, List, Optional, Union +import time + +from multiprocessing.pool import ThreadPool + +from ragger.backend import BackendInterface +from ragger.firmware import Firmware +from ragger.navigator import Navigator, NavInsID, NavIns + +from common import TESTS_ROOT_DIR +from utils.client import TezosClient, Hwm +from utils.account import Account + +RESPONSE = TypeVar('RESPONSE') + +def send_and_navigate(send: Callable[[], RESPONSE], navigate: Callable[[], None]) -> RESPONSE: + """Sends a request and navigates before receiving a response.""" + + with ThreadPool(processes=2) as pool: + + send_res = pool.apply_async(send) + navigate_res = pool.apply_async(navigate) + + while True: + if send_res.ready(): + result = send_res.get() + navigate_res.get() + break + if navigate_res.ready(): + navigate_res.get() + result = send_res.get() + break + time.sleep(0.1) + + return result + +class Instructions: + """Class gathering instructions generator needed for navigator.""" + + @staticmethod + def get_nano_review_instructions(num_screen_skip) -> List[Union[NavInsID, NavIns]]: + """Generate the instructions needed to review on nano devices.""" + instructions: List[Union[NavInsID, NavIns]] = [] + instructions += [NavInsID.RIGHT_CLICK] * num_screen_skip + instructions.append(NavInsID.BOTH_CLICK) + return instructions + + @staticmethod + def get_stax_review_instructions(num_screen_skip) -> List[Union[NavInsID, NavIns]]: + """Generate the instructions needed to review on stax devices.""" + instructions: List[Union[NavInsID, NavIns]] = [] + instructions += [NavInsID.USE_CASE_REVIEW_TAP] * num_screen_skip + instructions += [ + NavInsID.USE_CASE_CHOICE_CONFIRM, + NavInsID.USE_CASE_STATUS_DISMISS + ] + return instructions + + @staticmethod + def get_stax_address_instructions() -> List[Union[NavInsID, NavIns]]: + """Generate the instructions needed to check address on stax devices.""" + instructions: List[Union[NavInsID, NavIns]] = [ + NavInsID.USE_CASE_REVIEW_TAP, + NavIns(NavInsID.TOUCH, (112, 251)), + NavInsID.USE_CASE_ADDRESS_CONFIRMATION_EXIT_QR, + NavInsID.USE_CASE_ADDRESS_CONFIRMATION_CONFIRM, + NavInsID.USE_CASE_STATUS_DISMISS + ] + return instructions + + @staticmethod + def get_public_key_flow_instructions(firmware: Firmware): + """Generate the instructions needed to check address.""" + if firmware.device == "nanos": + return Instructions.get_nano_review_instructions(5) + if firmware.is_nano: + return Instructions.get_nano_review_instructions(4) + return Instructions.get_stax_address_instructions() + + @staticmethod + def get_setup_app_context_instructions(firmware: Firmware): + """Generate the instructions needed to setup app context.""" + if firmware.device == "nanos": + return Instructions.get_nano_review_instructions(8) + if firmware.is_nano: + return Instructions.get_nano_review_instructions(7) + return Instructions.get_stax_review_instructions(2) + + @staticmethod + def get_reset_app_context_instructions(firmware: Firmware): + """Generate the instructions needed to reset app context.""" + if firmware.device == "nanos": + return Instructions.get_nano_review_instructions(3) + if firmware.is_nano: + return Instructions.get_nano_review_instructions(3) + return Instructions.get_stax_review_instructions(2) + +class TezosNavigator: + """Class representing the tezos app navigator.""" + + backend: BackendInterface + firmware: Firmware + client: TezosClient + navigator: Navigator + + def __init__(self, backend, firmware, client, navigator) -> None: + self.backend = backend + self.firmware = firmware + self.client = client + self.navigator = navigator + + def _send_and_navigate(self, + send: Callable[[], RESPONSE], + instructions: List[Union[NavInsID, NavIns]], + path: Optional[Path] = None, + **kwargs) -> RESPONSE: + return send_and_navigate( + send=send, + navigate=lambda: self.navigator.navigate_and_compare( + TESTS_ROOT_DIR, + path, + instructions, + **kwargs + ) + ) + + def authorize_baking(self, account: Optional[Account], **kwargs) -> bytes: + """Send an authorize baking request and navigate until accept""" + if 'instructions' not in kwargs: + kwargs['instructions'] = \ + Instructions.get_public_key_flow_instructions(self.firmware) + return self._send_and_navigate( + send=lambda: self.client.authorize_baking(account), + **kwargs + ) + + def get_public_key_prompt(self, account: Account, **kwargs) -> bytes: + """Send a get public key request and navigate until accept""" + if 'instructions' not in kwargs: + kwargs['instructions'] = \ + Instructions.get_public_key_flow_instructions(self.firmware) + return self._send_and_navigate( + send=lambda: self.client.get_public_key_prompt(account), + **kwargs + ) + + def reset_app_context(self, reset_level: int, **kwargs) -> None: + """Send a reset request and navigate until accept""" + if 'instructions' not in kwargs: + kwargs['instructions'] = \ + Instructions.get_reset_app_context_instructions(self.firmware) + return self._send_and_navigate( + send=lambda: self.client.reset_app_context(reset_level), + **kwargs + ) + + def setup_app_context(self, + account: Account, + main_chain_id: str, + main_hwm: Hwm, + test_hwm: Hwm, + **kwargs) -> bytes: + """Send a setup request and navigate until accept""" + if 'instructions' not in kwargs: + kwargs['instructions'] = \ + Instructions.get_setup_app_context_instructions(self.firmware) + return self._send_and_navigate( + send=lambda: self.client.setup_app_context( + account, + main_chain_id, + main_hwm, + test_hwm + ), + **kwargs + ) From 92794774b95d572590893978644b896e29fd592e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Palmer?= Date: Tue, 30 Jan 2024 16:50:11 +0100 Subject: [PATCH 3/7] Tests: add a test to check home and settings screens --- .../nanos/test_review_home/00000.png | Bin 0 -> 349 bytes .../nanos/test_review_home/00001.png | Bin 0 -> 362 bytes .../nanos/test_review_home/00002.png | Bin 0 -> 285 bytes .../nanos/test_review_home/00003.png | Bin 0 -> 484 bytes .../nanos/test_review_home/00004.png | Bin 0 -> 333 bytes .../nanos/test_review_home/00005.png | Bin 0 -> 274 bytes .../nanosp/test_review_home/00000.png | Bin 0 -> 381 bytes .../nanosp/test_review_home/00001.png | Bin 0 -> 438 bytes .../nanosp/test_review_home/00002.png | Bin 0 -> 320 bytes .../nanosp/test_review_home/00003.png | Bin 0 -> 548 bytes .../nanosp/test_review_home/00004.png | Bin 0 -> 387 bytes .../nanosp/test_review_home/00005.png | Bin 0 -> 295 bytes .../nanox/test_review_home/00000.png | Bin 0 -> 381 bytes .../nanox/test_review_home/00001.png | Bin 0 -> 438 bytes .../nanox/test_review_home/00002.png | Bin 0 -> 320 bytes .../nanox/test_review_home/00003.png | Bin 0 -> 548 bytes .../nanox/test_review_home/00004.png | Bin 0 -> 387 bytes .../nanox/test_review_home/00005.png | Bin 0 -> 295 bytes .../snapshots/stax/test_review_home/00000.png | Bin 0 -> 11593 bytes .../snapshots/stax/test_review_home/00001.png | Bin 0 -> 12005 bytes .../snapshots/stax/test_review_home/00002.png | Bin 0 -> 11616 bytes test/python/test_instructions.py | 25 +++++++++++++++++- test/python/utils/navigator.py | 8 ++++-- 23 files changed, 30 insertions(+), 3 deletions(-) create mode 100644 test/python/snapshots/nanos/test_review_home/00000.png create mode 100644 test/python/snapshots/nanos/test_review_home/00001.png create mode 100644 test/python/snapshots/nanos/test_review_home/00002.png create mode 100644 test/python/snapshots/nanos/test_review_home/00003.png create mode 100644 test/python/snapshots/nanos/test_review_home/00004.png create mode 100644 test/python/snapshots/nanos/test_review_home/00005.png create mode 100644 test/python/snapshots/nanosp/test_review_home/00000.png create mode 100644 test/python/snapshots/nanosp/test_review_home/00001.png create mode 100644 test/python/snapshots/nanosp/test_review_home/00002.png create mode 100644 test/python/snapshots/nanosp/test_review_home/00003.png create mode 100644 test/python/snapshots/nanosp/test_review_home/00004.png create mode 100644 test/python/snapshots/nanosp/test_review_home/00005.png create mode 100644 test/python/snapshots/nanox/test_review_home/00000.png create mode 100644 test/python/snapshots/nanox/test_review_home/00001.png create mode 100644 test/python/snapshots/nanox/test_review_home/00002.png create mode 100644 test/python/snapshots/nanox/test_review_home/00003.png create mode 100644 test/python/snapshots/nanox/test_review_home/00004.png create mode 100644 test/python/snapshots/nanox/test_review_home/00005.png create mode 100644 test/python/snapshots/stax/test_review_home/00000.png create mode 100644 test/python/snapshots/stax/test_review_home/00001.png create mode 100644 test/python/snapshots/stax/test_review_home/00002.png diff --git a/test/python/snapshots/nanos/test_review_home/00000.png b/test/python/snapshots/nanos/test_review_home/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..ce795f34e8569e986af689fded3b59c9a8af2961 GIT binary patch literal 349 zcmV-j0iyniP)O41}p;-~WL<=z+0=1Om1tEU@3H#qtw22}5*_5JCvCo4!52c$FXo$VhXU?0M$^Bekqgf%Ka;M*^X|4 zEs9YCQ(xfJKmNC#+8dY%2&wT+>D^<3C%}_*k1^mvtO~`RE00000NkvXXu0mjf-kqOA literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanos/test_review_home/00001.png b/test/python/snapshots/nanos/test_review_home/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..b86e6137c80754cf2f5ed71d15f0b91d3dfd3ada GIT binary patch literal 362 zcmV-w0hRuVP)os`SWQ9=A^X4CLlI&kplizl007{v1YPs{_TSrT*2TW1k8;Vh zBtFtJ&UB>u4jp`Lx{dA#>v;%Mg}jN}ey$$_pI+q319Ep9$zbBGL|#&+3h~EueOz2x z&V|aUW1Rt1av5bM9U8WIP*-&^9HR+na70o!PW&?q5fLd4OA%{Crx26D00000NkvXXu0mjfpvrS# literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanos/test_review_home/00003.png b/test/python/snapshots/nanos/test_review_home/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..08266a9afca29337f8ee27d98a2176f1e14f3038 GIT binary patch literal 484 zcmV_6OR^CuUyNvP%*8+I=4i?ZX60D03Xv`+ijoY^rBG{zdZ9ctX*URLT8Ncb$BloDn< zL(a!xv&xyS4b2Pri4eJEPWO^j4bJ3W%tC2#Sch$D;=GD!yVpfA^}5Tai-RR@v;gz1 zA0S!V7>{Lr5hK-@HiID@jq|B_kHvy(TO>}@Bv0Z@K!bKA(jY)LB)c}wiQF0rPJ~xz zE>JfU*+9r&ndf*VCbS@fLPFl6-?JZ`eWf@f#XbJ|MGyZTFsWi@*r&PbLURSM^+ay{ z06s~B_-Qx$_W&S6D&<3iiiyV!_zH&Y1)s{eV96m94xSGqxZ3kb{PG8x!k^?SW>FNy awRi(sD^9E>WYbXq0000%X zW9v>~+aFq~Lp_hG!&qUS@^x<^hfD-WRNmEzd&_F2yXu)2Ron8-b|)KCA%>JF_?7Fs zKS-OuJf>x_G*rEH+iIlBhOOOdGhG2g_fzl1>n1PBHK1OowrfdF8H<&L2M f00000fQX2Gqf@}8e`>>)00000NkvXXu0mjfxZ;X> literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanos/test_review_home/00005.png b/test/python/snapshots/nanos/test_review_home/00005.png new file mode 100644 index 0000000000000000000000000000000000000000..e2279803e79ec6d6443deff45a1f9326b562e303 GIT binary patch literal 274 zcmV+t0qy>YP)D zPq`+h_bpEEKgJ+x(tj8nSi&r1$%l|}@K=b}8w!8IP1np9%K2s%)5~a1UA{VmQ8=+t z-ij#s)U4`s1;0 z?{f>9Zfbf|_00eLCwPudd#p2Mzfg8-=Z~Y&(Z3(6-dSPln_e}2 z&8bJe=5=w3_V0Wxpw!uqXV@ zTyg#0l&4R7|Ayyoo}1J3WZRs6lez;p_x-s3`O4ERHjEo5Zk@S4@1z`Oka)v{pj(C~ z>TB;CrkB0D2@>;k^>bP0l+XkKqsFS~ literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanosp/test_review_home/00001.png b/test/python/snapshots/nanosp/test_review_home/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..8d0662afefbc2db38b39d34d673bb5ce0490f50e GIT binary patch literal 438 zcmV;n0ZIOeP)OcSrsrZ2K!sy;xV4cvE`iGSs$#pJeXPQC%~g~WTs5dTvFMoD$aIfe%sz9BBGK*9GTY>f=)s3tbY@Jlkqog0C=LU_kh9kpLwR7{RIg< zo%7$<)8Q3o$AzAK44rzP!g=Oh+`dZ>R@}-1o`84X=38&V$Q2+n{07*qoM6N<$f`hNj-~a#s literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanosp/test_review_home/00002.png b/test/python/snapshots/nanosp/test_review_home/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..1dd81a6c5511ea0378b48772bd5c461c11ee514c GIT binary patch literal 320 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|?kTba4!+nDh2#U|zEU4?}?2 zTeY44Cl*bwb?FY`%H5Tfu=)GG0G3G`3s+g425M{nZDHMzyY*UKtk+BJw^h$>&a_tk zVP)OGo1bRj{c3gxYsG@{V>iSepDK#pAC;|{`ZYvjemeVyS)pvF`=4%;SRB@@-1K{D zitL6>)4#Y(Dm}0w-*lq=hvh=z52TdD7QBCX_Dt?^R(1x459<~@XZ-%nk0VU`afH$j z3BA?xzHems-W~Z*Zu!i%G|v~SmCiMNOOdb1^SaD9`Pa|zX+dkP6^fR}Cw%y+^6$<1 z>n!!%cRw^8x7GjGo#P^5|3b3!+ltfI6k1=ucbfRO`~JfXOT>YJ00sZfm|N6!$?~jV QNe78|y85}Sb4q9e0LMg&z5oCK literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanosp/test_review_home/00003.png b/test/python/snapshots/nanosp/test_review_home/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..c9472dc429c6f009ac045000e9168eec7b85c048 GIT binary patch literal 548 zcmV+<0^9wGP)7Gr6YHKNpPCY-JI#=N_WChqUMj4Y;TNbtKNBIy!+FO+DhY-p}n%XIUa*Rk}zzWEsG^*4>w_D4y z?2DvKv|?mb-%lAZ0qeVP>@a#HH8BP8C7+p6s>i|778FqiU>uu$_cE$%-P;76SrZ_Z ziLoAIaxL;%%^J1tx=t;>ec!c|&iPotGc5?dg8j=M0N{O;TeQ1cJ+0aI-)goOx0Z7k z)R{r|R{GLydhdVtF5B!ok0P!tD1Wt-qaN{AK(uL@s#GSOp61O#`DGc2c;TTaE+QSF z_#nn4ZVDA6;;1s$wP&Az62CFdbuH*{9d(H+_T73cc8BX8%5^!=`}hkPowCn3E&`ur zqvL2_CDz^_nN3k(ecK&-_*{}tz+Hdo9AwW;t?Pi-s8X(*P+Z7l@`_EP-|Uqm27Idu z8|mF)fgjt1F^THv_8Im*kxW7u;3i}Kp7YCn=inQ7K^OYRG?L65Ooj9U0000000000 m000000000000000Oydt?*W*weAoExN0000$qQR^7Mx=QYP!64R<+#mhjWA{o_U^h{LzfBhtHX- zEcw15;h)PA%Vip0<9q{4*X!1_^=GV0I|Lhj0**J{f&k>VRi z_dH!)HNRoj(&x(D&TBZY?{TY}v#a=SUYG`t-5TFIv0|3ZPbb||SJ-;#eefLZsqccH zTAe*JDN4-raMt5^$6HI)ztkN2y2$(Ox1S4tG4HF+?Y-Z!bzbhy++CT)JKtHI)j04m zxN`5gge~1KE-w1^A=^1CX!8@>cM{9)tMqe!WK6SRJdyEVHRfJpXx2& zG$p@C5=k)R+91Ii(ZghOCQiNUZQsJyjPJW<`l?R$`L^6J$oHH2Vm9rMVo{y76{?rG efuVs6?mXjW@?`5cmyvWBB<$(x=d#Wzp$P!@3aw!P literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanosp/test_review_home/00005.png b/test/python/snapshots/nanosp/test_review_home/00005.png new file mode 100644 index 0000000000000000000000000000000000000000..bcb20c6830e069f9bf98c9dbf2a07da0d1aded53 GIT binary patch literal 295 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h5*Qtv!n978JRyuIm|*K8od5^!nt zkALpJ%3msJIq@ybT9m|Jncpe&GP`X?f<8A;ISA}twQ7}{|Ho$Tg}e1&P( zg<|UtodolD7x+GLS#VfwY~I79_sp!SLEQG|Hc1JStDnm{r-UW|D(8I) literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanox/test_review_home/00000.png b/test/python/snapshots/nanox/test_review_home/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..657887225857cf48be8a8daed2cb3e89d4b29ece GIT binary patch literal 381 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|@9dba4!+nDh2#G~Xcw0f)e( zJDk7cg{nU`wU4`s1;0 z?{f>9Zfbf|_00eLCwPudd#p2Mzfg8-=Z~Y&(Z3(6-dSPln_e}2 z&8bJe=5=w3_V0Wxpw!uqXV@ zTyg#0l&4R7|Ayyoo}1J3WZRs6lez;p_x-s3`O4ERHjEo5Zk@S4@1z`Oka)v{pj(C~ z>TB;CrkB0D2@>;k^>bP0l+XkKqsFS~ literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanox/test_review_home/00001.png b/test/python/snapshots/nanox/test_review_home/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..8d0662afefbc2db38b39d34d673bb5ce0490f50e GIT binary patch literal 438 zcmV;n0ZIOeP)OcSrsrZ2K!sy;xV4cvE`iGSs$#pJeXPQC%~g~WTs5dTvFMoD$aIfe%sz9BBGK*9GTY>f=)s3tbY@Jlkqog0C=LU_kh9kpLwR7{RIg< zo%7$<)8Q3o$AzAK44rzP!g=Oh+`dZ>R@}-1o`84X=38&V$Q2+n{07*qoM6N<$f`hNj-~a#s literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanox/test_review_home/00002.png b/test/python/snapshots/nanox/test_review_home/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..1dd81a6c5511ea0378b48772bd5c461c11ee514c GIT binary patch literal 320 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|?kTba4!+nDh2#U|zEU4?}?2 zTeY44Cl*bwb?FY`%H5Tfu=)GG0G3G`3s+g425M{nZDHMzyY*UKtk+BJw^h$>&a_tk zVP)OGo1bRj{c3gxYsG@{V>iSepDK#pAC;|{`ZYvjemeVyS)pvF`=4%;SRB@@-1K{D zitL6>)4#Y(Dm}0w-*lq=hvh=z52TdD7QBCX_Dt?^R(1x459<~@XZ-%nk0VU`afH$j z3BA?xzHems-W~Z*Zu!i%G|v~SmCiMNOOdb1^SaD9`Pa|zX+dkP6^fR}Cw%y+^6$<1 z>n!!%cRw^8x7GjGo#P^5|3b3!+ltfI6k1=ucbfRO`~JfXOT>YJ00sZfm|N6!$?~jV QNe78|y85}Sb4q9e0LMg&z5oCK literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanox/test_review_home/00003.png b/test/python/snapshots/nanox/test_review_home/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..c9472dc429c6f009ac045000e9168eec7b85c048 GIT binary patch literal 548 zcmV+<0^9wGP)7Gr6YHKNpPCY-JI#=N_WChqUMj4Y;TNbtKNBIy!+FO+DhY-p}n%XIUa*Rk}zzWEsG^*4>w_D4y z?2DvKv|?mb-%lAZ0qeVP>@a#HH8BP8C7+p6s>i|778FqiU>uu$_cE$%-P;76SrZ_Z ziLoAIaxL;%%^J1tx=t;>ec!c|&iPotGc5?dg8j=M0N{O;TeQ1cJ+0aI-)goOx0Z7k z)R{r|R{GLydhdVtF5B!ok0P!tD1Wt-qaN{AK(uL@s#GSOp61O#`DGc2c;TTaE+QSF z_#nn4ZVDA6;;1s$wP&Az62CFdbuH*{9d(H+_T73cc8BX8%5^!=`}hkPowCn3E&`ur zqvL2_CDz^_nN3k(ecK&-_*{}tz+Hdo9AwW;t?Pi-s8X(*P+Z7l@`_EP-|Uqm27Idu z8|mF)fgjt1F^THv_8Im*kxW7u;3i}Kp7YCn=inQ7K^OYRG?L65Ooj9U0000000000 m000000000000000Oydt?*W*weAoExN0000$qQR^7Mx=QYP!64R<+#mhjWA{o_U^h{LzfBhtHX- zEcw15;h)PA%Vip0<9q{4*X!1_^=GV0I|Lhj0**J{f&k>VRi z_dH!)HNRoj(&x(D&TBZY?{TY}v#a=SUYG`t-5TFIv0|3ZPbb||SJ-;#eefLZsqccH zTAe*JDN4-raMt5^$6HI)ztkN2y2$(Ox1S4tG4HF+?Y-Z!bzbhy++CT)JKtHI)j04m zxN`5gge~1KE-w1^A=^1CX!8@>cM{9)tMqe!WK6SRJdyEVHRfJpXx2& zG$p@C5=k)R+91Ii(ZghOCQiNUZQsJyjPJW<`l?R$`L^6J$oHH2Vm9rMVo{y76{?rG efuVs6?mXjW@?`5cmyvWBB<$(x=d#Wzp$P!@3aw!P literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanox/test_review_home/00005.png b/test/python/snapshots/nanox/test_review_home/00005.png new file mode 100644 index 0000000000000000000000000000000000000000..bcb20c6830e069f9bf98c9dbf2a07da0d1aded53 GIT binary patch literal 295 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h5*Qtv!n978JRyuIm|*K8od5^!nt zkALpJ%3msJIq@ybT9m|Jncpe&GP`X?f<8A;ISA}twQ7}{|Ho$Tg}e1&P( zg<|UtodolD7x+GLS#VfwY~I79_sp!SLEQG|Hc1JStDnm{r-UW|D(8I) literal 0 HcmV?d00001 diff --git a/test/python/snapshots/stax/test_review_home/00000.png b/test/python/snapshots/stax/test_review_home/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..4da782e998ebdf243fb842c4d5362545c9f96b4b GIT binary patch literal 11593 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 PGZ-71Uv0eNareIgWdh&< literal 0 HcmV?d00001 diff --git a/test/python/snapshots/stax/test_review_home/00001.png b/test/python/snapshots/stax/test_review_home/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..aa2dec0d86eaf64e54c68344a015a5f68386ad3c GIT binary patch literal 12005 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 N#L(<=<=@Wt{sZ`7yd3}l literal 0 HcmV?d00001 diff --git a/test/python/snapshots/stax/test_review_home/00002.png b/test/python/snapshots/stax/test_review_home/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..afe87e3f71fa14c4cfe5f2675fb74cf405f84c7d GIT binary patch literal 11616 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 literal 0 HcmV?d00001 diff --git a/test/python/test_instructions.py b/test/python/test_instructions.py index 4fdd8ddf..228632bd 100644 --- a/test/python/test_instructions.py +++ b/test/python/test_instructions.py @@ -2,6 +2,8 @@ from pathlib import Path import pytest +from ragger.firmware import Firmware +from ragger.navigator import Navigator, NavInsID from utils.client import TezosClient, Version, Hwm from utils.account import Account from utils.helper import get_current_commit @@ -13,13 +15,34 @@ Block, DEFAULT_CHAIN_ID ) -from utils.navigator import TezosNavigator +from utils.navigator import TezosNavigator, Instructions from common import ( DEFAULT_ACCOUNT, + TESTS_ROOT_DIR, EMPTY_PATH ) +def test_review_home( + firmware: Firmware, + navigator: Navigator, + test_name: Path) -> None: + """Test the display of the home/info pages.""" + + instructions = Instructions.get_right_clicks(5) if firmware.is_nano else \ + [ + NavInsID.USE_CASE_HOME_SETTINGS, + NavInsID.USE_CASE_SETTINGS_NEXT + ] + + navigator.navigate_and_compare( + TESTS_ROOT_DIR, + test_name, + instructions, + screen_change_before_first_instruction=False + ) + + def test_version(client: TezosClient) -> None: """Test the VERSION instruction.""" diff --git a/test/python/utils/navigator.py b/test/python/utils/navigator.py index 9f176624..a9bcd314 100644 --- a/test/python/utils/navigator.py +++ b/test/python/utils/navigator.py @@ -40,11 +40,15 @@ def send_and_navigate(send: Callable[[], RESPONSE], navigate: Callable[[], None] class Instructions: """Class gathering instructions generator needed for navigator.""" + @staticmethod + def get_right_clicks(nb_right_click) -> List[Union[NavInsID, NavIns]]: + """Generate `nb_right_click` right clicks instructions.""" + return [NavInsID.RIGHT_CLICK] * nb_right_click + @staticmethod def get_nano_review_instructions(num_screen_skip) -> List[Union[NavInsID, NavIns]]: """Generate the instructions needed to review on nano devices.""" - instructions: List[Union[NavInsID, NavIns]] = [] - instructions += [NavInsID.RIGHT_CLICK] * num_screen_skip + instructions = Instructions.get_right_clicks(num_screen_skip) instructions.append(NavInsID.BOTH_CLICK) return instructions From e2f83a7e3bae2b81d377b67eaa4e913b4c8abb0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Palmer?= Date: Tue, 30 Jan 2024 14:36:42 +0100 Subject: [PATCH 4/7] Tests: add more actions to TezosNavigator --- test/python/conftest.py | 5 ++-- test/python/utils/navigator.py | 47 +++++++++++++++++++++++++++++++--- 2 files changed, 47 insertions(+), 5 deletions(-) diff --git a/test/python/conftest.py b/test/python/conftest.py index 9c68c43d..b393fac7 100644 --- a/test/python/conftest.py +++ b/test/python/conftest.py @@ -23,6 +23,7 @@ def client(backend: BackendInterface): def tezos_navigator(backend: BackendInterface, client: TezosClient, firmware: Firmware, - navigator: Navigator): + navigator: Navigator, + golden_run: bool): """Get a tezos navigator.""" - return TezosNavigator(backend, firmware, client, navigator) + return TezosNavigator(backend, firmware, client, navigator, golden_run) diff --git a/test/python/utils/navigator.py b/test/python/utils/navigator.py index a9bcd314..e397891d 100644 --- a/test/python/utils/navigator.py +++ b/test/python/utils/navigator.py @@ -8,6 +8,13 @@ from ragger.backend import BackendInterface from ragger.firmware import Firmware +from ragger.firmware.stax.screen import MetaScreen +from ragger.firmware.stax.use_cases import ( + UseCaseHome, + UseCaseSettings, + UseCaseReview, + UseCaseAddressConfirmation +) from ragger.navigator import Navigator, NavInsID, NavIns from common import TESTS_ROOT_DIR @@ -102,20 +109,40 @@ def get_reset_app_context_instructions(firmware: Firmware): return Instructions.get_nano_review_instructions(3) return Instructions.get_stax_review_instructions(2) -class TezosNavigator: +class TezosNavigator(metaclass=MetaScreen): """Class representing the tezos app navigator.""" + use_case_home = UseCaseHome + use_case_settings = UseCaseSettings + use_case_review = UseCaseReview + use_case_provide_pk = UseCaseAddressConfirmation + + home: UseCaseHome + settings: UseCaseSettings + review: UseCaseReview + provide_pk: UseCaseAddressConfirmation + backend: BackendInterface firmware: Firmware client: TezosClient navigator: Navigator - def __init__(self, backend, firmware, client, navigator) -> None: + _golden_run: bool + _root_dir: Path + _snapshots_dir: Path + _tmp_snapshots_dir: Path + + def __init__(self, backend, firmware, client, navigator, golden_run) -> None: self.backend = backend self.firmware = firmware self.client = client self.navigator = navigator + self._golden_run = golden_run + self._root_dir = TESTS_ROOT_DIR + self._snapshots_dir = self._root_dir / "snapshots" / backend.firmware.name + self._tmp_snapshots_dir = self._root_dir / "snapshots-tmp" / backend.firmware.name + def _send_and_navigate(self, send: Callable[[], RESPONSE], instructions: List[Union[NavInsID, NavIns]], @@ -124,13 +151,27 @@ def _send_and_navigate(self, return send_and_navigate( send=send, navigate=lambda: self.navigator.navigate_and_compare( - TESTS_ROOT_DIR, + self._root_dir, path, instructions, **kwargs ) ) + def _assert_screen(self, path: Path) -> None: + golden_path = self._snapshots_dir / path + if not golden_path.parent.is_dir() and self._golden_run: + golden_path.parent.mkdir(parents=True) + tmp_path = self._tmp_snapshots_dir / path + if not tmp_path.parent.is_dir(): + tmp_path.parent.mkdir(parents=True) + + assert self.backend.compare_screen_with_snapshot( + golden_path, + tmp_snap_path=tmp_path, + golden_run=self._golden_run + ), f"Screen does not match golden {path}." + def authorize_baking(self, account: Optional[Account], **kwargs) -> bytes: """Send an authorize baking request and navigate until accept""" if 'instructions' not in kwargs: From 95f60a5527fba39d6842393e2028d526459eccf5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Palmer?= Date: Tue, 30 Jan 2024 17:17:29 +0100 Subject: [PATCH 5/7] Tests: make reset and setup tests more relevant --- .../nanos/test_reset_app_context/00001.png | Bin 315 -> 311 bytes .../nanos/test_setup_app_context/00004.png | Bin 285 -> 421 bytes .../nanos/test_setup_app_context/00005.png | Bin 318 -> 315 bytes .../nanos/test_setup_app_context/00006.png | Bin 337 -> 339 bytes .../nanosp/test_reset_app_context/00001.png | Bin 337 -> 335 bytes .../nanosp/test_setup_app_context/00003.png | Bin 320 -> 460 bytes .../nanosp/test_setup_app_context/00004.png | Bin 350 -> 349 bytes .../nanosp/test_setup_app_context/00005.png | Bin 370 -> 380 bytes .../nanox/test_reset_app_context/00001.png | Bin 337 -> 335 bytes .../nanox/test_setup_app_context/00003.png | Bin 320 -> 460 bytes .../nanox/test_setup_app_context/00004.png | Bin 350 -> 349 bytes .../nanox/test_setup_app_context/00005.png | Bin 370 -> 380 bytes .../stax/test_reset_app_context/00001.png | Bin 6147 -> 5848 bytes .../stax/test_setup_app_context/00001.png | Bin 16275 -> 17789 bytes test/python/test_instructions.py | 39 +++++++++++++++--- 15 files changed, 34 insertions(+), 5 deletions(-) diff --git a/test/python/snapshots/nanos/test_reset_app_context/00001.png b/test/python/snapshots/nanos/test_reset_app_context/00001.png index 16902a0cf68f887275279b212aca160efc952fda..9ae27cf7ef952304584809e347a6de935285ed35 100644 GIT binary patch delta 285 zcmV+&0pk9<0=EK?BYyz?Nkl|Mb+sDo=^cke<_ix}l-q{-v z5hZ95#k`s?I<)U0;t_6Oz!Z!+RJF3EL-C+0{ldx6lbEr3!hiA*n1aF$@X;+b;fzch z71=Q)n{Wesu#3wiK2)zxHB;1w=d|!5T-b8V&q@U*Wi4c|3~o>Zw9wTe>^sPFim;=R z)Y&R4@}hnKvm&E@7!|2eKNvj7ge;WFqv~+%&E*NSwc8c^g)=13xB*F55%2>8lEHvv jFd!KW00000fEEP4C@6`0wSjX^00000NkvXXu0mjf;B|xI delta 289 zcmV++0p9+%0=oi`BYyz`Nklj{Qn1YfJ10%*yogb?DvJpGS52Dg{;rkXc5upRGM-Uc7HnO25zJ!&?2zVFsV^Mql%zJPXoqZa@` z2%1Dum+FoT?PrKs!vhS+!6-vjDyteK4~o+7JQ;Ej)mILfPJbLzkh=jkx=|8N$#hbY z3tggdH^2rvOeV3RdUvYHQSYA9+>3DH%wygv6{wW8lffc*Kn;*W7mKiMfcF$(Lno=T zR}SQ*`VMT0O!eI;NKN&fp$CyL3q|s(I_&%BvH^Xq_JF*Zo_7`WB}{(MfM94qFfT(kuIFE6p;WLW0U`;3x_C@ zkDAKk0RR91Ovm>A{<6h55VS&dr^d_iIy-XaIAvH>pTp*wb7dBuG{vyY1Bifn=q>Y z*OJ7BbVMvc8-FLIp@yT1dI%*z)Ylt29lkr3X_VS54CX}KcCJZXM7{N^1u5&@bs8wc zsl^q*7%W?`Aew-@zK%xBnPtB>W_=V5JAmeZwG*Yq@@*(#v#=v2S;PR0*cVgT^SCqZ qrr1S<+=t+j6*=e+Gz9?Mi4Vh%5PSpUmN5VT002ovP6b4+LSTZ)N4J9j delta 258 zcmV+d0sa1^1DyhpBYyzoNklj*dKYjr zt{1uMsfn`!jLt4z3UdoAQ~?&fBI1eCL_kZa{izo$( zG&%vQDMm64qlwe!#v(yYQd#W$HWO_m0K2aDkpD#>(_)LCV#SvbYbXm3atv*&_r4m z3a?s0A^~CRbX296yMZ_gCQ6H(F7?fmzr+%(KFO>P*V?iii~oY=;uzd6TdtsqeL2ma z&1i%d(N~}vWJF&LBGib!GRT1?*o7=Pst>adBel8L+cuCmiUDkHo`7ACBK`&>z!)UJ m7$m?LBme*a02u%P81Mn~&A633SSBn00000{}QJ#>yeE5aIP(nm=;3m&p&S4J001B&A|G|9x{tQ}&$R#m002ovPDHLkV1kT}hW-Em diff --git a/test/python/snapshots/nanos/test_setup_app_context/00006.png b/test/python/snapshots/nanos/test_setup_app_context/00006.png index 8010f1e2fa5718fa922bade8dc4117f016be8434..1e1325d3ece1e20985d0ac2b38a842cde75a9586 100644 GIT binary patch delta 312 zcmV-80muH)0@DJJB!3!7L_t(|ob8!G62c%1MN`M#|G-_e3mk?fL1_~}=zrs)V2I== zgi(nA004md?Az((=q=6^F1%qDhUp}WA{xkr_F#$Lb{Dj)L`3`cc_>7+4;6ypnnbvC#Avn4^r*bp2>RA zrJ;c)Cm@~iDoIQ5=^i{pv`{kvYHxAOfowRniOtimv%S0=l@epf(W@lcJ)FCiy{UEr zQlaG~9FWx%R!K{h-rb`Pb4K+y{E!#wHy|rA)Nh6&HPmkma?lfWp`Ofh4}1Oo+LEz$ zTgu2$HUB0I&M_bXz{tq`XMCW3Po_|R>Ae915B=*A00000U@qRI!84(UmzagJ#& z&Zk9f1r`A)AqgT8l4hKDiG`}ci7IS!Hpzhe(O;l0ZS_WNR)2Qp0>59R%BwXqsYQpH z4GdWUagS9>wiqAJ!NQ3x^bCMnTMT267o6Tm@wBUKFDpg0hz%vYQZm_xOWU$F-Bv*C z=zJ3n4^K+(zc{xB3*)BA&A3_M{K^5jwbu+fp^IPNvu z9gdz?Uy|W}!Y^bC1KxywF~A}=9y>zcSo?|lJ{ zaIxbAv26eVu-wP&0Hu_Ayzl#hSVxq4++Q4xiT|*_GRf!EyI0Ng|5GXD_qQ5_j)h6| zl^DBkj?;E&F4of-87!s55DP5ofL=}CY3iHo$6@uSIIOwzMSljvtIc2$6+&b$DFnSS;OLjbs zJ<$w%Vv*@<`EHv5006h~r>}Cn*pYe#NOt!EqHpXCn+7yof0000L_BAnD@+W5BZC`PBS)t^#po7PYQBG+Wi%Vx+0!AN#v1P~I zSQE{#6HTVi<<(vW007*^pZ?16X6JrXTus`~IG!XRnFJ)0fMgPIG57kSxZP*yi@Uwo z!`##`$fCc@PA{lMe=#}8qzh&89?m4Z0000000000001z}H-(hQ_dbobc>n+a07*qo IM6N<$g2woj#Q*>R diff --git a/test/python/snapshots/nanosp/test_setup_app_context/00003.png b/test/python/snapshots/nanosp/test_setup_app_context/00003.png index 1dd81a6c5511ea0378b48772bd5c461c11ee514c..8795bcf16b386317d96439de72a37a44530fecbf 100644 GIT binary patch delta 434 zcmV;j0ZsnE0?Y%DB!81hL_t(|obB0Bl7k=&fMIuMZ^HeL#9j7*DH8)?5*4-ce@_k- zOcS9NmjwU-0GRIQ?g097&hC+W|UfXS-p$%nlW_vv7tIp|;+;;bV z{}XQ@*B}G#y`ZwW*#7&MJB~6tWvjrx!+d04q1`K02bR9!7-A!wvl%D9>aty=w$~|F z@5bP|sEjroRex-RNCCR}4a6-+*zK-zRE||7YLM>Cb6wOWHri?1(S!TlwG@m;kS(ql z=CDjbC0GFYn(1oYvRUT)@xo7_3t*2`z3OXU`?W2`--edDkXlko%aK=)_WP+lGrW-Y zKehz%-Rwz-rE9Yn*)LpqIIRX`znYT@YH%l3p*!s)nJXGxiu3{i000000000000000 c005Wy2bex@u1jshnE(I)07*qoM6N<$g3;m7761SM delta 293 zcmV+=0owk|1Hb~1B!34g8P+Z9k8;O^hA<%z<;Q3HIYB?rxF+78X^{; z@9E9VZN~)%008i=pyvVi_D%>^E8|!q_!us$p7*f;_lsHn9;caxW=ZI)BF=*LWFLHP zO49+8`uSIuQms26a;INl@cAVE?621Ze~aDlg2z2C{)=ox7(eJ4iT0?=)*yxJ??RFN ri{Ig}q!$1H03HAU000000RGH3IDU#945$QW00000NkvXXu0mjfAfAa< diff --git a/test/python/snapshots/nanosp/test_setup_app_context/00004.png b/test/python/snapshots/nanosp/test_setup_app_context/00004.png index f13647247c3edcb3634af53841a6327fc387a8e6..ec621614f512509b0c812bf0349a1e21c615a58b 100644 GIT binary patch delta 322 zcmV-I0log-0^I_TB!47HL_t(|obA|AZiFBZ08rcXCf@%@+@&982~|)Ok=^vYFG9c} zGgD}Gng9UcabFkqgb(ypBa*${C{{q}1s<9It+S~H!@K-SNx)h+5zcB)h@ zflAv$2qA>kcN$Ms(o}%ulxerd`8ZznNNlBSAJs%mxAY5Ce}A5A2I_s^c$#Q_nf~S| zwQaG=FW(+$>G#Trx9f5RwRFVuf%fay+x5SIv^COkya9UmPQO6gl4Ku%QU*?Gy@EzH z&iiQ0!2NGPY@f>~OTTb2KPbJ3C0P>_4EGWZ8dACe^b4Ff|y-Ei{sMcqHis00000000000Dx|O0ZJjx U`A{i8Q2+n{07*qoM6N<$g0*9pO#lD@ delta 323 zcmV-J0lfa*0^S0UB!4AIL_t(|obA|AZiFBZ08rcXCf@%@+@&9830*-^MAr1ZFG9ef zGgCA>O#lFJyRQ>_LI}%Xp6Aj`Y1hVrY>2p}e*3wValD=^t(gvHAnWJQ>K64UJ5;Kc zK&9;=gb>2pa~e-o(o}%ulxerd`8a;-k=RPvKB|eBZs`}O{(n5#4AlF+@HEl|21J}O;V*8vvS^9+C+qoss?isdc008)>I(>suC8qw-HR$qV9Q71nFa;P)0R~fm z5A&=qipPD1?mV3KS%1t!6_YIcx5=bh_HU*JBe{h}@*W;ZdI10c000000001>n_nk? V(U8B_Nelo0002ovPDHLkV1lbZo7MmT diff --git a/test/python/snapshots/nanosp/test_setup_app_context/00005.png b/test/python/snapshots/nanosp/test_setup_app_context/00005.png index 2004a3e23a6d7c04041dc1c9141981d8e49308fa..a25aef279df41d2382476915b94f49158d96794b 100644 GIT binary patch delta 353 zcmV-n0iOQy0{jAyB!5FmL_t(|obA{_j>8}fKv6oHn{fXlahF-3v0Mj804J2{zg6QV z1dO2-ApigX0FQf(J(f~3kr?B2XWp944d%#|#>eiI&&Ocx9{rYMq}T7*W4+nYYEO-| zX1X*i=QpKf+L`Rtslf@TsgMj(Ma}HO)}YkOd-`||6$C* zO6)=_@jJW{=>-4)0000000000000000B-XKuoUFT#o5{J00000NkvXXu0mjfMNO~s delta 343 zcmeyv^oePLO1-70i(^Q|oVPau`3@=YG$fkbYxynTx%-Dhju!JaN5;5>`!jXI9iE7Ok1d(J-1pkdg^#DC z{C1Q7)_*XENy}L>aLv;-)B2urP2jt6tb(c)#*)ehZyB|I%{Zz#Qbo~Fk3uz+L zul)aWqxEmR;Eq<#h#t;}03hz+{9#!AR%6@kws}2e>)UUJY&;QCKg(z3%6}X diff --git a/test/python/snapshots/nanox/test_reset_app_context/00001.png b/test/python/snapshots/nanox/test_reset_app_context/00001.png index 46a3ef04a3d6c6d2da1a3b60c3b2d7f259ac6622..42a76df44b33698164dbf3e1e2e165df7353862a 100644 GIT binary patch delta 308 zcmV-40n7f;0?z`FB!3o3L_t(|obA|AZi6rk08lpVCfxr>xywF~A}=9y>zcSo?|lJ{ zaIxbAv26eVu-wP&0Hu_Ayzl#hSVxq4++Q4xiT|*_GRf!EyI0Ng|5GXD_qQ5_j)h6| zl^DBkj?;E&F4of-87!s55DP5ofL=}CY3iHo$6@uSIIOwzMSljvtIc2$6+&b$DFnSS;OLjbs zJ<$w%Vv*@<`EHv5006h~r>}Cn*pYe#NOt!EqHpXCn+7yof0000L_BAnD@+W5BZC`PBS)t^#po7PYQBG+Wi%Vx+0!AN#v1P~I zSQE{#6HTVi<<(vW007*^pZ?16X6JrXTus`~IG!XRnFJ)0fMgPIG57kSxZP*yi@Uwo z!`##`$fCc@PA{lMe=#}8qzh&89?m4Z0000000000001z}H-(hQ_dbobc>n+a07*qo IM6N<$g2woj#Q*>R diff --git a/test/python/snapshots/nanox/test_setup_app_context/00003.png b/test/python/snapshots/nanox/test_setup_app_context/00003.png index 1dd81a6c5511ea0378b48772bd5c461c11ee514c..8795bcf16b386317d96439de72a37a44530fecbf 100644 GIT binary patch delta 434 zcmV;j0ZsnE0?Y%DB!81hL_t(|obB0Bl7k=&fMIuMZ^HeL#9j7*DH8)?5*4-ce@_k- zOcS9NmjwU-0GRIQ?g097&hC+W|UfXS-p$%nlW_vv7tIp|;+;;bV z{}XQ@*B}G#y`ZwW*#7&MJB~6tWvjrx!+d04q1`K02bR9!7-A!wvl%D9>aty=w$~|F z@5bP|sEjroRex-RNCCR}4a6-+*zK-zRE||7YLM>Cb6wOWHri?1(S!TlwG@m;kS(ql z=CDjbC0GFYn(1oYvRUT)@xo7_3t*2`z3OXU`?W2`--edDkXlko%aK=)_WP+lGrW-Y zKehz%-Rwz-rE9Yn*)LpqIIRX`znYT@YH%l3p*!s)nJXGxiu3{i000000000000000 c005Wy2bex@u1jshnE(I)07*qoM6N<$g3;m7761SM delta 293 zcmV+=0owk|1Hb~1B!34g8P+Z9k8;O^hA<%z<;Q3HIYB?rxF+78X^{; z@9E9VZN~)%008i=pyvVi_D%>^E8|!q_!us$p7*f;_lsHn9;caxW=ZI)BF=*LWFLHP zO49+8`uSIuQms26a;INl@cAVE?621Ze~aDlg2z2C{)=ox7(eJ4iT0?=)*yxJ??RFN ri{Ig}q!$1H03HAU000000RGH3IDU#945$QW00000NkvXXu0mjfAfAa< diff --git a/test/python/snapshots/nanox/test_setup_app_context/00004.png b/test/python/snapshots/nanox/test_setup_app_context/00004.png index f13647247c3edcb3634af53841a6327fc387a8e6..ec621614f512509b0c812bf0349a1e21c615a58b 100644 GIT binary patch delta 322 zcmV-I0log-0^I_TB!47HL_t(|obA|AZiFBZ08rcXCf@%@+@&982~|)Ok=^vYFG9c} zGgD}Gng9UcabFkqgb(ypBa*${C{{q}1s<9It+S~H!@K-SNx)h+5zcB)h@ zflAv$2qA>kcN$Ms(o}%ulxerd`8ZznNNlBSAJs%mxAY5Ce}A5A2I_s^c$#Q_nf~S| zwQaG=FW(+$>G#Trx9f5RwRFVuf%fay+x5SIv^COkya9UmPQO6gl4Ku%QU*?Gy@EzH z&iiQ0!2NGPY@f>~OTTb2KPbJ3C0P>_4EGWZ8dACe^b4Ff|y-Ei{sMcqHis00000000000Dx|O0ZJjx U`A{i8Q2+n{07*qoM6N<$g0*9pO#lD@ delta 323 zcmV-J0lfa*0^S0UB!4AIL_t(|obA|AZiFBZ08rcXCf@%@+@&9830*-^MAr1ZFG9ef zGgCA>O#lFJyRQ>_LI}%Xp6Aj`Y1hVrY>2p}e*3wValD=^t(gvHAnWJQ>K64UJ5;Kc zK&9;=gb>2pa~e-o(o}%ulxerd`8a;-k=RPvKB|eBZs`}O{(n5#4AlF+@HEl|21J}O;V*8vvS^9+C+qoss?isdc008)>I(>suC8qw-HR$qV9Q71nFa;P)0R~fm z5A&=qipPD1?mV3KS%1t!6_YIcx5=bh_HU*JBe{h}@*W;ZdI10c000000001>n_nk? V(U8B_Nelo0002ovPDHLkV1lbZo7MmT diff --git a/test/python/snapshots/nanox/test_setup_app_context/00005.png b/test/python/snapshots/nanox/test_setup_app_context/00005.png index 2004a3e23a6d7c04041dc1c9141981d8e49308fa..a25aef279df41d2382476915b94f49158d96794b 100644 GIT binary patch delta 353 zcmV-n0iOQy0{jAyB!5FmL_t(|obA{_j>8}fKv6oHn{fXlahF-3v0Mj804J2{zg6QV z1dO2-ApigX0FQf(J(f~3kr?B2XWp944d%#|#>eiI&&Ocx9{rYMq}T7*W4+nYYEO-| zX1X*i=QpKf+L`Rtslf@TsgMj(Ma}HO)}YkOd-`||6$C* zO6)=_@jJW{=>-4)0000000000000000B-XKuoUFT#o5{J00000NkvXXu0mjfMNO~s delta 343 zcmeyv^oePLO1-70i(^Q|oVPau`3@=YG$fkbYxynTx%-Dhju!JaN5;5>`!jXI9iE7Ok1d(J-1pkdg^#DC z{C1Q7)_*XENy}L>aLv;-)B2urP2jt6tb(c)#*)ehZyB|I%{Zz#Qbo~Fk3uz+L zul)aWqxEmR;Eq<#h#t;}03hz+{9#!AR%6@kws}2e>)UUJY&;QCKg(z3%6}X diff --git a/test/python/snapshots/stax/test_reset_app_context/00001.png b/test/python/snapshots/stax/test_reset_app_context/00001.png index 9ec7f6d3f1944fc94cb19d2670c2f4f51db072ad..3112fb2e3fd539e7db3ae2d7aa3ce49916705f8a 100644 GIT binary patch delta 3903 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 literal 16275 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 De~Po1 diff --git a/test/python/test_instructions.py b/test/python/test_instructions.py index 228632bd..d07c2ed2 100644 --- a/test/python/test_instructions.py +++ b/test/python/test_instructions.py @@ -160,24 +160,42 @@ def test_get_public_key_prompt( account.check_public_key(public_key) -def test_reset_app_context(tezos_navigator: TezosNavigator, test_name: Path) -> None: +def test_reset_app_context( + client: TezosClient, + tezos_navigator: TezosNavigator, + test_name: Path) -> None: """Test the RESET instruction.""" - reset_level: int = 0 + reset_level: int = 1 tezos_navigator.reset_app_context(reset_level, path=test_name) + received_main_chain_id, received_main_hwm, received_test_hwm = client.get_all_hwm() + + main_hwm = Hwm(reset_level) + test_hwm = Hwm(reset_level) + + assert received_main_chain_id == DEFAULT_CHAIN_ID, \ + f"Expected main chain id {DEFAULT_CHAIN_ID} but got {received_main_chain_id}" + + assert received_main_hwm == main_hwm, \ + f"Expected main hmw {main_hwm} but got {received_main_hwm}" + + assert received_test_hwm == test_hwm, \ + f"Expected test hmw {test_hwm} but got {received_test_hwm}" + @pytest.mark.parametrize("account", [DEFAULT_ACCOUNT]) def test_setup_app_context( account: Account, + client: TezosClient, tezos_navigator: TezosNavigator, test_name: Path) -> None: """Test the SETUP instruction.""" - main_chain_id = DEFAULT_CHAIN_ID - main_hwm = Hwm(0) - test_hwm = Hwm(0) + main_chain_id = "NetXH12AexHqTQa" + main_hwm = Hwm(1) + test_hwm = Hwm(2) public_key = tezos_navigator.setup_app_context( account, @@ -189,6 +207,17 @@ def test_setup_app_context( account.check_public_key(public_key) + received_main_chain_id, received_main_hwm, received_test_hwm = client.get_all_hwm() + + assert received_main_chain_id == main_chain_id, \ + f"Expected main chain id {main_chain_id} but got {received_main_chain_id}" + + assert received_main_hwm == main_hwm, \ + f"Expected main hmw {main_hwm} but got {received_main_hwm}" + + assert received_test_hwm == test_hwm, \ + f"Expected test hmw {test_hwm} but got {received_test_hwm}" + @pytest.mark.parametrize("account", [DEFAULT_ACCOUNT]) def test_get_main_hwm( From fa1cc5c6ecb7cc1557e6de616a20c9336129e9ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Palmer?= Date: Tue, 30 Jan 2024 17:19:00 +0100 Subject: [PATCH 6/7] Tests: check app context after some tests --- .../nanos/test_authorize_baking/chain_id.png | Bin 0 -> 285 bytes .../test_authorize_baking/high_watermark.png | Bin 0 -> 333 bytes .../public_key_hash_1.png | Bin 0 -> 559 bytes .../public_key_hash_2.png | Bin 0 -> 569 bytes .../nanos/test_deauthorize/chain_id.png | Bin 0 -> 285 bytes .../nanos/test_deauthorize/high_watermark.png | Bin 0 -> 333 bytes .../test_deauthorize/public_key_hash.png | Bin 0 -> 484 bytes .../nanos/test_reset_app_context/chain_id.png | Bin 0 -> 285 bytes .../test_reset_app_context/high_watermark.png | Bin 0 -> 329 bytes .../public_key_hash.png | Bin 0 -> 484 bytes .../nanos/test_setup_app_context/chain_id.png | Bin 0 -> 421 bytes .../test_setup_app_context/high_watermark.png | Bin 0 -> 329 bytes .../public_key_hash_1.png | Bin 0 -> 559 bytes .../public_key_hash_2.png | Bin 0 -> 569 bytes .../nanos/test_sign_attestation/chain_id.png | Bin 0 -> 285 bytes .../test_sign_attestation/high_watermark.png | Bin 0 -> 352 bytes .../public_key_hash_1.png | Bin 0 -> 559 bytes .../public_key_hash_2.png | Bin 0 -> 569 bytes .../test_sign_attestation_dal/chain_id.png | Bin 0 -> 285 bytes .../high_watermark.png | Bin 0 -> 352 bytes .../public_key_hash_1.png | Bin 0 -> 559 bytes .../public_key_hash_2.png | Bin 0 -> 569 bytes .../nanos/test_sign_block/chain_id.png | Bin 0 -> 285 bytes .../nanos/test_sign_block/high_watermark.png | Bin 0 -> 352 bytes .../test_sign_block/public_key_hash_1.png | Bin 0 -> 559 bytes .../test_sign_block/public_key_hash_2.png | Bin 0 -> 569 bytes .../test_sign_preattestation/chain_id.png | Bin 0 -> 285 bytes .../high_watermark.png | Bin 0 -> 352 bytes .../public_key_hash_1.png | Bin 0 -> 559 bytes .../public_key_hash_2.png | Bin 0 -> 569 bytes .../nanosp/test_authorize_baking/chain_id.png | Bin 0 -> 320 bytes .../test_authorize_baking/high_watermark.png | Bin 0 -> 387 bytes .../test_authorize_baking/public_key_hash.png | Bin 0 -> 792 bytes .../nanosp/test_deauthorize/chain_id.png | Bin 0 -> 320 bytes .../test_deauthorize/high_watermark.png | Bin 0 -> 387 bytes .../test_deauthorize/public_key_hash.png | Bin 0 -> 548 bytes .../test_reset_app_context/chain_id.png | Bin 0 -> 320 bytes .../test_reset_app_context/high_watermark.png | Bin 0 -> 385 bytes .../public_key_hash.png | Bin 0 -> 548 bytes .../test_setup_app_context/chain_id.png | Bin 0 -> 460 bytes .../test_setup_app_context/high_watermark.png | Bin 0 -> 385 bytes .../public_key_hash.png | Bin 0 -> 792 bytes .../nanosp/test_sign_attestation/chain_id.png | Bin 0 -> 320 bytes .../test_sign_attestation/high_watermark.png | Bin 0 -> 416 bytes .../test_sign_attestation/public_key_hash.png | Bin 0 -> 792 bytes .../test_sign_attestation_dal/chain_id.png | Bin 0 -> 320 bytes .../high_watermark.png | Bin 0 -> 416 bytes .../public_key_hash.png | Bin 0 -> 792 bytes .../nanosp/test_sign_block/chain_id.png | Bin 0 -> 320 bytes .../nanosp/test_sign_block/high_watermark.png | Bin 0 -> 416 bytes .../test_sign_block/public_key_hash.png | Bin 0 -> 792 bytes .../test_sign_preattestation/chain_id.png | Bin 0 -> 320 bytes .../high_watermark.png | Bin 0 -> 416 bytes .../public_key_hash.png | Bin 0 -> 792 bytes .../nanox/test_authorize_baking/chain_id.png | Bin 0 -> 320 bytes .../test_authorize_baking/high_watermark.png | Bin 0 -> 387 bytes .../test_authorize_baking/public_key_hash.png | Bin 0 -> 792 bytes .../nanox/test_deauthorize/chain_id.png | Bin 0 -> 320 bytes .../nanox/test_deauthorize/high_watermark.png | Bin 0 -> 387 bytes .../test_deauthorize/public_key_hash.png | Bin 0 -> 548 bytes .../nanox/test_reset_app_context/chain_id.png | Bin 0 -> 320 bytes .../test_reset_app_context/high_watermark.png | Bin 0 -> 385 bytes .../public_key_hash.png | Bin 0 -> 548 bytes .../nanox/test_setup_app_context/chain_id.png | Bin 0 -> 460 bytes .../test_setup_app_context/high_watermark.png | Bin 0 -> 385 bytes .../public_key_hash.png | Bin 0 -> 792 bytes .../nanox/test_sign_attestation/chain_id.png | Bin 0 -> 320 bytes .../test_sign_attestation/high_watermark.png | Bin 0 -> 416 bytes .../test_sign_attestation/public_key_hash.png | Bin 0 -> 792 bytes .../test_sign_attestation_dal/chain_id.png | Bin 0 -> 320 bytes .../high_watermark.png | Bin 0 -> 416 bytes .../public_key_hash.png | Bin 0 -> 792 bytes .../nanox/test_sign_block/chain_id.png | Bin 0 -> 320 bytes .../nanox/test_sign_block/high_watermark.png | Bin 0 -> 416 bytes .../nanox/test_sign_block/public_key_hash.png | Bin 0 -> 792 bytes .../test_sign_preattestation/chain_id.png | Bin 0 -> 320 bytes .../high_watermark.png | Bin 0 -> 416 bytes .../public_key_hash.png | Bin 0 -> 792 bytes .../test_authorize_baking/app_context.png | Bin 0 -> 14438 bytes .../stax/test_deauthorize/app_context.png | Bin 0 -> 12005 bytes .../test_reset_app_context/app_context.png | Bin 0 -> 11800 bytes .../test_setup_app_context/app_context.png | Bin 0 -> 15578 bytes .../test_sign_attestation/app_context.png | Bin 0 -> 14449 bytes .../test_sign_attestation_dal/app_context.png | Bin 0 -> 14449 bytes .../stax/test_sign_block/app_context.png | Bin 0 -> 14449 bytes .../test_sign_preattestation/app_context.png | Bin 0 -> 14449 bytes test/python/test_instructions.py | 138 ++++++++++++------ test/python/utils/navigator.py | 65 ++++++++- 88 files changed, 156 insertions(+), 47 deletions(-) create mode 100644 test/python/snapshots/nanos/test_authorize_baking/chain_id.png create mode 100644 test/python/snapshots/nanos/test_authorize_baking/high_watermark.png create mode 100644 test/python/snapshots/nanos/test_authorize_baking/public_key_hash_1.png create mode 100644 test/python/snapshots/nanos/test_authorize_baking/public_key_hash_2.png create mode 100644 test/python/snapshots/nanos/test_deauthorize/chain_id.png create mode 100644 test/python/snapshots/nanos/test_deauthorize/high_watermark.png create mode 100644 test/python/snapshots/nanos/test_deauthorize/public_key_hash.png create mode 100644 test/python/snapshots/nanos/test_reset_app_context/chain_id.png create mode 100644 test/python/snapshots/nanos/test_reset_app_context/high_watermark.png create mode 100644 test/python/snapshots/nanos/test_reset_app_context/public_key_hash.png create mode 100644 test/python/snapshots/nanos/test_setup_app_context/chain_id.png create mode 100644 test/python/snapshots/nanos/test_setup_app_context/high_watermark.png create mode 100644 test/python/snapshots/nanos/test_setup_app_context/public_key_hash_1.png create mode 100644 test/python/snapshots/nanos/test_setup_app_context/public_key_hash_2.png create mode 100644 test/python/snapshots/nanos/test_sign_attestation/chain_id.png create mode 100644 test/python/snapshots/nanos/test_sign_attestation/high_watermark.png create mode 100644 test/python/snapshots/nanos/test_sign_attestation/public_key_hash_1.png create mode 100644 test/python/snapshots/nanos/test_sign_attestation/public_key_hash_2.png create mode 100644 test/python/snapshots/nanos/test_sign_attestation_dal/chain_id.png create mode 100644 test/python/snapshots/nanos/test_sign_attestation_dal/high_watermark.png create mode 100644 test/python/snapshots/nanos/test_sign_attestation_dal/public_key_hash_1.png create mode 100644 test/python/snapshots/nanos/test_sign_attestation_dal/public_key_hash_2.png create mode 100644 test/python/snapshots/nanos/test_sign_block/chain_id.png create mode 100644 test/python/snapshots/nanos/test_sign_block/high_watermark.png create mode 100644 test/python/snapshots/nanos/test_sign_block/public_key_hash_1.png create mode 100644 test/python/snapshots/nanos/test_sign_block/public_key_hash_2.png create mode 100644 test/python/snapshots/nanos/test_sign_preattestation/chain_id.png create mode 100644 test/python/snapshots/nanos/test_sign_preattestation/high_watermark.png create mode 100644 test/python/snapshots/nanos/test_sign_preattestation/public_key_hash_1.png create mode 100644 test/python/snapshots/nanos/test_sign_preattestation/public_key_hash_2.png create mode 100644 test/python/snapshots/nanosp/test_authorize_baking/chain_id.png create mode 100644 test/python/snapshots/nanosp/test_authorize_baking/high_watermark.png create mode 100644 test/python/snapshots/nanosp/test_authorize_baking/public_key_hash.png create mode 100644 test/python/snapshots/nanosp/test_deauthorize/chain_id.png create mode 100644 test/python/snapshots/nanosp/test_deauthorize/high_watermark.png create mode 100644 test/python/snapshots/nanosp/test_deauthorize/public_key_hash.png create mode 100644 test/python/snapshots/nanosp/test_reset_app_context/chain_id.png create mode 100644 test/python/snapshots/nanosp/test_reset_app_context/high_watermark.png create mode 100644 test/python/snapshots/nanosp/test_reset_app_context/public_key_hash.png create mode 100644 test/python/snapshots/nanosp/test_setup_app_context/chain_id.png create mode 100644 test/python/snapshots/nanosp/test_setup_app_context/high_watermark.png create mode 100644 test/python/snapshots/nanosp/test_setup_app_context/public_key_hash.png create mode 100644 test/python/snapshots/nanosp/test_sign_attestation/chain_id.png create mode 100644 test/python/snapshots/nanosp/test_sign_attestation/high_watermark.png create mode 100644 test/python/snapshots/nanosp/test_sign_attestation/public_key_hash.png create mode 100644 test/python/snapshots/nanosp/test_sign_attestation_dal/chain_id.png create mode 100644 test/python/snapshots/nanosp/test_sign_attestation_dal/high_watermark.png create mode 100644 test/python/snapshots/nanosp/test_sign_attestation_dal/public_key_hash.png create mode 100644 test/python/snapshots/nanosp/test_sign_block/chain_id.png create mode 100644 test/python/snapshots/nanosp/test_sign_block/high_watermark.png create mode 100644 test/python/snapshots/nanosp/test_sign_block/public_key_hash.png create mode 100644 test/python/snapshots/nanosp/test_sign_preattestation/chain_id.png create mode 100644 test/python/snapshots/nanosp/test_sign_preattestation/high_watermark.png create mode 100644 test/python/snapshots/nanosp/test_sign_preattestation/public_key_hash.png create mode 100644 test/python/snapshots/nanox/test_authorize_baking/chain_id.png create mode 100644 test/python/snapshots/nanox/test_authorize_baking/high_watermark.png create mode 100644 test/python/snapshots/nanox/test_authorize_baking/public_key_hash.png create mode 100644 test/python/snapshots/nanox/test_deauthorize/chain_id.png create mode 100644 test/python/snapshots/nanox/test_deauthorize/high_watermark.png create mode 100644 test/python/snapshots/nanox/test_deauthorize/public_key_hash.png create mode 100644 test/python/snapshots/nanox/test_reset_app_context/chain_id.png create mode 100644 test/python/snapshots/nanox/test_reset_app_context/high_watermark.png create mode 100644 test/python/snapshots/nanox/test_reset_app_context/public_key_hash.png create mode 100644 test/python/snapshots/nanox/test_setup_app_context/chain_id.png create mode 100644 test/python/snapshots/nanox/test_setup_app_context/high_watermark.png create mode 100644 test/python/snapshots/nanox/test_setup_app_context/public_key_hash.png create mode 100644 test/python/snapshots/nanox/test_sign_attestation/chain_id.png create mode 100644 test/python/snapshots/nanox/test_sign_attestation/high_watermark.png create mode 100644 test/python/snapshots/nanox/test_sign_attestation/public_key_hash.png create mode 100644 test/python/snapshots/nanox/test_sign_attestation_dal/chain_id.png create mode 100644 test/python/snapshots/nanox/test_sign_attestation_dal/high_watermark.png create mode 100644 test/python/snapshots/nanox/test_sign_attestation_dal/public_key_hash.png create mode 100644 test/python/snapshots/nanox/test_sign_block/chain_id.png create mode 100644 test/python/snapshots/nanox/test_sign_block/high_watermark.png create mode 100644 test/python/snapshots/nanox/test_sign_block/public_key_hash.png create mode 100644 test/python/snapshots/nanox/test_sign_preattestation/chain_id.png create mode 100644 test/python/snapshots/nanox/test_sign_preattestation/high_watermark.png create mode 100644 test/python/snapshots/nanox/test_sign_preattestation/public_key_hash.png create mode 100644 test/python/snapshots/stax/test_authorize_baking/app_context.png create mode 100644 test/python/snapshots/stax/test_deauthorize/app_context.png create mode 100644 test/python/snapshots/stax/test_reset_app_context/app_context.png create mode 100644 test/python/snapshots/stax/test_setup_app_context/app_context.png create mode 100644 test/python/snapshots/stax/test_sign_attestation/app_context.png create mode 100644 test/python/snapshots/stax/test_sign_attestation_dal/app_context.png create mode 100644 test/python/snapshots/stax/test_sign_block/app_context.png create mode 100644 test/python/snapshots/stax/test_sign_preattestation/app_context.png diff --git a/test/python/snapshots/nanos/test_authorize_baking/chain_id.png b/test/python/snapshots/nanos/test_authorize_baking/chain_id.png new file mode 100644 index 0000000000000000000000000000000000000000..a13210c52a6eb3a2f15d18a824724d6551fb962e GIT binary patch literal 285 zcmV+&0pk9NP)PW&?q5fLd4OA%{Crx26D00000NkvXXu0mjfpvrS# literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanos/test_authorize_baking/high_watermark.png b/test/python/snapshots/nanos/test_authorize_baking/high_watermark.png new file mode 100644 index 0000000000000000000000000000000000000000..a3b562f29721186c88fc1a36f15d8cbaff4bcd64 GIT binary patch literal 333 zcmV-T0kZyyP)%X zW9v>~+aFq~Lp_hG!&qUS@^x<^hfD-WRNmEzd&_F2yXu)2Ron8-b|)KCA%>JF_?7Fs zKS-OuJf>x_G*rEH+iIlBhOOOdGhG2g_fzl1>n1PBHK1OowrfdF8H<&L2M f00000fQX2Gqf@}8e`>>)00000NkvXXu0mjfxZ;X> literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanos/test_authorize_baking/public_key_hash_1.png b/test/python/snapshots/nanos/test_authorize_baking/public_key_hash_1.png new file mode 100644 index 0000000000000000000000000000000000000000..50537f7545c1cb95e64dedcd23e3b1d04dc9b5ed GIT binary patch literal 559 zcmV+~0?_@5P)ZUPwZNP)>XbRG!X z0Sze|9qs3pEGd z#JP8&v*W*!Z$@<}Yu21djtt#Iddtii=yLPA+th7KH^;}M_dTyb+QG#Q2<)6$1LPK2_Im(> z4JPzcz^K)yWiB61RU{j_#xF5>X(DU?{Zbl+SOMnB_0GeoIm9O8g`thJ?3i7^3NZ0X xm=`p`;m|lbzi;A@4>E-`TqAi|C=?18#RJ!@m~(NYZ)5-f002ovPDHLkV1fe>`k?>- literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanos/test_authorize_baking/public_key_hash_2.png b/test/python/snapshots/nanos/test_authorize_baking/public_key_hash_2.png new file mode 100644 index 0000000000000000000000000000000000000000..a30fbd958349d4762e483737696ec94262127b42 GIT binary patch literal 569 zcmV-90>=G`P)sI5;qIy?%dHPC#^tSD6_D zcqN!KcR`Iqq{!7aFOYGhp;aOlZ?=1O0#piEB@Fnga+o$fzV-hRiDHQ`Y?8THmCTm4 z36WnK08E;R)&y8kvr@pdlqfMkc@9)P>O&`^97Lck%gG$8kWY*Nmw;tYhib8_A{DU% z8k!?(o&F}ZTmn{}N|}QpyQ`I_AqQB*ukh*Hehp#{@M=$GAUBd29sSVt4!}JRFeP`} zVoT?MVP;@8NL8K1i3A;iRNIo0F|F%lEH-jfTdYx@?te+E&v`!o5P$2 zbtq^F7DHXU9XVpOHU-94#etnUg=jIE7}7Uk(!(p8i~~0H{xYM(xn8&5-vgb1ynzMh zDAMB%mPeZuuRQ5*kOf}LyfTzKy2sJW2BiZxmEvix;JS)RPVjm#(4By{+?=JK0PPW&?q5fLd4OA%{Crx26D00000NkvXXu0mjfpvrS# literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanos/test_deauthorize/high_watermark.png b/test/python/snapshots/nanos/test_deauthorize/high_watermark.png new file mode 100644 index 0000000000000000000000000000000000000000..a3b562f29721186c88fc1a36f15d8cbaff4bcd64 GIT binary patch literal 333 zcmV-T0kZyyP)%X zW9v>~+aFq~Lp_hG!&qUS@^x<^hfD-WRNmEzd&_F2yXu)2Ron8-b|)KCA%>JF_?7Fs zKS-OuJf>x_G*rEH+iIlBhOOOdGhG2g_fzl1>n1PBHK1OowrfdF8H<&L2M f00000fQX2Gqf@}8e`>>)00000NkvXXu0mjfxZ;X> literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanos/test_deauthorize/public_key_hash.png b/test/python/snapshots/nanos/test_deauthorize/public_key_hash.png new file mode 100644 index 0000000000000000000000000000000000000000..08266a9afca29337f8ee27d98a2176f1e14f3038 GIT binary patch literal 484 zcmV_6OR^CuUyNvP%*8+I=4i?ZX60D03Xv`+ijoY^rBG{zdZ9ctX*URLT8Ncb$BloDn< zL(a!xv&xyS4b2Pri4eJEPWO^j4bJ3W%tC2#Sch$D;=GD!yVpfA^}5Tai-RR@v;gz1 zA0S!V7>{Lr5hK-@HiID@jq|B_kHvy(TO>}@Bv0Z@K!bKA(jY)LB)c}wiQF0rPJ~xz zE>JfU*+9r&ndf*VCbS@fLPFl6-?JZ`eWf@f#XbJ|MGyZTFsWi@*r&PbLURSM^+ay{ z06s~B_-Qx$_W&S6D&<3iiiyV!_zH&Y1)s{eV96m94xSGqxZ3kb{PG8x!k^?SW>FNy awRi(sD^9E>WYbXq0000PW&?q5fLd4OA%{Crx26D00000NkvXXu0mjfpvrS# literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanos/test_reset_app_context/high_watermark.png b/test/python/snapshots/nanos/test_reset_app_context/high_watermark.png new file mode 100644 index 0000000000000000000000000000000000000000..ebb4b637a2e9d25f0283faf4deafab7ff42ab831 GIT binary patch literal 329 zcmV-P0k-~$P)R2}vzwKKvv9xEUyErMFsPBO2w<$0hoYP zP+yA>0R&|;(7+S7EChn%K5W5pJIYzT?V$Zx2263d0DC`0fC32M3_6OR^CuUyNvP%*8+I=4i?ZX60D03Xv`+ijoY^rBG{zdZ9ctX*URLT8Ncb$BloDn< zL(a!xv&xyS4b2Pri4eJEPWO^j4bJ3W%tC2#Sch$D;=GD!yVpfA^}5Tai-RR@v;gz1 zA0S!V7>{Lr5hK-@HiID@jq|B_kHvy(TO>}@Bv0Z@K!bKA(jY)LB)c}wiQF0rPJ~xz zE>JfU*+9r&ndf*VCbS@fLPFl6-?JZ`eWf@f#XbJ|MGyZTFsWi@*r&PbLURSM^+ay{ z06s~B_-Qx$_W&S6D&<3iiiyV!_zH&Y1)s{eV96m94xSGqxZ3kb{PG8x!k^?SW>FNy awRi(sD^9E>WYbXq0000T(kuIFE6p;WLW0U`;3x_C@kDAKk0RR91Ovm>A{<6h55VS&dr^d_i zIy-)mx4D8s466~GuQTd*LSfV{qrM$DOIzc*%m6b(Co z=76;mrN#1XC}Fd(BPChH0F2ldQ`z&lGwr6>MTFdk;F1+N=npgn0NjZW!;cVr1LKx4 P00000NkvXXu0mjfa~`>T literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanos/test_setup_app_context/high_watermark.png b/test/python/snapshots/nanos/test_setup_app_context/high_watermark.png new file mode 100644 index 0000000000000000000000000000000000000000..ebb4b637a2e9d25f0283faf4deafab7ff42ab831 GIT binary patch literal 329 zcmV-P0k-~$P)R2}vzwKKvv9xEUyErMFsPBO2w<$0hoYP zP+yA>0R&|;(7+S7EChn%K5W5pJIYzT?V$Zx2263d0DC`0fC32M3ZUPwZNP)>XbRG!X z0Sze|9qs3pEGd z#JP8&v*W*!Z$@<}Yu21djtt#Iddtii=yLPA+th7KH^;}M_dTyb+QG#Q2<)6$1LPK2_Im(> z4JPzcz^K)yWiB61RU{j_#xF5>X(DU?{Zbl+SOMnB_0GeoIm9O8g`thJ?3i7^3NZ0X xm=`p`;m|lbzi;A@4>E-`TqAi|C=?18#RJ!@m~(NYZ)5-f002ovPDHLkV1fe>`k?>- literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanos/test_setup_app_context/public_key_hash_2.png b/test/python/snapshots/nanos/test_setup_app_context/public_key_hash_2.png new file mode 100644 index 0000000000000000000000000000000000000000..a30fbd958349d4762e483737696ec94262127b42 GIT binary patch literal 569 zcmV-90>=G`P)sI5;qIy?%dHPC#^tSD6_D zcqN!KcR`Iqq{!7aFOYGhp;aOlZ?=1O0#piEB@Fnga+o$fzV-hRiDHQ`Y?8THmCTm4 z36WnK08E;R)&y8kvr@pdlqfMkc@9)P>O&`^97Lck%gG$8kWY*Nmw;tYhib8_A{DU% z8k!?(o&F}ZTmn{}N|}QpyQ`I_AqQB*ukh*Hehp#{@M=$GAUBd29sSVt4!}JRFeP`} zVoT?MVP;@8NL8K1i3A;iRNIo0F|F%lEH-jfTdYx@?te+E&v`!o5P$2 zbtq^F7DHXU9XVpOHU-94#etnUg=jIE7}7Uk(!(p8i~~0H{xYM(xn8&5-vgb1ynzMh zDAMB%mPeZuuRQ5*kOf}LyfTzKy2sJW2BiZxmEvix;JS)RPVjm#(4By{+?=JK0PPW&?q5fLd4OA%{Crx26D00000NkvXXu0mjfpvrS# literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanos/test_sign_attestation/high_watermark.png b/test/python/snapshots/nanos/test_sign_attestation/high_watermark.png new file mode 100644 index 0000000000000000000000000000000000000000..d14e7b22b04f3b22b1e97010c22032bb2bc44f36 GIT binary patch literal 352 zcmV-m0iXVfP)@wycR{1neR9cSK`7KJOMX~Mm&2lFTLm`GUQP5AW zul`8V_@zF*7OxFOX;oc?R9R?iH``2S02?5#ROL5!;ErUwvG1RPC^SX%BW5=C)Jd{k z4Ez^i%CbJ_H?z~!>|V4z!gC^KKr)&HTGl?p+@mXUL*=AfJ0*OLis62KK>#wU?F05L zY=`<;1P{O|gFy@;3Cltt1+K$ZXsgH+3(U*ASLe=E%v45>Jqh>ol9R9ZUPwZNP)>XbRG!X z0Sze|9qs3pEGd z#JP8&v*W*!Z$@<}Yu21djtt#Iddtii=yLPA+th7KH^;}M_dTyb+QG#Q2<)6$1LPK2_Im(> z4JPzcz^K)yWiB61RU{j_#xF5>X(DU?{Zbl+SOMnB_0GeoIm9O8g`thJ?3i7^3NZ0X xm=`p`;m|lbzi;A@4>E-`TqAi|C=?18#RJ!@m~(NYZ)5-f002ovPDHLkV1fe>`k?>- literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanos/test_sign_attestation/public_key_hash_2.png b/test/python/snapshots/nanos/test_sign_attestation/public_key_hash_2.png new file mode 100644 index 0000000000000000000000000000000000000000..a30fbd958349d4762e483737696ec94262127b42 GIT binary patch literal 569 zcmV-90>=G`P)sI5;qIy?%dHPC#^tSD6_D zcqN!KcR`Iqq{!7aFOYGhp;aOlZ?=1O0#piEB@Fnga+o$fzV-hRiDHQ`Y?8THmCTm4 z36WnK08E;R)&y8kvr@pdlqfMkc@9)P>O&`^97Lck%gG$8kWY*Nmw;tYhib8_A{DU% z8k!?(o&F}ZTmn{}N|}QpyQ`I_AqQB*ukh*Hehp#{@M=$GAUBd29sSVt4!}JRFeP`} zVoT?MVP;@8NL8K1i3A;iRNIo0F|F%lEH-jfTdYx@?te+E&v`!o5P$2 zbtq^F7DHXU9XVpOHU-94#etnUg=jIE7}7Uk(!(p8i~~0H{xYM(xn8&5-vgb1ynzMh zDAMB%mPeZuuRQ5*kOf}LyfTzKy2sJW2BiZxmEvix;JS)RPVjm#(4By{+?=JK0PPW&?q5fLd4OA%{Crx26D00000NkvXXu0mjfpvrS# literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanos/test_sign_attestation_dal/high_watermark.png b/test/python/snapshots/nanos/test_sign_attestation_dal/high_watermark.png new file mode 100644 index 0000000000000000000000000000000000000000..d14e7b22b04f3b22b1e97010c22032bb2bc44f36 GIT binary patch literal 352 zcmV-m0iXVfP)@wycR{1neR9cSK`7KJOMX~Mm&2lFTLm`GUQP5AW zul`8V_@zF*7OxFOX;oc?R9R?iH``2S02?5#ROL5!;ErUwvG1RPC^SX%BW5=C)Jd{k z4Ez^i%CbJ_H?z~!>|V4z!gC^KKr)&HTGl?p+@mXUL*=AfJ0*OLis62KK>#wU?F05L zY=`<;1P{O|gFy@;3Cltt1+K$ZXsgH+3(U*ASLe=E%v45>Jqh>ol9R9ZUPwZNP)>XbRG!X z0Sze|9qs3pEGd z#JP8&v*W*!Z$@<}Yu21djtt#Iddtii=yLPA+th7KH^;}M_dTyb+QG#Q2<)6$1LPK2_Im(> z4JPzcz^K)yWiB61RU{j_#xF5>X(DU?{Zbl+SOMnB_0GeoIm9O8g`thJ?3i7^3NZ0X xm=`p`;m|lbzi;A@4>E-`TqAi|C=?18#RJ!@m~(NYZ)5-f002ovPDHLkV1fe>`k?>- literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanos/test_sign_attestation_dal/public_key_hash_2.png b/test/python/snapshots/nanos/test_sign_attestation_dal/public_key_hash_2.png new file mode 100644 index 0000000000000000000000000000000000000000..a30fbd958349d4762e483737696ec94262127b42 GIT binary patch literal 569 zcmV-90>=G`P)sI5;qIy?%dHPC#^tSD6_D zcqN!KcR`Iqq{!7aFOYGhp;aOlZ?=1O0#piEB@Fnga+o$fzV-hRiDHQ`Y?8THmCTm4 z36WnK08E;R)&y8kvr@pdlqfMkc@9)P>O&`^97Lck%gG$8kWY*Nmw;tYhib8_A{DU% z8k!?(o&F}ZTmn{}N|}QpyQ`I_AqQB*ukh*Hehp#{@M=$GAUBd29sSVt4!}JRFeP`} zVoT?MVP;@8NL8K1i3A;iRNIo0F|F%lEH-jfTdYx@?te+E&v`!o5P$2 zbtq^F7DHXU9XVpOHU-94#etnUg=jIE7}7Uk(!(p8i~~0H{xYM(xn8&5-vgb1ynzMh zDAMB%mPeZuuRQ5*kOf}LyfTzKy2sJW2BiZxmEvix;JS)RPVjm#(4By{+?=JK0PPW&?q5fLd4OA%{Crx26D00000NkvXXu0mjfpvrS# literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanos/test_sign_block/high_watermark.png b/test/python/snapshots/nanos/test_sign_block/high_watermark.png new file mode 100644 index 0000000000000000000000000000000000000000..d14e7b22b04f3b22b1e97010c22032bb2bc44f36 GIT binary patch literal 352 zcmV-m0iXVfP)@wycR{1neR9cSK`7KJOMX~Mm&2lFTLm`GUQP5AW zul`8V_@zF*7OxFOX;oc?R9R?iH``2S02?5#ROL5!;ErUwvG1RPC^SX%BW5=C)Jd{k z4Ez^i%CbJ_H?z~!>|V4z!gC^KKr)&HTGl?p+@mXUL*=AfJ0*OLis62KK>#wU?F05L zY=`<;1P{O|gFy@;3Cltt1+K$ZXsgH+3(U*ASLe=E%v45>Jqh>ol9R9ZUPwZNP)>XbRG!X z0Sze|9qs3pEGd z#JP8&v*W*!Z$@<}Yu21djtt#Iddtii=yLPA+th7KH^;}M_dTyb+QG#Q2<)6$1LPK2_Im(> z4JPzcz^K)yWiB61RU{j_#xF5>X(DU?{Zbl+SOMnB_0GeoIm9O8g`thJ?3i7^3NZ0X xm=`p`;m|lbzi;A@4>E-`TqAi|C=?18#RJ!@m~(NYZ)5-f002ovPDHLkV1fe>`k?>- literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanos/test_sign_block/public_key_hash_2.png b/test/python/snapshots/nanos/test_sign_block/public_key_hash_2.png new file mode 100644 index 0000000000000000000000000000000000000000..a30fbd958349d4762e483737696ec94262127b42 GIT binary patch literal 569 zcmV-90>=G`P)sI5;qIy?%dHPC#^tSD6_D zcqN!KcR`Iqq{!7aFOYGhp;aOlZ?=1O0#piEB@Fnga+o$fzV-hRiDHQ`Y?8THmCTm4 z36WnK08E;R)&y8kvr@pdlqfMkc@9)P>O&`^97Lck%gG$8kWY*Nmw;tYhib8_A{DU% z8k!?(o&F}ZTmn{}N|}QpyQ`I_AqQB*ukh*Hehp#{@M=$GAUBd29sSVt4!}JRFeP`} zVoT?MVP;@8NL8K1i3A;iRNIo0F|F%lEH-jfTdYx@?te+E&v`!o5P$2 zbtq^F7DHXU9XVpOHU-94#etnUg=jIE7}7Uk(!(p8i~~0H{xYM(xn8&5-vgb1ynzMh zDAMB%mPeZuuRQ5*kOf}LyfTzKy2sJW2BiZxmEvix;JS)RPVjm#(4By{+?=JK0PPW&?q5fLd4OA%{Crx26D00000NkvXXu0mjfpvrS# literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanos/test_sign_preattestation/high_watermark.png b/test/python/snapshots/nanos/test_sign_preattestation/high_watermark.png new file mode 100644 index 0000000000000000000000000000000000000000..d14e7b22b04f3b22b1e97010c22032bb2bc44f36 GIT binary patch literal 352 zcmV-m0iXVfP)@wycR{1neR9cSK`7KJOMX~Mm&2lFTLm`GUQP5AW zul`8V_@zF*7OxFOX;oc?R9R?iH``2S02?5#ROL5!;ErUwvG1RPC^SX%BW5=C)Jd{k z4Ez^i%CbJ_H?z~!>|V4z!gC^KKr)&HTGl?p+@mXUL*=AfJ0*OLis62KK>#wU?F05L zY=`<;1P{O|gFy@;3Cltt1+K$ZXsgH+3(U*ASLe=E%v45>Jqh>ol9R9ZUPwZNP)>XbRG!X z0Sze|9qs3pEGd z#JP8&v*W*!Z$@<}Yu21djtt#Iddtii=yLPA+th7KH^;}M_dTyb+QG#Q2<)6$1LPK2_Im(> z4JPzcz^K)yWiB61RU{j_#xF5>X(DU?{Zbl+SOMnB_0GeoIm9O8g`thJ?3i7^3NZ0X xm=`p`;m|lbzi;A@4>E-`TqAi|C=?18#RJ!@m~(NYZ)5-f002ovPDHLkV1fe>`k?>- literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanos/test_sign_preattestation/public_key_hash_2.png b/test/python/snapshots/nanos/test_sign_preattestation/public_key_hash_2.png new file mode 100644 index 0000000000000000000000000000000000000000..a30fbd958349d4762e483737696ec94262127b42 GIT binary patch literal 569 zcmV-90>=G`P)sI5;qIy?%dHPC#^tSD6_D zcqN!KcR`Iqq{!7aFOYGhp;aOlZ?=1O0#piEB@Fnga+o$fzV-hRiDHQ`Y?8THmCTm4 z36WnK08E;R)&y8kvr@pdlqfMkc@9)P>O&`^97Lck%gG$8kWY*Nmw;tYhib8_A{DU% z8k!?(o&F}ZTmn{}N|}QpyQ`I_AqQB*ukh*Hehp#{@M=$GAUBd29sSVt4!}JRFeP`} zVoT?MVP;@8NL8K1i3A;iRNIo0F|F%lEH-jfTdYx@?te+E&v`!o5P$2 zbtq^F7DHXU9XVpOHU-94#etnUg=jIE7}7Uk(!(p8i~~0H{xYM(xn8&5-vgb1ynzMh zDAMB%mPeZuuRQ5*kOf}LyfTzKy2sJW2BiZxmEvix;JS)RPVjm#(4By{+?=JK0P&a_tk zVP)OGo1bRj{c3gxYsG@{V>iSepDK#pAC;|{`ZYvjemeVyS)pvF`=4%;SRB@@-1K{D zitL6>)4#Y(Dm}0w-*lq=hvh=z52TdD7QBCX_Dt?^R(1x459<~@XZ-%nk0VU`afH$j z3BA?xzHems-W~Z*Zu!i%G|v~SmCiMNOOdb1^SaD9`Pa|zX+dkP6^fR}Cw%y+^6$<1 z>n!!%cRw^8x7GjGo#P^5|3b3!+ltfI6k1=ucbfRO`~JfXOT>YJ00sZfm|N6!$?~jV QNe78|y85}Sb4q9e0LMg&z5oCK literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanosp/test_authorize_baking/high_watermark.png b/test/python/snapshots/nanosp/test_authorize_baking/high_watermark.png new file mode 100644 index 0000000000000000000000000000000000000000..3d322dbddaabab79507fb143d6bd64ef0b06462c GIT binary patch literal 387 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|{s}ba4!+nDh2VF5e*qo`yt| zdrQ9CUwZeb-&JKx4Ua_6liE5>$qQR^7Mx=QYP!64R<+#mhjWA{o_U^h{LzfBhtHX- zEcw15;h)PA%Vip0<9q{4*X!1_^=GV0I|Lhj0**J{f&k>VRi z_dH!)HNRoj(&x(D&TBZY?{TY}v#a=SUYG`t-5TFIv0|3ZPbb||SJ-;#eefLZsqccH zTAe*JDN4-raMt5^$6HI)ztkN2y2$(Ox1S4tG4HF+?Y-Z!bzbhy++CT)JKtHI)j04m zxN`5gge~1KE-w1^A=^1CX!8@>cM{9)tMqe!WK6SRJdyEVHRfJpXx2& zG$p@C5=k)R+91Ii(ZghOCQiNUZQsJyjPJW<`l?R$`L^6J$oHH2Vm9rMVo{y76{?rG efuVs6?mXjW@?`5cmyvWBB<$(x=d#Wzp$P!@3aw!P literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanosp/test_authorize_baking/public_key_hash.png b/test/python/snapshots/nanosp/test_authorize_baking/public_key_hash.png new file mode 100644 index 0000000000000000000000000000000000000000..a2b2f3cf554b7aa217556d3e6cf141d988316072 GIT binary patch literal 792 zcmV+z1LypSP)&R*@DEc;OCdW5JEglf*RU;#An+5(`+ce z_;#QI`M%yBC>%@-VHmwD@_i>5K9~0lh8=r0;jgCA{N(+B7XI178#7L3brB>*fD~hy zto_%QUMQ53gk5&t2P}991-?_qtzmKXWGr6@Oxb#yVS(di1pEWz*%g2<95W}zuYvgU*JZY1Dj{oH8P7V|Aowu_BM5TIvE=?D~Ta7t|p|2wcy@$cQn^o`|r^p zd)O7=g9w*x?`Am6h1p@iG4$dxTPGL<27>9e@GnO%?!v1#6yc#;xdfS(ZZ^)PNfTfQ z5^}EgmHm+W=0JEJ*o8!8kYvrlQG9xl8p@oDho`jgu`BF_)sVRgE-rk;U(ZODsxZ5jQ8>-7S=z!P57*L;>c9Klj}T% zi3uRT4y(!+zvvda@Km?UI?DU+aHlf!%Cs0VzYV=jNZB0Gcdw!dbK9$U%Z07~Q@;(p z=mVR-mrez|^ZJNk?!&AsX)|RzCMB>#J6jfm6|j7e0#(E4mp-|8bYmY%s*HyGz3&a_tk zVP)OGo1bRj{c3gxYsG@{V>iSepDK#pAC;|{`ZYvjemeVyS)pvF`=4%;SRB@@-1K{D zitL6>)4#Y(Dm}0w-*lq=hvh=z52TdD7QBCX_Dt?^R(1x459<~@XZ-%nk0VU`afH$j z3BA?xzHems-W~Z*Zu!i%G|v~SmCiMNOOdb1^SaD9`Pa|zX+dkP6^fR}Cw%y+^6$<1 z>n!!%cRw^8x7GjGo#P^5|3b3!+ltfI6k1=ucbfRO`~JfXOT>YJ00sZfm|N6!$?~jV QNe78|y85}Sb4q9e0LMg&z5oCK literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanosp/test_deauthorize/high_watermark.png b/test/python/snapshots/nanosp/test_deauthorize/high_watermark.png new file mode 100644 index 0000000000000000000000000000000000000000..3d322dbddaabab79507fb143d6bd64ef0b06462c GIT binary patch literal 387 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|{s}ba4!+nDh2VF5e*qo`yt| zdrQ9CUwZeb-&JKx4Ua_6liE5>$qQR^7Mx=QYP!64R<+#mhjWA{o_U^h{LzfBhtHX- zEcw15;h)PA%Vip0<9q{4*X!1_^=GV0I|Lhj0**J{f&k>VRi z_dH!)HNRoj(&x(D&TBZY?{TY}v#a=SUYG`t-5TFIv0|3ZPbb||SJ-;#eefLZsqccH zTAe*JDN4-raMt5^$6HI)ztkN2y2$(Ox1S4tG4HF+?Y-Z!bzbhy++CT)JKtHI)j04m zxN`5gge~1KE-w1^A=^1CX!8@>cM{9)tMqe!WK6SRJdyEVHRfJpXx2& zG$p@C5=k)R+91Ii(ZghOCQiNUZQsJyjPJW<`l?R$`L^6J$oHH2Vm9rMVo{y76{?rG efuVs6?mXjW@?`5cmyvWBB<$(x=d#Wzp$P!@3aw!P literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanosp/test_deauthorize/public_key_hash.png b/test/python/snapshots/nanosp/test_deauthorize/public_key_hash.png new file mode 100644 index 0000000000000000000000000000000000000000..c9472dc429c6f009ac045000e9168eec7b85c048 GIT binary patch literal 548 zcmV+<0^9wGP)7Gr6YHKNpPCY-JI#=N_WChqUMj4Y;TNbtKNBIy!+FO+DhY-p}n%XIUa*Rk}zzWEsG^*4>w_D4y z?2DvKv|?mb-%lAZ0qeVP>@a#HH8BP8C7+p6s>i|778FqiU>uu$_cE$%-P;76SrZ_Z ziLoAIaxL;%%^J1tx=t;>ec!c|&iPotGc5?dg8j=M0N{O;TeQ1cJ+0aI-)goOx0Z7k z)R{r|R{GLydhdVtF5B!ok0P!tD1Wt-qaN{AK(uL@s#GSOp61O#`DGc2c;TTaE+QSF z_#nn4ZVDA6;;1s$wP&Az62CFdbuH*{9d(H+_T73cc8BX8%5^!=`}hkPowCn3E&`ur zqvL2_CDz^_nN3k(ecK&-_*{}tz+Hdo9AwW;t?Pi-s8X(*P+Z7l@`_EP-|Uqm27Idu z8|mF)fgjt1F^THv_8Im*kxW7u;3i}Kp7YCn=inQ7K^OYRG?L65Ooj9U0000000000 m000000000000000Oydt?*W*weAoExN0000&a_tk zVP)OGo1bRj{c3gxYsG@{V>iSepDK#pAC;|{`ZYvjemeVyS)pvF`=4%;SRB@@-1K{D zitL6>)4#Y(Dm}0w-*lq=hvh=z52TdD7QBCX_Dt?^R(1x459<~@XZ-%nk0VU`afH$j z3BA?xzHems-W~Z*Zu!i%G|v~SmCiMNOOdb1^SaD9`Pa|zX+dkP6^fR}Cw%y+^6$<1 z>n!!%cRw^8x7GjGo#P^5|3b3!+ltfI6k1=ucbfRO`~JfXOT>YJ00sZfm|N6!$?~jV QNe78|y85}Sb4q9e0LMg&z5oCK literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanosp/test_reset_app_context/high_watermark.png b/test/python/snapshots/nanosp/test_reset_app_context/high_watermark.png new file mode 100644 index 0000000000000000000000000000000000000000..90633d62552dc9cf0d85e14a7a203be008f3388b GIT binary patch literal 385 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|{s{ba4!+nDh2}AYZcrPebCi zH)?zTPuz1_?u^7jR>28bpX&Xk1y|^Hv;nm+=zM?mZf9;Zhog(uetv7YzMFP$s)C)W z{JEa_yX;Cn6(qk^B=mb#%lR*YXG3LG7WkgmPZZbJCt>A3-6ZI9=*WaeKUV3o()|GTacY|m@$-9h8r`F9qywmIDJ=1lU zPw6a8y=b(??7!fWxwjVnmb>1)uH@GBb}9ZJueO^07r5ru_jKROX=g>-UT;~%aNGa! zSF7fmnv2{|-@3eCcBSUopz__<4gRX^jO{Srki@=V(SPq9tv?qqFeEVDTVwNf<#L8| z^WqrxG0zEPNEbOE$yzW?{K3ogTW4jLOn;*v;A3<%{+Ng9&G;UvibtAHI*V@zzhni4 c1`^Qw%&PL5`Qxryg9?zSr>mdKI;Vst0FhLxssI20 literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanosp/test_reset_app_context/public_key_hash.png b/test/python/snapshots/nanosp/test_reset_app_context/public_key_hash.png new file mode 100644 index 0000000000000000000000000000000000000000..c9472dc429c6f009ac045000e9168eec7b85c048 GIT binary patch literal 548 zcmV+<0^9wGP)7Gr6YHKNpPCY-JI#=N_WChqUMj4Y;TNbtKNBIy!+FO+DhY-p}n%XIUa*Rk}zzWEsG^*4>w_D4y z?2DvKv|?mb-%lAZ0qeVP>@a#HH8BP8C7+p6s>i|778FqiU>uu$_cE$%-P;76SrZ_Z ziLoAIaxL;%%^J1tx=t;>ec!c|&iPotGc5?dg8j=M0N{O;TeQ1cJ+0aI-)goOx0Z7k z)R{r|R{GLydhdVtF5B!ok0P!tD1Wt-qaN{AK(uL@s#GSOp61O#`DGc2c;TTaE+QSF z_#nn4ZVDA6;;1s$wP&Az62CFdbuH*{9d(H+_T73cc8BX8%5^!=`}hkPowCn3E&`ur zqvL2_CDz^_nN3k(ecK&-_*{}tz+Hdo9AwW;t?Pi-s8X(*P+Z7l@`_EP-|Uqm27Idu z8|mF)fgjt1F^THv_8Im*kxW7u;3i}Kp7YCn=inQ7K^OYRG?L65Ooj9U0000000000 m000000000000000Oydt?*W*weAoExN0000C+W|UfXS-p$%nlW_vv7tIp|;+;;bV{}XQ@*B}G#y`ZwW*#7&MJB~6tWvjrx z!+d04q1`K02bR9!7-A!wvl%D9>aty=w$~|F@5bP|sEjroRcwSv0lN7O#4ShI?XGfE zj#VUTknYTLUDPEu+G*R-gZtgJ6pTlZEv^{muuMTESOEE&>1y4wS?2rk!cU+JV2@S3 z>T6&7wJpZqhL*aJT2e~OkynrQ`>8!MypZ-kwgmCr>`92FYqJ;GFI;&ztp;Sjnv)7@ za3@xwJMAQy8eEF>0ssI2000000000000000m-z>nK5wo|ZNr%W000028bpX&Xk1y|^Hv;nm+=zM?mZf9;Zhog(uetv7YzMFP$s)C)W z{JEa_yX;Cn6(qk^B=mb#%lR*YXG3LG7WkgmPZZbJCt>A3-6ZI9=*WaeKUV3o()|GTacY|m@$-9h8r`F9qywmIDJ=1lU zPw6a8y=b(??7!fWxwjVnmb>1)uH@GBb}9ZJueO^07r5ru_jKROX=g>-UT;~%aNGa! zSF7fmnv2{|-@3eCcBSUopz__<4gRX^jO{Srki@=V(SPq9tv?qqFeEVDTVwNf<#L8| z^WqrxG0zEPNEbOE$yzW?{K3ogTW4jLOn;*v;A3<%{+Ng9&G;UvibtAHI*V@zzhni4 c1`^Qw%&PL5`Qxryg9?zSr>mdKI;Vst0FhLxssI20 literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanosp/test_setup_app_context/public_key_hash.png b/test/python/snapshots/nanosp/test_setup_app_context/public_key_hash.png new file mode 100644 index 0000000000000000000000000000000000000000..a2b2f3cf554b7aa217556d3e6cf141d988316072 GIT binary patch literal 792 zcmV+z1LypSP)&R*@DEc;OCdW5JEglf*RU;#An+5(`+ce z_;#QI`M%yBC>%@-VHmwD@_i>5K9~0lh8=r0;jgCA{N(+B7XI178#7L3brB>*fD~hy zto_%QUMQ53gk5&t2P}991-?_qtzmKXWGr6@Oxb#yVS(di1pEWz*%g2<95W}zuYvgU*JZY1Dj{oH8P7V|Aowu_BM5TIvE=?D~Ta7t|p|2wcy@$cQn^o`|r^p zd)O7=g9w*x?`Am6h1p@iG4$dxTPGL<27>9e@GnO%?!v1#6yc#;xdfS(ZZ^)PNfTfQ z5^}EgmHm+W=0JEJ*o8!8kYvrlQG9xl8p@oDho`jgu`BF_)sVRgE-rk;U(ZODsxZ5jQ8>-7S=z!P57*L;>c9Klj}T% zi3uRT4y(!+zvvda@Km?UI?DU+aHlf!%Cs0VzYV=jNZB0Gcdw!dbK9$U%Z07~Q@;(p z=mVR-mrez|^ZJNk?!&AsX)|RzCMB>#J6jfm6|j7e0#(E4mp-|8bYmY%s*HyGz3&a_tk zVP)OGo1bRj{c3gxYsG@{V>iSepDK#pAC;|{`ZYvjemeVyS)pvF`=4%;SRB@@-1K{D zitL6>)4#Y(Dm}0w-*lq=hvh=z52TdD7QBCX_Dt?^R(1x459<~@XZ-%nk0VU`afH$j z3BA?xzHems-W~Z*Zu!i%G|v~SmCiMNOOdb1^SaD9`Pa|zX+dkP6^fR}Cw%y+^6$<1 z>n!!%cRw^8x7GjGo#P^5|3b3!+ltfI6k1=ucbfRO`~JfXOT>YJ00sZfm|N6!$?~jV QNe78|y85}Sb4q9e0LMg&z5oCK literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanosp/test_sign_attestation/high_watermark.png b/test/python/snapshots/nanosp/test_sign_attestation/high_watermark.png new file mode 100644 index 0000000000000000000000000000000000000000..b12898fa2467bf50d31cecdfe217fcd3ac404ac3 GIT binary patch literal 416 zcmV;R0bl-!P)741i&JraQ_0m*if~gHy_ofZRmr{NGc{2*hwxodW;>0H%92*F28HIVU2S-%@}~=qwsp2 z!RQpxtwrVG--gtrddXYvF--3y%Z0dr87lx8?Qg;*%#8v7u!wulfIFmK>zY3&R*@DEc;OCdW5JEglf*RU;#An+5(`+ce z_;#QI`M%yBC>%@-VHmwD@_i>5K9~0lh8=r0;jgCA{N(+B7XI178#7L3brB>*fD~hy zto_%QUMQ53gk5&t2P}991-?_qtzmKXWGr6@Oxb#yVS(di1pEWz*%g2<95W}zuYvgU*JZY1Dj{oH8P7V|Aowu_BM5TIvE=?D~Ta7t|p|2wcy@$cQn^o`|r^p zd)O7=g9w*x?`Am6h1p@iG4$dxTPGL<27>9e@GnO%?!v1#6yc#;xdfS(ZZ^)PNfTfQ z5^}EgmHm+W=0JEJ*o8!8kYvrlQG9xl8p@oDho`jgu`BF_)sVRgE-rk;U(ZODsxZ5jQ8>-7S=z!P57*L;>c9Klj}T% zi3uRT4y(!+zvvda@Km?UI?DU+aHlf!%Cs0VzYV=jNZB0Gcdw!dbK9$U%Z07~Q@;(p z=mVR-mrez|^ZJNk?!&AsX)|RzCMB>#J6jfm6|j7e0#(E4mp-|8bYmY%s*HyGz3&a_tk zVP)OGo1bRj{c3gxYsG@{V>iSepDK#pAC;|{`ZYvjemeVyS)pvF`=4%;SRB@@-1K{D zitL6>)4#Y(Dm}0w-*lq=hvh=z52TdD7QBCX_Dt?^R(1x459<~@XZ-%nk0VU`afH$j z3BA?xzHems-W~Z*Zu!i%G|v~SmCiMNOOdb1^SaD9`Pa|zX+dkP6^fR}Cw%y+^6$<1 z>n!!%cRw^8x7GjGo#P^5|3b3!+ltfI6k1=ucbfRO`~JfXOT>YJ00sZfm|N6!$?~jV QNe78|y85}Sb4q9e0LMg&z5oCK literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanosp/test_sign_attestation_dal/high_watermark.png b/test/python/snapshots/nanosp/test_sign_attestation_dal/high_watermark.png new file mode 100644 index 0000000000000000000000000000000000000000..b12898fa2467bf50d31cecdfe217fcd3ac404ac3 GIT binary patch literal 416 zcmV;R0bl-!P)741i&JraQ_0m*if~gHy_ofZRmr{NGc{2*hwxodW;>0H%92*F28HIVU2S-%@}~=qwsp2 z!RQpxtwrVG--gtrddXYvF--3y%Z0dr87lx8?Qg;*%#8v7u!wulfIFmK>zY3&R*@DEc;OCdW5JEglf*RU;#An+5(`+ce z_;#QI`M%yBC>%@-VHmwD@_i>5K9~0lh8=r0;jgCA{N(+B7XI178#7L3brB>*fD~hy zto_%QUMQ53gk5&t2P}991-?_qtzmKXWGr6@Oxb#yVS(di1pEWz*%g2<95W}zuYvgU*JZY1Dj{oH8P7V|Aowu_BM5TIvE=?D~Ta7t|p|2wcy@$cQn^o`|r^p zd)O7=g9w*x?`Am6h1p@iG4$dxTPGL<27>9e@GnO%?!v1#6yc#;xdfS(ZZ^)PNfTfQ z5^}EgmHm+W=0JEJ*o8!8kYvrlQG9xl8p@oDho`jgu`BF_)sVRgE-rk;U(ZODsxZ5jQ8>-7S=z!P57*L;>c9Klj}T% zi3uRT4y(!+zvvda@Km?UI?DU+aHlf!%Cs0VzYV=jNZB0Gcdw!dbK9$U%Z07~Q@;(p z=mVR-mrez|^ZJNk?!&AsX)|RzCMB>#J6jfm6|j7e0#(E4mp-|8bYmY%s*HyGz3&a_tk zVP)OGo1bRj{c3gxYsG@{V>iSepDK#pAC;|{`ZYvjemeVyS)pvF`=4%;SRB@@-1K{D zitL6>)4#Y(Dm}0w-*lq=hvh=z52TdD7QBCX_Dt?^R(1x459<~@XZ-%nk0VU`afH$j z3BA?xzHems-W~Z*Zu!i%G|v~SmCiMNOOdb1^SaD9`Pa|zX+dkP6^fR}Cw%y+^6$<1 z>n!!%cRw^8x7GjGo#P^5|3b3!+ltfI6k1=ucbfRO`~JfXOT>YJ00sZfm|N6!$?~jV QNe78|y85}Sb4q9e0LMg&z5oCK literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanosp/test_sign_block/high_watermark.png b/test/python/snapshots/nanosp/test_sign_block/high_watermark.png new file mode 100644 index 0000000000000000000000000000000000000000..b12898fa2467bf50d31cecdfe217fcd3ac404ac3 GIT binary patch literal 416 zcmV;R0bl-!P)741i&JraQ_0m*if~gHy_ofZRmr{NGc{2*hwxodW;>0H%92*F28HIVU2S-%@}~=qwsp2 z!RQpxtwrVG--gtrddXYvF--3y%Z0dr87lx8?Qg;*%#8v7u!wulfIFmK>zY3&R*@DEc;OCdW5JEglf*RU;#An+5(`+ce z_;#QI`M%yBC>%@-VHmwD@_i>5K9~0lh8=r0;jgCA{N(+B7XI178#7L3brB>*fD~hy zto_%QUMQ53gk5&t2P}991-?_qtzmKXWGr6@Oxb#yVS(di1pEWz*%g2<95W}zuYvgU*JZY1Dj{oH8P7V|Aowu_BM5TIvE=?D~Ta7t|p|2wcy@$cQn^o`|r^p zd)O7=g9w*x?`Am6h1p@iG4$dxTPGL<27>9e@GnO%?!v1#6yc#;xdfS(ZZ^)PNfTfQ z5^}EgmHm+W=0JEJ*o8!8kYvrlQG9xl8p@oDho`jgu`BF_)sVRgE-rk;U(ZODsxZ5jQ8>-7S=z!P57*L;>c9Klj}T% zi3uRT4y(!+zvvda@Km?UI?DU+aHlf!%Cs0VzYV=jNZB0Gcdw!dbK9$U%Z07~Q@;(p z=mVR-mrez|^ZJNk?!&AsX)|RzCMB>#J6jfm6|j7e0#(E4mp-|8bYmY%s*HyGz3&a_tk zVP)OGo1bRj{c3gxYsG@{V>iSepDK#pAC;|{`ZYvjemeVyS)pvF`=4%;SRB@@-1K{D zitL6>)4#Y(Dm}0w-*lq=hvh=z52TdD7QBCX_Dt?^R(1x459<~@XZ-%nk0VU`afH$j z3BA?xzHems-W~Z*Zu!i%G|v~SmCiMNOOdb1^SaD9`Pa|zX+dkP6^fR}Cw%y+^6$<1 z>n!!%cRw^8x7GjGo#P^5|3b3!+ltfI6k1=ucbfRO`~JfXOT>YJ00sZfm|N6!$?~jV QNe78|y85}Sb4q9e0LMg&z5oCK literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanosp/test_sign_preattestation/high_watermark.png b/test/python/snapshots/nanosp/test_sign_preattestation/high_watermark.png new file mode 100644 index 0000000000000000000000000000000000000000..b12898fa2467bf50d31cecdfe217fcd3ac404ac3 GIT binary patch literal 416 zcmV;R0bl-!P)741i&JraQ_0m*if~gHy_ofZRmr{NGc{2*hwxodW;>0H%92*F28HIVU2S-%@}~=qwsp2 z!RQpxtwrVG--gtrddXYvF--3y%Z0dr87lx8?Qg;*%#8v7u!wulfIFmK>zY3&R*@DEc;OCdW5JEglf*RU;#An+5(`+ce z_;#QI`M%yBC>%@-VHmwD@_i>5K9~0lh8=r0;jgCA{N(+B7XI178#7L3brB>*fD~hy zto_%QUMQ53gk5&t2P}991-?_qtzmKXWGr6@Oxb#yVS(di1pEWz*%g2<95W}zuYvgU*JZY1Dj{oH8P7V|Aowu_BM5TIvE=?D~Ta7t|p|2wcy@$cQn^o`|r^p zd)O7=g9w*x?`Am6h1p@iG4$dxTPGL<27>9e@GnO%?!v1#6yc#;xdfS(ZZ^)PNfTfQ z5^}EgmHm+W=0JEJ*o8!8kYvrlQG9xl8p@oDho`jgu`BF_)sVRgE-rk;U(ZODsxZ5jQ8>-7S=z!P57*L;>c9Klj}T% zi3uRT4y(!+zvvda@Km?UI?DU+aHlf!%Cs0VzYV=jNZB0Gcdw!dbK9$U%Z07~Q@;(p z=mVR-mrez|^ZJNk?!&AsX)|RzCMB>#J6jfm6|j7e0#(E4mp-|8bYmY%s*HyGz3&a_tk zVP)OGo1bRj{c3gxYsG@{V>iSepDK#pAC;|{`ZYvjemeVyS)pvF`=4%;SRB@@-1K{D zitL6>)4#Y(Dm}0w-*lq=hvh=z52TdD7QBCX_Dt?^R(1x459<~@XZ-%nk0VU`afH$j z3BA?xzHems-W~Z*Zu!i%G|v~SmCiMNOOdb1^SaD9`Pa|zX+dkP6^fR}Cw%y+^6$<1 z>n!!%cRw^8x7GjGo#P^5|3b3!+ltfI6k1=ucbfRO`~JfXOT>YJ00sZfm|N6!$?~jV QNe78|y85}Sb4q9e0LMg&z5oCK literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanox/test_authorize_baking/high_watermark.png b/test/python/snapshots/nanox/test_authorize_baking/high_watermark.png new file mode 100644 index 0000000000000000000000000000000000000000..3d322dbddaabab79507fb143d6bd64ef0b06462c GIT binary patch literal 387 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|{s}ba4!+nDh2VF5e*qo`yt| zdrQ9CUwZeb-&JKx4Ua_6liE5>$qQR^7Mx=QYP!64R<+#mhjWA{o_U^h{LzfBhtHX- zEcw15;h)PA%Vip0<9q{4*X!1_^=GV0I|Lhj0**J{f&k>VRi z_dH!)HNRoj(&x(D&TBZY?{TY}v#a=SUYG`t-5TFIv0|3ZPbb||SJ-;#eefLZsqccH zTAe*JDN4-raMt5^$6HI)ztkN2y2$(Ox1S4tG4HF+?Y-Z!bzbhy++CT)JKtHI)j04m zxN`5gge~1KE-w1^A=^1CX!8@>cM{9)tMqe!WK6SRJdyEVHRfJpXx2& zG$p@C5=k)R+91Ii(ZghOCQiNUZQsJyjPJW<`l?R$`L^6J$oHH2Vm9rMVo{y76{?rG efuVs6?mXjW@?`5cmyvWBB<$(x=d#Wzp$P!@3aw!P literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanox/test_authorize_baking/public_key_hash.png b/test/python/snapshots/nanox/test_authorize_baking/public_key_hash.png new file mode 100644 index 0000000000000000000000000000000000000000..a2b2f3cf554b7aa217556d3e6cf141d988316072 GIT binary patch literal 792 zcmV+z1LypSP)&R*@DEc;OCdW5JEglf*RU;#An+5(`+ce z_;#QI`M%yBC>%@-VHmwD@_i>5K9~0lh8=r0;jgCA{N(+B7XI178#7L3brB>*fD~hy zto_%QUMQ53gk5&t2P}991-?_qtzmKXWGr6@Oxb#yVS(di1pEWz*%g2<95W}zuYvgU*JZY1Dj{oH8P7V|Aowu_BM5TIvE=?D~Ta7t|p|2wcy@$cQn^o`|r^p zd)O7=g9w*x?`Am6h1p@iG4$dxTPGL<27>9e@GnO%?!v1#6yc#;xdfS(ZZ^)PNfTfQ z5^}EgmHm+W=0JEJ*o8!8kYvrlQG9xl8p@oDho`jgu`BF_)sVRgE-rk;U(ZODsxZ5jQ8>-7S=z!P57*L;>c9Klj}T% zi3uRT4y(!+zvvda@Km?UI?DU+aHlf!%Cs0VzYV=jNZB0Gcdw!dbK9$U%Z07~Q@;(p z=mVR-mrez|^ZJNk?!&AsX)|RzCMB>#J6jfm6|j7e0#(E4mp-|8bYmY%s*HyGz3&a_tk zVP)OGo1bRj{c3gxYsG@{V>iSepDK#pAC;|{`ZYvjemeVyS)pvF`=4%;SRB@@-1K{D zitL6>)4#Y(Dm}0w-*lq=hvh=z52TdD7QBCX_Dt?^R(1x459<~@XZ-%nk0VU`afH$j z3BA?xzHems-W~Z*Zu!i%G|v~SmCiMNOOdb1^SaD9`Pa|zX+dkP6^fR}Cw%y+^6$<1 z>n!!%cRw^8x7GjGo#P^5|3b3!+ltfI6k1=ucbfRO`~JfXOT>YJ00sZfm|N6!$?~jV QNe78|y85}Sb4q9e0LMg&z5oCK literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanox/test_deauthorize/high_watermark.png b/test/python/snapshots/nanox/test_deauthorize/high_watermark.png new file mode 100644 index 0000000000000000000000000000000000000000..3d322dbddaabab79507fb143d6bd64ef0b06462c GIT binary patch literal 387 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|{s}ba4!+nDh2VF5e*qo`yt| zdrQ9CUwZeb-&JKx4Ua_6liE5>$qQR^7Mx=QYP!64R<+#mhjWA{o_U^h{LzfBhtHX- zEcw15;h)PA%Vip0<9q{4*X!1_^=GV0I|Lhj0**J{f&k>VRi z_dH!)HNRoj(&x(D&TBZY?{TY}v#a=SUYG`t-5TFIv0|3ZPbb||SJ-;#eefLZsqccH zTAe*JDN4-raMt5^$6HI)ztkN2y2$(Ox1S4tG4HF+?Y-Z!bzbhy++CT)JKtHI)j04m zxN`5gge~1KE-w1^A=^1CX!8@>cM{9)tMqe!WK6SRJdyEVHRfJpXx2& zG$p@C5=k)R+91Ii(ZghOCQiNUZQsJyjPJW<`l?R$`L^6J$oHH2Vm9rMVo{y76{?rG efuVs6?mXjW@?`5cmyvWBB<$(x=d#Wzp$P!@3aw!P literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanox/test_deauthorize/public_key_hash.png b/test/python/snapshots/nanox/test_deauthorize/public_key_hash.png new file mode 100644 index 0000000000000000000000000000000000000000..c9472dc429c6f009ac045000e9168eec7b85c048 GIT binary patch literal 548 zcmV+<0^9wGP)7Gr6YHKNpPCY-JI#=N_WChqUMj4Y;TNbtKNBIy!+FO+DhY-p}n%XIUa*Rk}zzWEsG^*4>w_D4y z?2DvKv|?mb-%lAZ0qeVP>@a#HH8BP8C7+p6s>i|778FqiU>uu$_cE$%-P;76SrZ_Z ziLoAIaxL;%%^J1tx=t;>ec!c|&iPotGc5?dg8j=M0N{O;TeQ1cJ+0aI-)goOx0Z7k z)R{r|R{GLydhdVtF5B!ok0P!tD1Wt-qaN{AK(uL@s#GSOp61O#`DGc2c;TTaE+QSF z_#nn4ZVDA6;;1s$wP&Az62CFdbuH*{9d(H+_T73cc8BX8%5^!=`}hkPowCn3E&`ur zqvL2_CDz^_nN3k(ecK&-_*{}tz+Hdo9AwW;t?Pi-s8X(*P+Z7l@`_EP-|Uqm27Idu z8|mF)fgjt1F^THv_8Im*kxW7u;3i}Kp7YCn=inQ7K^OYRG?L65Ooj9U0000000000 m000000000000000Oydt?*W*weAoExN0000&a_tk zVP)OGo1bRj{c3gxYsG@{V>iSepDK#pAC;|{`ZYvjemeVyS)pvF`=4%;SRB@@-1K{D zitL6>)4#Y(Dm}0w-*lq=hvh=z52TdD7QBCX_Dt?^R(1x459<~@XZ-%nk0VU`afH$j z3BA?xzHems-W~Z*Zu!i%G|v~SmCiMNOOdb1^SaD9`Pa|zX+dkP6^fR}Cw%y+^6$<1 z>n!!%cRw^8x7GjGo#P^5|3b3!+ltfI6k1=ucbfRO`~JfXOT>YJ00sZfm|N6!$?~jV QNe78|y85}Sb4q9e0LMg&z5oCK literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanox/test_reset_app_context/high_watermark.png b/test/python/snapshots/nanox/test_reset_app_context/high_watermark.png new file mode 100644 index 0000000000000000000000000000000000000000..90633d62552dc9cf0d85e14a7a203be008f3388b GIT binary patch literal 385 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|{s{ba4!+nDh2}AYZcrPebCi zH)?zTPuz1_?u^7jR>28bpX&Xk1y|^Hv;nm+=zM?mZf9;Zhog(uetv7YzMFP$s)C)W z{JEa_yX;Cn6(qk^B=mb#%lR*YXG3LG7WkgmPZZbJCt>A3-6ZI9=*WaeKUV3o()|GTacY|m@$-9h8r`F9qywmIDJ=1lU zPw6a8y=b(??7!fWxwjVnmb>1)uH@GBb}9ZJueO^07r5ru_jKROX=g>-UT;~%aNGa! zSF7fmnv2{|-@3eCcBSUopz__<4gRX^jO{Srki@=V(SPq9tv?qqFeEVDTVwNf<#L8| z^WqrxG0zEPNEbOE$yzW?{K3ogTW4jLOn;*v;A3<%{+Ng9&G;UvibtAHI*V@zzhni4 c1`^Qw%&PL5`Qxryg9?zSr>mdKI;Vst0FhLxssI20 literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanox/test_reset_app_context/public_key_hash.png b/test/python/snapshots/nanox/test_reset_app_context/public_key_hash.png new file mode 100644 index 0000000000000000000000000000000000000000..c9472dc429c6f009ac045000e9168eec7b85c048 GIT binary patch literal 548 zcmV+<0^9wGP)7Gr6YHKNpPCY-JI#=N_WChqUMj4Y;TNbtKNBIy!+FO+DhY-p}n%XIUa*Rk}zzWEsG^*4>w_D4y z?2DvKv|?mb-%lAZ0qeVP>@a#HH8BP8C7+p6s>i|778FqiU>uu$_cE$%-P;76SrZ_Z ziLoAIaxL;%%^J1tx=t;>ec!c|&iPotGc5?dg8j=M0N{O;TeQ1cJ+0aI-)goOx0Z7k z)R{r|R{GLydhdVtF5B!ok0P!tD1Wt-qaN{AK(uL@s#GSOp61O#`DGc2c;TTaE+QSF z_#nn4ZVDA6;;1s$wP&Az62CFdbuH*{9d(H+_T73cc8BX8%5^!=`}hkPowCn3E&`ur zqvL2_CDz^_nN3k(ecK&-_*{}tz+Hdo9AwW;t?Pi-s8X(*P+Z7l@`_EP-|Uqm27Idu z8|mF)fgjt1F^THv_8Im*kxW7u;3i}Kp7YCn=inQ7K^OYRG?L65Ooj9U0000000000 m000000000000000Oydt?*W*weAoExN0000C+W|UfXS-p$%nlW_vv7tIp|;+;;bV{}XQ@*B}G#y`ZwW*#7&MJB~6tWvjrx z!+d04q1`K02bR9!7-A!wvl%D9>aty=w$~|F@5bP|sEjroRcwSv0lN7O#4ShI?XGfE zj#VUTknYTLUDPEu+G*R-gZtgJ6pTlZEv^{muuMTESOEE&>1y4wS?2rk!cU+JV2@S3 z>T6&7wJpZqhL*aJT2e~OkynrQ`>8!MypZ-kwgmCr>`92FYqJ;GFI;&ztp;Sjnv)7@ za3@xwJMAQy8eEF>0ssI2000000000000000m-z>nK5wo|ZNr%W000028bpX&Xk1y|^Hv;nm+=zM?mZf9;Zhog(uetv7YzMFP$s)C)W z{JEa_yX;Cn6(qk^B=mb#%lR*YXG3LG7WkgmPZZbJCt>A3-6ZI9=*WaeKUV3o()|GTacY|m@$-9h8r`F9qywmIDJ=1lU zPw6a8y=b(??7!fWxwjVnmb>1)uH@GBb}9ZJueO^07r5ru_jKROX=g>-UT;~%aNGa! zSF7fmnv2{|-@3eCcBSUopz__<4gRX^jO{Srki@=V(SPq9tv?qqFeEVDTVwNf<#L8| z^WqrxG0zEPNEbOE$yzW?{K3ogTW4jLOn;*v;A3<%{+Ng9&G;UvibtAHI*V@zzhni4 c1`^Qw%&PL5`Qxryg9?zSr>mdKI;Vst0FhLxssI20 literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanox/test_setup_app_context/public_key_hash.png b/test/python/snapshots/nanox/test_setup_app_context/public_key_hash.png new file mode 100644 index 0000000000000000000000000000000000000000..a2b2f3cf554b7aa217556d3e6cf141d988316072 GIT binary patch literal 792 zcmV+z1LypSP)&R*@DEc;OCdW5JEglf*RU;#An+5(`+ce z_;#QI`M%yBC>%@-VHmwD@_i>5K9~0lh8=r0;jgCA{N(+B7XI178#7L3brB>*fD~hy zto_%QUMQ53gk5&t2P}991-?_qtzmKXWGr6@Oxb#yVS(di1pEWz*%g2<95W}zuYvgU*JZY1Dj{oH8P7V|Aowu_BM5TIvE=?D~Ta7t|p|2wcy@$cQn^o`|r^p zd)O7=g9w*x?`Am6h1p@iG4$dxTPGL<27>9e@GnO%?!v1#6yc#;xdfS(ZZ^)PNfTfQ z5^}EgmHm+W=0JEJ*o8!8kYvrlQG9xl8p@oDho`jgu`BF_)sVRgE-rk;U(ZODsxZ5jQ8>-7S=z!P57*L;>c9Klj}T% zi3uRT4y(!+zvvda@Km?UI?DU+aHlf!%Cs0VzYV=jNZB0Gcdw!dbK9$U%Z07~Q@;(p z=mVR-mrez|^ZJNk?!&AsX)|RzCMB>#J6jfm6|j7e0#(E4mp-|8bYmY%s*HyGz3&a_tk zVP)OGo1bRj{c3gxYsG@{V>iSepDK#pAC;|{`ZYvjemeVyS)pvF`=4%;SRB@@-1K{D zitL6>)4#Y(Dm}0w-*lq=hvh=z52TdD7QBCX_Dt?^R(1x459<~@XZ-%nk0VU`afH$j z3BA?xzHems-W~Z*Zu!i%G|v~SmCiMNOOdb1^SaD9`Pa|zX+dkP6^fR}Cw%y+^6$<1 z>n!!%cRw^8x7GjGo#P^5|3b3!+ltfI6k1=ucbfRO`~JfXOT>YJ00sZfm|N6!$?~jV QNe78|y85}Sb4q9e0LMg&z5oCK literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanox/test_sign_attestation/high_watermark.png b/test/python/snapshots/nanox/test_sign_attestation/high_watermark.png new file mode 100644 index 0000000000000000000000000000000000000000..b12898fa2467bf50d31cecdfe217fcd3ac404ac3 GIT binary patch literal 416 zcmV;R0bl-!P)741i&JraQ_0m*if~gHy_ofZRmr{NGc{2*hwxodW;>0H%92*F28HIVU2S-%@}~=qwsp2 z!RQpxtwrVG--gtrddXYvF--3y%Z0dr87lx8?Qg;*%#8v7u!wulfIFmK>zY3&R*@DEc;OCdW5JEglf*RU;#An+5(`+ce z_;#QI`M%yBC>%@-VHmwD@_i>5K9~0lh8=r0;jgCA{N(+B7XI178#7L3brB>*fD~hy zto_%QUMQ53gk5&t2P}991-?_qtzmKXWGr6@Oxb#yVS(di1pEWz*%g2<95W}zuYvgU*JZY1Dj{oH8P7V|Aowu_BM5TIvE=?D~Ta7t|p|2wcy@$cQn^o`|r^p zd)O7=g9w*x?`Am6h1p@iG4$dxTPGL<27>9e@GnO%?!v1#6yc#;xdfS(ZZ^)PNfTfQ z5^}EgmHm+W=0JEJ*o8!8kYvrlQG9xl8p@oDho`jgu`BF_)sVRgE-rk;U(ZODsxZ5jQ8>-7S=z!P57*L;>c9Klj}T% zi3uRT4y(!+zvvda@Km?UI?DU+aHlf!%Cs0VzYV=jNZB0Gcdw!dbK9$U%Z07~Q@;(p z=mVR-mrez|^ZJNk?!&AsX)|RzCMB>#J6jfm6|j7e0#(E4mp-|8bYmY%s*HyGz3&a_tk zVP)OGo1bRj{c3gxYsG@{V>iSepDK#pAC;|{`ZYvjemeVyS)pvF`=4%;SRB@@-1K{D zitL6>)4#Y(Dm}0w-*lq=hvh=z52TdD7QBCX_Dt?^R(1x459<~@XZ-%nk0VU`afH$j z3BA?xzHems-W~Z*Zu!i%G|v~SmCiMNOOdb1^SaD9`Pa|zX+dkP6^fR}Cw%y+^6$<1 z>n!!%cRw^8x7GjGo#P^5|3b3!+ltfI6k1=ucbfRO`~JfXOT>YJ00sZfm|N6!$?~jV QNe78|y85}Sb4q9e0LMg&z5oCK literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanox/test_sign_attestation_dal/high_watermark.png b/test/python/snapshots/nanox/test_sign_attestation_dal/high_watermark.png new file mode 100644 index 0000000000000000000000000000000000000000..b12898fa2467bf50d31cecdfe217fcd3ac404ac3 GIT binary patch literal 416 zcmV;R0bl-!P)741i&JraQ_0m*if~gHy_ofZRmr{NGc{2*hwxodW;>0H%92*F28HIVU2S-%@}~=qwsp2 z!RQpxtwrVG--gtrddXYvF--3y%Z0dr87lx8?Qg;*%#8v7u!wulfIFmK>zY3&R*@DEc;OCdW5JEglf*RU;#An+5(`+ce z_;#QI`M%yBC>%@-VHmwD@_i>5K9~0lh8=r0;jgCA{N(+B7XI178#7L3brB>*fD~hy zto_%QUMQ53gk5&t2P}991-?_qtzmKXWGr6@Oxb#yVS(di1pEWz*%g2<95W}zuYvgU*JZY1Dj{oH8P7V|Aowu_BM5TIvE=?D~Ta7t|p|2wcy@$cQn^o`|r^p zd)O7=g9w*x?`Am6h1p@iG4$dxTPGL<27>9e@GnO%?!v1#6yc#;xdfS(ZZ^)PNfTfQ z5^}EgmHm+W=0JEJ*o8!8kYvrlQG9xl8p@oDho`jgu`BF_)sVRgE-rk;U(ZODsxZ5jQ8>-7S=z!P57*L;>c9Klj}T% zi3uRT4y(!+zvvda@Km?UI?DU+aHlf!%Cs0VzYV=jNZB0Gcdw!dbK9$U%Z07~Q@;(p z=mVR-mrez|^ZJNk?!&AsX)|RzCMB>#J6jfm6|j7e0#(E4mp-|8bYmY%s*HyGz3&a_tk zVP)OGo1bRj{c3gxYsG@{V>iSepDK#pAC;|{`ZYvjemeVyS)pvF`=4%;SRB@@-1K{D zitL6>)4#Y(Dm}0w-*lq=hvh=z52TdD7QBCX_Dt?^R(1x459<~@XZ-%nk0VU`afH$j z3BA?xzHems-W~Z*Zu!i%G|v~SmCiMNOOdb1^SaD9`Pa|zX+dkP6^fR}Cw%y+^6$<1 z>n!!%cRw^8x7GjGo#P^5|3b3!+ltfI6k1=ucbfRO`~JfXOT>YJ00sZfm|N6!$?~jV QNe78|y85}Sb4q9e0LMg&z5oCK literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanox/test_sign_block/high_watermark.png b/test/python/snapshots/nanox/test_sign_block/high_watermark.png new file mode 100644 index 0000000000000000000000000000000000000000..b12898fa2467bf50d31cecdfe217fcd3ac404ac3 GIT binary patch literal 416 zcmV;R0bl-!P)741i&JraQ_0m*if~gHy_ofZRmr{NGc{2*hwxodW;>0H%92*F28HIVU2S-%@}~=qwsp2 z!RQpxtwrVG--gtrddXYvF--3y%Z0dr87lx8?Qg;*%#8v7u!wulfIFmK>zY3&R*@DEc;OCdW5JEglf*RU;#An+5(`+ce z_;#QI`M%yBC>%@-VHmwD@_i>5K9~0lh8=r0;jgCA{N(+B7XI178#7L3brB>*fD~hy zto_%QUMQ53gk5&t2P}991-?_qtzmKXWGr6@Oxb#yVS(di1pEWz*%g2<95W}zuYvgU*JZY1Dj{oH8P7V|Aowu_BM5TIvE=?D~Ta7t|p|2wcy@$cQn^o`|r^p zd)O7=g9w*x?`Am6h1p@iG4$dxTPGL<27>9e@GnO%?!v1#6yc#;xdfS(ZZ^)PNfTfQ z5^}EgmHm+W=0JEJ*o8!8kYvrlQG9xl8p@oDho`jgu`BF_)sVRgE-rk;U(ZODsxZ5jQ8>-7S=z!P57*L;>c9Klj}T% zi3uRT4y(!+zvvda@Km?UI?DU+aHlf!%Cs0VzYV=jNZB0Gcdw!dbK9$U%Z07~Q@;(p z=mVR-mrez|^ZJNk?!&AsX)|RzCMB>#J6jfm6|j7e0#(E4mp-|8bYmY%s*HyGz3&a_tk zVP)OGo1bRj{c3gxYsG@{V>iSepDK#pAC;|{`ZYvjemeVyS)pvF`=4%;SRB@@-1K{D zitL6>)4#Y(Dm}0w-*lq=hvh=z52TdD7QBCX_Dt?^R(1x459<~@XZ-%nk0VU`afH$j z3BA?xzHems-W~Z*Zu!i%G|v~SmCiMNOOdb1^SaD9`Pa|zX+dkP6^fR}Cw%y+^6$<1 z>n!!%cRw^8x7GjGo#P^5|3b3!+ltfI6k1=ucbfRO`~JfXOT>YJ00sZfm|N6!$?~jV QNe78|y85}Sb4q9e0LMg&z5oCK literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanox/test_sign_preattestation/high_watermark.png b/test/python/snapshots/nanox/test_sign_preattestation/high_watermark.png new file mode 100644 index 0000000000000000000000000000000000000000..b12898fa2467bf50d31cecdfe217fcd3ac404ac3 GIT binary patch literal 416 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 literal 0 HcmV?d00001 diff --git a/test/python/snapshots/stax/test_deauthorize/app_context.png b/test/python/snapshots/stax/test_deauthorize/app_context.png new file mode 100644 index 0000000000000000000000000000000000000000..aa2dec0d86eaf64e54c68344a015a5f68386ad3c GIT binary patch literal 12005 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 N#L(<=<=@Wt{sZ`7yd3}l literal 0 HcmV?d00001 diff --git a/test/python/snapshots/stax/test_reset_app_context/app_context.png b/test/python/snapshots/stax/test_reset_app_context/app_context.png new file mode 100644 index 0000000000000000000000000000000000000000..c7e6da3b6de60b11e39b75a51fec57b575b8eca8 GIT binary patch literal 11800 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 literal 0 HcmV?d00001 diff --git a/test/python/snapshots/stax/test_setup_app_context/app_context.png b/test/python/snapshots/stax/test_setup_app_context/app_context.png new file mode 100644 index 0000000000000000000000000000000000000000..876686f3731fc65551cad20703f457af443c7678 GIT binary patch literal 15578 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 literal 0 HcmV?d00001 diff --git a/test/python/snapshots/stax/test_sign_attestation/app_context.png b/test/python/snapshots/stax/test_sign_attestation/app_context.png new file mode 100644 index 0000000000000000000000000000000000000000..0e29f84cc1f4eeacb606b32fbfb0ce755654803c GIT binary patch literal 14449 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 literal 0 HcmV?d00001 diff --git a/test/python/snapshots/stax/test_sign_attestation_dal/app_context.png b/test/python/snapshots/stax/test_sign_attestation_dal/app_context.png new file mode 100644 index 0000000000000000000000000000000000000000..0e29f84cc1f4eeacb606b32fbfb0ce755654803c GIT binary patch literal 14449 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 literal 0 HcmV?d00001 diff --git a/test/python/snapshots/stax/test_sign_block/app_context.png b/test/python/snapshots/stax/test_sign_block/app_context.png new file mode 100644 index 0000000000000000000000000000000000000000..0e29f84cc1f4eeacb606b32fbfb0ce755654803c GIT binary patch literal 14449 zcmd73c{r5)|2}M~wAk()1iL&o$>`S&`tVvPUB7}^x#uz&jV=EyB zV;#mAlw=t*Qziyu_+541-`{gQ$MHPhe}2d3`#kf{9L6>8>v~`FTF%#bp4YS6w~Y7> ziy!9T;NXK^yJE({!TFqngX_&fF5nX#lNJ;Qhn5!fioxB`*Hkj8sr=?dBV~mVdbC4O zWgjo+Vz92y5f9G-$!9AhV|Io=sKao&#Y;Cgf5KYhT*p7Qc? zg@lkSE|+aOdH<$Pe5do=OK93nn>1(!EE|@s+RbQDNVuAhrn8(yH*RLbh+(ao-Jkp; zz*0SDIA&HO^!C0!Ip8ZY%bc|z(QmRlS9{VxFiFc+0%9t(ZX(w6)2#yf-u>v;^QWL+ zS#72criOgRA1$#CRkUaf30?1>CRdZewUb9@HJB$0Ty$#9*;%zkE)w-U{Tj~TYRk{e zGO0ZF=H}}Wjq9=_XUQ6!-z^0|Zj>He?XSr8y?Jx<448KHHTHdG2}(nwo|mKC8aU+g8QxCHx@T6g zSFp3rK0+?vp$cS)ahe>w_DhVpF2B9AD50&j)Mhx{+SjQ;GuR798kK|xzSXGq?r%D= z!;Tr>Hbfw?hMo}25=$>;{pz13K;aj!n!a4zS`Q0OJ!Px$-l2+hKsQ^$M>DqQaQb4C zZYM$TSEOT#8>Vt1uzc`9=F|DjfTq`YHw=Gps{`yS7*7rbw&H8p%>e6?TzQEf$8H&I z?8~(8$1Qw~%ff2WQXh{&7~qfz`Iz5V(3N+KE_E(dz41PrRF3 zr>h#X9`$}*@98y>1DK5&o)(x!?kDNZ~+<}sf%vRc!!L}y9446l$emK*FU!AuVPTo}-mQRl+TdFxe*$K05idzy0*Yh8f8^=aAH4=CTR%H#hG!SL}Ypj&e-o4X<98{6{&96*rg%d_8VY`p7;&hx z8gaGXLa?va+afyWJny5qu-4;-FJRWDLYfvun!i5H^}DX$$CCTJ7e02*<&S%g9~(6g z{ERg;mE@0qcD4ROe4}Y=m@JnUZPi(EpawfihwFwT9#HS*RmYeM8T!O&Cgo%tgbM0r z*I%GM?L)4qAM0uRI(U0`Nz88;WP)5Q9reJH#a-Z7d%=C|tjqeJDvLq5=JI!;kjhi9 zb;IH9h}`&b&jzA59Ge$;%J`11wU>>Ui??!=Pn>n8hORFhOLncZK9}Wd*m)v=sNdMO zp12zABRHA;-eWvEP&8XD#l=<>T3Itmq``GDq9kf&$Dhmfc7nE+C>(C;N>I-lQE%u; zB@NS9yURgSY~|i3S}6Za(LYtkF~!v$)R!7* zALP=#|HW56MfY~#+%+bNN(hV~#KmE0DM5ZG+G%TG`~m9;t%|9TraJa~b=>UiEMrHob_bYYdS$kfN_jG-i zn?i>4a|bx4jnW1GKkRY9Rmt;Mn424#wqS)gt}IQ2o6cTDd3+-)mdFaUN3J?y2 zOHwru+-IQj6;n0g<#JQ9r)S>3g2)wG2<1YRmk+qgs(u3kbzt*zt@rN?OOq2*tp*~U zA?=0anDN>=Z zO4(6`tGL5 zEi#ByMSV&B4SIosx6O&v9ugJa>fmz?8qPSE4IBrwVM-!L|Bzg#IFfd>k71`LVQ4D2 zZzKoBw|g_K2!zv0IR#|6u2iZ=j)nOtS;P3Tw8{xo#EV}Qz0ik*@A40~M9)`y^HH=7 z1m8m!Ek=vHrjyj)t0(-;O#G@9^}+fENAv|(C-zS}TgE(cvB};Bh!c;TjI)3WK(yu?UeE8un1?z z%{=_#>`x%;>i9ZUplMnuk+T0Ds3UIRFR@D8`=OEt5N14+S&>q%#*0jWEm6)sq5`E(Vlt-1E8T zA>15kI|AU~D8@X8-emNh{`$?*okiuq!~!4^VAigVFMiarVH|CrKF0*>1z$}1>BU*MgBSBub;(Q?dpQUwJ%*-_o!yfZ z6aL24>cg9lh;hr1xAq#eC)V&DLlN^PU>L8_Bf{UrgEGt0!rg>i0r z%L;fM{EeFWCY3@2m+9>?tC!9-c;v;}C630f2>)m}EvBV2EE+T@z~y*rfN$qM*i*>R zE`>V+4fV8|2WnMKG|pI@BcilvqI%VE&{W92%Cg+D<3esYAC4Irt}M>s=u6W8aa8|j zrmg>f0uIvS1wk2;uc)`ViwcB0kb}CSVN+IqYt>IFK!7rhGDKvP=Z(dh~Aows-b%MP$eh3^nIDC-9E>k zIE(I!36c>uG|gOa+^)M~ovD`prS5lU9u@w3M4Hap9aRj}$@8|cKbM81<<^2w<(}+H zfUkdeRxJ(MRYc`<5`T9vggq_XZH{bZMj>eqxe5B*Sa#}9frxo zbmQ+XZ&x*eTUc9M?CHLe`fr~#q*BVur@S@w_4QEz6t@AY{6YXRY~_t(CX7V2*ag}r z`UG_Yn~5uqnDA@}IO3SO@HKzREqq423#jsjwb9pR5d*%My2O)|=sM!03IGcF27Q3h z`*@;^#F3@7W<3xqk=;|XpG0juu8=$M{ec!(6;+_%`NBC#5f^|ZYr51&>zPHXcV96b z3*)+Vv~KOJHalBsW97Og@R{%F~Ep@ zej={ygX-u|h?TT4hV|BM^$jL;B1;`D~U$4qX z$!uZc(J_mv4HjFPmE>ifBnK^8TXVlrhZ?-6B*KkbCah}a8dI9C*~SFKl6E9)tc9MO zZ2^E`LeSkC;#1;7WP>`B(0iea%RvbRpHBz-yq(s@deDwL=&VXBgWAY)G3J@Yq?gr? zPHws+mLS}TmQs8m3H1Slp3dQEW@NUlb>_%Dw6RlX4N=22(Ptj0xd>I`JJ$A^^f(@i zi7=XHO0NP!;w4(?e2UA~`=DFU#sda(aapLXf<=TqnbC2wN^Dtbp8@*BPrLN$;G%G! z?HJ=rtTOrTh>4uX7}9_bkA_6tWzEMv5aNM1_EuYd(cwRs05>a(htW5S6$@YwMJVEgk{<}nhQM&-38CTWaT)hre6` z_$R{coD$l_GZGO4=ZeNX7x=r5(u_|Ri8k=B{za7L4cSFwz7nbM+yU1nyXJP)hRR=x z*AMRGPw;xVFC3RmC{RcM;{&4$as!VK_*-=^bJv}9_x!(p>01fz?d?UUHxfYv6v^zEsT`H0A&dF*o`Mkz8F)VoRbF!7wcFFiwNHZ zROubi!AD@cS03>XVOGgW2^klUYt+5jjLJQ+2u-V>d2*WfGOK{aT=KO2uw#1`9eXqf zg%dqyIJ_RV;1C%a^Lrc~UM~HzO)nhkayYGaU2HcB6Zhr7%t{BcltgFVneE2y*m85z z%YF=z#UIx6|6M&K7khqzKI<&o^f2|pc=ZABz>L<-U0w3P1ZVKU3Pg>`13?499rg>c zj-Jheo`|xOowNlxa#VXXj#?B$EQr%kb{0Kqc2UIh|By?K5JKz&r3OXTWT7{ zcB5*mBR9v={FDGRYU%V6KpUmM|Efg`bGVgL5+FM?)oEM@!qwhH2GLn<;De1D)~r{` zS&N8}{ArE*KNAa{*NVAB%nEc?TYN;SS*=ZP#dzT>QAm%l&r^*83JC@8*1tG;e7O=MTm9f3B9ca@&#f)s?rgmft8P*WJlT?9r_jw}N zr!NMZiHK;}8-FTbCcI`fuRr)nZ@iDu@@3X5>CmIOVR~BU8%l54#&Qwu5>VL*)Cs$6 zh{=aq6C2-V?4~`Q^H=0vKohTWtSzr~0n)5@@I;*R#6I@9tQ&Q5=s=3%1JO8p0p|>p ztv2Z%f61N@+-P$rubn0QI%{*XowBt;=<3-}i+T$-8XXdXZ z$qzIyfNo~C$U&z?aJ4U&6ARv<-^nB@w->;yub(n}boINUv|pr@51KcVtP9{z&juYy zezb6Yfx@>7TTMp&*FO}AnkgwJ-1`lo8;RaFi()-Bwn+d|zK*p5<={({5(<9L(=-Ao z?mf1$WYlhD^f!j>s|^atsN_BiJxW9%l~xL|g!ib(=l)(+YpC^KsnwB}lE4DQmZG?I z77IH|Hzo<(qEOak33lCt32aon&j2yfYwjx!Y>Rpf=cjqcPwa0#J}_8Rx;t(HXS1W| zZJ}7Q4UTZfDZGAcCh}enrOcVn+Va?VwM~dHf)Waz64?uV6FgomMQ+%&N|FZ%gta@w zW)6%mJVy@t4YAa|NANIl0)9j=p1R^ii*CripikSi)XWIKLX=LnF}6x+C7ifX;y2hB zjL8goAnWw`E3Pyw!20w9W>Y*r`g_e!mY*YE;?p?sZ!%XL#kJOhi4=q5hBha{RNK> z##op*0azPzq?geG44Tt>-^hf*YjFM$q7Rt393JIk0};2X6={wEQh_cdKX4B$WQ8V< z?RW&2Ry802a6-ef*lock={l>IW6X2kptP57=|6}UTN_Wkr5z!^n*G-M4pD*4V`H-T z5*1t<4@b+OA`cg?J0p-;a?gU)Ly_|Ov5hihaF^?D-r)>kH+d|}5N2Iz0gyLE**;0o z(I6~&igr~g#bxQgMOOjooY#U@6C z{4B;@9Fz<;mKD2D&1>v0S?ZAkBLYK@`U{5^o7sd(U(862aNOJ1p8d6;-vgLup7;P- z_FGv^D*XLpXNA@?0a2PME(i`ZBz?*E$rs&zA*rcD@k{zc$c?4S;E)EBh2%)90C14; zv}4!1;F8HaJp04Tk3s7<8+OGf+;{ab@aa$dPGp!S&V9&X89!j_jqEogp9Na~|8{SV4T0CVR?yq?MmU zJOIOdF^tH)w{^ERLONU%Ch1HyxxPr#s3;)6^6#;l?;f^^c2ds51vE`l;oYwk5@@^I z?46y-_D&V=#?()6Y(wmw^76E1+cdd`;`g|eM8wjauMf1;9la}|4Elwg2U?%QQ~k%szUe?96WJM*Vz&wg-(QgQ^pdM zTIH+zYG397coVGNe>2AvZF?&v{d*#oOaqu>@#o}NTTF7xISKkRPk1H_E&J0(fY$>8 zsS(k`SoW5qmbW+9QObOm8C7euI@b7Q2KKTUff8(;c{xgW_v`S9ZuZ@Q(S-H6nq1=kL+CM~ylHv0x;qUmrf@(cYd(=lDo zcoZN4#l|FKGZ&j|!Mgl6;!g7EAH5$;JgWCC6s$Ma^*}G*5|tsQ@}vCs^iJysYO|@3 zv#8#Ma<5JC(4hFgQY%qW0@TN7vF%?8;J6qDZoOd8o2S3B*C;SLef)@ZZ>t#;`^j@_95$YcZj5Q*w=%xXjv;l4d3ZG05# zi}jq#j`3mZE}x;H{o4D;5n4T2-}eZavT{ z^4NBt7#Fnn5q!qIWt?tvabn$3P004Z=Jm6^nu&4GE2T$=-?%5tTjk_;GLI7d>4T2l zR|Q@#j@E+Gtx|vMP}iz<*2AcKCjg4HmK!`JF&Fmhu{X-n;UpwNewxlSGNSYn75hCW zR(_6j1fW##18?0L;K6U2SqVENo5C8%{ikcb1=>a6QZ&@-fS!wJ|~uYmqwf zd*U^FqMeU7nZQuBa=zO_D8o_ZUPe{r*VD!zd~zZ$p;e{23$As*oQPJG-7nD=Wb!(v zMs+H<1^TgVF7&y^&<>k^Juuv1Q#n{E+}D3@^Zg?HmEtt{kbJEbC@Lz-6YJ%(Q}_yB zIqo*?Zw2WbE#}gXc+)f6<7^EFB`u3ajR$we5o|R+KT`LTaKa6Nd;%XNx1Qb|c6M*9 zFHt4*!m0W?kD6`-`rD1{zhj#ZPad}@iDWO!+ya1i+}*(90l1_E`Y}ZJ%jNT{Q;;0) ziku#MO4qZm!}d4W4UgORy7{j2jSfx|>~?@15bB`cm_#O94!Zhez4k%~Ust{U>46g; zH%b~Dcu(aHk#EsjVINg)rhTH`^k_}NG`2KG$z0C1IWirsSj*F#~z2q zczXKKdT$Z*kMGbLW&y63Ajybq4@Mr_PoUHNkc$ob0g}ipJAj))Yc-0Se%Z%lYo%Z_ z3-&&XwRM8Ut?X^MQC{*9zfgvh7=q47Yvbm3hs$o8mFtIMU~IN#6x$P!rM+4|!(XZa zb9h-+eSXE`2|K0Pm9SQab6J1+)vLV#Hluj6{uuu(TZ(Ks+vcUg2CF|Xty&1M&V*6O z>klWKpgDoa@=wVCkg>Z^l z7Hrw~DZz*nqG~(GSMt6!sWs2_&R+6B4nTPSf(PLto$ye^wBkb7t}T4*u(w+jMpRRF z`U$nYv9M_jT{GE&87{2bKXY&AH*Q-4>$)Vh9w`PttNP8#oW*l_L{)D*6fAqwTe`|U z>R4tig}8ssI+K?Ca3NdBJ~iRRO2*irr(fQ!Qsi|Y1t9{fFN|2~j#UeTUmjGaCRDFu zN0;SH3VdfQ+~>SwFk-E7r|Nvz#*NHxzOAVb>PE)G7|U7X)p0M4(ohtswDvt;Ey_&Y zfYc5of15q4o1^Jvb(wa_P1zY`Zc63jo)*b(Q&RkKT{ff{SLfD@d;#D)$$0zJgH<&q z+Y&!b-ObIR@>#6D4!mYQSRu6)z~>YLS^L!M^u3pe9ZsL3O_d1wX@-sD+o{FJO2bSvEcqWIgjNnwPQ zKXMVkNvM?3Vxn34;z^>+!GUMkFv6+2oK(h38eA;;$8Dk=-1a4`$)U;;H4e}k-kN~q z)9TQ^rbz90+6}&;^+UURq*zU^I-y`Q+`dyZ9hNc_dx|2-g zqH7fDrt~$zS+ljEQ)5N@nOWK)>k+s_`xtY|t1LGHPV|WlqCjEF7t>(zg{)evCO#VH zL5;Pam%B3YG`_t2{)y{OQ1_{x4RM#0o_Rn*s`UnFt`B0JZbw=slDJS}lE_6Wlcish z;jc51<8bHgm6PoB;NajBsYcg3(9c`~wot}9(&CbF@Qd|m?XoC~Y|c}7G9qHa6a+PxZ-71>HqON%-d zaxw!#oZWf9m-@O30HLTmEv2OQTbV)?8qo0Xz`&E5GS$HpFFP;=lNPmti!Wo+kSv1p z&(t*SpmDlf=~7s{4#2`MA{r>+$*OI1T*JwukN}xVu?H$Qc$(B-OiwH*g@yIy@?F%{ zv(~2->+30#Nf|&NbfcP2E^f~6G z+%r~LCFN4lBf+@0tb%>k6TxRU$}flbZgfqV_cb~h2=XeL=x=4J@D>{^I;4!gZVGQo z0+m2wi4hc_WvzO9RgrGMbBe!?NcK-}P8^*&{3!h0drReskuMmQdriCrr6InJKH&hU zoof~o#z(&8$mrHkYsF4gN9~2IhEfl=O{vqcw7#-ph9ehlkU;(f&mj2f8aNp|f%+=X zYkKCe-w(((ExOkj%(uN-YzjZ*FJuVN$d=9L!hJP|9-VxC=8IJfOc&?XH2NArfdu9_ zP6=B@#ZT2@7oN>e!aXz+nM2+&A=z@k3CA5hmxrdLcBp&@NuFMsJ~^@(5wmp9r$jU8 zEJARfTJhb>-G@Q8(H@zNnhYDK-dc51lYPv1arPA;QV8oa%?VO@XMY?A+*^oGZ@G=( zg0YJTfF(VCgwcLkY)>y*n*_t|NV7LR8xB93JByhP6BFB9K}d;!FE{k^q%_NX{cR=) zfb?0#Xhi72@48XD;#~{I0zLTq2T(@MA>=b&o~Uuag=G^w;(+?hhvO7>4e}T)`j+zn zaGPL9Rv}GawUG6uyiTCmqgK$geFoJe>U22I0Rurp(>+)>$M<<#E`W52`{Kr|;FeD1 zDdYN2na6hAfI;dPxr^f=YxjKjk7*ZGOVHyUx_;3E}YFS@Js zX&KV?xyNLkHhNvA$|J_sj&2%m;co_DIP(%`wPHxd4mHqWMwyi6e3~5MR~-ULT2r5G z;IZ=h0LG_>0AgC(r&39u zxm6leS=GqX!$V=;ZcqW!SJ@N3*8m~Rt$)<;1yImicN-2{QtdBPHy?IN`We~Ybi1K% ziVXA1gEC?pFQXU9Qx)FYEY|L}$f7Uwp=xWZ01A~Wix0fu|52sIp{nt?Yk11EUIoA_ zO35P^$@YK^%C$7a5p%*SKr#%u*ybfL2pG%Sq5!Rv$5U`0P2Jv2czO^x-onfEfWd8B z!H_cLti-b>R5Cj%f3Yc7&0i9y?i)#9v=ET*v5Dtf`_e8gL%~##Ls&cN1>TY~Jvd>=_8I1;ket z*%PXM-#;$v6Zt*-2|$Uqdpyk1K9CtcwA}`fObqZWor&&AlHf!xo`MGG<&$?=SfeKp zH6Lo{xzADUA$ygPE~0Vp)3if?3<}Jt)7x**Zvb)yw{VZ~cR~TM%hOLFuL>3V7&~FD z%}3lzEA~4I8A8)0ub|NBz&C(9P#{P#sG8kNw^oe0~ZhkN)u(%H{PG*-=Zp zdqj^p>COjQZV>_Gkv6^R$qm8s@p8|ey2y#ElYh`IH0>Hk(|L@)laf1N2hlX~x~v*z z)6;OYvBZj!5FnA;sG^xe7GCHc`q3q3b=3NA>>QrYnbUQ6*}+A(#S0B6+5+*hK^zzM z8_aDWn$S|qjr46D+x2Su<+b=lgxTz&&LRF|)H5^3IxTWnUwe&1vk|630~F5fcr-8+ zo(mP+w>)-w`T5?E$xj; z2$Y3?yzBqD>vH0#V;W$}8v#roUlt=cC*)!lSW)N{Cy4spT11O+eIcnMpvRVYCT?H= zgqxPipSlT5$v*E1qu(FE7M>>FsRL@Do|@BpZOubySN1zp*t*dlA(_z*b+(OA)2RoX zGPr5RPnu*S2_1d{_5<(P5cYTE;9{WV!jeXCy1$6gH55Vgju0?ThO(dVZE^(if=H`< zwH1VPHB+Zvg*zVW^(n*6wG+8%RZmhJ((?m92#~)ubg)0L7Cucrh)zOYLTdmKV-ZGsH@@zAS%V^8W zNfBG!SKnx{4F)FmCoUov7Z9|;PZoKPP6D>p0WLYH8TQNrGl8>%g&$SwA+&T&#!p1l z;3DH#NKjZ76|U6Y3#8&%Okop_U*|-CHz{Gpb98y0O1u7 zRgU<3mKn+X=*ltcQj$j->9NxllV^4UlHc8`hjjHG@yzGBwrzl0%=LZ=;1+QI`~S$3 zeKVN59blwmlsfZ$?wDtQ!#|47v!a9yr>%uL_O$Zx?JjjDc?_`MoYAy=sg1K}ii0Lc zSn{+SC;{-W0LIXGsV&7+17)0&&0(fgF2opTsjG)#|>bh}m_f#T&0O z!gnK0Fuv!E497U&L&|_D3OEDxPhhw z{^nd%yI*AA&&y>zbMt`5!z6zUHI4?A+4@%sK72*jswhyX1p$-!hL$;pqgP1`V7h)S z9Z{KlXij!Oz54#k%R+`Dbbbz3WK4rYRbs)x&L0ta?N|_S^WZUn)wC9L4XB2m)~0BD&m`*vHj_l)U`mp{6)L3?R3sS zhvqNpQis@+=NRe?s@iDB%9KEy(7JMdo>`@bcr}^Ra zM96f%$b+jf3zcPx3F_-RJq5+DU50C0Z2Gh_5$EV2E=mT<6`5<$-{gHKmr;xV{YI*7 z*RGyv(D~jd_T2&*l1&PGWs8`B=~2Gq#lR*$P8@f#=z5i!UGY3y$VKma^`)6(R)JOl zl;kJb<6*BP8gby(kcAfKBG&ZA0ox>z)Uw|T{Q1}m`_z($0A|Kb_{AbB|Lky7;yk6; z_>y&tHvMpw;+LI?&gp9V@5}36tHBx|;qX`?zmZu!VT!XaudmOR z=e=k#FexIqXk4&poM&^YU;J$KY3i_KEy5w)B82sq+e{s+%%eCG3pOxxO`f4wzKJ`v zeL)}?C8MW-Zp%#Q7thM+P$U1d-uAWGOzRvjT)mIfi08qPmDosgS2mNz1zu$`F~P5d zJ;sX(u`0BSdSB_XDhoThwA%O0wd7p6cex}*%YYW%! zG3(R+EIGEdRchsr%Kj_Jq-*4(&i(Ho3%~jo00%s89<`F*klpx&?~4C7;)_xr7RBwq2sl_NE>WL$ zHv@mF{=3-vvBp1(eeBqNC|zR;EavoY#8x_Fmw8#0GoSr6(YEqm8DW#1rEzGSdhD36 z75U%H@!o$+%Bo!1OrqvT`M*iLUx^{C0SXqTKRbh2A^elr8p#Gf3r@c+h`cw_Q04w_ za%Nk6&*&7tyLwF7igo7S1G_w6Nn3z2QnjOpz1)wc&vot3rT$kPF>DQ+duQKb&3@S$ zMa2jHv&@Vr#ZPou4-@&--YeSo-;yzNeF>HOxDsR8KI`z%TG&O;wf2&$S<=?4&cg^d zr|doUU*R__rxM#SxamH|xj>+TDB-dFZjcu3>Q73RJrNd>qpxwA4cf}A-)~K4Ss<<( zH(NcwH?Cma6&J1QK~qeslk0Yp=6>-{W<=27#iL?U&WWV=?fYeR=pR*m&OmBRpH) ro@8k4#JTA@J$m9l`D8-(9=BRDtjmNm!4r6tkOOLX>q_M%r$_$_Mu}Uo literal 0 HcmV?d00001 diff --git a/test/python/snapshots/stax/test_sign_preattestation/app_context.png b/test/python/snapshots/stax/test_sign_preattestation/app_context.png new file mode 100644 index 0000000000000000000000000000000000000000..0e29f84cc1f4eeacb606b32fbfb0ce755654803c GIT binary patch literal 14449 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 literal 0 HcmV?d00001 diff --git a/test/python/test_instructions.py b/test/python/test_instructions.py index d07c2ed2..c38f55d3 100644 --- a/test/python/test_instructions.py +++ b/test/python/test_instructions.py @@ -11,6 +11,7 @@ Preattestation, Attestation, AttestationDal, + Fitness, BlockHeader, Block, DEFAULT_CHAIN_ID @@ -18,8 +19,7 @@ from utils.navigator import TezosNavigator, Instructions from common import ( DEFAULT_ACCOUNT, - TESTS_ROOT_DIR, - EMPTY_PATH + TESTS_ROOT_DIR ) @@ -75,24 +75,34 @@ def test_authorize_baking( account.check_public_key(public_key) + tezos_navigator.check_app_context( + account, + chain_id=DEFAULT_CHAIN_ID, + main_hwm=Hwm(0), + test_hwm=Hwm(0), + path=test_name + ) + @pytest.mark.parametrize("account", [DEFAULT_ACCOUNT]) def test_deauthorize( account: Account, client: TezosClient, - tezos_navigator: TezosNavigator) -> None: + tezos_navigator: TezosNavigator, + test_name: Path) -> None: """Test the DEAUTHORIZE instruction.""" tezos_navigator.authorize_baking(account) client.deauthorize() - # get_auth_key_with_curve raise EXC_REFERENCED_DATA_NOT_FOUND - - path = client.get_auth_key() - - assert path == EMPTY_PATH, \ - f"Expected the empty path {EMPTY_PATH} but got {path}" + tezos_navigator.check_app_context( + None, + chain_id=DEFAULT_CHAIN_ID, + main_hwm=Hwm(0), + test_hwm=Hwm(0), + path=test_name + ) @pytest.mark.parametrize("account", [DEFAULT_ACCOUNT]) def test_get_auth_key( @@ -160,35 +170,25 @@ def test_get_public_key_prompt( account.check_public_key(public_key) -def test_reset_app_context( - client: TezosClient, - tezos_navigator: TezosNavigator, - test_name: Path) -> None: +def test_reset_app_context(tezos_navigator: TezosNavigator, test_name: Path) -> None: """Test the RESET instruction.""" reset_level: int = 1 tezos_navigator.reset_app_context(reset_level, path=test_name) - received_main_chain_id, received_main_hwm, received_test_hwm = client.get_all_hwm() - - main_hwm = Hwm(reset_level) - test_hwm = Hwm(reset_level) - - assert received_main_chain_id == DEFAULT_CHAIN_ID, \ - f"Expected main chain id {DEFAULT_CHAIN_ID} but got {received_main_chain_id}" - - assert received_main_hwm == main_hwm, \ - f"Expected main hmw {main_hwm} but got {received_main_hwm}" - - assert received_test_hwm == test_hwm, \ - f"Expected test hmw {test_hwm} but got {received_test_hwm}" + tezos_navigator.check_app_context( + None, + chain_id=DEFAULT_CHAIN_ID, + main_hwm=Hwm(reset_level), + test_hwm=Hwm(reset_level), + path=test_name + ) @pytest.mark.parametrize("account", [DEFAULT_ACCOUNT]) def test_setup_app_context( account: Account, - client: TezosClient, tezos_navigator: TezosNavigator, test_name: Path) -> None: """Test the SETUP instruction.""" @@ -207,16 +207,13 @@ def test_setup_app_context( account.check_public_key(public_key) - received_main_chain_id, received_main_hwm, received_test_hwm = client.get_all_hwm() - - assert received_main_chain_id == main_chain_id, \ - f"Expected main chain id {main_chain_id} but got {received_main_chain_id}" - - assert received_main_hwm == main_hwm, \ - f"Expected main hmw {main_hwm} but got {received_main_hwm}" - - assert received_test_hwm == test_hwm, \ - f"Expected test hmw {test_hwm} but got {received_test_hwm}" + tezos_navigator.check_app_context( + account, + chain_id=main_chain_id, + main_hwm=main_hwm, + test_hwm=test_hwm, + path=test_name + ) @pytest.mark.parametrize("account", [DEFAULT_ACCOUNT]) @@ -279,7 +276,8 @@ def test_sign_preattestation( account: Account, with_hash: bool, client: TezosClient, - tezos_navigator: TezosNavigator) -> None: + tezos_navigator: TezosNavigator, + test_name: Path) -> None: """Test the SIGN(_WITH_HASH) instruction on preattestation.""" main_chain_id = DEFAULT_CHAIN_ID @@ -293,7 +291,10 @@ def test_sign_preattestation( test_hwm ) - preattestation = Preattestation().forge(chain_id=main_chain_id) + preattestation = Preattestation( + op_level=1, + op_round=2 + ).forge(chain_id=main_chain_id) if with_hash: signature = client.sign_message(account, preattestation) @@ -304,6 +305,14 @@ def test_sign_preattestation( f"Expected hash {preattestation.hash.hex()} but got {preattestation_hash.hex()}" account.check_signature(signature, bytes(preattestation)) + tezos_navigator.check_app_context( + account, + chain_id=main_chain_id, + main_hwm=Hwm(1, 2), + test_hwm=Hwm(0, 0), + path=test_name + ) + @pytest.mark.parametrize("account", [DEFAULT_ACCOUNT]) @pytest.mark.parametrize("with_hash", [False, True]) @@ -311,7 +320,8 @@ def test_sign_attestation( account: Account, with_hash: bool, client: TezosClient, - tezos_navigator: TezosNavigator) -> None: + tezos_navigator: TezosNavigator, + test_name: Path) -> None: """Test the SIGN(_WITH_HASH) instruction on attestation.""" main_chain_id = DEFAULT_CHAIN_ID @@ -325,7 +335,10 @@ def test_sign_attestation( test_hwm ) - attestation = Attestation().forge(chain_id=main_chain_id) + attestation = Attestation( + op_level=1, + op_round=2 + ).forge(chain_id=main_chain_id) if with_hash: signature = client.sign_message(account, attestation) @@ -336,6 +349,14 @@ def test_sign_attestation( f"Expected hash {attestation.hash.hex()} but got {attestation_hash.hex()}" account.check_signature(signature, bytes(attestation)) + tezos_navigator.check_app_context( + account, + chain_id=main_chain_id, + main_hwm=Hwm(1, 2), + test_hwm=Hwm(0, 0), + path=test_name + ) + @pytest.mark.parametrize("account", [DEFAULT_ACCOUNT]) @pytest.mark.parametrize("with_hash", [False, True]) @@ -343,7 +364,8 @@ def test_sign_attestation_dal( account: Account, with_hash: bool, client: TezosClient, - tezos_navigator: TezosNavigator) -> None: + tezos_navigator: TezosNavigator, + test_name: Path) -> None: """Test the SIGN(_WITH_HASH) instruction on attestation.""" main_chain_id = DEFAULT_CHAIN_ID @@ -357,7 +379,10 @@ def test_sign_attestation_dal( test_hwm ) - attestation = AttestationDal().forge(chain_id=main_chain_id) + attestation = AttestationDal( + op_level=1, + op_round=2 + ).forge(chain_id=main_chain_id) if with_hash: signature = client.sign_message(account, attestation) @@ -368,7 +393,13 @@ def test_sign_attestation_dal( f"Expected hash {attestation.hash.hex()} but got {attestation_hash.hex()}" account.check_signature(signature, bytes(attestation)) - + tezos_navigator.check_app_context( + account, + chain_id=main_chain_id, + main_hwm=Hwm(1, 2), + test_hwm=Hwm(0, 0), + path=test_name + ) @pytest.mark.parametrize("account", [DEFAULT_ACCOUNT]) @@ -377,7 +408,8 @@ def test_sign_block( account: Account, with_hash: bool, client: TezosClient, - tezos_navigator: TezosNavigator) -> None: + tezos_navigator: TezosNavigator, + test_name: Path) -> None: """Test the SIGN(_WITH_HASH) instruction on block.""" main_chain_id = DEFAULT_CHAIN_ID @@ -391,7 +423,12 @@ def test_sign_block( test_hwm ) - block = Block(header=BlockHeader(level=1)).forge(chain_id=main_chain_id) + block = Block( + header=BlockHeader( + level=1, + fitness=Fitness(current_round=2) + ) + ).forge(chain_id=main_chain_id) if with_hash: signature = client.sign_message(account, block) @@ -402,6 +439,15 @@ def test_sign_block( f"Expected hash {block.hash.hex()} but got {block_hash.hex()}" account.check_signature(signature, bytes(block)) + tezos_navigator.check_app_context( + account, + chain_id=main_chain_id, + main_hwm=Hwm(1, 2), + test_hwm=Hwm(0, 0), + path=test_name + ) + + # Data generated by the old application itself HMAC_TEST_SET = [ (DEFAULT_ACCOUNT, diff --git a/test/python/utils/navigator.py b/test/python/utils/navigator.py index e397891d..bc51ab59 100644 --- a/test/python/utils/navigator.py +++ b/test/python/utils/navigator.py @@ -17,7 +17,7 @@ ) from ragger.navigator import Navigator, NavInsID, NavIns -from common import TESTS_ROOT_DIR +from common import TESTS_ROOT_DIR, EMPTY_PATH from utils.client import TezosClient, Hwm from utils.account import Account @@ -172,6 +172,69 @@ def _assert_screen(self, path: Path) -> None: golden_run=self._golden_run ), f"Screen does not match golden {path}." + def check_app_context(self, + account: Optional[Account], + chain_id: str, + main_hwm: Hwm, + test_hwm: Hwm, + path: Path) -> None: + """Check that the app context.""" + path = Path(path) + + received_chain_id, received_main_hwm, received_test_hwm = self.client.get_all_hwm() + + # get_auth_key_with_curve raise EXC_REFERENCED_DATA_NOT_FOUND + received_path = self.client.get_auth_key() + + assert received_chain_id == chain_id, \ + f"Expected main chain id {chain_id} but got {received_chain_id}" + assert received_main_hwm == main_hwm, \ + f"Expected main hmw {main_hwm} but got {received_main_hwm}" + assert received_test_hwm == test_hwm, \ + f"Expected test hmw {test_hwm} but got {received_test_hwm}" + + if account is None: + # get_auth_key_with_curve raise EXC_REFERENCED_DATA_NOT_FOUND + received_path = self.client.get_auth_key() + assert received_path == EMPTY_PATH, \ + f"Expected the empty path {EMPTY_PATH} but got {received_path}" + else: + received_sig_scheme, received_path = self.client.get_auth_key_with_curve() + assert received_path == account.path, \ + f"Expected path {account.path} but got {received_path}" + assert received_sig_scheme == account.sig_scheme, \ + f"Expected signature scheme {account.sig_scheme.name} "\ + f"but got {received_sig_scheme.name}" + + if self.firmware.is_nano: + self.navigator.navigate( + [NavInsID.RIGHT_CLICK] * 2, + screen_change_before_first_instruction=False + ) + self._assert_screen(path / "chain_id.png") + self.backend.right_click() + self.backend.wait_for_screen_change() + if account is not None and self.firmware.device == "nanos": + self._assert_screen(path / "public_key_hash_1.png") + self.backend.right_click() + self.backend.wait_for_screen_change() + self._assert_screen(path / "public_key_hash_2.png") + else: + self._assert_screen(path / "public_key_hash.png") + self.backend.right_click() + self.backend.wait_for_screen_change() + self._assert_screen(path / "high_watermark.png") + self.navigator.navigate( + [NavInsID.LEFT_CLICK] * 4, + screen_change_before_first_instruction=False + ) + else: + self.home.settings() + self.backend.wait_for_screen_change() + self._assert_screen(path / "app_context.png") + self.settings.multi_page_exit() + self.backend.wait_for_screen_change() + def authorize_baking(self, account: Optional[Account], **kwargs) -> bytes: """Send an authorize baking request and navigate until accept""" if 'instructions' not in kwargs: From 9262156b514069d5a0fd898172bb990d7c73a666 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Palmer?= Date: Wed, 31 Jan 2024 11:34:22 +0100 Subject: [PATCH 7/7] Tests: check that home screen becomes black on sign - on preattestation, attestation, attestation-with-dal and block - currently, it is only effective on nanos --- .../test_sign_attestation/black_screen.png | Bin 0 -> 92 bytes .../test_sign_attestation_dal/black_screen.png | Bin 0 -> 92 bytes .../nanos/test_sign_block/black_screen.png | Bin 0 -> 92 bytes .../test_sign_preattestation/black_screen.png | Bin 0 -> 92 bytes .../test_sign_attestation/black_screen.png | Bin 0 -> 381 bytes .../test_sign_attestation_dal/black_screen.png | Bin 0 -> 381 bytes .../nanosp/test_sign_block/black_screen.png | Bin 0 -> 381 bytes .../test_sign_preattestation/black_screen.png | Bin 0 -> 381 bytes .../test_sign_attestation/black_screen.png | Bin 0 -> 381 bytes .../test_sign_attestation_dal/black_screen.png | Bin 0 -> 381 bytes .../nanox/test_sign_block/black_screen.png | Bin 0 -> 381 bytes .../test_sign_preattestation/black_screen.png | Bin 0 -> 381 bytes .../stax/test_sign_attestation/black_screen.png | Bin 0 -> 11593 bytes .../test_sign_attestation_dal/black_screen.png | Bin 0 -> 11593 bytes .../stax/test_sign_block/black_screen.png | Bin 0 -> 11593 bytes .../test_sign_preattestation/black_screen.png | Bin 0 -> 11593 bytes test/python/test_instructions.py | 8 ++++++++ test/python/utils/navigator.py | 14 +++++++------- 18 files changed, 15 insertions(+), 7 deletions(-) create mode 100644 test/python/snapshots/nanos/test_sign_attestation/black_screen.png create mode 100644 test/python/snapshots/nanos/test_sign_attestation_dal/black_screen.png create mode 100644 test/python/snapshots/nanos/test_sign_block/black_screen.png create mode 100644 test/python/snapshots/nanos/test_sign_preattestation/black_screen.png create mode 100644 test/python/snapshots/nanosp/test_sign_attestation/black_screen.png create mode 100644 test/python/snapshots/nanosp/test_sign_attestation_dal/black_screen.png create mode 100644 test/python/snapshots/nanosp/test_sign_block/black_screen.png create mode 100644 test/python/snapshots/nanosp/test_sign_preattestation/black_screen.png create mode 100644 test/python/snapshots/nanox/test_sign_attestation/black_screen.png create mode 100644 test/python/snapshots/nanox/test_sign_attestation_dal/black_screen.png create mode 100644 test/python/snapshots/nanox/test_sign_block/black_screen.png create mode 100644 test/python/snapshots/nanox/test_sign_preattestation/black_screen.png create mode 100644 test/python/snapshots/stax/test_sign_attestation/black_screen.png create mode 100644 test/python/snapshots/stax/test_sign_attestation_dal/black_screen.png create mode 100644 test/python/snapshots/stax/test_sign_block/black_screen.png create mode 100644 test/python/snapshots/stax/test_sign_preattestation/black_screen.png diff --git a/test/python/snapshots/nanos/test_sign_attestation/black_screen.png b/test/python/snapshots/nanos/test_sign_attestation/black_screen.png new file mode 100644 index 0000000000000000000000000000000000000000..3403719415c4c318537f631139477cdf2aa0d24a GIT binary patch literal 92 zcmeAS@N?(olHy`uVBq!ia0vp^4M42G!2~2j9iA5fDP>O=$B>FSZx1r^0(plPeD}}g fGhYB?!azegvw;EwO=$B>FSZx1r^0(plPeD}}g fGhYB?!azegvw;EwO=$B>FSZx1r^0(plPeD}}g fGhYB?!azegvw;EwO=$B>FSZx1r^0(plPeD}}g fGhYB?!azegvw;EwU4`s1;0 z?{f>9Zfbf|_00eLCwPudd#p2Mzfg8-=Z~Y&(Z3(6-dSPln_e}2 z&8bJe=5=w3_V0Wxpw!uqXV@ zTyg#0l&4R7|Ayyoo}1J3WZRs6lez;p_x-s3`O4ERHjEo5Zk@S4@1z`Oka)v{pj(C~ z>TB;CrkB0D2@>;k^>bP0l+XkKqsFS~ literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanosp/test_sign_attestation_dal/black_screen.png b/test/python/snapshots/nanosp/test_sign_attestation_dal/black_screen.png new file mode 100644 index 0000000000000000000000000000000000000000..657887225857cf48be8a8daed2cb3e89d4b29ece GIT binary patch literal 381 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|@9dba4!+nDh2#G~Xcw0f)e( zJDk7cg{nU`wU4`s1;0 z?{f>9Zfbf|_00eLCwPudd#p2Mzfg8-=Z~Y&(Z3(6-dSPln_e}2 z&8bJe=5=w3_V0Wxpw!uqXV@ zTyg#0l&4R7|Ayyoo}1J3WZRs6lez;p_x-s3`O4ERHjEo5Zk@S4@1z`Oka)v{pj(C~ z>TB;CrkB0D2@>;k^>bP0l+XkKqsFS~ literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanosp/test_sign_block/black_screen.png b/test/python/snapshots/nanosp/test_sign_block/black_screen.png new file mode 100644 index 0000000000000000000000000000000000000000..657887225857cf48be8a8daed2cb3e89d4b29ece GIT binary patch literal 381 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|@9dba4!+nDh2#G~Xcw0f)e( zJDk7cg{nU`wU4`s1;0 z?{f>9Zfbf|_00eLCwPudd#p2Mzfg8-=Z~Y&(Z3(6-dSPln_e}2 z&8bJe=5=w3_V0Wxpw!uqXV@ zTyg#0l&4R7|Ayyoo}1J3WZRs6lez;p_x-s3`O4ERHjEo5Zk@S4@1z`Oka)v{pj(C~ z>TB;CrkB0D2@>;k^>bP0l+XkKqsFS~ literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanosp/test_sign_preattestation/black_screen.png b/test/python/snapshots/nanosp/test_sign_preattestation/black_screen.png new file mode 100644 index 0000000000000000000000000000000000000000..657887225857cf48be8a8daed2cb3e89d4b29ece GIT binary patch literal 381 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|@9dba4!+nDh2#G~Xcw0f)e( zJDk7cg{nU`wU4`s1;0 z?{f>9Zfbf|_00eLCwPudd#p2Mzfg8-=Z~Y&(Z3(6-dSPln_e}2 z&8bJe=5=w3_V0Wxpw!uqXV@ zTyg#0l&4R7|Ayyoo}1J3WZRs6lez;p_x-s3`O4ERHjEo5Zk@S4@1z`Oka)v{pj(C~ z>TB;CrkB0D2@>;k^>bP0l+XkKqsFS~ literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanox/test_sign_attestation/black_screen.png b/test/python/snapshots/nanox/test_sign_attestation/black_screen.png new file mode 100644 index 0000000000000000000000000000000000000000..657887225857cf48be8a8daed2cb3e89d4b29ece GIT binary patch literal 381 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|@9dba4!+nDh2#G~Xcw0f)e( zJDk7cg{nU`wU4`s1;0 z?{f>9Zfbf|_00eLCwPudd#p2Mzfg8-=Z~Y&(Z3(6-dSPln_e}2 z&8bJe=5=w3_V0Wxpw!uqXV@ zTyg#0l&4R7|Ayyoo}1J3WZRs6lez;p_x-s3`O4ERHjEo5Zk@S4@1z`Oka)v{pj(C~ z>TB;CrkB0D2@>;k^>bP0l+XkKqsFS~ literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanox/test_sign_attestation_dal/black_screen.png b/test/python/snapshots/nanox/test_sign_attestation_dal/black_screen.png new file mode 100644 index 0000000000000000000000000000000000000000..657887225857cf48be8a8daed2cb3e89d4b29ece GIT binary patch literal 381 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|@9dba4!+nDh2#G~Xcw0f)e( zJDk7cg{nU`wU4`s1;0 z?{f>9Zfbf|_00eLCwPudd#p2Mzfg8-=Z~Y&(Z3(6-dSPln_e}2 z&8bJe=5=w3_V0Wxpw!uqXV@ zTyg#0l&4R7|Ayyoo}1J3WZRs6lez;p_x-s3`O4ERHjEo5Zk@S4@1z`Oka)v{pj(C~ z>TB;CrkB0D2@>;k^>bP0l+XkKqsFS~ literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanox/test_sign_block/black_screen.png b/test/python/snapshots/nanox/test_sign_block/black_screen.png new file mode 100644 index 0000000000000000000000000000000000000000..657887225857cf48be8a8daed2cb3e89d4b29ece GIT binary patch literal 381 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|@9dba4!+nDh2#G~Xcw0f)e( zJDk7cg{nU`wU4`s1;0 z?{f>9Zfbf|_00eLCwPudd#p2Mzfg8-=Z~Y&(Z3(6-dSPln_e}2 z&8bJe=5=w3_V0Wxpw!uqXV@ zTyg#0l&4R7|Ayyoo}1J3WZRs6lez;p_x-s3`O4ERHjEo5Zk@S4@1z`Oka)v{pj(C~ z>TB;CrkB0D2@>;k^>bP0l+XkKqsFS~ literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanox/test_sign_preattestation/black_screen.png b/test/python/snapshots/nanox/test_sign_preattestation/black_screen.png new file mode 100644 index 0000000000000000000000000000000000000000..657887225857cf48be8a8daed2cb3e89d4b29ece GIT binary patch literal 381 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|@9dba4!+nDh2#G~Xcw0f)e( zJDk7cg{nU`wU4`s1;0 z?{f>9Zfbf|_00eLCwPudd#p2Mzfg8-=Z~Y&(Z3(6-dSPln_e}2 z&8bJe=5=w3_V0Wxpw!uqXV@ zTyg#0l&4R7|Ayyoo}1J3WZRs6lez;p_x-s3`O4ERHjEo5Zk@S4@1z`Oka)v{pj(C~ z>TB;CrkB0D2@>;k^>bP0l+XkKqsFS~ literal 0 HcmV?d00001 diff --git a/test/python/snapshots/stax/test_sign_attestation/black_screen.png b/test/python/snapshots/stax/test_sign_attestation/black_screen.png new file mode 100644 index 0000000000000000000000000000000000000000..4da782e998ebdf243fb842c4d5362545c9f96b4b GIT binary patch literal 11593 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 PGZ-71Uv0eNareIgWdh&< literal 0 HcmV?d00001 diff --git a/test/python/snapshots/stax/test_sign_attestation_dal/black_screen.png b/test/python/snapshots/stax/test_sign_attestation_dal/black_screen.png new file mode 100644 index 0000000000000000000000000000000000000000..4da782e998ebdf243fb842c4d5362545c9f96b4b GIT binary patch literal 11593 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 PGZ-71Uv0eNareIgWdh&< literal 0 HcmV?d00001 diff --git a/test/python/snapshots/stax/test_sign_block/black_screen.png b/test/python/snapshots/stax/test_sign_block/black_screen.png new file mode 100644 index 0000000000000000000000000000000000000000..4da782e998ebdf243fb842c4d5362545c9f96b4b GIT binary patch literal 11593 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 PGZ-71Uv0eNareIgWdh&< literal 0 HcmV?d00001 diff --git a/test/python/snapshots/stax/test_sign_preattestation/black_screen.png b/test/python/snapshots/stax/test_sign_preattestation/black_screen.png new file mode 100644 index 0000000000000000000000000000000000000000..4da782e998ebdf243fb842c4d5362545c9f96b4b GIT binary patch literal 11593 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 PGZ-71Uv0eNareIgWdh&< literal 0 HcmV?d00001 diff --git a/test/python/test_instructions.py b/test/python/test_instructions.py index c38f55d3..a039f7f4 100644 --- a/test/python/test_instructions.py +++ b/test/python/test_instructions.py @@ -305,6 +305,8 @@ def test_sign_preattestation( f"Expected hash {preattestation.hash.hex()} but got {preattestation_hash.hex()}" account.check_signature(signature, bytes(preattestation)) + tezos_navigator.assert_screen(Path(test_name) / "black_screen.png") + tezos_navigator.check_app_context( account, chain_id=main_chain_id, @@ -349,6 +351,8 @@ def test_sign_attestation( f"Expected hash {attestation.hash.hex()} but got {attestation_hash.hex()}" account.check_signature(signature, bytes(attestation)) + tezos_navigator.assert_screen(Path(test_name) / "black_screen.png") + tezos_navigator.check_app_context( account, chain_id=main_chain_id, @@ -393,6 +397,8 @@ def test_sign_attestation_dal( f"Expected hash {attestation.hash.hex()} but got {attestation_hash.hex()}" account.check_signature(signature, bytes(attestation)) + tezos_navigator.assert_screen(Path(test_name) / "black_screen.png") + tezos_navigator.check_app_context( account, chain_id=main_chain_id, @@ -439,6 +445,8 @@ def test_sign_block( f"Expected hash {block.hash.hex()} but got {block_hash.hex()}" account.check_signature(signature, bytes(block)) + tezos_navigator.assert_screen(Path(test_name) / "black_screen.png") + tezos_navigator.check_app_context( account, chain_id=main_chain_id, diff --git a/test/python/utils/navigator.py b/test/python/utils/navigator.py index bc51ab59..899bac50 100644 --- a/test/python/utils/navigator.py +++ b/test/python/utils/navigator.py @@ -158,7 +158,7 @@ def _send_and_navigate(self, ) ) - def _assert_screen(self, path: Path) -> None: + def assert_screen(self, path: Path) -> None: golden_path = self._snapshots_dir / path if not golden_path.parent.is_dir() and self._golden_run: golden_path.parent.mkdir(parents=True) @@ -211,19 +211,19 @@ def check_app_context(self, [NavInsID.RIGHT_CLICK] * 2, screen_change_before_first_instruction=False ) - self._assert_screen(path / "chain_id.png") + self.assert_screen(path / "chain_id.png") self.backend.right_click() self.backend.wait_for_screen_change() if account is not None and self.firmware.device == "nanos": - self._assert_screen(path / "public_key_hash_1.png") + self.assert_screen(path / "public_key_hash_1.png") self.backend.right_click() self.backend.wait_for_screen_change() - self._assert_screen(path / "public_key_hash_2.png") + self.assert_screen(path / "public_key_hash_2.png") else: - self._assert_screen(path / "public_key_hash.png") + self.assert_screen(path / "public_key_hash.png") self.backend.right_click() self.backend.wait_for_screen_change() - self._assert_screen(path / "high_watermark.png") + self.assert_screen(path / "high_watermark.png") self.navigator.navigate( [NavInsID.LEFT_CLICK] * 4, screen_change_before_first_instruction=False @@ -231,7 +231,7 @@ def check_app_context(self, else: self.home.settings() self.backend.wait_for_screen_change() - self._assert_screen(path / "app_context.png") + self.assert_screen(path / "app_context.png") self.settings.multi_page_exit() self.backend.wait_for_screen_change()