1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2024-12-21 05:48:23 +00:00
trezor-firmware/tests/device_tests/test_busy_state.py
grdddj 0a4b7eb06f fix(tests): fix unstable UI in test_busy_expiry testcase
Asserting the device comes back to Homescreen, so the UI result is always the same
(when it does not get there, the assert will fail and the test will rerun).

[no changelog]
2023-07-20 10:02:11 +02:00

82 lines
2.5 KiB
Python

# This file is part of the Trezor project.
#
# Copyright (C) 2022 SatoshiLabs and contributors
#
# This library is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License version 3
# as published by the Free Software Foundation.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the License along with this library.
# If not, see <https://www.gnu.org/licenses/lgpl-3.0.html>.
import time
import pytest
from trezorlib import btc, device
from trezorlib.debuglink import TrezorClientDebugLink as Client
from trezorlib.tools import parse_path
PIN = "1234"
def _assert_busy(client: Client, should_be_busy: bool, screen: str = "Homescreen"):
assert client.features.busy is should_be_busy
if client.debug.model in ("T", "R"):
if should_be_busy:
assert "CoinJoinProgress" in client.debug.read_layout().all_components()
else:
assert client.debug.read_layout().main_component() == screen
@pytest.mark.setup_client(pin=PIN)
def test_busy_state(client: Client):
_assert_busy(client, False, "Lockscreen")
assert client.features.unlocked is False
# Show busy dialog for 1 minute.
device.set_busy(client, expiry_ms=60 * 1000)
_assert_busy(client, True)
assert client.features.unlocked is False
with client:
client.use_pin_sequence([PIN])
btc.get_address(
client, "Bitcoin", parse_path("m/44h/0h/0h/0/0"), show_display=True
)
client.refresh_features()
_assert_busy(client, True)
assert client.features.unlocked is True
# Hide the busy dialog.
device.set_busy(client, None)
_assert_busy(client, False)
assert client.features.unlocked is True
@pytest.mark.flaky(max_runs=5)
def test_busy_expiry(client: Client):
_assert_busy(client, False)
# Show the busy dialog.
device.set_busy(client, expiry_ms=1500)
_assert_busy(client, True)
# Hasn't expired yet.
time.sleep(1.4)
_assert_busy(client, True)
# Wait for it to expire. Add 400ms tolerance to account for CI slowness.
time.sleep(0.5)
# Check that the device is no longer busy.
# Also needs to come back to Homescreen (for UI tests).
client.refresh_features()
_assert_busy(client, False)