Files
pubsub/tasks/018-integration-test-ws-client-server.md
glm-5.1 1306716897 Decompose architecture into atomic, dependency-ordered tasks
19 tasks covering core testing, Redis hardening, WebSocket client/server
adapters, Worker adapter, and final review gates. Iroh adapters are tracked
as a deferred placeholder blocked on the @alkdev/iroh fork.

Phases: core validation → Redis hardening → review gate → WebSocket
adapters → review gate → Worker adapter → review gate → final validation.
2026-05-08 05:50:43 +00:00

1.8 KiB

id: integration-test-ws-client-server name: Integration test: WebSocket client and server event targets together status: pending depends_on: [websocket-client-tests, websocket-server-tests] scope: moderate risk: medium impact: component level: implementation

Description

Test the WebSocket client and server adapters working together — a spoke subscribes via the client adapter, the hub fans out via the server adapter. This validates the full subscription control protocol end-to-end:

  1. Client connects to server
  2. Client calls addEventListener → sends __subscribe to server
  3. Server receives __subscribe → adds client to subscription map
  4. Server dispatchEvent on that topic → message sent only to subscribed client
  5. Client receives message → dispatches to local listeners
  6. Client calls removeEventListener → sends __unsubscribe to server
  7. Server removes client from subscription map

This is also where we validate that createPubSub works with the WebSocket adapters.

Acceptance Criteria

  • Integration test: bidirectional communication between WS client and server
  • Integration test: subscription control protocol end-to-end
  • Integration test: topic-based fan-out — subscribed clients receive events, unsubscribed don't
  • Integration test: direct messaging via topic scoping "direct:${spokeId}"
  • Integration test: createPubSub works with WS client event target
  • Integration test: createPubSub works with WS server event target

References

  • docs/architecture/event-targets/websocket-client.md
  • docs/architecture/event-targets/websocket-server.md
  • docs/architecture/decisions/003-subscription-control-protocol.md

Notes

To be filled by implementation agent

Summary

To be filled on completion