test(gem): table-driven conformance sweep over the default handler set

One ordered in-process scenario drives 53 of the 56 registered handlers
through Router::dispatch — S1 identification/comms/control, S2 ECs/clock/
event-config/commands/trace/limits/spool, S5 alarms+exceptions, S6 reports,
S7 recipes, S10 terminal, S14/S16 E39+E40/E94 jobs, S3 carriers — asserting
every reply is the paired (stream, function+1) with a body, plus targeted
state checks (OnlineRemote after S1F17, PJ exists after S16F11, HostOffline
after S1F15) and the Router's SxF0 abort fallback for unregistered W=1
primaries. Same flow secs_conformance runs over a live socket, but cheap
enough for every build; closes the '56 handlers, 4 direct tests' gap from
the design review.

Also seeds message-level golden frames: S1F13's body pinned to bytes
hand-computed from the E5 encoding rules — an external check on message
composition, not our codec validating itself (TODO: S5F1, composed S6F11).

Suite: 466 cases / 3052 assertions (+236), all green.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-06-10 19:26:28 +02:00
parent 42044e92e2
commit b0a4c331cf
3 changed files with 196 additions and 3 deletions
+1
View File
@@ -218,6 +218,7 @@ add_executable(secsgem_tests
tests/test_data_model.cpp
tests/test_runtime.cpp
tests/test_default_handlers.cpp
tests/test_handler_conformance.cpp
tests/test_name_index.cpp
tests/test_messages.cpp
tests/test_loader.cpp