diff --git a/.github/workflows/python_client_checks.yml b/.github/workflows/python_client_checks.yml deleted file mode 100644 index 48e87ff6..00000000 --- a/.github/workflows/python_client_checks.yml +++ /dev/null @@ -1,44 +0,0 @@ -name: Checks on the Python client - -# This workflow performs some checks on the Python client used by the Concordium tests -# It is there to help us maintain a level of quality in our codebase and does not have to be kept on forked -# applications. - -on: - workflow_dispatch: - push: - branches: - - master - - main - - develop - pull_request: - -jobs: - - lint: - name: Concordium client linting - runs-on: ubuntu-latest - steps: - - name: Clone - uses: actions/checkout@v3 - - name: Installing PIP dependencies - run: | - pip install pylint - pip install -r tests/requirements.txt - - name: Lint Python code - run: | - pylint --rc tests/setup.cfg tests/application_client/ - - mypy: - name: Type checking - runs-on: ubuntu-latest - steps: - - name: Clone - uses: actions/checkout@v3 - - name: Installing PIP dependencies - run: | - pip install mypy - pip install -r tests/requirements.txt - - name: Mypy type checking - run: | - mypy tests/application_client/ diff --git a/Makefile b/Makefile index b99e4589..24c96221 100644 --- a/Makefile +++ b/Makefile @@ -30,7 +30,7 @@ APPNAME = "Concordium" # Application version APPVERSION_M = 5 APPVERSION_N = 0 -APPVERSION_P = 0 +APPVERSION_P = 1 APPVERSION = "$(APPVERSION_M).$(APPVERSION_N).$(APPVERSION_P)" DEFINES += APPVERSION=\"$(APPVERSION)\" diff --git a/src/common/ui/display.h b/src/common/ui/display.h index b4bb7c4c..d0fa2d8d 100644 --- a/src/common/ui/display.h +++ b/src/common/ui/display.h @@ -21,6 +21,7 @@ extern const ux_flow_step_t *ux_sign_configure_baker_commission[9]; void startConfigureBakerCommissionDisplay(void); void startConfigureBakerUrlDisplay(bool lastUrlPage); +void startConfigureBakerSuspendedDisplay(void); void startConfigureBakerDisplay(void); void startConfigureDelegationDisplay(); diff --git a/src/common/ui/display_bagl.c b/src/common/ui/display_bagl.c index e1f88fa5..f301751d 100644 --- a/src/common/ui/display_bagl.c +++ b/src/common/ui/display_bagl.c @@ -118,6 +118,7 @@ static signConfigureBaker_t *ctx_conf_baker = &global.signConfigureBaker; const ux_flow_step_t *ux_sign_configure_baker_first[8]; const ux_flow_step_t *ux_sign_configure_baker_url[6]; const ux_flow_step_t *ux_sign_configure_baker_commission[9]; +const ux_flow_step_t *ux_sign_configure_baker_suspended[6]; UX_STEP_NOCB(ux_sign_configure_baker_stop_baking_step, nn, {"Stop", "baking"}); @@ -171,6 +172,10 @@ UX_STEP_NOCB(ux_sign_configure_baker_commission_finalization_reward_step, {"Finalization reward", (char *)global.signConfigureBaker.commissionRates.finalizationRewardCommissionRate}); +UX_STEP_NOCB(ux_sign_configure_baker_suspended_step, + bn, + {"Validator status", (char *)global.signConfigureBaker.suspended}); + /** * Dynamically builds and initializes the capital, restake earnings, pool status and * baker keys display. @@ -302,13 +307,42 @@ void startConfigureBakerCommissionDisplay() { &ux_sign_configure_baker_commission_finalization_reward_step; } - ux_sign_configure_baker_commission[index++] = &ux_sign_flow_shared_sign; - ux_sign_configure_baker_commission[index++] = &ux_sign_flow_shared_decline; + if (ctx_conf_baker->hasSuspended) { + ux_sign_configure_baker_commission[index++] = &ux_sign_configure_baker_continue; + } else { + ux_sign_configure_baker_commission[index++] = &ux_sign_flow_shared_sign; + ux_sign_configure_baker_commission[index++] = &ux_sign_flow_shared_decline; + } ux_sign_configure_baker_commission[index++] = FLOW_END_STEP; ux_flow_init(0, ux_sign_configure_baker_commission, NULL); } +/** + * Dynamically builds and initializes the suspended display. + * - If the transaction only contains suspended boolean, then it ensures that + * the UI starts with the shared review transaction screens. + * - Only shows the suspended message that have been indicated to be part of the transaction. + * - Shows the signing / decline screens. + */ +void startConfigureBakerSuspendedDisplay() { + uint8_t index = 0; + + if (ctx_conf_baker->firstDisplay) { + ux_sign_configure_baker_suspended[index++] = &ux_sign_flow_shared_review; + ux_sign_configure_baker_suspended[index++] = &ux_sign_flow_account_sender_view; + ctx_conf_baker->firstDisplay = false; + } + + ux_sign_configure_baker_suspended[index++] = &ux_sign_configure_baker_suspended_step; + + ux_sign_configure_baker_suspended[index++] = &ux_sign_flow_shared_sign; + ux_sign_configure_baker_suspended[index++] = &ux_sign_flow_shared_decline; + + ux_sign_configure_baker_suspended[index++] = FLOW_END_STEP; + ux_flow_init(0, ux_sign_configure_baker_suspended, NULL); +} + // Delegation static signConfigureDelegationContext_t *ctx_conf_delegation = &global.signConfigureDelegation; diff --git a/src/common/ui/display_nbgl.c b/src/common/ui/display_nbgl.c index fd4d758b..83f99908 100644 --- a/src/common/ui/display_nbgl.c +++ b/src/common/ui/display_nbgl.c @@ -163,13 +163,61 @@ void startConfigureBakerCommissionDisplay(void) { content.nbMaxLinesForValue = 0; content.startIndex = 0; - // Setup the review screen + // to signing screens. + if (ctx->hasSuspended) { + // Setup the review screen + nbgl_useCaseReviewLight(TYPE_OPERATION, + &content, + &C_app_concordium_64px, + "Review Transaction", + NULL, // No subtitle + "Continue with transaction", + sendSuccessNoIdleCallback); + } else { + // Setup the review screen + nbgl_useCaseReview(TYPE_TRANSACTION, + &content, + &C_app_concordium_64px, + "Review Transaction", + NULL, // No subtitle + "Sign transaction", + review_choice_sign); + } +} + +void startConfigureBakerSuspendedDisplay(void) { + // Get context from global state + signConfigureBaker_t *ctx = &global.signConfigureBaker; + // Create tag-value pairs for the content + uint8_t pairIndex = 0; + + if (ctx->firstDisplay) { + // Add sender address + pairs[pairIndex].item = "Sender"; + pairs[pairIndex].value = (char *)global_account_sender.sender; + pairIndex++; + ctx->firstDisplay = false; + } + + pairs[pairIndex].item = "Validator status"; + pairs[pairIndex].value = (char *)global.signConfigureBaker.suspended; + pairIndex++; + + // Create the page content + nbgl_contentTagValueList_t content; + content.nbPairs = pairIndex; + content.pairs = pairs; + content.smallCaseForValue = false; + content.nbMaxLinesForValue = 0; + content.startIndex = 0; + + // to signing screens. nbgl_useCaseReview(TYPE_TRANSACTION, &content, &C_app_concordium_64px, "Review Transaction", NULL, // No subtitle - "Sign Transaction", + "Sign transaction", review_choice_sign); } diff --git a/src/signConfigureBaker.c b/src/signConfigureBaker.c index 22f35b68..e7d0dae2 100644 --- a/src/signConfigureBaker.c +++ b/src/signConfigureBaker.c @@ -15,6 +15,7 @@ bool hasCommissionRate() { #define P1_URL_LENGTH 0x03 #define P1_URL 0x04 #define P1_COMMISSION_RATES 0x05 +#define P1_SUSPENDED 0x06 void handleCommissionRates(uint8_t *cdata, uint8_t dataLength) { if (ctx_conf_baker->hasTransactionFeeCommission) { @@ -49,8 +50,13 @@ void handleCommissionRates(uint8_t *cdata, uint8_t dataLength) { dataLength -= 4; } - if (dataLength != 0) { - THROW(ERROR_INVALID_TRANSACTION); + if (ctx_conf_baker->hasSuspended) { + ctx_conf_baker->state = CONFIGURE_BAKER_SUSPENDED; + } else { + if (dataLength != 0) { + THROW(ERROR_INVALID_TRANSACTION); + } + ctx_conf_baker->state = CONFIGURE_BAKER_END; } startConfigureBakerCommissionDisplay(); @@ -71,10 +77,9 @@ void handleSignConfigureBaker(uint8_t *cdata, updateHash((cx_hash_t *)&tx_state->hash, cdata, 2); uint16_t bitmap = U2BE(cdata, 0); - // An empty transaction with none of the optionals available is invalid, - // or any transaction with a bit set after the 10th bits place (as there are 10 - // optionals). - if (bitmap == 0 || bitmap > 1023) { + // A transaction with a bit set after the 9th bits place (as there are 9 + // optionals) is invalid. + if (bitmap > 511) { THROW(ERROR_INVALID_TRANSACTION); } @@ -86,6 +91,7 @@ void handleSignConfigureBaker(uint8_t *cdata, ctx_conf_baker->hasTransactionFeeCommission = (bitmap >> 5) & 1; ctx_conf_baker->hasBakingRewardCommission = (bitmap >> 6) & 1; ctx_conf_baker->hasFinalizationRewardCommission = (bitmap >> 7) & 1; + ctx_conf_baker->hasSuspended = (bitmap >> 8) & 1; if (ctx_conf_baker->hasCapital || ctx_conf_baker->hasRestakeEarnings || ctx_conf_baker->hasOpenForDelegation || ctx_conf_baker->hasKeys) { @@ -94,6 +100,8 @@ void handleSignConfigureBaker(uint8_t *cdata, ctx_conf_baker->state = CONFIGURE_BAKER_URL_LENGTH; } else if (hasCommissionRate()) { ctx_conf_baker->state = CONFIGURE_BAKER_COMMISSION_RATES; + } else if (ctx_conf_baker->hasSuspended) { + ctx_conf_baker->state = CONFIGURE_BAKER_SUSPENDED; } sendSuccessNoIdle(); @@ -189,6 +197,8 @@ void handleSignConfigureBaker(uint8_t *cdata, ctx_conf_baker->state = CONFIGURE_BAKER_URL_LENGTH; } else if (hasCommissionRate()) { ctx_conf_baker->state = CONFIGURE_BAKER_COMMISSION_RATES; + } else if (ctx_conf_baker->hasSuspended) { + ctx_conf_baker->state = CONFIGURE_BAKER_SUSPENDED; } else { ctx_conf_baker->state = CONFIGURE_BAKER_END; } @@ -213,6 +223,8 @@ void handleSignConfigureBaker(uint8_t *cdata, ctx_conf_baker->state = CONFIGURE_BAKER_URL_LENGTH; } else if (hasCommissionRate()) { ctx_conf_baker->state = CONFIGURE_BAKER_COMMISSION_RATES; + } else if (ctx_conf_baker->hasSuspended) { + ctx_conf_baker->state = CONFIGURE_BAKER_SUSPENDED; } else { ctx_conf_baker->state = CONFIGURE_BAKER_END; } @@ -235,6 +247,8 @@ void handleSignConfigureBaker(uint8_t *cdata, // If the url has length zero, we don't wait for the url bytes. if (hasCommissionRate()) { ctx_conf_baker->state = CONFIGURE_BAKER_COMMISSION_RATES; + } else if (ctx_conf_baker->hasSuspended) { + ctx_conf_baker->state = CONFIGURE_BAKER_SUSPENDED; } else { ctx_conf_baker->state = CONFIGURE_BAKER_END; } @@ -259,6 +273,8 @@ void handleSignConfigureBaker(uint8_t *cdata, if (hasCommissionRate()) { ctx_conf_baker->state = CONFIGURE_BAKER_COMMISSION_RATES; + } else if (ctx_conf_baker->hasSuspended) { + ctx_conf_baker->state = CONFIGURE_BAKER_SUSPENDED; } else { ctx_conf_baker->state = CONFIGURE_BAKER_END; } @@ -272,6 +288,24 @@ void handleSignConfigureBaker(uint8_t *cdata, ctx_conf_baker->state == CONFIGURE_BAKER_COMMISSION_RATES) { handleCommissionRates(cdata, dataLength); *flags |= IO_ASYNCH_REPLY; + } else if (P1_SUSPENDED == p1 && ctx_conf_baker->state == CONFIGURE_BAKER_SUSPENDED) { + uint8_t suspended = cdata[0]; + updateHash((cx_hash_t *)&tx_state->hash, cdata, 1); + dataLength -= 1; + + if (dataLength != 0) { + THROW(ERROR_INVALID_TRANSACTION); + } + + if (suspended == 0) { + memmove(ctx_conf_baker->suspended, "Resume validator", 17); + } else if (suspended == 1) { + memmove(ctx_conf_baker->suspended, "Suspend validator", 18); + } else { + THROW(ERROR_INVALID_TRANSACTION); + } + startConfigureBakerSuspendedDisplay(); + *flags |= IO_ASYNCH_REPLY; } else { THROW(ERROR_INVALID_STATE); } diff --git a/src/signConfigureBaker.h b/src/signConfigureBaker.h index 3a5cb13e..9e916408 100644 --- a/src/signConfigureBaker.h +++ b/src/signConfigureBaker.h @@ -18,7 +18,8 @@ typedef enum { CONFIGURE_BAKER_URL_LENGTH = 63, CONFIGURE_BAKER_URL = 64, CONFIGURE_BAKER_COMMISSION_RATES = 65, - CONFIGURE_BAKER_END = 66 + CONFIGURE_BAKER_SUSPENDED = 66, + CONFIGURE_BAKER_END = 67 } configureBakerState_t; typedef struct { @@ -48,12 +49,14 @@ typedef struct { bool hasTransactionFeeCommission; bool hasBakingRewardCommission; bool hasFinalizationRewardCommission; + bool hasSuspended; bool firstDisplay; union { configureBakerCapitalRestakeOpenForDelegationBlob_t capitalRestakeDelegation; configureBakerUrl_t url; configureBakerCommisionRates_t commissionRates; + uint8_t suspended[18]; }; configureBakerState_t state; diff --git a/tests/application_client/boilerplate_command_sender.py b/tests/application_client/boilerplate_command_sender.py index b765a042..085ef6bd 100644 --- a/tests/application_client/boilerplate_command_sender.py +++ b/tests/application_client/boilerplate_command_sender.py @@ -498,6 +498,32 @@ def sign_configure_baker_commission_rate( ) as response: yield response + @contextmanager + def sign_configure_baker_suspended( + self, + bitmap: bytes, + suspended: bool = False, + is_called_first: bool = True, + ) -> Generator[None, None, None]: + serialized_suspended_status = b"" + + if is_called_first: + self._configure_baker_part_0(bitmap) + + if suspended: + serialized_suspended_status += bytes.fromhex("01") + else: + serialized_suspended_status += bytes.fromhex("00") + + with self.backend.exchange_async( + cla=CLA, + ins=InsType.CONFIGURE_BAKER, + p1=0x06, # Special P1 value for commission rates + p2=P2.P2_NONE, + data=serialized_suspended_status, + ) as response: + yield response + def _configure_baker_part_0( self, bitmap: bytes, diff --git a/tests/snapshots/flex/test_app_mainmenu/00001.png b/tests/snapshots/flex/test_app_mainmenu/00001.png index 61163c79..eb700da4 100644 Binary files a/tests/snapshots/flex/test_app_mainmenu/00001.png and b/tests/snapshots/flex/test_app_mainmenu/00001.png differ diff --git a/tests/snapshots/flex/test_sign_configure_baker_all_parameters_1/00004.png b/tests/snapshots/flex/test_sign_configure_baker_all_parameters_1/00004.png deleted file mode 100644 index 52f4175a..00000000 Binary files a/tests/snapshots/flex/test_sign_configure_baker_all_parameters_1/00004.png and /dev/null differ diff --git a/tests/snapshots/flex/test_sign_configure_baker_all_parameters_3/00002.png b/tests/snapshots/flex/test_sign_configure_baker_all_parameters_3/00002.png index 4f8288f0..bc998184 100644 Binary files a/tests/snapshots/flex/test_sign_configure_baker_all_parameters_3/00002.png and b/tests/snapshots/flex/test_sign_configure_baker_all_parameters_3/00002.png differ diff --git a/tests/snapshots/flex/test_sign_configure_baker_all_parameters_4/00000.png b/tests/snapshots/flex/test_sign_configure_baker_all_parameters_4/00000.png new file mode 100644 index 00000000..d0cd8f66 Binary files /dev/null and b/tests/snapshots/flex/test_sign_configure_baker_all_parameters_4/00000.png differ diff --git a/tests/snapshots/flex/test_sign_configure_baker_all_parameters_4/00001.png b/tests/snapshots/flex/test_sign_configure_baker_all_parameters_4/00001.png new file mode 100644 index 00000000..cb746646 Binary files /dev/null and b/tests/snapshots/flex/test_sign_configure_baker_all_parameters_4/00001.png differ diff --git a/tests/snapshots/flex/test_sign_configure_baker_all_parameters_4/00002.png b/tests/snapshots/flex/test_sign_configure_baker_all_parameters_4/00002.png new file mode 100644 index 00000000..b89973eb Binary files /dev/null and b/tests/snapshots/flex/test_sign_configure_baker_all_parameters_4/00002.png differ diff --git a/tests/snapshots/flex/test_sign_configure_baker_all_parameters_3/00003.png b/tests/snapshots/flex/test_sign_configure_baker_all_parameters_4/00003.png similarity index 100% rename from tests/snapshots/flex/test_sign_configure_baker_all_parameters_3/00003.png rename to tests/snapshots/flex/test_sign_configure_baker_all_parameters_4/00003.png diff --git a/tests/snapshots/flex/test_sign_configure_baker_commission_rate_only/00003.png b/tests/snapshots/flex/test_sign_configure_baker_commission_rate_only/00003.png index c7f5f76e..ed602a39 100644 Binary files a/tests/snapshots/flex/test_sign_configure_baker_commission_rate_only/00003.png and b/tests/snapshots/flex/test_sign_configure_baker_commission_rate_only/00003.png differ diff --git a/tests/snapshots/flex/test_sign_configure_baker_suspended_only/00000.png b/tests/snapshots/flex/test_sign_configure_baker_suspended_only/00000.png new file mode 100644 index 00000000..d0cd8f66 Binary files /dev/null and b/tests/snapshots/flex/test_sign_configure_baker_suspended_only/00000.png differ diff --git a/tests/snapshots/flex/test_sign_configure_baker_suspended_only/00001.png b/tests/snapshots/flex/test_sign_configure_baker_suspended_only/00001.png new file mode 100644 index 00000000..5c0c7ecd Binary files /dev/null and b/tests/snapshots/flex/test_sign_configure_baker_suspended_only/00001.png differ diff --git a/tests/snapshots/flex/test_sign_configure_baker_suspended_only/00002.png b/tests/snapshots/flex/test_sign_configure_baker_suspended_only/00002.png new file mode 100644 index 00000000..b89973eb Binary files /dev/null and b/tests/snapshots/flex/test_sign_configure_baker_suspended_only/00002.png differ diff --git a/tests/snapshots/flex/test_sign_configure_baker_suspended_only/00003.png b/tests/snapshots/flex/test_sign_configure_baker_suspended_only/00003.png new file mode 100644 index 00000000..86796430 Binary files /dev/null and b/tests/snapshots/flex/test_sign_configure_baker_suspended_only/00003.png differ diff --git a/tests/snapshots/nanosp/test_app_mainmenu/00001.png b/tests/snapshots/nanosp/test_app_mainmenu/00001.png index 62fa4ee9..4ded9199 100644 Binary files a/tests/snapshots/nanosp/test_app_mainmenu/00001.png and b/tests/snapshots/nanosp/test_app_mainmenu/00001.png differ diff --git a/tests/snapshots/nanosp/test_sign_configure_baker_all_parameters_3/00004.png b/tests/snapshots/nanosp/test_sign_configure_baker_all_parameters_3/00004.png index 37a8b0d0..daf8b4bf 100644 Binary files a/tests/snapshots/nanosp/test_sign_configure_baker_all_parameters_3/00004.png and b/tests/snapshots/nanosp/test_sign_configure_baker_all_parameters_3/00004.png differ diff --git a/tests/snapshots/nanosp/test_sign_configure_baker_all_parameters_4/00000.png b/tests/snapshots/nanosp/test_sign_configure_baker_all_parameters_4/00000.png new file mode 100644 index 00000000..a996a1c8 Binary files /dev/null and b/tests/snapshots/nanosp/test_sign_configure_baker_all_parameters_4/00000.png differ diff --git a/tests/snapshots/nanosp/test_sign_configure_baker_all_parameters_4/00001.png b/tests/snapshots/nanosp/test_sign_configure_baker_all_parameters_4/00001.png new file mode 100644 index 00000000..37a8b0d0 Binary files /dev/null and b/tests/snapshots/nanosp/test_sign_configure_baker_all_parameters_4/00001.png differ diff --git a/tests/snapshots/nanosp/test_sign_configure_baker_all_parameters_4/00002.png b/tests/snapshots/nanosp/test_sign_configure_baker_all_parameters_4/00002.png new file mode 100644 index 00000000..dbd0b137 Binary files /dev/null and b/tests/snapshots/nanosp/test_sign_configure_baker_all_parameters_4/00002.png differ diff --git a/tests/snapshots/nanosp/test_sign_configure_baker_suspended_only/00000.png b/tests/snapshots/nanosp/test_sign_configure_baker_suspended_only/00000.png new file mode 100644 index 00000000..71ff3918 Binary files /dev/null and b/tests/snapshots/nanosp/test_sign_configure_baker_suspended_only/00000.png differ diff --git a/tests/snapshots/nanosp/test_sign_configure_baker_suspended_only/00001.png b/tests/snapshots/nanosp/test_sign_configure_baker_suspended_only/00001.png new file mode 100644 index 00000000..a8adec12 Binary files /dev/null and b/tests/snapshots/nanosp/test_sign_configure_baker_suspended_only/00001.png differ diff --git a/tests/snapshots/nanosp/test_sign_configure_baker_suspended_only/00002.png b/tests/snapshots/nanosp/test_sign_configure_baker_suspended_only/00002.png new file mode 100644 index 00000000..5ffaef42 Binary files /dev/null and b/tests/snapshots/nanosp/test_sign_configure_baker_suspended_only/00002.png differ diff --git a/tests/snapshots/nanosp/test_sign_configure_baker_suspended_only/00003.png b/tests/snapshots/nanosp/test_sign_configure_baker_suspended_only/00003.png new file mode 100644 index 00000000..afad6ff8 Binary files /dev/null and b/tests/snapshots/nanosp/test_sign_configure_baker_suspended_only/00003.png differ diff --git a/tests/snapshots/nanosp/test_sign_configure_baker_suspended_only/00004.png b/tests/snapshots/nanosp/test_sign_configure_baker_suspended_only/00004.png new file mode 100644 index 00000000..37a8b0d0 Binary files /dev/null and b/tests/snapshots/nanosp/test_sign_configure_baker_suspended_only/00004.png differ diff --git a/tests/snapshots/nanosp/test_sign_configure_baker_suspended_only/00005.png b/tests/snapshots/nanosp/test_sign_configure_baker_suspended_only/00005.png new file mode 100644 index 00000000..dbd0b137 Binary files /dev/null and b/tests/snapshots/nanosp/test_sign_configure_baker_suspended_only/00005.png differ diff --git a/tests/snapshots/nanox/test_app_mainmenu/00001.png b/tests/snapshots/nanox/test_app_mainmenu/00001.png index 62fa4ee9..4ded9199 100644 Binary files a/tests/snapshots/nanox/test_app_mainmenu/00001.png and b/tests/snapshots/nanox/test_app_mainmenu/00001.png differ diff --git a/tests/snapshots/nanox/test_sign_configure_baker_all_parameters_3/00004.png b/tests/snapshots/nanox/test_sign_configure_baker_all_parameters_3/00004.png index 37a8b0d0..daf8b4bf 100644 Binary files a/tests/snapshots/nanox/test_sign_configure_baker_all_parameters_3/00004.png and b/tests/snapshots/nanox/test_sign_configure_baker_all_parameters_3/00004.png differ diff --git a/tests/snapshots/nanox/test_sign_configure_baker_all_parameters_4/00000.png b/tests/snapshots/nanox/test_sign_configure_baker_all_parameters_4/00000.png new file mode 100644 index 00000000..a996a1c8 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_configure_baker_all_parameters_4/00000.png differ diff --git a/tests/snapshots/nanox/test_sign_configure_baker_all_parameters_4/00001.png b/tests/snapshots/nanox/test_sign_configure_baker_all_parameters_4/00001.png new file mode 100644 index 00000000..37a8b0d0 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_configure_baker_all_parameters_4/00001.png differ diff --git a/tests/snapshots/nanox/test_sign_configure_baker_all_parameters_4/00002.png b/tests/snapshots/nanox/test_sign_configure_baker_all_parameters_4/00002.png new file mode 100644 index 00000000..dbd0b137 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_configure_baker_all_parameters_4/00002.png differ diff --git a/tests/snapshots/nanox/test_sign_configure_baker_suspended_only/00000.png b/tests/snapshots/nanox/test_sign_configure_baker_suspended_only/00000.png new file mode 100644 index 00000000..71ff3918 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_configure_baker_suspended_only/00000.png differ diff --git a/tests/snapshots/nanox/test_sign_configure_baker_suspended_only/00001.png b/tests/snapshots/nanox/test_sign_configure_baker_suspended_only/00001.png new file mode 100644 index 00000000..a8adec12 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_configure_baker_suspended_only/00001.png differ diff --git a/tests/snapshots/nanox/test_sign_configure_baker_suspended_only/00002.png b/tests/snapshots/nanox/test_sign_configure_baker_suspended_only/00002.png new file mode 100644 index 00000000..5ffaef42 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_configure_baker_suspended_only/00002.png differ diff --git a/tests/snapshots/nanox/test_sign_configure_baker_suspended_only/00003.png b/tests/snapshots/nanox/test_sign_configure_baker_suspended_only/00003.png new file mode 100644 index 00000000..afad6ff8 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_configure_baker_suspended_only/00003.png differ diff --git a/tests/snapshots/nanox/test_sign_configure_baker_suspended_only/00004.png b/tests/snapshots/nanox/test_sign_configure_baker_suspended_only/00004.png new file mode 100644 index 00000000..37a8b0d0 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_configure_baker_suspended_only/00004.png differ diff --git a/tests/snapshots/nanox/test_sign_configure_baker_suspended_only/00005.png b/tests/snapshots/nanox/test_sign_configure_baker_suspended_only/00005.png new file mode 100644 index 00000000..dbd0b137 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_configure_baker_suspended_only/00005.png differ diff --git a/tests/snapshots/stax/test_app_mainmenu/00001.png b/tests/snapshots/stax/test_app_mainmenu/00001.png index 3d92253e..7736ba74 100644 Binary files a/tests/snapshots/stax/test_app_mainmenu/00001.png and b/tests/snapshots/stax/test_app_mainmenu/00001.png differ diff --git a/tests/snapshots/stax/test_sign_configure_baker_all_parameters_1/00004.png b/tests/snapshots/stax/test_sign_configure_baker_all_parameters_1/00004.png deleted file mode 100644 index ee58fd0c..00000000 Binary files a/tests/snapshots/stax/test_sign_configure_baker_all_parameters_1/00004.png and /dev/null differ diff --git a/tests/snapshots/stax/test_sign_configure_baker_all_parameters_3/00002.png b/tests/snapshots/stax/test_sign_configure_baker_all_parameters_3/00002.png index 6ce4ce68..c4c9687d 100644 Binary files a/tests/snapshots/stax/test_sign_configure_baker_all_parameters_3/00002.png and b/tests/snapshots/stax/test_sign_configure_baker_all_parameters_3/00002.png differ diff --git a/tests/snapshots/stax/test_sign_configure_baker_all_parameters_4/00000.png b/tests/snapshots/stax/test_sign_configure_baker_all_parameters_4/00000.png new file mode 100644 index 00000000..e8132c48 Binary files /dev/null and b/tests/snapshots/stax/test_sign_configure_baker_all_parameters_4/00000.png differ diff --git a/tests/snapshots/stax/test_sign_configure_baker_all_parameters_4/00001.png b/tests/snapshots/stax/test_sign_configure_baker_all_parameters_4/00001.png new file mode 100644 index 00000000..0d70250f Binary files /dev/null and b/tests/snapshots/stax/test_sign_configure_baker_all_parameters_4/00001.png differ diff --git a/tests/snapshots/stax/test_sign_configure_baker_all_parameters_4/00002.png b/tests/snapshots/stax/test_sign_configure_baker_all_parameters_4/00002.png new file mode 100644 index 00000000..49efffbc Binary files /dev/null and b/tests/snapshots/stax/test_sign_configure_baker_all_parameters_4/00002.png differ diff --git a/tests/snapshots/stax/test_sign_configure_baker_all_parameters_3/00003.png b/tests/snapshots/stax/test_sign_configure_baker_all_parameters_4/00003.png similarity index 100% rename from tests/snapshots/stax/test_sign_configure_baker_all_parameters_3/00003.png rename to tests/snapshots/stax/test_sign_configure_baker_all_parameters_4/00003.png diff --git a/tests/snapshots/stax/test_sign_configure_baker_commission_rate_only/00003.png b/tests/snapshots/stax/test_sign_configure_baker_commission_rate_only/00003.png index 45131ed2..540ed326 100644 Binary files a/tests/snapshots/stax/test_sign_configure_baker_commission_rate_only/00003.png and b/tests/snapshots/stax/test_sign_configure_baker_commission_rate_only/00003.png differ diff --git a/tests/snapshots/stax/test_sign_configure_baker_suspended_only/00000.png b/tests/snapshots/stax/test_sign_configure_baker_suspended_only/00000.png new file mode 100644 index 00000000..e8132c48 Binary files /dev/null and b/tests/snapshots/stax/test_sign_configure_baker_suspended_only/00000.png differ diff --git a/tests/snapshots/stax/test_sign_configure_baker_suspended_only/00001.png b/tests/snapshots/stax/test_sign_configure_baker_suspended_only/00001.png new file mode 100644 index 00000000..df5f7f01 Binary files /dev/null and b/tests/snapshots/stax/test_sign_configure_baker_suspended_only/00001.png differ diff --git a/tests/snapshots/stax/test_sign_configure_baker_suspended_only/00002.png b/tests/snapshots/stax/test_sign_configure_baker_suspended_only/00002.png new file mode 100644 index 00000000..49efffbc Binary files /dev/null and b/tests/snapshots/stax/test_sign_configure_baker_suspended_only/00002.png differ diff --git a/tests/snapshots/stax/test_sign_configure_baker_suspended_only/00003.png b/tests/snapshots/stax/test_sign_configure_baker_suspended_only/00003.png new file mode 100644 index 00000000..09d8f01a Binary files /dev/null and b/tests/snapshots/stax/test_sign_configure_baker_suspended_only/00003.png differ diff --git a/tests/test_configure_baker.py b/tests/test_configure_baker.py index ebc4b6bc..31461289 100644 --- a/tests/test_configure_baker.py +++ b/tests/test_configure_baker.py @@ -238,6 +238,37 @@ def test_sign_configure_baker_commission_rate_only( == "2a6f49a786b62514d89bfc0e354689e1af2f3d3194b18b93433abd032e518fb72c55501fb5605402bf5a84b88f74d30a46ccb6a05907cb78144e93363b133205" ) +@pytest.mark.active_test_scope +def test_sign_configure_baker_suspended_only( + backend, firmware, navigator, default_screenshot_path, test_name +): + # Use the app interface instead of raw interface + client = BoilerplateCommandSender(backend) + bitmap = "0100" + bitmap = bytes.fromhex(bitmap) + + # Send the sign device instruction. + # As it requires on-screen validation, the function is asynchronous. + # It will yield the result when the navigation is done + with client.sign_configure_baker_suspended( + bitmap=bitmap, + suspended=False, + is_called_first=True + ): + # Validate the on-screen request by performing the navigation appropriate for this device + navigate_until_text_and_compare( + firmware, navigator, "Sign", default_screenshot_path, test_name + ) + + # The device as yielded the result, parse it and ensure that the signature is correct + response = client.get_async_response().data + response_hex = response.hex() + print("response", response_hex) + assert ( + response_hex + == "ebc5ded8d20f43387615a40818e5890558008dd8c9a596cc4ecd007b3ec7923b918dc428b5a37a411c4f9c12a9df7c4d2d6edf3c0793159925720e7bb7078a08" + ) + @pytest.mark.active_test_scope def test_sign_configure_baker_all_parameters( @@ -272,7 +303,7 @@ def test_sign_configure_baker_all_parameters( url_bytes = url.encode("utf-8") # Bitmap indicating all features are enabled (keys, url, and commission rates) - bitmap = "00FF" + bitmap = "01FF" with client.sign_configure_baker( transaction=bytes.fromhex(transaction), @@ -314,7 +345,15 @@ def test_sign_configure_baker_all_parameters( is_called_first=False, ): navigate_until_text_and_compare( - firmware, navigator, "Sign", default_screenshot_path, test_name + "_3" + firmware, navigator, "Continue", default_screenshot_path, test_name + "_3", True, False, NavInsID.USE_CASE_CHOICE_CONFIRM + ) + with client.sign_configure_baker_suspended( + bitmap=bitmap, + suspended=True, + is_called_first=False, + ): + navigate_until_text_and_compare( + firmware, navigator, "Sign", default_screenshot_path, test_name + "_4" ) response = client.get_async_response().data @@ -322,5 +361,5 @@ def test_sign_configure_baker_all_parameters( print("response", response_hex) assert ( response_hex - == "86e662beabfe77f36da4e07867b47c9fd000186dd70a4dad59bbbd374f2d2fa4b63ac40f2e7af814429901de07e3fc33bf327c52f36a55a14ceb2941a995860c" + == "bba026c23bae21bf5deb23cab3f6ec57ccbe2fb504324dbfe28298ea9eb0a1874626db70d911c0922348616862a7eadac7b479dd181a706e31246ceab1a5f604" )