test: live persistent-spool restart end-to-end
Adds a docker-compose service `server-spool` that runs secs_server
with --spool-dir pointed at a named volume. Two-phase Python
harness (interop/spool_persistence_test.py):
1. Enqueue phase: force-spool one S6F11(CEID=300) via the
SPOOL_ON / START / SPOOL_OFF RCMD trio, then disconnect.
2. Driver runs `docker compose restart server-spool` between
the phases — the named volume preserves the journal files.
3. Drain phase: reconnect, send S6F23(Transmit), verify the
replayed S6F11 carries CEID 300.
Surfaces a real interop bug along the way: secsgem-py 0.3.0 encodes
RSDC (and other "single-byte status" fields) as <U1>, while SEMI E5
spells them as <B>. Our `as_binary_first` was strict on Binary; now
accepts either (the byte semantics are identical, and the leniency is
symmetric with the U-type widening from the first interop commit).
Result: enqueue → docker restart → drain returns CEID 300 cleanly.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -75,8 +75,31 @@ services:
|
||||
command: ["python3", "/app/interop/passive_equipment.py", "--port", "5000"]
|
||||
networks: [secs]
|
||||
|
||||
# Server variant for the persistent-spool restart test. Identical to
|
||||
# `server` but with --spool-dir pointed at a named volume so spooled
|
||||
# messages survive `docker compose restart server-spool`.
|
||||
server-spool:
|
||||
<<: *base
|
||||
depends_on:
|
||||
builder:
|
||||
condition: service_completed_successfully
|
||||
command:
|
||||
- /app/build/secs_server
|
||||
- --port
|
||||
- "5000"
|
||||
- --device
|
||||
- "0"
|
||||
- --spool-dir
|
||||
- /spool
|
||||
volumes:
|
||||
- .:/app
|
||||
- build:/app/build
|
||||
- spool:/spool
|
||||
networks: [secs]
|
||||
|
||||
networks:
|
||||
secs: {}
|
||||
|
||||
volumes:
|
||||
build: {}
|
||||
spool: {}
|
||||
|
||||
Reference in New Issue
Block a user