diff --git a/tests/upgrade_tests/test_firmware_upgrades.py b/tests/upgrade_tests/test_firmware_upgrades.py index 2f755f1c1..4fd870ef1 100644 --- a/tests/upgrade_tests/test_firmware_upgrades.py +++ b/tests/upgrade_tests/test_firmware_upgrades.py @@ -14,7 +14,9 @@ # You should have received a copy of the License along with this library. # If not, see . -from trezorlib import MINIMUM_FIRMWARE_VERSION, btc, debuglink, device, fido +import pytest + +from trezorlib import MINIMUM_FIRMWARE_VERSION, btc, debuglink, device, exceptions, fido from trezorlib.messages import BackupType from trezorlib.tools import H_ @@ -143,6 +145,51 @@ def test_storage_upgrade_progressive(gen, tags): assert emu.client.features.language == LANGUAGE +@for_all("legacy", legacy_minimum_version=(1, 9, 0)) +def test_upgrade_wipe_code(gen, tag): + PIN = "1234" + WIPE_CODE = "4321" + + def asserts(client): + assert client.features.pin_protection + assert not client.features.passphrase_protection + assert client.features.initialized + assert client.features.label == LABEL + client.use_pin_sequence([PIN]) + assert btc.get_address(client, "Bitcoin", PATH) == ADDRESS + + with EmulatorWrapper(gen, tag) as emu: + debuglink.load_device_by_mnemonic( + emu.client, + mnemonic=MNEMONIC, + pin=PIN, + passphrase_protection=False, + label=LABEL, + language=LANGUAGE, + ) + + # Set wipe code. + emu.client.use_pin_sequence([PIN, WIPE_CODE, WIPE_CODE]) + device.change_wipe_code(emu.client) + + device_id = emu.client.features.device_id + asserts(emu.client) + storage = emu.get_storage() + + with EmulatorWrapper(gen, storage=storage) as emu: + assert device_id == emu.client.features.device_id + asserts(emu.client) + assert emu.client.features.language == LANGUAGE + + # Check that wipe code is set by changing the PIN to it. + emu.client.use_pin_sequence([PIN, WIPE_CODE, WIPE_CODE]) + with pytest.raises( + exceptions.TrezorFailure, + match="The new PIN must be different from your wipe code", + ): + return device.change_pin(emu.client) + + @for_all("legacy") def test_upgrade_reset(gen, tag): def asserts(client):