python-integration-tests has been carried through this release as "a pre-existing CI blocker". It is now diagnosed rather than merely observed.
It is not a slow suite — it is two files that stall
Reproduced locally against the pinned emulator image, at both 440619703 (pre-release-work base) and head:
| file |
base 4406197 |
head |
test_msg_eos_signtx.py |
19 tests pass, then stalls |
same |
test_msg_thorchain_signtx.py |
5 tests pass, then stalls |
same |
Each was killed at a 60s local timeout. Everything else in the suite completes in well under a second per file. So the 30-minute CI wall clock is consumed by these two, and the job is killed rather than failing.
Why that matters more than a red check
scripts/emulator/python-keepkey-tests.sh runs Phase 1 (screenshot capture, || true) and then Phase 2 — the documented actual gate. Because the job is killed inside Phase 2, Phase 2 never completes on this branch, generate-test-report.py never validates against SECTIONS, and every test file ordered after the stall is simply unmeasured.
A hang is worse than a failure here: it produces no JUnit XML for the affected range, so absence of a failure report is not evidence of passing.
Measurement trap for whoever picks this up
Do not measure by running the suite sequentially against one emulator. A killed hang leaves the device wedged, and every subsequent file reports spurious collection errors and failures. I initially recorded five collection errors and four failures this way; re-running each file against a fresh emulator showed most of them clean. Use one emulator per file.
Suggested fix direction
Bound the stall rather than the job: add a per-test timeout (pytest-timeout) so a stuck test fails its own test instead of consuming the whole budget, and give the two files a real diagnosis separately. Related prior context: THORChain tests have historically depended on network hosts that are now dead.
python-integration-testshas been carried through this release as "a pre-existing CI blocker". It is now diagnosed rather than merely observed.It is not a slow suite — it is two files that stall
Reproduced locally against the pinned emulator image, at both
440619703(pre-release-work base) and head:test_msg_eos_signtx.pytest_msg_thorchain_signtx.pyEach was killed at a 60s local timeout. Everything else in the suite completes in well under a second per file. So the 30-minute CI wall clock is consumed by these two, and the job is killed rather than failing.
Why that matters more than a red check
scripts/emulator/python-keepkey-tests.shruns Phase 1 (screenshot capture,|| true) and then Phase 2 — the documented actual gate. Because the job is killed inside Phase 2, Phase 2 never completes on this branch,generate-test-report.pynever validates againstSECTIONS, and every test file ordered after the stall is simply unmeasured.A hang is worse than a failure here: it produces no JUnit XML for the affected range, so absence of a failure report is not evidence of passing.
Measurement trap for whoever picks this up
Do not measure by running the suite sequentially against one emulator. A killed hang leaves the device wedged, and every subsequent file reports spurious collection errors and failures. I initially recorded five collection errors and four failures this way; re-running each file against a fresh emulator showed most of them clean. Use one emulator per file.
Suggested fix direction
Bound the stall rather than the job: add a per-test timeout (
pytest-timeout) so a stuck test fails its own test instead of consuming the whole budget, and give the two files a real diagnosis separately. Related prior context: THORChain tests have historically depended on network hosts that are now dead.