# EPOD acceptance tests (for the EPOD server developer) Small test set for the two server changes that the harness work asked for (details: `docs/epod-syntax-hint.md`, `docs/epod-lock-leak.md`) and for the parallel-call behavior (`harness/loadtest.py` numbers). Standard library only, Python 3.9+, no harness code needed. It uses probe objects `ZEPODT_*` in `$TMP` on a **test system**. ```sh cd epod_tests export MCP_URL=http://127.0.0.1:3000/mcp MCP_TOKEN=... # the MCP server export A4H_URL=http://localhost:50000 A4H_USER=... A4H_PASSWORD=... # only for the cleanup (ADT deletion); without it the tests list the probe objects python3 run_tests.py # all; --only T1 T3 for some ``` | test | passes when | state of the server on 2026-10-06 | |---|---|---| | T1 syntax_hint | a rejected write (`TYPE c LENGTH 4` in a method signature) returns syntax messages with a line, not only "save operation failed" | FAIL expected (not implemented; the harness proxy adds abaplint messages) | | T2 no_lock_after_kill | a client killed with SIGKILL during a write (4 delays) leaves no lock: the next write works | PASS (not reproducible on A4H) | | T3 parallel_reads | 6 clients search + syntax check in parallel without `Concurrent call detected` | PASS | | T4 parallel_writes | 3 clients create + write in parallel without `Concurrent call detected` | FAIL expected (the shared connection; 15 to 50 lock hits per 45 s in the harness load test) | | T5 lock_error_text | informational | PASS | A change in the server is done when T1 and T4 pass and T2 and T3 stay green. T1 accepts any answer that carries a line number or a `syntaxCheck` object with messages (the proxy format is in `docs/epod-syntax-hint.md`).