@@ -3,6 +3,10 @@ import assert from 'node:assert';
|
3 | 3 | import { createServer } from 'node:http'; |
4 | 4 | import { connect } from 'node:net'; |
5 | 5 | |
| 6 | +// This test ensures that data like an empty line (`\r\n`) recevied by the |
| 7 | +// server after a request, does not reset the keep-alive timeout. See |
| 8 | +// https://github.com/nodejs/node/issues/58140. |
| 9 | + |
6 | 10 | const server = createServer({ |
7 | 11 | connectionsCheckingInterval: 100, |
8 | 12 | headersTimeout: 100, |
@@ -28,23 +32,24 @@ server.listen(0, () => {
|
28 | 32 | '\r\n' |
29 | 33 | ); |
30 | 34 | |
31 | | -setTimeout(() => { |
32 | | -client.write('\r\n'); |
33 | | -}, 100); |
34 | | - |
35 | | -let responseBuffer = ''; |
| 35 | +let response = ''; |
| 36 | +let responseReceived = false; |
36 | 37 | |
| 38 | +client.setEncoding('utf-8'); |
37 | 39 | client.on('data', (chunk) => { |
38 | | -responseBuffer += chunk.toString(); |
| 40 | +response += chunk; |
39 | 41 | |
40 | 42 | // Check if we've received the full header (ending with \r\n\r\n) |
41 | | -if (responseBuffer.includes('\r\n\r\n')) { |
42 | | -const statusLine = responseBuffer.split('\r\n')[0]; |
| 43 | +if (response.includes('\r\n\r\n')) { |
| 44 | +responseReceived = true; |
| 45 | +const statusLine = response.split('\r\n')[0]; |
43 | 46 | const status = statusLine.split(' ')[1]; |
44 | 47 | assert.strictEqual(status, '404'); |
45 | | -client.end(); |
| 48 | +client.write('\r\n'); |
46 | 49 | } |
47 | 50 | }); |
48 | | -client.on('end', common.mustCall()); |
| 51 | +client.on('end', common.mustCall(() => { |
| 52 | +assert.ok(responseReceived); |
| 53 | +})); |
49 | 54 | }); |
50 | 55 | }); |