| 65 | } |
| 66 | |
| 67 | async function startFakeServer( |
| 68 | handler: (peer: FakePeer, requestHeaders: Record<string, string | string[] | undefined>) => Promise<void>, |
| 69 | ): Promise<FakeServer> { |
| 70 | const wss = new WebSocketServer({ host: '127.0.0.1', port: 0 }) |
| 71 | const address = wss.address() as AddressInfo |
| 72 | const done = new Promise<void>((resolve, reject) => { |
| 73 | wss.once('connection', (ws, request) => { |
| 74 | handler(new FakePeer(ws), request.headers).then(resolve, reject) |
| 75 | }) |
| 76 | }) |
| 77 | const server = { |
| 78 | url: `ws://127.0.0.1:${address.port}`, |
| 79 | async close() { |
| 80 | await new Promise<void>(resolve => wss.close(() => resolve())) |
| 81 | await done.catch(() => undefined) |
| 82 | }, |
| 83 | } |
| 84 | servers.push(server) |
| 85 | return server |
| 86 | } |
| 87 | |
| 88 | async function expectInitialize(peer: FakePeer): Promise<void> { |
| 89 | const initialize = (await peer.next('initialize')) as { |