tests: live-HSMS GEM 300 lifecycle scenario via emulator pair

test_gem300_scenario.cpp drives EquipmentDataModel in-memory.  This
companion test does the same lifecycle through actual hsms::Connection
frames on a loopback socket pair:

  S1F13/F14   establish comm
  S3F17/F18   carrier action ProceedWithCarrier (E87)
  S16F11/F12  process job create (E40)
  S14F9/F10   control job create (E94)
  S16F27/F28  CJSTART → CJ → Executing
  S6F11       ControlJobExecuting CEID auto-emitted on transition
  CJ → Completed via internal AllJobsComplete

EquipmentEmulator owns the data model + a passive Connection,
registers state-change handlers that synthesize S6F11/S16F9 on
transitions, and dispatches the inbound primaries above.  HostEmulator
wraps the active Connection and captures everything the equipment
sends unsolicited.

This is the wire-level equivalent of the existing in-memory scenario,
which closes the gap between "FSM works" and "full GEM 300 stack
works on a wire".

Closes #10 in the test-gap backlog.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-06-09 10:51:47 +02:00
parent 72da1dc77f
commit cd22b51377
2 changed files with 283 additions and 0 deletions
+1
View File
@@ -128,6 +128,7 @@ add_executable(secsgem_tests
tests/test_e84.cpp
tests/test_gem300_scenario.cpp
tests/test_wire_ceid_emission.cpp
tests/test_live_gem300.cpp
)
target_link_libraries(secsgem_tests PRIVATE secsgem doctest::doctest)
target_compile_definitions(secsgem_tests PRIVATE