Stabilize adapter coverage after main sync

The local main sync exposed a flaky WsBridge integration test during coverage: the client-side open event could resolve before the test's server-side connection array observed the connection. The test now waits for the server connection event before sending messages through the captured socket, preserving the FIFO behavior assertion without changing production bridge logic.

Constraint: Worktree validation must cover the latest local main commit before merging back

Rejected: Retry the full quality gate without a code change | the same timing race can recur and hide real merge readiness

Confidence: high

Scope-risk: narrow

Directive: Keep WsBridge integration tests synchronized on server-side connection readiness before using captured sockets

Tested: bun test adapters/common/__tests__/ws-bridge.test.ts

Tested: bun test --coverage --coverage-reporter=lcov --coverage-reporter=text --coverage-dir /tmp/cc-haha-adapters-coverage adapters
This commit is contained in:
程序员阿江(Relakkes) 2026-05-19 00:33:45 +08:00
parent 5f97f9ac62
commit 611ebd0645

View File

@ -97,6 +97,22 @@ describe('WsBridge: handler serialization', () => {
})
})
async function waitForServerConnection(): Promise<WsServerSocket> {
if (connections[0]) return connections[0]
await new Promise<void>((resolve, reject) => {
const onConnection = () => {
clearTimeout(timer)
resolve()
}
const timer = setTimeout(() => {
server.off('connection', onConnection)
reject(new Error('Timed out waiting for test WebSocket connection'))
}, 500)
server.once('connection', onConnection)
})
return connections[0]!
}
it('processes handler calls in strict FIFO order per chatId', async () => {
const bridge = new WsBridge(serverUrl, 'test')
const events: string[] = []
@ -115,8 +131,7 @@ describe('WsBridge: handler serialization', () => {
bridge.connectSession('chat-1', 'sess-1')
const ok = await bridge.waitForOpen('chat-1')
expect(ok).toBe(true)
expect(connections.length).toBe(1)
const serverWs = connections[0]!
const serverWs = await waitForServerConnection()
// Blast three messages back-to-back. msg1 is slow, msg2/msg3 are fast.
// With serialization: start:1, end:1, start:2, end:2, start:3, end:3
@ -151,7 +166,7 @@ describe('WsBridge: handler serialization', () => {
bridge.connectSession('chat-err', 'sess-err')
await bridge.waitForOpen('chat-err')
const serverWs = connections[0]!
const serverWs = await waitForServerConnection()
serverWs.send(JSON.stringify({ throw: true }))
serverWs.send(JSON.stringify({ tag: 'after' }))
@ -169,7 +184,7 @@ describe('WsBridge: handler serialization', () => {
bridge.connectSession('chat-deleted', 'sess-deleted')
await bridge.waitForOpen('chat-deleted')
const serverWs = connections[0]!
const serverWs = await waitForServerConnection()
serverWs.close(1000, 'session deleted')
await new Promise((resolve) => setTimeout(resolve, 50))