Harden bridge broker restart (#862)
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import { chmodSync, mkdirSync, mkdtempSync, rmSync, writeFileSync } from 'fs'
|
||||
import { createServer, type Server } from 'net'
|
||||
import { tmpdir } from 'os'
|
||||
import { join } from 'path'
|
||||
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
|
||||
@@ -74,4 +75,36 @@ describe('agent bridge manager command resolution', () => {
|
||||
expect(DEFAULT_AGENT_BRIDGE_ENDPOINT).toContain(`hermes-agent-bridge-test-${process.pid}`)
|
||||
expect(DEFAULT_AGENT_BRIDGE_ENDPOINT).not.toBe('ipc:///tmp/hermes-agent-bridge.sock')
|
||||
})
|
||||
|
||||
it('waits briefly for a restarting bridge socket before failing', async () => {
|
||||
const endpoint = process.platform === 'win32'
|
||||
? `tcp://127.0.0.1:${32000 + (process.pid % 10000)}`
|
||||
: `ipc://${join(tempDir, 'late-bridge.sock')}`
|
||||
let server: Server | undefined
|
||||
|
||||
const ready = new Promise<void>((resolve) => {
|
||||
setTimeout(() => {
|
||||
server = createServer((socket) => {
|
||||
socket.once('data', () => {
|
||||
socket.end(`${JSON.stringify({ ok: true, pong: true })}\n`)
|
||||
})
|
||||
})
|
||||
if (endpoint.startsWith('ipc://')) {
|
||||
server.listen(endpoint.slice('ipc://'.length), resolve)
|
||||
} else {
|
||||
const url = new URL(endpoint)
|
||||
server.listen(Number(url.port), url.hostname, resolve)
|
||||
}
|
||||
}, 150)
|
||||
})
|
||||
|
||||
try {
|
||||
const { AgentBridgeClient } = await import('../../packages/server/src/services/hermes/agent-bridge/client')
|
||||
const client = new AgentBridgeClient({ endpoint, connectRetryMs: 1000, timeoutMs: 1000 })
|
||||
await expect(client.ping()).resolves.toMatchObject({ ok: true, pong: true })
|
||||
await ready
|
||||
} finally {
|
||||
await new Promise<void>((resolve) => server?.close(() => resolve()) ?? resolve())
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user