(
fn: (socket: RedisSocket, underlying: net.Socket) => Promise<void>
)
| 106 | } |
| 107 | |
| 108 | async function withConnectedSocket( |
| 109 | fn: (socket: RedisSocket, underlying: net.Socket) => Promise<void> |
| 110 | ) { |
| 111 | const server = net.createServer(); |
| 112 | server.on('connection', conn => conn.on('error', () => { /* ignore */ })); |
| 113 | await new Promise<void>(resolve => server.listen(0, '127.0.0.1', resolve)); |
| 114 | const { port } = server.address() as net.AddressInfo; |
| 115 | |
| 116 | const capture = captureUnderlyingSocket(); |
| 117 | try { |
| 118 | const socket = createSocket({ |
| 119 | host: '127.0.0.1', |
| 120 | port, |
| 121 | reconnectStrategy: false |
| 122 | }); |
| 123 | |
| 124 | await socket.connect(); |
| 125 | assert.ok(capture.captured.socket, 'captured underlying socket'); |
| 126 | |
| 127 | try { |
| 128 | await fn(socket, capture.captured.socket!); |
| 129 | } finally { |
| 130 | // Tear down the connection so server.close() doesn't wait for it. |
| 131 | capture.captured.socket?.destroy(); |
| 132 | } |
| 133 | } finally { |
| 134 | capture.restore(); |
| 135 | await new Promise<void>(resolve => server.close(() => resolve())); |
| 136 | } |
| 137 | } |
| 138 | |
| 139 | it('should short-circuit when the underlying socket is no longer writable (#3282)', async () => { |
| 140 | await withConnectedSocket(async (socket, underlying) => { |
no test coverage detected