From fb8470afd79f9762071d396e4a5a085d6a253685 Mon Sep 17 00:00:00 2001 From: Luigi Pinca Date: Thu, 26 Sep 2024 04:59:29 +0200 Subject: [PATCH] test: deflake test-http-remove-header-stays-removed Instead of relying on a timer, verify that `socket.end()` is called when the `'finish'` event is emitted on the `ServerResponse` object. PR-URL: https://github.com/nodejs/node/pull/55004 Reviewed-By: James M Snell Reviewed-By: Jake Yuesong Li --- .../test-http-remove-header-stays-removed.js | 33 +++++++++---------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/test/parallel/test-http-remove-header-stays-removed.js b/test/parallel/test-http-remove-header-stays-removed.js index 17e9db976c099a..40dcbce73e74f0 100644 --- a/test/parallel/test-http-remove-header-stays-removed.js +++ b/test/parallel/test-http-remove-header-stays-removed.js @@ -25,7 +25,9 @@ const assert = require('assert'); const http = require('http'); -const server = http.createServer(function(request, response) { +const server = http.createServer(common.mustCall(function(request, response) { + const socket = response.socket; + // Removed headers should stay removed, even if node automatically adds them // to the output: response.removeHeader('connection'); @@ -36,32 +38,29 @@ const server = http.createServer(function(request, response) { response.removeHeader('date'); response.setHeader('date', 'coffee o clock'); - response.end('beep boop\n'); -}); - -let response = ''; + response.on('finish', common.mustCall(function() { + // The socket should be closed immediately, with no keep-alive, because + // no content-length or transfer-encoding are used. + assert.strictEqual(socket.writableEnded, true); + })); -process.on('exit', function() { - assert.strictEqual(response, 'beep boop\n'); - console.log('ok'); -}); + response.end('beep boop\n'); +})); server.listen(0, function() { http.get({ port: this.address().port }, function(res) { assert.strictEqual(res.statusCode, 200); assert.deepStrictEqual(res.headers, { date: 'coffee o clock' }); + let response = ''; res.setEncoding('ascii'); res.on('data', function(chunk) { response += chunk; - if (response === 'beep boop\n') { - setTimeout(function() { - // The socket should be closed immediately, with no keep-alive, because - // no content-length or transfer-encoding are used: - assert.strictEqual(res.socket.closed, true); - server.close(); - }, common.platformTimeout(15)); - } + }); + + res.on('end', function() { + assert.strictEqual(response, 'beep boop\n'); + server.close(); }); }); });