mirror of
https://github.com/trezor/trezor-firmware.git
synced 2025-01-30 17:21:21 +00:00
feat(tests): allow for coverage report even when emulator is controlled by the tests
Allowing tests to specify the profiling wrapper over the emulator it is starting. [no changelog]
This commit is contained in:
parent
315b6f9b06
commit
41e07769e2
@ -57,12 +57,12 @@ core device test:
|
|||||||
needs:
|
needs:
|
||||||
- core unix frozen debug build
|
- core unix frozen debug build
|
||||||
variables:
|
variables:
|
||||||
TREZOR_PROFILING: 1
|
TREZOR_PROFILING: 1 # so that we get coverage data
|
||||||
MULTICORE: 4 # more could interfere with other jobs
|
MULTICORE: 4 # more could interfere with other jobs
|
||||||
script:
|
script:
|
||||||
- $NIX_SHELL --run "poetry run make -C core test_emu_ui_multicore | ts -s"
|
- $NIX_SHELL --run "poetry run make -C core test_emu_ui_multicore | ts -s"
|
||||||
after_script:
|
after_script:
|
||||||
- mv core/src/.coverage core/.coverage.test_emu
|
- mv core/src/.coverage.* core # there will be more coverage files (one per core)
|
||||||
- mv tests/ui_tests/reports/test/ test_ui_report
|
- mv tests/ui_tests/reports/test/ test_ui_report
|
||||||
- $NIX_SHELL --run "poetry run python ci/prepare_ui_artifacts.py | ts -s"
|
- $NIX_SHELL --run "poetry run python ci/prepare_ui_artifacts.py | ts -s"
|
||||||
- diff -u tests/ui_tests/fixtures.json tests/ui_tests/fixtures.suggestion.json
|
- diff -u tests/ui_tests/fixtures.json tests/ui_tests/fixtures.suggestion.json
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
from pathlib import Path
|
||||||
from typing import TYPE_CHECKING, Generator
|
from typing import TYPE_CHECKING, Generator
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
@ -37,6 +38,10 @@ if TYPE_CHECKING:
|
|||||||
from _pytest.config.argparsing import Parser
|
from _pytest.config.argparsing import Parser
|
||||||
from _pytest.terminal import TerminalReporter
|
from _pytest.terminal import TerminalReporter
|
||||||
|
|
||||||
|
|
||||||
|
HERE = Path(__file__).resolve().parent
|
||||||
|
|
||||||
|
|
||||||
# So that we see details of failed asserts from this module
|
# So that we see details of failed asserts from this module
|
||||||
pytest.register_assert_rewrite("tests.common")
|
pytest.register_assert_rewrite("tests.common")
|
||||||
|
|
||||||
@ -83,8 +88,23 @@ def emulator(request: pytest.FixtureRequest) -> Generator["Emulator", None, None
|
|||||||
# 1. normal link, 2. debug link and 3. webauthn fake interface
|
# 1. normal link, 2. debug link and 3. webauthn fake interface
|
||||||
return 20000 + int(worker_id[2:]) * 3
|
return 20000 + int(worker_id[2:]) * 3
|
||||||
|
|
||||||
|
# So that we can generate coverage reports
|
||||||
|
profiling = os.environ.get("TREZOR_PROFILING") == "1"
|
||||||
|
if profiling:
|
||||||
|
core_dir = HERE.parent / "core"
|
||||||
|
profiling_wrapper = core_dir / "prof" / "prof.py"
|
||||||
|
main_args = [str(profiling_wrapper)]
|
||||||
|
# So that the coverage reports have the correct paths
|
||||||
|
os.environ["TREZOR_SRC"] = str(core_dir / "src")
|
||||||
|
else:
|
||||||
|
main_args = ["-m", "main"]
|
||||||
|
|
||||||
with EmulatorWrapper(
|
with EmulatorWrapper(
|
||||||
model, port=_get_port(), headless=True, auto_interact=not interact
|
model,
|
||||||
|
port=_get_port(),
|
||||||
|
headless=True,
|
||||||
|
auto_interact=not interact,
|
||||||
|
main_args=main_args,
|
||||||
) as emu:
|
) as emu:
|
||||||
yield emu
|
yield emu
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
import tempfile
|
import tempfile
|
||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Dict, List, Optional, Tuple
|
from typing import Dict, List, Optional, Sequence, Tuple
|
||||||
|
|
||||||
from trezorlib._internal.emulator import CoreEmulator, Emulator, LegacyEmulator
|
from trezorlib._internal.emulator import CoreEmulator, Emulator, LegacyEmulator
|
||||||
|
|
||||||
@ -75,6 +75,7 @@ class EmulatorWrapper:
|
|||||||
port: Optional[int] = None,
|
port: Optional[int] = None,
|
||||||
headless: bool = True,
|
headless: bool = True,
|
||||||
auto_interact: bool = True,
|
auto_interact: bool = True,
|
||||||
|
main_args: Sequence[str] = ("-m", "main"),
|
||||||
) -> None:
|
) -> None:
|
||||||
if tag is not None:
|
if tag is not None:
|
||||||
executable = filename_from_tag(gen, tag)
|
executable = filename_from_tag(gen, tag)
|
||||||
@ -107,6 +108,7 @@ class EmulatorWrapper:
|
|||||||
port=port,
|
port=port,
|
||||||
headless=headless,
|
headless=headless,
|
||||||
auto_interact=auto_interact,
|
auto_interact=auto_interact,
|
||||||
|
main_args=main_args,
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
raise ValueError(
|
raise ValueError(
|
||||||
|
Loading…
Reference in New Issue
Block a user