Skip to content

Commit 2bcd3a6

Browse files
lundibunditargos
authored andcommitted
test: clean up http-set-trailers
* remove shared state of request counting from each listener by using callbacks to report test finish. This also fixes slight race condition where one of the request could finish before the other was taken into account resulting in ECONNREFUSED due to premature server.close() * slightly move code for better cohesion * fix error comment in testHttp10 'Trailer ...' -> 'No trailer ...' PR-URL: #30522 Reviewed-By: Luigi Pinca <[email protected]> Reviewed-By: Yongsheng Zhang <[email protected]>
1 parent e75498b commit 2bcd3a6

File tree

1 file changed

+29
-43
lines changed

1 file changed

+29
-43
lines changed

test/parallel/test-http-set-trailers.js

+29-43
Original file line numberDiff line numberDiff line change
@@ -26,91 +26,77 @@ const http = require('http');
2626
const net = require('net');
2727
const util = require('util');
2828

29-
let outstanding_reqs = 0;
30-
31-
const server = http.createServer(function(req, res) {
32-
res.writeHead(200, [['content-type', 'text/plain']]);
33-
res.addTrailers({ 'x-foo': 'bar' });
34-
res.end('stuff\n');
35-
});
36-
server.listen(0);
37-
38-
3929
// First, we test an HTTP/1.0 request.
40-
server.on('listening', function() {
41-
const c = net.createConnection(this.address().port);
42-
let res_buffer = '';
30+
function testHttp10(port, callback) {
31+
const c = net.createConnection(port);
4332

4433
c.setEncoding('utf8');
4534

46-
c.on('connect', function() {
47-
outstanding_reqs++;
35+
c.on('connect', () => {
4836
c.write('GET / HTTP/1.0\r\n\r\n');
4937
});
5038

51-
c.on('data', function(chunk) {
39+
let res_buffer = '';
40+
c.on('data', (chunk) => {
5241
res_buffer += chunk;
5342
});
5443

5544
c.on('end', function() {
5645
c.end();
5746
assert.ok(
5847
!/x-foo/.test(res_buffer),
59-
`Trailer in HTTP/1.0 response. Response buffer: ${res_buffer}`
48+
`No trailer in HTTP/1.0 response. Response buffer: ${res_buffer}`
6049
);
61-
outstanding_reqs--;
62-
if (outstanding_reqs === 0) {
63-
server.close();
64-
}
50+
callback();
6551
});
66-
});
52+
}
6753

6854
// Now, we test an HTTP/1.1 request.
69-
server.on('listening', function() {
70-
const c = net.createConnection(this.address().port);
71-
let res_buffer = '';
72-
let tid;
55+
function testHttp11(port, callback) {
56+
const c = net.createConnection(port);
7357

7458
c.setEncoding('utf8');
7559

60+
let tid;
7661
c.on('connect', function() {
77-
outstanding_reqs++;
7862
c.write('GET / HTTP/1.1\r\n\r\n');
7963
tid = setTimeout(common.mustNotCall(), 2000, 'Couldn\'t find last chunk.');
8064
});
8165

66+
let res_buffer = '';
8267
c.on('data', function(chunk) {
8368
res_buffer += chunk;
8469
if (/0\r\n/.test(res_buffer)) { // got the end.
85-
outstanding_reqs--;
8670
clearTimeout(tid);
8771
assert.ok(
8872
/0\r\nx-foo: bar\r\n\r\n$/.test(res_buffer),
8973
`No trailer in HTTP/1.1 response. Response buffer: ${res_buffer}`
9074
);
91-
if (outstanding_reqs === 0) {
92-
server.close();
93-
}
75+
callback();
9476
}
9577
});
96-
});
78+
}
9779

9880
// Now, see if the client sees the trailers.
99-
server.on('listening', function() {
100-
http.get({
101-
port: this.address().port,
102-
path: '/hello',
103-
headers: {}
104-
}, function(res) {
81+
function testClientTrailers(port, callback) {
82+
http.get({ port, path: '/hello', headers: {} }, (res) => {
10583
res.on('end', function() {
10684
assert.ok('x-foo' in res.trailers,
10785
`${util.inspect(res.trailers)} misses the 'x-foo' property`);
108-
outstanding_reqs--;
109-
if (outstanding_reqs === 0) {
110-
server.close();
111-
}
86+
callback();
11287
});
11388
res.resume();
11489
});
115-
outstanding_reqs++;
90+
}
91+
92+
const server = http.createServer((req, res) => {
93+
res.writeHead(200, [['content-type', 'text/plain']]);
94+
res.addTrailers({ 'x-foo': 'bar' });
95+
res.end('stuff\n');
96+
});
97+
server.listen(0, () => {
98+
Promise.all([testHttp10, testHttp11, testClientTrailers]
99+
.map(util.promisify)
100+
.map((f) => f(server.address().port)))
101+
.then(() => server.close());
116102
});

0 commit comments

Comments
 (0)