1
0
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:
Tomas Susanka 2019-11-11 10:07:23 +00:00
parent e286bd46f9
commit 31a484bdc6
4 changed files with 94 additions and 11 deletions

View File

@ -8,11 +8,14 @@ def enter_word(debug, word):
return debug.click(buttons.CONFIRM_WORD, wait=True)
def select_number_of_words(debug, num_of_words=20):
# confirm recovery
def confirm_recovery(debug):
layout = debug.wait_layout()
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
assert "Select number of words" in layout.text

View File

@ -31,6 +31,8 @@ def test_recovery(device_handler):
assert features.initialized is False
device_handler.run(device.recover, pin_protection=False)
recovery.confirm_recovery(debug)
recovery.select_number_of_words(debug)
recovery.enter_shares(debug, MNEMONIC_SLIP39_BASIC_20_3of6)
recovery.finalize(debug)

View File

@ -19,18 +19,13 @@ import pytest
from trezorlib import device
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 ..emulators import EmulatorWrapper
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
def emulator():
emu = EmulatorWrapper("core")
@ -38,8 +33,13 @@ def emulator():
yield emu
def _restart(device_handler: BackgroundDeviceHandler, emulator: EmulatorWrapper):
device_handler.restart(emulator)
return device_handler.debuglink()
@core_only
def test_persistence(emulator):
def test_abort(emulator):
device_handler = BackgroundDeviceHandler(emulator.client)
debug = device_handler.debuglink()
features = device_handler.features()
@ -70,3 +70,80 @@ def test_persistence(emulator):
assert layout.text == "Homescreen"
features = device_handler.features()
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

View File

@ -209,6 +209,7 @@ def test_upgrade_shamir_recovery(gen, from_tag, to_tag):
device_handler.run(device.recover, pin_protection=False)
recovery.confirm_recovery(debug)
recovery.select_number_of_words(debug)
layout = recovery.enter_share(debug, MNEMONIC_SLIP39_BASIC_20_3of6[0])
assert "2 more shares" in layout.text