From 32e12ab5d180a9cff4daa5987119b7db1cf09dc8 Mon Sep 17 00:00:00 2001 From: highlander Date: Fri, 21 Aug 2026 01:40:49 -0500 Subject: [PATCH] fix(report): recognise any test_ module, not just test_msg_/test_sign_/test_verify_ parse_junit() extracted the module from a JUnit classname only when a dotted part started with test_msg_, test_sign_ or test_verify_. Anything else produced no 'mod::meth' key at all, and _lookup() has no bare-method fallback (deliberately -- a method-name collision once rendered a never-run test as PASS). So a catalogued test in a module outside those three families is INVISIBLE to the report: its results are parsed, then silently dropped, and the section renders "Pending (no firmware support yet)". That is exactly what happened to the new Storage Upgrade Preservation section: all eight tests in test_storage_version_gate.py were passing while the report showed the feature as unsupported. A section that says "pending" when the tests are green is worse than no section, because it reads as a deliberate gap. Widened to any part starting with test_. Native gtest suites are unaffected -- they carry a bare classname with no dot and were already keyed as Suite::Test. Report on the same inputs: 18 pending -> 0 pending. --- scripts/generate-test-report.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/scripts/generate-test-report.py b/scripts/generate-test-report.py index 66bc996b..84a91060 100644 --- a/scripts/generate-test-report.py +++ b/scripts/generate-test-report.py @@ -377,7 +377,12 @@ def parse_junit(path): if cls: parts = cls.split('.') for p in parts: - if p.startswith('test_msg_') or p.startswith('test_sign_') or p.startswith('test_verify_'): + # Any test module, not just the test_msg_/test_sign_/test_verify_ + # families. test_storage_version_gate matched none of those, so + # it produced no 'mod::meth' key and all eight of its results + # were invisible -- the section rendered "Pending (no firmware + # support yet)" while the tests were passing. + if p.startswith('test_'): mod = p break if not mod and '.' not in cls: