1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2024-12-01 20:08:26 +00:00

test(python): fix upgrade_tests (partially)

[no changelog]
This commit is contained in:
M1nd3r 2024-11-26 10:11:06 +01:00
parent bb89708a94
commit 7fc0874d68
2 changed files with 51 additions and 40 deletions

View File

@ -21,6 +21,7 @@ import pytest
from shamir_mnemonic import shamir from shamir_mnemonic import shamir
from trezorlib import btc, debuglink, device, exceptions, fido, models from trezorlib import btc, debuglink, device, exceptions, fido, models
from trezorlib import messages
from trezorlib.debuglink import SessionDebugWrapper as Session from trezorlib.debuglink import SessionDebugWrapper as Session
from trezorlib.messages import ( from trezorlib.messages import (
ApplySettings, ApplySettings,
@ -94,12 +95,14 @@ def test_upgrade_load_pin(gen: str, tag: str) -> None:
assert not client.features.passphrase_protection assert not client.features.passphrase_protection
assert client.features.initialized assert client.features.initialized
assert client.features.label == LABEL assert client.features.label == LABEL
session = Session(client.get_session())
with client, session:
client.use_pin_sequence([PIN]) client.use_pin_sequence([PIN])
assert btc.get_address(client, "Bitcoin", PATH) == ADDRESS assert btc.get_address(session, "Bitcoin", PATH) == ADDRESS
with EmulatorWrapper(gen, tag) as emu: with EmulatorWrapper(gen, tag) as emu:
debuglink.load_device_by_mnemonic( debuglink.load_device_by_mnemonic(
emu.client, Session(emu.client.get_management_session()),
mnemonic=MNEMONIC, mnemonic=MNEMONIC,
pin=PIN, pin=PIN,
passphrase_protection=False, passphrase_protection=False,
@ -187,7 +190,6 @@ def test_upgrade_wipe_code(gen: str, tag: str):
emu.client.use_pin_sequence([PIN, WIPE_CODE, WIPE_CODE]) emu.client.use_pin_sequence([PIN, WIPE_CODE, WIPE_CODE])
session = Session(emu.client.get_management_session()) session = Session(emu.client.get_management_session())
session.refresh_features() session.refresh_features()
raise Exception("client", str(emu.client.pin_callback))
device.change_wipe_code(session) device.change_wipe_code(session)
device_id = emu.client.features.device_id device_id = emu.client.features.device_id
@ -220,7 +222,7 @@ def test_upgrade_reset(gen: str, tag: str):
with EmulatorWrapper(gen, tag) as emu: with EmulatorWrapper(gen, tag) as emu:
device.reset( device.reset(
emu.client, emu.client.get_session(),
strength=STRENGTH, strength=STRENGTH,
passphrase_protection=False, passphrase_protection=False,
pin_protection=False, pin_protection=False,
@ -228,13 +230,13 @@ def test_upgrade_reset(gen: str, tag: str):
) )
device_id = emu.client.features.device_id device_id = emu.client.features.device_id
asserts(emu.client) asserts(emu.client)
address = btc.get_address(emu.client, "Bitcoin", PATH) address = btc.get_address(emu.client.get_session(), "Bitcoin", PATH)
storage = emu.get_storage() storage = emu.get_storage()
with EmulatorWrapper(gen, storage=storage) as emu: with EmulatorWrapper(gen, storage=storage) as emu:
assert device_id == emu.client.features.device_id assert device_id == emu.client.features.device_id
asserts(emu.client) asserts(emu.client)
assert btc.get_address(emu.client, "Bitcoin", PATH) == address assert btc.get_address(emu.client.get_session(), "Bitcoin", PATH) == address
@for_all() @for_all()
@ -250,7 +252,7 @@ def test_upgrade_reset_skip_backup(gen: str, tag: str):
with EmulatorWrapper(gen, tag) as emu: with EmulatorWrapper(gen, tag) as emu:
device.reset( device.reset(
emu.client, emu.client.get_session(),
strength=STRENGTH, strength=STRENGTH,
passphrase_protection=False, passphrase_protection=False,
pin_protection=False, pin_protection=False,
@ -259,13 +261,13 @@ def test_upgrade_reset_skip_backup(gen: str, tag: str):
) )
device_id = emu.client.features.device_id device_id = emu.client.features.device_id
asserts(emu.client) asserts(emu.client)
address = btc.get_address(emu.client, "Bitcoin", PATH) address = btc.get_address(emu.client.get_session(), "Bitcoin", PATH)
storage = emu.get_storage() storage = emu.get_storage()
with EmulatorWrapper(gen, storage=storage) as emu: with EmulatorWrapper(gen, storage=storage) as emu:
assert device_id == emu.client.features.device_id assert device_id == emu.client.features.device_id
asserts(emu.client) asserts(emu.client)
assert btc.get_address(emu.client, "Bitcoin", PATH) == address assert btc.get_address(emu.client.get_session(), "Bitcoin", PATH) == address
@for_all(legacy_minimum_version=(1, 7, 2)) @for_all(legacy_minimum_version=(1, 7, 2))
@ -281,7 +283,7 @@ def test_upgrade_reset_no_backup(gen: str, tag: str):
with EmulatorWrapper(gen, tag) as emu: with EmulatorWrapper(gen, tag) as emu:
device.reset( device.reset(
emu.client, emu.client.get_session(),
strength=STRENGTH, strength=STRENGTH,
passphrase_protection=False, passphrase_protection=False,
pin_protection=False, pin_protection=False,
@ -290,13 +292,13 @@ def test_upgrade_reset_no_backup(gen: str, tag: str):
) )
device_id = emu.client.features.device_id device_id = emu.client.features.device_id
asserts(emu.client) asserts(emu.client)
address = btc.get_address(emu.client, "Bitcoin", PATH) address = btc.get_address(emu.client.get_session(), "Bitcoin", PATH)
storage = emu.get_storage() storage = emu.get_storage()
with EmulatorWrapper(gen, storage=storage) as emu: with EmulatorWrapper(gen, storage=storage) as emu:
assert device_id == emu.client.features.device_id assert device_id == emu.client.features.device_id
asserts(emu.client) asserts(emu.client)
assert btc.get_address(emu.client, "Bitcoin", PATH) == address assert btc.get_address(emu.client.get_session(), "Bitcoin", PATH) == address
# Although Shamir was introduced in 2.1.2 already, the debug instrumentation was not present until 2.1.9. # Although Shamir was introduced in 2.1.2 already, the debug instrumentation was not present until 2.1.9.
@ -309,7 +311,7 @@ def test_upgrade_shamir_recovery(gen: str, tag: Optional[str]):
emu.client.watch_layout(True) emu.client.watch_layout(True)
debug = device_handler.debuglink() debug = device_handler.debuglink()
device_handler.run(device.recover, pin_protection=False) device_handler.run_with_session(device.recover, pin_protection=False)
recovery_old.confirm_recovery(debug) recovery_old.confirm_recovery(debug)
recovery_old.select_number_of_words(debug) recovery_old.select_number_of_words(debug)
@ -354,9 +356,10 @@ def test_upgrade_shamir_recovery(gen: str, tag: Optional[str]):
@for_all("core", core_minimum_version=(2, 1, 9)) @for_all("core", core_minimum_version=(2, 1, 9))
def test_upgrade_shamir_backup(gen: str, tag: Optional[str]): def test_upgrade_shamir_backup(gen: str, tag: Optional[str]):
with EmulatorWrapper(gen, tag) as emu: with EmulatorWrapper(gen, tag) as emu:
session = Session(emu.client.get_management_session())
# Generate a new encrypted master secret and record it. # Generate a new encrypted master secret and record it.
device.reset( device.reset(
emu.client, session,
pin_protection=False, pin_protection=False,
skip_backup=True, skip_backup=True,
backup_type=BackupType.Slip39_Basic, backup_type=BackupType.Slip39_Basic,
@ -366,14 +369,16 @@ def test_upgrade_shamir_backup(gen: str, tag: Optional[str]):
mnemonic_secret = emu.client.debug.state().mnemonic_secret mnemonic_secret = emu.client.debug.state().mnemonic_secret
# Set passphrase_source = HOST. # Set passphrase_source = HOST.
resp = emu.client.call(ApplySettings(_passphrase_source=2, use_passphrase=True)) session = Session(emu.client.get_session())
resp = session.call(ApplySettings(_passphrase_source=2, use_passphrase=True))
assert isinstance(resp, Success) assert isinstance(resp, Success)
# Get a passphrase-less and a passphrased address. # Get a passphrase-less and a passphrased address.
address = btc.get_address(emu.client, "Bitcoin", PATH) address = btc.get_address(session, "Bitcoin", PATH)
emu.client.init_device(new_session=True) if session.session_version == Session.CODEC_V1:
emu.client.use_passphrase("TREZOR") session.call(messages.Initialize(new_session=True))
address_passphrase = btc.get_address(emu.client, "Bitcoin", PATH) new_session = emu.client.get_session(passphrase="TREZOR")
address_passphrase = btc.get_address(new_session, "Bitcoin", PATH)
assert emu.client.features.backup_availability == BackupAvailability.Required assert emu.client.features.backup_availability == BackupAvailability.Required
storage = emu.get_storage() storage = emu.get_storage()
@ -386,7 +391,7 @@ def test_upgrade_shamir_backup(gen: str, tag: Optional[str]):
with emu.client: with emu.client:
IF = InputFlowSlip39BasicBackup(emu.client, False) IF = InputFlowSlip39BasicBackup(emu.client, False)
emu.client.set_input_flow(IF.get()) emu.client.set_input_flow(IF.get())
device.backup(emu.client) device.backup(emu.client.get_session())
assert ( assert (
emu.client.features.backup_availability == BackupAvailability.NotAvailable emu.client.features.backup_availability == BackupAvailability.NotAvailable
) )
@ -407,10 +412,13 @@ def test_upgrade_shamir_backup(gen: str, tag: Optional[str]):
assert ems.ciphertext == mnemonic_secret assert ems.ciphertext == mnemonic_secret
# Check that addresses are the same after firmware upgrade and backup. # Check that addresses are the same after firmware upgrade and backup.
assert btc.get_address(emu.client, "Bitcoin", PATH) == address assert btc.get_address(emu.client.get_session(), "Bitcoin", PATH) == address
emu.client.init_device(new_session=True) assert (
emu.client.use_passphrase("TREZOR") btc.get_address(
assert btc.get_address(emu.client, "Bitcoin", PATH) == address_passphrase emu.client.get_session(passphrase="TREZOR"), "Bitcoin", PATH
)
== address_passphrase
)
@for_all(legacy_minimum_version=(1, 8, 4), core_minimum_version=(2, 1, 9)) @for_all(legacy_minimum_version=(1, 8, 4), core_minimum_version=(2, 1, 9))
@ -418,22 +426,22 @@ def test_upgrade_u2f(gen: str, tag: str):
"""Check U2F counter stayed the same after an upgrade.""" """Check U2F counter stayed the same after an upgrade."""
with EmulatorWrapper(gen, tag) as emu: with EmulatorWrapper(gen, tag) as emu:
debuglink.load_device_by_mnemonic( debuglink.load_device_by_mnemonic(
emu.client, emu.client.get_management_session(),
mnemonic=MNEMONIC, mnemonic=MNEMONIC,
pin="", pin="",
passphrase_protection=False, passphrase_protection=False,
label=LABEL, label=LABEL,
) )
session = emu.client.get_management_session()
success = fido.set_counter(emu.client, 10) success = fido.set_counter(session, 10)
assert "U2F counter set" in success assert "U2F counter set" in success
counter = fido.get_next_counter(emu.client) counter = fido.get_next_counter(session)
assert counter == 11 assert counter == 11
storage = emu.get_storage() storage = emu.get_storage()
with EmulatorWrapper(gen, storage=storage) as emu: with EmulatorWrapper(gen, storage=storage) as emu:
counter = fido.get_next_counter(emu.client) counter = fido.get_next_counter(session)
assert counter == 12 assert counter == 12

View File

@ -89,9 +89,8 @@ def test_passphrase_works(emulator: Emulator):
messages.ButtonRequest, messages.ButtonRequest,
messages.Address, messages.Address,
] ]
emu_session = emulator.client.get_session(passphrase="") emu_session = emulator.client.get_session(passphrase="TREZOR")
with emulator.client, Session(emu_session) as session: with Session(emu_session) as session:
emulator.client.use_passphrase("TREZOR")
session.set_expected_responses(expected_responses) session.set_expected_responses(expected_responses)
btc.get_address(session, "Testnet", parse_path("44h/1h/0h/0/0")) btc.get_address(session, "Testnet", parse_path("44h/1h/0h/0/0"))
@ -133,14 +132,18 @@ def test_init_device(emulator: Emulator):
messages.Address, messages.Address,
] ]
emu_session = emulator.client.get_session(passphrase="") emu_session = emulator.client.get_session(passphrase="TREZOR")
with emulator.client, Session(emu_session) as session: with Session(emu_session) as session:
emulator.client.use_passphrase("TREZOR")
session.set_expected_responses(expected_responses) session.set_expected_responses(expected_responses)
btc.get_address(session, "Testnet", parse_path("44h/1h/0h/0/0")) btc.get_address(session, "Testnet", parse_path("44h/1h/0h/0/0"))
# in TT < 2.3.0 session_id will only be available after PassphraseStateRequest # in TT < 2.3.0 session_id will only be available after PassphraseStateRequest
session_id = emulator.client.features.session_id session_id = session.id
# emulator.client.init_device() if session.session_version == Session.CODEC_V1:
btc.get_address(emulator.client, "Testnet", parse_path("44h/1h/0h/0/0")) session.call(messages.Initialize(session_id=session_id))
assert session_id == emulator.client.features.session_id btc.get_address(
session,
"Testnet",
parse_path("44h/1h/0h/0/0"),
)
assert session_id == session.id