1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2024-11-16 04:29:08 +00:00
trezor-firmware/tests/device_tests
grdddj 7f1a5ac4c1 WIP - firmware translations
WIP - refactor and extend font generation for non-ascii characters

WIP - add czech characters mapping between UTF8 value and index

WIP - regenerate font files with czech characters

WIP - shorten czech button text, it was causing SHUTDOWN for some reason

WIP - support UTF8 characters in fonts.c

WIP - account for translation in tests

WIP - small fixes

WIP - fix last test

WIP - support UTF8 also in Rust font operations

WIP - add a script to find non-translated english strings in micropython code

WIP - add a validator script for checking missing micropython translations

WIP - translate remaining altcoins and other apps in core (fido, sdcard, TT layouts, ...)

WIP - generate czech glyphs for TT fonts

WIP - modify gen_font.py to account for negative bearing czech characters

WIP - extend translation validation scripts, move them into core/tools

WIP - translate TT layouts in Rust

WIP - fix tests

WIP - fix inverse coloring of nonprintable glyph

WIP - add build and test pipelines for Czech language

WIP - merge both JSON files together

WIP - run new isort

WIP - unify all the translation in Rust, expose to micropython

TEMP - leave en_merged.json file, so it is accessible by translators with old link

WIP - fixes

WIP - add french characters and translation via Google Translator

WIP - skip rustfmt in mako-created files

WIP - revert all the font height changes causing false-positive UI diff

WIP - fixes after rebase

WIP - fix broken translations

WIP - revert some wording changes causing UI diff

WIP - improve validation and translate scripts, translate missing strings

WIP - sort all keys alphabetically

WIP - remove any usage of translation in bootloader

WIP - add newline at the end of JSON file

WIP - fix bitcoin-only strings check

WIP - fix python support check

WIP - add some missing translations

WIP - fix SD card device test

WIP - fix pystyle

WIP - fix rust unittests

WIP - fix click tests

WIP - flag errors in french translations

WIP - add script transferring translations data into a byte blob

WIP - regenerate fr.rs

WIP - store and read language translations from flash

WIP - storing language name in storage

WIP - sending language_data in apply_settings protobuf message

WIP - separate protobuf message for translations, fixes

WIP - set up translations area for TT as well

WIP - get rid of TREZOR_LANG env variable during build

WIP - make the firmware buildable for TT

WIP - add basic device tests

WIP - set language for tests

WIP - counting with language when writing fixtures

WIP - add todos

WIP - fix CI

WIP - unify translations, make titles CAPITAL

WIP - translate missing english

WIP - skip translations messages for T1

WIP - not changing tests names for english

WIP - fix flake8

WIP - no test language setting for T1

WIP - clippy lint about complex data type

WIP - fix some english UI diff for TR

WIP - fix cstyle

WIP - minimize the usage of #[cfg(feature = "micropython")] outside translations module

WIP - minimize TT's UI diff

WIP - fix ruststyle

WIP - fix TR build

WIP - advanced Shamir text change

WIP - storing the language name as the first item in the translation data

WIP - modify and extend tests after storing language name

WIP - modify checklist sentence

WIP - add TEST_LANG into Makefile for all the emu tests

WIP - default arguments

WIP - reimplement default arguments

remove unneeded pub from get_info function

WIP - Rust handling of object attributes lookups from upy - thanks Matejcik!

WIP - generate mock interface for attribute-based translations lookups

WIP - change function calls to object attributes

WIP - symbolic link for unix/translations.c

WIP - fix and improve the reading of translations - thanks Matejcik!

WIP - add support for multiple languages in removing missing tests

WIP - fix multiple-accounts warning in tests

WIP - fix encoding of newlines in translations

WIP - fix czech tutorial text

WIP - fix czech click tests

WIP - do not translate wire error messages

WIP - add language options to click tests as well

WIP - setup czech device tests in CI

WIP - setup czech click tests in CI

