mirror of
https://github.com/trezor/trezor-firmware.git
synced 2024-11-22 07:28:10 +00:00
tests/persistence: extend recovery test to test a full recovery
including restarts
This commit is contained in:
parent
e286bd46f9
commit
31a484bdc6
@ -8,11 +8,14 @@ def enter_word(debug, word):
|
|||||||
return debug.click(buttons.CONFIRM_WORD, wait=True)
|
return debug.click(buttons.CONFIRM_WORD, wait=True)
|
||||||
|
|
||||||
|
|
||||||
def select_number_of_words(debug, num_of_words=20):
|
def confirm_recovery(debug):
|
||||||
# confirm recovery
|
|
||||||
layout = debug.wait_layout()
|
layout = debug.wait_layout()
|
||||||
assert layout.text.startswith("Recovery mode")
|
assert layout.text.startswith("Recovery mode")
|
||||||
layout = debug.click(buttons.OK, wait=True)
|
debug.click(buttons.OK, wait=True)
|
||||||
|
|
||||||
|
|
||||||
|
def select_number_of_words(debug, num_of_words=20):
|
||||||
|
layout = debug.read_layout()
|
||||||
|
|
||||||
# select number of words
|
# select number of words
|
||||||
assert "Select number of words" in layout.text
|
assert "Select number of words" in layout.text
|
||||||
|
@ -31,6 +31,8 @@ def test_recovery(device_handler):
|
|||||||
assert features.initialized is False
|
assert features.initialized is False
|
||||||
device_handler.run(device.recover, pin_protection=False)
|
device_handler.run(device.recover, pin_protection=False)
|
||||||
|
|
||||||
|
recovery.confirm_recovery(debug)
|
||||||
|
|
||||||
recovery.select_number_of_words(debug)
|
recovery.select_number_of_words(debug)
|
||||||
recovery.enter_shares(debug, MNEMONIC_SLIP39_BASIC_20_3of6)
|
recovery.enter_shares(debug, MNEMONIC_SLIP39_BASIC_20_3of6)
|
||||||
recovery.finalize(debug)
|
recovery.finalize(debug)
|
||||||
|
@ -19,18 +19,13 @@ import pytest
|
|||||||
from trezorlib import device
|
from trezorlib import device
|
||||||
|
|
||||||
from .. import buttons
|
from .. import buttons
|
||||||
|
from ..click_tests import recovery
|
||||||
|
from ..common import MNEMONIC_SLIP39_ADVANCED_20, MNEMONIC_SLIP39_BASIC_20_3of6
|
||||||
from ..device_handler import BackgroundDeviceHandler
|
from ..device_handler import BackgroundDeviceHandler
|
||||||
from ..emulators import EmulatorWrapper
|
from ..emulators import EmulatorWrapper
|
||||||
from ..upgrade_tests import core_only
|
from ..upgrade_tests import core_only
|
||||||
|
|
||||||
|
|
||||||
def enter_word(debug, word):
|
|
||||||
word = word[:4]
|
|
||||||
for coords in buttons.type_word(word):
|
|
||||||
debug.click(coords)
|
|
||||||
return debug.click(buttons.CONFIRM_WORD, wait=True)
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def emulator():
|
def emulator():
|
||||||
emu = EmulatorWrapper("core")
|
emu = EmulatorWrapper("core")
|
||||||
@ -38,8 +33,13 @@ def emulator():
|
|||||||
yield emu
|
yield emu
|
||||||
|
|
||||||
|
|
||||||
|
def _restart(device_handler: BackgroundDeviceHandler, emulator: EmulatorWrapper):
|
||||||
|
device_handler.restart(emulator)
|
||||||
|
return device_handler.debuglink()
|
||||||
|
|
||||||
|
|
||||||
@core_only
|
@core_only
|
||||||
def test_persistence(emulator):
|
def test_abort(emulator):
|
||||||
device_handler = BackgroundDeviceHandler(emulator.client)
|
device_handler = BackgroundDeviceHandler(emulator.client)
|
||||||
debug = device_handler.debuglink()
|
debug = device_handler.debuglink()
|
||||||
features = device_handler.features()
|
features = device_handler.features()
|
||||||
@ -70,3 +70,80 @@ def test_persistence(emulator):
|
|||||||
assert layout.text == "Homescreen"
|
assert layout.text == "Homescreen"
|
||||||
features = device_handler.features()
|
features = device_handler.features()
|
||||||
assert features.recovery_mode is False
|
assert features.recovery_mode is False
|
||||||
|
|
||||||
|
|
||||||
|
@core_only
|
||||||
|
def test_recovery_single_reset(emulator):
|
||||||
|
device_handler = BackgroundDeviceHandler(emulator.client)
|
||||||
|
debug = device_handler.debuglink()
|
||||||
|
features = device_handler.features()
|
||||||
|
|
||||||
|
assert features.initialized is False
|
||||||
|
assert features.recovery_mode is False
|
||||||
|
|
||||||
|
device_handler.run(device.recover, pin_protection=False)
|
||||||
|
recovery.confirm_recovery(debug)
|
||||||
|
|
||||||
|
recovery.select_number_of_words(debug)
|
||||||
|
|
||||||
|
debug = _restart(device_handler, emulator)
|
||||||
|
features = device_handler.features()
|
||||||
|
assert features.recovery_mode is True
|
||||||
|
|
||||||
|
# we need to enter the number of words again, that's a feature
|
||||||
|
recovery.select_number_of_words(debug)
|
||||||
|
recovery.enter_shares(debug, MNEMONIC_SLIP39_BASIC_20_3of6)
|
||||||
|
recovery.finalize(debug)
|
||||||
|
|
||||||
|
features = device_handler.features()
|
||||||
|
assert features.initialized is True
|
||||||
|
assert features.recovery_mode is False
|
||||||
|
|
||||||
|
|
||||||
|
@core_only
|
||||||
|
def test_recovery_multiple_resets(emulator):
|
||||||
|
def enter_shares_with_restarts(debug):
|
||||||
|
shares = MNEMONIC_SLIP39_ADVANCED_20
|
||||||
|
layout = debug.read_layout()
|
||||||
|
expected_text = "Enter any share"
|
||||||
|
remaining = len(shares)
|
||||||
|
for share in shares:
|
||||||
|
assert expected_text in layout.text
|
||||||
|
layout = recovery.enter_share(debug, share)
|
||||||
|
remaining -= 1
|
||||||
|
expected_text = "Success You have entered"
|
||||||
|
debug = _restart(device_handler, emulator)
|
||||||
|
|
||||||
|
assert "You have successfully recovered your wallet" in layout.text
|
||||||
|
|
||||||
|
device_handler = BackgroundDeviceHandler(emulator.client)
|
||||||
|
debug = device_handler.debuglink()
|
||||||
|
features = device_handler.features()
|
||||||
|
|
||||||
|
assert features.initialized is False
|
||||||
|
assert features.recovery_mode is False
|
||||||
|
|
||||||
|
# start device and recovery
|
||||||
|
device_handler.run(device.recover, pin_protection=False)
|
||||||
|
recovery.confirm_recovery(debug)
|
||||||
|
|
||||||
|
# set number of words
|
||||||
|
recovery.select_number_of_words(debug)
|
||||||
|
|
||||||
|
# restart
|
||||||
|
debug = _restart(device_handler, emulator)
|
||||||
|
features = device_handler.features()
|
||||||
|
assert features.recovery_mode is True
|
||||||
|
|
||||||
|
# enter the number of words again, that's a feature!
|
||||||
|
recovery.select_number_of_words(debug)
|
||||||
|
|
||||||
|
# enter shares and restart after each one
|
||||||
|
enter_shares_with_restarts(debug)
|
||||||
|
debug = device_handler.debuglink()
|
||||||
|
layout = debug.read_layout()
|
||||||
|
assert layout.text == "Homescreen"
|
||||||
|
|
||||||
|
features = device_handler.features()
|
||||||
|
assert features.initialized is True
|
||||||
|
assert features.recovery_mode is False
|
||||||
|
@ -209,6 +209,7 @@ def test_upgrade_shamir_recovery(gen, from_tag, to_tag):
|
|||||||
|
|
||||||
device_handler.run(device.recover, pin_protection=False)
|
device_handler.run(device.recover, pin_protection=False)
|
||||||
|
|
||||||
|
recovery.confirm_recovery(debug)
|
||||||
recovery.select_number_of_words(debug)
|
recovery.select_number_of_words(debug)
|
||||||
layout = recovery.enter_share(debug, MNEMONIC_SLIP39_BASIC_20_3of6[0])
|
layout = recovery.enter_share(debug, MNEMONIC_SLIP39_BASIC_20_3of6[0])
|
||||||
assert "2 more shares" in layout.text
|
assert "2 more shares" in layout.text
|
||||||
|
Loading…
Reference in New Issue
Block a user