Skip to content

Commit a5ee59c

Browse files
panvaaduh95
authored andcommitted
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: #54817 Refs: #43465 Signed-off-by: Filip Skokan <panva.ip@gmail.com> Assisted-by: Claude, Codex PR-URL: #66320 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
1 parent 7c34639 commit a5ee59c

2 files changed

Lines changed: 22 additions & 24 deletions

File tree

‎test/sequential/sequential.status‎

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,9 @@ test-http2-large-file: PASS, FLAKY
1313
[$system==win32]
1414

1515
[$system==linux]
16-
# https://github.com/nodejs/node/issues/54817
17-
test-http-server-request-timeouts-mixed: PASS, FLAKY
1816

1917
[$system==macos]
2018

21-
# https://github.com/nodejs/node/issues/43465
22-
test-http-server-request-timeouts-mixed: PASS, FLAKY
23-
2419
[$system==solaris] # Also applies to SmartOS
2520
test-worker-prof: PASS, FLAKY
2621

‎test/sequential/test-http-server-request-timeouts-mixed.js‎

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
const common = require('../common');
44
const assert = require('assert');
5+
const { once } = require('events');
56
const { createServer } = require('http');
67
const { connect } = require('net');
78

@@ -70,7 +71,7 @@ server.listen(0, common.mustCall(() => {
7071
request1.client.write(requestBodyPart1);
7172

7273
// After a little while send two new requests
73-
setTimeout(() => {
74+
setTimeout(common.mustCall(() => {
7475
request2 = createClient(server);
7576
request3 = createClient(server);
7677

@@ -79,7 +80,17 @@ server.listen(0, common.mustCall(() => {
7980

8081
// Send the third request and stop in the middle of the headers
8182
request3.client.write(requestBodyPart1);
82-
}, headersTimeout * 0.2);
83+
84+
request2.client.on('end', common.mustCall(() => {
85+
// The second request times out due to headersTimeout, so after the first
86+
// request has been completed and before the fourth request's body is sent
87+
assert(request1.completed);
88+
assert(!request4.completed);
89+
90+
assert(request1.response.startsWith(responseOk));
91+
assert(request2.response.startsWith(responseTimeout)); // It is expired due to headersTimeout
92+
}));
93+
}), headersTimeout * 0.2);
8394

8495
// After another little while send the last two new requests
8596
setTimeout(() => {
@@ -103,31 +114,23 @@ server.listen(0, common.mustCall(() => {
103114
}, headersTimeout * 0.8);
104115

105116
setTimeout(common.mustCall(() => {
106-
// After the first timeout, the first request should have been completed and second timedout
107-
assert(request1.completed);
108-
assert(request2.completed);
117+
// After the first timeout, the requests with completed headers should still be pending
109118
assert(!request3.completed);
110119
assert(!request4.completed);
111120
assert(!request5.completed);
112121

113-
assert(request1.response.startsWith(responseOk));
114-
assert(request2.response.startsWith(responseTimeout)); // It is expired due to headersTimeout
122+
const pending = [request3, request4, request5];
123+
Promise.all(pending.map(({ client }) => once(client, 'end'))).then(common.mustCall(() => {
124+
// All request should be completed now, either with 200 or 408
125+
assert(request3.response.startsWith(responseTimeout)); // It is expired due to requestTimeout
126+
assert(request4.response.startsWith(responseOk));
127+
assert(request5.response.startsWith(responseTimeout)); // It is expired due to requestTimeout
128+
server.close();
129+
}));
115130
}), headersTimeout * 1.4);
116131

117132
setTimeout(() => {
118133
// Complete the body for the fourth request
119134
request4.client.write(requestBodyPart3);
120135
}, headersTimeout * 1.5);
121-
122-
setTimeout(common.mustCall(() => {
123-
// All request should be completed now, either with 200 or 408
124-
assert(request3.completed);
125-
assert(request4.completed);
126-
assert(request5.completed);
127-
128-
assert(request3.response.startsWith(responseTimeout)); // It is expired due to requestTimeout
129-
assert(request4.response.startsWith(responseOk));
130-
assert(request5.response.startsWith(responseTimeout)); // It is expired due to requestTimeout
131-
server.close();
132-
}), headersTimeout * 3 + connectionsCheckingInterval);
133136
}));

0 commit comments

Comments
 (0)