WIP - record czech device tests for TR

WIP - record czech click tests for TR

WIP - record czech device tests for TT

WIP - record czech click tests for TT

WIP - pystyle

WIP - cstyle

WIP - fix Rust micropython import dependency

WIP - fix czech recordings

WIP - support french translations in tests

WIP - shorten some french words to fix the tests

WIP - fix micropython cfg compilation

WIP - record french click tests for TR

WIP - record french device tests for TR

WIP - record french device tests for TT

WIP - record french click tests for TT

WIP - fix french translations - shorten them

WIP - translate missing french words

WIP - fix click tests

WIP - add french tests into CI

WIP - pystyle

WIP - allow for czech/french tests in update script

WIP - update czech fixtures

WIP - update french fixtures

WIP - ruststyle

WIP - disallow MPU to run it on hardware

WIP - cstyle

WIP - change translations delimiter from * to \x00

WIP - change translations protobufs

WIP - remove language handling from storage

WIP - add header into JSON files

WIP - count with header in translations blob

WIP - yml style fixes

WIP - fix proto gen

WIP - verify version and data hash

WIP - fix loading test translations

feat(core): allow access to translations area in firmware

[no changelog]

WIP - fixes after rebase

WIP - increase the TT's translations area to 3 sectors

WIP - dynamically read the maximum translations size

WIP - record non-english tests from CI

WIP - loading font data from translations blob

WIP - bump translations version

WIP - include czech and french glyph data

WIP - whitelist another negative-bearing glyph

WIP - remove czech/french glyphs from common font files

WIP - fix language tests

WIP - specific fonts for specific models

WIP - revert the non-ascii font hardcoding

WIP - include missing BIG font into nonprintable logic

WIP - minor Rust code improvements

WIP - include newlines at the end of json files

WIP - move glyph Rust function to librust_fonts.h

WIP - add all fonts into translations file

WIP - move fonts into its own dir

WIP - reflect separate dir for fonts

WIP - not putting translations trezorhal into bootloader

WIP - write and read multiple fonts into translations data

WIP - silence pyright issue/notissue

