Skip to content

Commit 3fb0f7e

Browse files
lundibundiMylesBorins
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 <luigipinca@gmail.com> Reviewed-By: Yongsheng Zhang <zyszys98@gmail.com>
1 parent 80bfc08 commit 3fb0f7e

1 file changed

Lines changed: 29 additions & 43 deletions

File tree

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

Lines changed: 29 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -26,91 +26,77 @@ const http = require('http');
2626
constnet=require('net');
2727
constutil=require('util');
2828

29-
letoutstanding_reqs=0;
30-
31-
constserver=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-
constc=net.createConnection(this.address().port);
42-
letres_buffer='';
30+
functiontestHttp10(port,callback){
31+
constc=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+
letres_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-
constc=net.createConnection(this.address().port);
71-
letres_buffer='';
72-
lettid;
55+
functiontestHttp11(port,callback){
56+
constc=net.createConnection(port);
7357

7458
c.setEncoding('utf8');
7559

60+
lettid;
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+
letres_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+
functiontestClientTrailers(port,callback){
82+
http.get({ port,path: '/hello',headers: {}},(res)=>{
10583
res.on('end',function(){
10684
assert.ok('x-foo'inres.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+
constserver=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)