Skip to content

Commit 56c47b5

Browse files
ShogunPandalpinca
authored andcommitted
test: use consistent timeouts
PR-URL: #42893 Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Co-authored-by: Luigi Pinca <luigipinca@gmail.com>
1 parent 2f192c4 commit 56c47b5

11 files changed

+153
-22
lines changed

test/parallel/test-http-server-headers-timeout-delayed-headers.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,12 @@ const { connect } = require('net');
1010
// pauses before start sending the request.
1111

1212
let sendDelayedRequestHeaders;
13-
const headersTimeout = common.platformTimeout(1000);
13+
const headersTimeout = common.platformTimeout(2000);
1414
const server = createServer({
1515
headersTimeout,
1616
requestTimeout: 0,
1717
keepAliveTimeout: 0,
18-
connectionsCheckingInterval: common.platformTimeout(250),
18+
connectionsCheckingInterval: headersTimeout / 4,
1919
}, common.mustNotCall());
2020
server.on('connection', common.mustCall(() => {
2121
assert.strictEqual(typeof sendDelayedRequestHeaders, 'function');

test/parallel/test-http-server-headers-timeout-interrupted-headers.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,12 @@ const { connect } = require('net');
1010
// pauses sending in the middle of a header.
1111

1212
let sendDelayedRequestHeaders;
13-
const headersTimeout = common.platformTimeout(1000);
13+
const headersTimeout = common.platformTimeout(2000);
1414
const server = createServer({
1515
headersTimeout,
1616
requestTimeout: 0,
1717
keepAliveTimeout: 0,
18-
connectionsCheckingInterval: common.platformTimeout(250),
18+
connectionsCheckingInterval: headersTimeout / 4,
1919
}, common.mustNotCall());
2020
server.on('connection', common.mustCall(() => {
2121
assert.strictEqual(typeof sendDelayedRequestHeaders, 'function');

test/parallel/test-http-server-headers-timeout-pipelining.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,12 @@ const { connect } = require('net');
99
// after server.requestTimeout if the client
1010
// does not complete a request when using pipelining.
1111

12-
const headersTimeout = common.platformTimeout(1000);
12+
const headersTimeout = common.platformTimeout(2000);
1313
const server = createServer({
1414
headersTimeout,
1515
requestTimeout: 0,
1616
keepAliveTimeout: 0,
17-
connectionsCheckingInterval: common.platformTimeout(250),
17+
connectionsCheckingInterval: headersTimeout / 4,
1818
}, common.mustCallAtLeast((req, res) => {
1919
res.writeHead(200, { 'Content-Type': 'text/plain' });
2020
res.end();

test/parallel/test-http-server-request-timeout-delayed-body.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,12 @@ const { connect } = require('net');
1010
// pauses before start sending the body.
1111

1212
let sendDelayedRequestBody;
13-
const requestTimeout = common.platformTimeout(1000);
13+
const requestTimeout = common.platformTimeout(2000);
1414
const server = createServer({
1515
headersTimeout: 0,
1616
requestTimeout,
1717
keepAliveTimeout: 0,
18-
connectionsCheckingInterval: common.platformTimeout(250),
18+
connectionsCheckingInterval: requestTimeout / 4,
1919
}, common.mustCall((req, res) => {
2020
let body = '';
2121
req.setEncoding('utf-8');

test/parallel/test-http-server-request-timeout-delayed-headers.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,12 @@ const { connect } = require('net');
1010
// pauses before start sending the request.
1111

1212
let sendDelayedRequestHeaders;
13-
const requestTimeout = common.platformTimeout(1000);
13+
const requestTimeout = common.platformTimeout(2000);
1414
const server = createServer({
1515
headersTimeout: 0,
1616
requestTimeout,
1717
keepAliveTimeout: 0,
18-
connectionsCheckingInterval: common.platformTimeout(250),
18+
connectionsCheckingInterval: requestTimeout / 4,
1919
}, common.mustNotCall());
2020
server.on('connection', common.mustCall(() => {
2121
assert.strictEqual(typeof sendDelayedRequestHeaders, 'function');

test/parallel/test-http-server-request-timeout-interrupted-body.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,12 @@ const { connect } = require('net');
1010
// pauses sending in the middle of the body.
1111

1212
let sendDelayedRequestBody;
13-
const requestTimeout = common.platformTimeout(1000);
13+
const requestTimeout = common.platformTimeout(2000);
1414
const server = createServer({
1515
headersTimeout: 0,
1616
requestTimeout,
1717
keepAliveTimeout: 0,
18-
connectionsCheckingInterval: common.platformTimeout(250),
18+
connectionsCheckingInterval: requestTimeout / 4,
1919
}, common.mustCall((req, res) => {
2020
let body = '';
2121
req.setEncoding('utf-8');

test/parallel/test-http-server-request-timeout-interrupted-headers.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,12 @@ const { connect } = require('net');
1010
// pauses sending in the middle of a header.
1111

1212
let sendDelayedRequestHeaders;
13-
const requestTimeout = common.platformTimeout(1000);
13+
const requestTimeout = common.platformTimeout(2000);
1414
const server = createServer({
1515
headersTimeout: 0,
1616
requestTimeout,
1717
keepAliveTimeout: 0,
18-
connectionsCheckingInterval: common.platformTimeout(250),
18+
connectionsCheckingInterval: requestTimeout / 4,
1919
}, common.mustNotCall());
2020
server.on('connection', common.mustCall(() => {
2121
assert.strictEqual(typeof sendDelayedRequestHeaders, 'function');

test/parallel/test-http-server-request-timeout-keepalive.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ server.listen(0, common.mustCall(() => {
6767
performRequestWithDelay(
6868
client,
6969
requestTimeout / 5,
70-
requestTimeout,
70+
requestTimeout * 2,
7171
true
7272
);
7373
}, defer).unref();
@@ -88,7 +88,7 @@ server.listen(0, common.mustCall(() => {
8888
client.on('error', errOrEnd);
8989
client.on('end', errOrEnd);
9090

91-
// Perform a second request expected to finish before requestTimeout
91+
// Perform a first request which is completed immediately
9292
performRequestWithDelay(
9393
client,
9494
requestTimeout / 5,

test/parallel/test-http-server-request-timeout-pipelining.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,12 @@ const { connect } = require('net');
99
// after server.requestTimeout if the client
1010
// does not complete a request when using pipelining.
1111

12-
const requestTimeout = common.platformTimeout(1000);
12+
const requestTimeout = common.platformTimeout(2000);
1313
const server = createServer({
1414
headersTimeout: 0,
1515
requestTimeout,
1616
keepAliveTimeout: 0,
17-
connectionsCheckingInterval: common.platformTimeout(250),
17+
connectionsCheckingInterval: requestTimeout / 4
1818
}, common.mustCallAtLeast((req, res) => {
1919
res.writeHead(200, { 'Content-Type': 'text/plain' });
2020
res.end();
@@ -66,5 +66,5 @@ server.listen(0, common.mustCall(() => {
6666
// Complete the request
6767
setTimeout(() => {
6868
client.write('close\r\n\r\n');
69-
}, requestTimeout * 1.5).unref();
69+
}, requestTimeout * 2).unref();
7070
}));

test/parallel/test-http-server-request-timeout-upgrade.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,12 @@ const { connect } = require('net');
88
// This test validates that the requestTimeoout
99
// is disabled after the connection is upgraded.
1010
let sendDelayedRequestHeaders;
11-
const requestTimeout = common.platformTimeout(1000);
11+
const requestTimeout = common.platformTimeout(2000);
1212
const server = createServer({
1313
headersTimeout: 0,
1414
requestTimeout,
1515
keepAliveTimeout: 0,
16-
connectionsCheckingInterval: common.platformTimeout(250),
16+
connectionsCheckingInterval: requestTimeout / 4
1717
}, common.mustNotCall());
1818
server.on('connection', common.mustCall(() => {
1919
assert.strictEqual(typeof sendDelayedRequestHeaders, 'function');
@@ -58,6 +58,6 @@ server.listen(0, common.mustCall(() => {
5858
setTimeout(() => {
5959
client.write('12345678901234567890');
6060
client.end();
61-
}, common.platformTimeout(2000)).unref();
61+
}, requestTimeout * 2).unref();
6262
});
6363
}));
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
'use strict';
2+
3+
const common = require('../common');
4+
const assert = require('assert');
5+
const { createServer } = require('http');
6+
const { connect } = require('net');
7+
8+
// This test validates that request are correct checked for both requests and headers timeout in various situations.
9+
10+
const requestBodyPart1 = 'POST / HTTP/1.1\r\nContent-Length: 20\r\n';
11+
const requestBodyPart2 = 'Connection: close\r\n\r\n1234567890';
12+
const requestBodyPart3 = '1234567890';
13+
14+
const responseOk = 'HTTP/1.1 200 OK\r\n';
15+
const responseTimeout = 'HTTP/1.1 408 Request Timeout\r\n';
16+
17+
const headersTimeout = common.platformTimeout(2000);
18+
const connectionsCheckingInterval = headersTimeout / 4;
19+
20+
const server = createServer({
21+
headersTimeout,
22+
requestTimeout: headersTimeout * 2,
23+
keepAliveTimeout: 0,
24+
connectionsCheckingInterval
25+
}, common.mustCall((req, res) => {
26+
req.resume();
27+
28+
req.on('end', () => {
29+
res.writeHead(200, { 'Content-Type': 'text/plain' });
30+
res.end();
31+
});
32+
}, 4));
33+
34+
assert.strictEqual(server.headersTimeout, headersTimeout);
35+
assert.strictEqual(server.requestTimeout, headersTimeout * 2);
36+
37+
let i = 0;
38+
function createClient(server) {
39+
const request = {
40+
index: i++,
41+
client: connect(server.address().port),
42+
response: '',
43+
completed: false
44+
};
45+
46+
request.client.on('data', common.mustCallAtLeast((chunk) => {
47+
request.response += chunk.toString('utf-8');
48+
}));
49+
50+
request.client.on('end', common.mustCall(() => {
51+
request.completed = true;
52+
}));
53+
54+
request.client.on('error', common.mustNotCall());
55+
56+
request.client.resume();
57+
58+
return request;
59+
}
60+
61+
server.listen(0, common.mustCall(() => {
62+
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
69+
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);
131+
}));

0 commit comments

Comments
 (0)