diff --git a/test/parallel/test-http-keep-alive-empty-line.mjs b/test/parallel/test-http-keep-alive-empty-line.mjs index a104a0dff2dc25..36c8bead3f6146 100644 --- a/test/parallel/test-http-keep-alive-empty-line.mjs +++ b/test/parallel/test-http-keep-alive-empty-line.mjs @@ -3,6 +3,10 @@ import assert from 'node:assert'; import { createServer } from 'node:http'; import { connect } from 'node:net'; +// This test ensures that data like an empty line (`\r\n`) recevied by the +// server after a request, does not reset the keep-alive timeout. See +// https://github.com/nodejs/node/issues/58140. + const server = createServer({ connectionsCheckingInterval: 100, headersTimeout: 100, @@ -28,23 +32,24 @@ server.listen(0, () => { '\r\n' ); - setTimeout(() => { - client.write('\r\n'); - }, 100); - - let responseBuffer = ''; + let response = ''; + let responseReceived = false; + client.setEncoding('utf-8'); client.on('data', (chunk) => { - responseBuffer += chunk.toString(); + response += chunk; // Check if we've received the full header (ending with \r\n\r\n) - if (responseBuffer.includes('\r\n\r\n')) { - const statusLine = responseBuffer.split('\r\n')[0]; + if (response.includes('\r\n\r\n')) { + responseReceived = true; + const statusLine = response.split('\r\n')[0]; const status = statusLine.split(' ')[1]; assert.strictEqual(status, '404'); - client.end(); + client.write('\r\n'); } }); - client.on('end', common.mustCall()); + client.on('end', common.mustCall(() => { + assert.ok(responseReceived); + })); }); });