Commit 76a5db6bb0e for nodejs
commit 76a5db6bb0e1df24a9fa275c2005c1517aeb4a40
Author: Filip Skokan <panva.ip@gmail.com>
Date: Sat Sep 26 12:15:30 2026 +0200
test: deflake http server mixed request timeouts
Await client end events before checking completed responses instead of
asserting completion at fixed deadlines. Keep the pending-request checks
and verify that the headers-only request expires before the later
successful request completes.
Refs: https://github.com/nodejs/node/issues/54817
Refs: https://github.com/nodejs/node/issues/43465
Signed-off-by: Filip Skokan <panva.ip@gmail.com>
Assisted-by: Claude, Codex
PR-URL: https://github.com/nodejs/node/pull/66320
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
diff --git a/test/sequential/sequential.status b/test/sequential/sequential.status
index b518481383b..73845dd1473 100644
--- a/test/sequential/sequential.status
+++ b/test/sequential/sequential.status
@@ -9,14 +9,9 @@ prefix sequential
[$system==win32]
[$system==linux]
-# https://github.com/nodejs/node/issues/54817
-test-http-server-request-timeouts-mixed: PASS, FLAKY
[$system==macos]
-# https://github.com/nodejs/node/issues/43465
-test-http-server-request-timeouts-mixed: PASS, FLAKY
-
[$system==solaris] # Also applies to SmartOS
test-worker-prof: PASS, FLAKY
diff --git a/test/sequential/test-http-server-request-timeouts-mixed.js b/test/sequential/test-http-server-request-timeouts-mixed.js
index 034aa3630bb..8e79cf6c931 100644
--- a/test/sequential/test-http-server-request-timeouts-mixed.js
+++ b/test/sequential/test-http-server-request-timeouts-mixed.js
@@ -2,6 +2,7 @@
const common = require('../common');
const assert = require('assert');
+const { once } = require('events');
const { createServer } = require('http');
const { connect } = require('net');
@@ -70,7 +71,7 @@ server.listen(0, common.mustCall(() => {
request1.client.write(requestBodyPart1);
// After a little while send two new requests
- setTimeout(() => {
+ setTimeout(common.mustCall(() => {
request2 = createClient(server);
request3 = createClient(server);
@@ -79,7 +80,17 @@ server.listen(0, common.mustCall(() => {
// Send the third request and stop in the middle of the headers
request3.client.write(requestBodyPart1);
- }, headersTimeout * 0.2);
+
+ request2.client.on('end', common.mustCall(() => {
+ // The second request times out due to headersTimeout, so after the first
+ // request has been completed and before the fourth request's body is sent
+ assert(request1.completed);
+ assert(!request4.completed);
+
+ assert(request1.response.startsWith(responseOk));
+ assert(request2.response.startsWith(responseTimeout)); // It is expired due to headersTimeout
+ }));
+ }), headersTimeout * 0.2);
// After another little while send the last two new requests
setTimeout(() => {
@@ -103,31 +114,23 @@ server.listen(0, common.mustCall(() => {
}, headersTimeout * 0.8);
setTimeout(common.mustCall(() => {
- // After the first timeout, the first request should have been completed and second timedout
- assert(request1.completed);
- assert(request2.completed);
+ // After the first timeout, the requests with completed headers should still be pending
assert(!request3.completed);
assert(!request4.completed);
assert(!request5.completed);
- assert(request1.response.startsWith(responseOk));
- assert(request2.response.startsWith(responseTimeout)); // It is expired due to headersTimeout
+ const pending = [request3, request4, request5];
+ Promise.all(pending.map(({ client }) => once(client, 'end'))).then(common.mustCall(() => {
+ // All request should be completed now, either with 200 or 408
+ assert(request3.response.startsWith(responseTimeout)); // It is expired due to requestTimeout
+ assert(request4.response.startsWith(responseOk));
+ assert(request5.response.startsWith(responseTimeout)); // It is expired due to requestTimeout
+ server.close();
+ }));
}), headersTimeout * 1.4);
setTimeout(() => {
// Complete the body for the fourth request
request4.client.write(requestBodyPart3);
}, headersTimeout * 1.5);
-
- setTimeout(common.mustCall(() => {
- // All request should be completed now, either with 200 or 408
- assert(request3.completed);
- assert(request4.completed);
- assert(request5.completed);
-
- assert(request3.response.startsWith(responseTimeout)); // It is expired due to requestTimeout
- assert(request4.response.startsWith(responseOk));
- assert(request5.response.startsWith(responseTimeout)); // It is expired due to requestTimeout
- server.close();
- }), headersTimeout * 3 + connectionsCheckingInterval);
}));