-
Notifications
You must be signed in to change notification settings - Fork 30
[Enhancement] Add unit tests for GatewayClient reconnect and backoff logic #230
Copy link
Copy link
Open
Labels
area/dxObservability & DX WGObservability & DX WGarea/gatewayGateway Integration WGGateway Integration WGenhancementNew feature or requestNew feature or requesthelp wantedExtra attention is neededExtra attention is needed
Description
What problem are you trying to solve?
GatewayClient manages the WebSocket connection lifecycle including exponential backoff reconnection, challenge/response handshake, a 15-second pending request timeout, and close-rejects-all-pending behavior. None of this is unit tested. The existing tests only mock the client at a high level. A regression in reconnect logic would break the entire app.
Where
- Source:
packages/desktop/src/main/ws/gateway-client.ts - Key functions:
scheduleReconnect()(exponential backoff), pending request timeout (REQ_TIMEOUT_MS = 15_000), and the close handler that rejects all pending requests
What needs to be done
- Create
packages/desktop/test/gateway-client.test.ts - Extract the backoff calculation into a pure function and test it:
- Verify exponential growth: attempt 1 → base delay, attempt 2 → 2x, etc.
- Verify it caps at a maximum delay
- Test pending request timeout:
- A request that does not receive a response within 15s should reject
- Use
vi.useFakeTimers()to advance time
- Test close-rejects-all-pending:
- When the connection closes, all pending requests should reject with a connection error
- Consider using
mock-socketor a lightweight WS test harness for full lifecycle tests - Run
pnpm checkto verify
Why does this matter?
The WebSocket connection is the only transport between the app and the gateway. If reconnect logic breaks, the app is dead. Tests here are a safety net for the most critical transport layer.
Primary area
Settings or gateway connection
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
area/dxObservability & DX WGObservability & DX WGarea/gatewayGateway Integration WGGateway Integration WGenhancementNew feature or requestNew feature or requesthelp wantedExtra attention is neededExtra attention is needed