mirror of
https://github.com/NanmiCoder/cc-haha
synced 2026-07-16 13:03:31 +08:00
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:
parent
5f97f9ac62
commit
611ebd0645
@ -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))
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user