WIP - delete no more used translations/*.py imports

WIP - fix bootloader builds by introducing translations feature and TRANSLATIONS flag

WIP - fix TT's bootloader Rust build

WIP - fix tests in non-english languages

WIP - not search for UTF-8 when there are no translations data

WIP - add colons to strings where missing

WIP - fix language loading in tests

WIP - fix signmessage input flow to work in all languages

WIP - create offset table for translation strings

WIP - code improvements

WIP - record foreign language fixtures + sync with main in english

WIP - do alignment check before reading u16 data

WIP - allocate blob in RAM for translations data

WIP - add TODO for blob generation

WIP - record non-english device tests

WIP - use bytes.align_to instead of messing with pointers

WIP - fixtures

WIP - remove unused import

WIP - add order.py

WIP - add order.json

WIP - take order.json into account in creating general.rs

WIP - take order.json into account in generating the blob

WIP - style

WIP - sort the language files

WIP - remove unused file

WIP - code improvements

WIP - add TODO for homescreen notification

WIP - translate plural forms

WIP - translate time intervals

WIP - sign translations with dev keys, validate signatures, improve robustness

WIP - improve tests for translations

WIP - add `trezorctl utils sign-translations` for production signing of the blob

WIP - pyright fix

WIP - changing TR progress loader offset - it was colliding with title

WIP - show indeterminate loader when loading translations data

WIP - record new and updated language tests

WIP - show the change language title/prompt in the target language

WIP - sort keys

WIP - add crowdin-cli into shell.nix

WIP - add crowdin sync script
2024-01-02 14:55:16 +01:00
..
binance feat(core): show account number in receive/public key details for altcoins 2023-09-26 11:50:21 +02:00
bitcoin WIP - firmware translations 2024-01-02 14:55:16 +01:00
cardano fix(tests): Safe 3 model name 2023-10-12 11:31:57 +02:00
eos feat(tests): add device tests for chunkifying addresses 2023-09-15 09:50:21 +02:00
ethereum feat(tests): add test for going back from Ethereum summary page 2023-12-05 18:22:58 +01:00
misc style(tests): apply isort 5 2023-08-16 13:29:51 +02:00
monero feat(core): show account number in receive/public key details for altcoins 2023-09-26 11:50:21 +02:00
nem fix(tests): Safe 3 model name 2023-10-12 11:31:57 +02:00
reset_recovery fix(tests): Safe 3 model name 2023-10-12 11:31:57 +02:00
ripple feat(core): show account number in receive/public key details for altcoins 2023-09-26 11:50:21 +02:00
solana chore(solana): add device tests for predefined txs 2023-12-05 22:11:41 +01:00
stellar feat(core): show account number in receive/public key details for altcoins 2023-09-26 11:50:21 +02:00
tezos feat(core): show account number in receive/public key details for altcoins 2023-09-26 11:50:21 +02:00
webauthn chore(tests): add type hints and improve styling in device test files 2022-02-07 14:05:27 +01:00
zcash fix(tests): Safe 3 model name 2023-10-12 11:31:57 +02:00
__init__.py
.gitignore
README.md
test_authenticate_device.py test(core): Update emulator device certificate. 2023-09-19 21:41:42 +02:00
test_autolock.py tests: tweak wait time for test_autolock_ignores_getaddress 2023-04-11 19:58:20 +02:00
test_basic.py chore(tests): add type hints and improve styling in device test files 2022-02-07 14:05:27 +01:00
test_bg.jpg fix(tests): set homescreen test uses colorful image, to better test homescreen rednering 2023-04-21 09:07:18 +02:00
test_bip32_speed.py feat(all): add UI for Model R 2023-05-31 10:14:54 +02:00
test_busy_state.py fix(tests): Safe 3 model name 2023-10-12 11:31:57 +02:00
test_cancel.py fix(tests): Safe 3 model name 2023-10-12 11:31:57 +02:00
test_debuglink.py feat(all): add UI for Model R 2023-05-31 10:14:54 +02:00
test_firmware_hash.py fix(tests): Safe 3 model name 2023-10-12 11:31:57 +02:00
test_language.py WIP - firmware translations 2024-01-02 14:55:16 +01:00
test_msg_applysettings.py feat(all): add UI for Model R 2023-05-31 10:14:54 +02:00
test_msg_backup_device.py fix(tests): Safe 3 model name 2023-10-12 11:31:57 +02:00
test_msg_change_wipe_code_t1.py feat(all): add UI for Model R 2023-05-31 10:14:54 +02:00
test_msg_change_wipe_code_t2.py feat(core): new design of PIN dialogs 2023-07-17 15:30:00 +02:00
test_msg_changepin_t1.py feat(all): add UI for Model R 2023-05-31 10:14:54 +02:00
test_msg_changepin_t2.py feat(all): add UI for Model R 2023-05-31 10:14:54 +02:00
test_msg_loaddevice.py chore: bump black to 22.3 2022-06-29 14:35:16 +02:00
test_msg_ping.py chore(tests): add type hints and improve styling in device test files 2022-02-07 14:05:27 +01:00
test_msg_sd_protect.py feat(all): add UI for Model R 2023-05-31 10:14:54 +02:00
test_msg_wipedevice.py chore(tests): add type hints and improve styling in device test files 2022-02-07 14:05:27 +01:00
test_passphrase_slip39_advanced.py chore(tests): add type hints and improve styling in device test files 2022-02-07 14:05:27 +01:00
test_passphrase_slip39_basic.py chore(tests): add type hints and improve styling in device test files 2022-02-07 14:05:27 +01:00
test_pin.py feat(all): add UI for Model R 2023-05-31 10:14:54 +02:00
test_protection_levels.py fix(tests): Safe 3 model name 2023-10-12 11:31:57 +02:00
test_sdcard.py WIP - firmware translations 2024-01-02 14:55:16 +01:00
test_session_id_and_passphrase.py WIP - firmware translations 2024-01-02 14:55:16 +01:00
test_session.py chore(tests): change all the model-specific variables for button_requests to start with "is_" 2023-09-15 09:50:21 +02:00

Running device tests

1. Running the full test suite

Note: You need Poetry, as mentioned in the core's documentation section.

In the trezor-firmware checkout, in the root of the monorepo, install the environment:

poetry install

And run the automated tests:

poetry run make -C core test_emu

2. Running tests manually

Install the poetry environment as outlined above. Then switch to a shell inside the environment:

poetry shell

If you want to test against the emulator, run it in a separate terminal:

./core/emu.py

Now you can run the test suite with pytest from the root directory:

pytest tests/device_tests

Useful Tips

The tests are randomized using the pytest-random-order plugin. The random seed is printed in the header of the tests output, in case you need to run the tests in the same order.

If you only want to run a particular test, pick it with -k <keyword> or -m <marker>:

pytest -k nem      # only runs tests that have "nem" in the name
pytest -k "nem or stellar"  # only runs tests that have "nem" or "stellar" in the name
pytest -m stellar  # only runs tests marked with @pytest.mark.stellar

If you want to see debugging information and protocol dumps, run with -v.

Print statements from testing files are not shown by default. To enable them, use -s flag.

If you would like to interact with the device (i.e. press the buttons yourself), just prefix pytest with INTERACT=1:

INTERACT=1 pytest tests/device_tests

When testing transaction signing, there is an option to check transaction hashes on-chain using Blockbook. It is chosen by setting CHECK_ON_CHAIN=1 environment variable before running the tests.

CHECK_ON_CHAIN=1 pytest tests/device_tests

To run the tests quicker, spawn the emulator with disabled animations using -a flag.

./core/emu.py -a

To run the tests even quicker, the emulator should come from a frozen build. (However, then changes to python code files are not reflected in emulator, one needs to build it again each time.)

PYOPT=0 make build_unix_frozen

It is possible to specify the timeout for each test in seconds, using PYTEST_TIMEOUT env variable.

PYTEST_TIMEOUT=15 pytest tests/device_tests

When running tests from Makefile target, it is possible to specify TESTOPTS env variable with testing options, as if pytest would be called normally.

TESTOPTS="-x -v -k test_msg_backup_device.py" make test_emu

When troubleshooting an unstable test that is failing occasionally, following runs it until it fails (so failure is visible on screen):

export TESTOPTS="-x -v -k test_msg_backup_device.py"
while make test_emu; do sleep 1; done

3. Using markers

When you're developing a new currency, you should mark all tests that belong to that currency. For example, if your currency is called NewCoin, your device tests should have the following marker:

@pytest.mark.newcoin

This marker must be registered in REGISTERED_MARKERS file in tests folder.

Tests can be run only for specific models - it is done by disallowing the tests for the other models. @pytest.mark.skip_t1 @pytest.mark.skip_t2 @pytest.mark.skip_tr are valid markers to skip current test for T1, TT and TR respectively.

Extended testing and debugging

Building for debugging (Emulator only)

Build the debuggable unix binary so you can attach the gdb or lldb. This removes optimizations and reduces address space randomizaiton.

make build_unix_debug

The final executable is significantly slower due to ASAN(Address Sanitizer) integration. If you want to catch some memory errors use this.

time ASAN_OPTIONS=verbosity=1:detect_invalid_pointer_pairs=1:strict_init_order=true:strict_string_checks=true TREZOR_PROFILE="" poetry run make test_emu

Coverage (Emulator only)

Get the Python code coverage report.

If you want to get HTML/console summary output you need to install the coverage.py tool.

pip3 install coverage

Run the tests with coverage output.

make build_unix && make coverage