Skip to content

Commit adcbcb2

Browse files
committed
test: simplify the test cases in http timeouts mix
1 parent dc53c29 commit adcbcb2

File tree

1 file changed

+48
-70
lines changed

1 file changed

+48
-70
lines changed

test/parallel/test-http-server-request-timeouts-mixed.js

Lines changed: 48 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ const common = require('../common');
44
const assert = require('assert');
55
const { createServer } = require('http');
66
const { connect } = require('net');
7+
const { promisify } = require('util');
78

89
// This test validates that request are correct checked for both requests and headers timeout in various situations.
910

@@ -16,10 +17,13 @@ const responseTimeout = 'HTTP/1.1 408 Request Timeout\r\n';
1617

1718
const headersTimeout = common.platformTimeout(2000);
1819
const connectionsCheckingInterval = headersTimeout / 4;
20+
const requestTimeout = headersTimeout * 2;
21+
const threadSleepDelay = requestTimeout + headersTimeout;
22+
const delay = promisify(setTimeout);
1923

2024
const server = createServer({
2125
headersTimeout,
22-
requestTimeout: headersTimeout * 2,
26+
requestTimeout,
2327
keepAliveTimeout: 0,
2428
connectionsCheckingInterval
2529
}, common.mustCall((req, res) => {
@@ -32,7 +36,7 @@ const server = createServer({
3236
}, 4));
3337

3438
assert.strictEqual(server.headersTimeout, headersTimeout);
35-
assert.strictEqual(server.requestTimeout, headersTimeout * 2);
39+
assert.strictEqual(server.requestTimeout, requestTimeout);
3640

3741
let i = 0;
3842
function createClient(server) {
@@ -58,74 +62,48 @@ function createClient(server) {
5862
return request;
5963
}
6064

61-
server.listen(0, common.mustCall(() => {
65+
server.listen(0, common.mustCall(async () => {
66+
// Create first and second request and set headers
6267
const request1 = createClient(server);
63-
let request2;
64-
let request3;
65-
let request4;
66-
let request5;
67-
68-
// Send the first request and stop before the body
68+
const request2 = createClient(server);
6969
request1.client.write(requestBodyPart1);
70-
71-
// After a little while send two new requests
72-
setTimeout(() => {
73-
request2 = createClient(server);
74-
request3 = createClient(server);
75-
76-
// Send the second request, stop in the middle of the headers
77-
request2.client.write(requestBodyPart1);
78-
// Send the second request, stop in the middle of the headers
79-
request3.client.write(requestBodyPart1);
80-
}, headersTimeout * 0.2);
81-
82-
// After another little while send the last two new requests
83-
setTimeout(() => {
84-
request4 = createClient(server);
85-
request5 = createClient(server);
86-
87-
// Send the fourth request, stop in the middle of the headers
88-
request4.client.write(requestBodyPart1);
89-
// Send the fifth request, stop in the middle of the headers
90-
request5.client.write(requestBodyPart1);
91-
}, headersTimeout * 0.6);
92-
93-
setTimeout(() => {
94-
// Finish the first request
95-
request1.client.write(requestBodyPart2 + requestBodyPart3);
96-
97-
// Complete headers for all requests but second
98-
request3.client.write(requestBodyPart2);
99-
request4.client.write(requestBodyPart2);
100-
request5.client.write(requestBodyPart2);
101-
}, headersTimeout * 0.8);
102-
103-
setTimeout(() => {
104-
// After the first timeout, the first request should have been completed and second timedout
105-
assert(request1.completed);
106-
assert(request2.completed);
107-
assert(!request3.completed);
108-
assert(!request4.completed);
109-
assert(!request5.completed);
110-
111-
assert(request1.response.startsWith(responseOk));
112-
assert(request2.response.startsWith(responseTimeout)); // It is expired due to headersTimeout
113-
}, headersTimeout * 1.2 + connectionsCheckingInterval);
114-
115-
setTimeout(() => {
116-
// Complete the body for the fourth request
117-
request4.client.write(requestBodyPart3);
118-
}, headersTimeout * 1.5);
119-
120-
setTimeout(() => {
121-
// All request should be completed now, either with 200 or 408
122-
assert(request3.completed);
123-
assert(request4.completed);
124-
assert(request5.completed);
125-
126-
assert(request3.response.startsWith(responseTimeout)); // It is expired due to requestTimeout
127-
assert(request4.response.startsWith(responseOk));
128-
assert(request5.response.startsWith(responseTimeout)); // It is expired due to requestTimeout
129-
server.close();
130-
}, headersTimeout * 3 + connectionsCheckingInterval);
70+
request2.client.write(requestBodyPart1);
71+
72+
// Finish the first request now and wait more than the request timeout value
73+
request1.client.write(requestBodyPart2 + requestBodyPart3);
74+
await delay(threadSleepDelay);
75+
76+
// First and second request should complete now
77+
assert(request1.completed);
78+
assert(request2.completed); // Completed, but a timeout request
79+
80+
assert(request1.response.startsWith(responseOk));
81+
assert(request2.response.startsWith(responseTimeout)); // Reques expired due to headersTimeout
82+
83+
// Create another 3 requests with headers
84+
const request3 = createClient(server);
85+
const request4 = createClient(server);
86+
const request5 = createClient(server);
87+
request3.client.write(requestBodyPart1 + requestBodyPart2);
88+
request4.client.write(requestBodyPart1 + requestBodyPart2);
89+
request5.client.write(requestBodyPart1 + requestBodyPart2);
90+
91+
// None of the requests will be completed because they only recieved headers
92+
assert(!request3.completed);
93+
assert(!request4.completed);
94+
assert(!request5.completed);
95+
96+
// Finish the fourth request now and wait more than the request timeout value
97+
request4.client.write(requestBodyPart3);
98+
await delay(threadSleepDelay);
99+
100+
// All three requests should complete now
101+
assert(request3.completed);
102+
assert(request4.completed);
103+
assert(request5.completed);
104+
105+
assert(request3.response.startsWith(responseTimeout)); // It is expired due to headersTimeout
106+
assert(request4.response.startsWith(responseOk));
107+
assert(request5.response.startsWith(responseTimeout)); // It is expired due to headersTimeout
108+
server.close();
131109
}));

0 commit comments

Comments
 (0)