Skip to content

Commit 013db07

Browse files
committed
test-qmp-client: run mock QMP servers as fibers on the shared event loop
The mock servers used to be driven out-of-band: each test created a socketpair, forked a child, ran a hand-coded request/response script against the raw fd, and sent SIGTERM to tear it down. That worked but required pidref/process-util/signal plumbing in every test, two distinct execution contexts that couldn't share state, and a JsonStream attached to the mock side that pretended to be event-loop-driven while actually being driven manually via blocking reads. Now that JsonStream suspends when on a fiber, the mocks can live inside the same process and event loop as the client. Each mock is rewritten as an sd-fiber that runs alongside the client fiber: so the mock fiber yields on I/O and the event loop schedules the client in the meantime. Both sides progress cooperatively, no fork/SIGTERM/PID tracking, no manual phase tracking. Two cleanups fall out of the rewrite: - A QMP_TEST(name, mock_fn) { ... } macro encapsulates the per-test scaffolding (event loop, socketpair, mock fiber spawn, exit-on-idle shim) and injects an already-connected QmpClient *client into the test body. Each test now reads as a flat sequence of qmp_client_call() invocations against that client. - Repeated mock command/reply scripting is factored into mock_qmp_expect(), mock_qmp_reply(), mock_qmp_expect_and_reply(), mock_qmp_handshake(), and mock_qmp_query_status_running(). The greeting JSON is built with sd_json_buildo() instead of being parsed from a literal. The file shrinks from 756 to 494 lines, mostly through deletions.
1 parent ab9efcd commit 013db07

1 file changed

Lines changed: 272 additions & 527 deletions

File tree

0 commit comments

Comments
 (0)