1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2024-11-22 07:28:10 +00:00

feat(tests): add test for supporting older python versions

This commit is contained in:
grdddj 2022-05-27 16:15:21 +02:00 committed by Jiří Musil
parent 6589f020c6
commit 9ca9720f22
4 changed files with 76 additions and 4 deletions

View File

@ -92,6 +92,9 @@ ruststyle_check:
@echo [RUSTFMT] @echo [RUSTFMT]
@cd core/embed/rust ; cargo fmt -- --check @cd core/embed/rust ; cargo fmt -- --check
python_support_check:
./tests/test_python_support.py
## code generation commands: ## code generation commands:
mocks: ## generate mock python headers from C modules mocks: ## generate mock python headers from C modules

View File

@ -623,6 +623,13 @@ python test:
# https://github.com/NixOS/nixpkgs/pull/98915 # https://github.com/NixOS/nixpkgs/pull/98915
- nix-shell --arg fullDeps true --run "unset _PYTHON_SYSCONFIGDATA_NAME && cd python && poetry run tox | ts -s" - nix-shell --arg fullDeps true --run "unset _PYTHON_SYSCONFIGDATA_NAME && cd python && poetry run tox | ts -s"
python support test:
stage: test
<<: *gitlab_caching
needs: []
script:
- nix-shell --run "poetry run make python_support_check | ts -s"
# Storage # Storage

View File

@ -141,7 +141,7 @@ Bitcoin-only version.
## TEST stage - [test.yml](../../ci/test.yml) ## TEST stage - [test.yml](../../ci/test.yml)
All the tests run test cases on the freshly built emulators from the previous `BUILD` stage. All the tests run test cases on the freshly built emulators from the previous `BUILD` stage.
Consists of **34 jobs** below: Consists of **35 jobs** below:
### [core unit test](https://github.com/trezor/trezor-firmware/blob/master/ci/test.yml#L15) ### [core unit test](https://github.com/trezor/trezor-firmware/blob/master/ci/test.yml#L15)
Python and rust unit tests, checking TT functionality. Python and rust unit tests, checking TT functionality.
@ -219,11 +219,13 @@ Persistence tests.
### [python test](https://github.com/trezor/trezor-firmware/blob/master/ci/test.yml#L600) ### [python test](https://github.com/trezor/trezor-firmware/blob/master/ci/test.yml#L600)
### [storage test](https://github.com/trezor/trezor-firmware/blob/master/ci/test.yml#L629) ### [python support test](https://github.com/trezor/trezor-firmware/blob/master/ci/test.yml#L626)
### [core unix memory profiler](https://github.com/trezor/trezor-firmware/blob/master/ci/test.yml#L653) ### [storage test](https://github.com/trezor/trezor-firmware/blob/master/ci/test.yml#L636)
### [connect test core](https://github.com/trezor/trezor-firmware/blob/master/ci/test.yml#L677) ### [core unix memory profiler](https://github.com/trezor/trezor-firmware/blob/master/ci/test.yml#L660)
### [connect test core](https://github.com/trezor/trezor-firmware/blob/master/ci/test.yml#L684)
--- ---
## TEST-HW stage - [test-hw.yml](../../ci/test-hw.yml) ## TEST-HW stage - [test-hw.yml](../../ci/test-hw.yml)

60
tests/test_python_support.py Executable file
View File

@ -0,0 +1,60 @@
#!/usr/bin/env python3
"""
Verifying that all the tools can be run even by older python versions.
Uses `pyright --pythonversion 3.X <path>` output to check for substrings that
indicate the type-hints in the code are not compatible with this version.
"""
import os
import subprocess
import sys
from pathlib import Path
HERE = Path(__file__).resolve().parent
ROOT_DIR = HERE.parent
EXIT_CODE = 0
os.chdir(ROOT_DIR)
versions_to_check = [
"3.7",
"3.8",
"3.9",
]
dirs_to_check = [
"tools",
"common",
"core/tools",
]
signs_of_issues = [
"is unknown import symbol", # we need to import some stuff from typing_extensions instead of typing
"will generate runtime exception", # happens when using `dict` or `list` as a type alias
]
def check_directory(path: str, python_version: str) -> None:
global EXIT_CODE
cmd = (
"pyright",
"--pythonversion",
python_version,
path,
)
result = subprocess.run(cmd, stdout=subprocess.PIPE, text=True)
for line in result.stdout.splitlines():
if any(sign in line for sign in signs_of_issues):
print(line)
EXIT_CODE = 1
for version in versions_to_check:
print(f"Checking python version {version}")
for dir_to_check in dirs_to_check:
check_directory(dir_to_check, version)
sys.exit(EXIT_CODE)