diff --git a/python/trezorlib/tests/device_tests/test_msg_recoverydevice_shamir_dryrun.py b/python/trezorlib/tests/device_tests/test_msg_recoverydevice_shamir_dryrun.py index e178c76006..5d955815e0 100644 --- a/python/trezorlib/tests/device_tests/test_msg_recoverydevice_shamir_dryrun.py +++ b/python/trezorlib/tests/device_tests/test_msg_recoverydevice_shamir_dryrun.py @@ -2,7 +2,10 @@ import time import pytest -from trezorlib import debuglink, device, messages +from trezorlib import device, messages +from trezorlib.exceptions import TrezorFailure + +from .conftest import setup_client pytestmark = pytest.mark.skip_t1 @@ -12,20 +15,16 @@ SHARES_20_2of3 = [ "crush merchant academic always course verdict rescue paces fridge museum energy solution space ladybug junction national biology game fawn coal", ] +INVALID_SHARES_20_2of3 = [ + "gesture necklace academic acid civil round fiber buyer swing ancient jerky kitchen chest dining enjoy tension museum increase various rebuild", + "gesture necklace academic agency decrease justice ounce dragon shaped unknown material answer dress wrote smell family squeeze diet angry husband", +] + +@setup_client(mnemonic=SHARES_20_2of3[0:2], passphrase=True) def test_2of3_dryrun(client): debug = client.debug - debuglink.load_device_by_mnemonic( - client, - mnemonic=SHARES_20_2of3[0:2], - pin="", - passphrase_protection=True, - label="test", - language="english", - skip_checksum=True, - ) - def input_flow(): yield # Confirm Dryrun debug.press_yes() @@ -50,6 +49,32 @@ def test_2of3_dryrun(client): ) +@setup_client(mnemonic=SHARES_20_2of3[0:2], passphrase=True) +def test_2of3_invalid_seed_dryrun(client): + debug = client.debug + + def input_flow(): + yield # Confirm Dryrun + debug.press_yes() + # run recovery flow + yield from enter_all_shares(debug, INVALID_SHARES_20_2of3) + + # test fails because of different seed on device + with client, pytest.raises( + TrezorFailure, match=r"The seed does not match the one in the device" + ): + client.set_input_flow(input_flow) + device.recover( + client, + passphrase_protection=False, + pin_protection=False, + label="label", + language="english", + dry_run=True, + type=messages.ResetDeviceBackupType.Slip39_Single_Group, + ) + + def enter_all_shares(debug, shares): word_count = len(shares[0].split(" "))