Browse Source

test: fix http-incoming-pipelined-socket-destroy

The test was calling server.close() after write on the socket
had completed. However the fact that the write had completed was
not valid indication that the server had received the data.

This would result in a premutaure closing of the server and
an ECONNRESET event on the client.
v0.10.26-release
Alexis Campailla 11 years ago
committed by Timothy J Fontaine
parent
commit
42cd468901
  1. 22
      test/simple/test-http-incoming-pipelined-socket-destroy.js

22
test/simple/test-http-incoming-pipelined-socket-destroy.js

@ -33,11 +33,13 @@ var server = http.createServer(function(req, res) {
case '/1': case '/1':
return setTimeout(function() { return setTimeout(function() {
req.socket.destroy(); req.socket.destroy();
server.emit('requestDone');
}); });
case '/2': case '/2':
return process.nextTick(function() { return process.nextTick(function() {
res.destroy(); res.destroy();
server.emit('requestDone');
}); });
// in one case, actually send a response in 2 chunks // in one case, actually send a response in 2 chunks
@ -45,18 +47,19 @@ var server = http.createServer(function(req, res) {
res.write('hello '); res.write('hello ');
return setTimeout(function() { return setTimeout(function() {
res.end('world!'); res.end('world!');
server.emit('requestDone');
}); });
default: default:
return res.destroy(); res.destroy();
server.emit('requestDone');
} }
}); });
// Make a bunch of requests pipelined on the same socket // Make a bunch of requests pipelined on the same socket
function generator() { function generator(seeds) {
var reqs = [ 3, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4 ]; return seeds.map(function(r) {
return reqs.map(function(r) {
return 'GET /' + r + ' HTTP/1.1\r\n' + return 'GET /' + r + ' HTTP/1.1\r\n' +
'Host: localhost:' + common.PORT + '\r\n' + 'Host: localhost:' + common.PORT + '\r\n' +
'\r\n' + '\r\n' +
@ -66,13 +69,18 @@ function generator() {
server.listen(common.PORT, function() { server.listen(common.PORT, function() {
var seeds = [ 3, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4 ];
var client = net.connect({ port: common.PORT }); var client = net.connect({ port: common.PORT });
var done = 0;
server.on('requestDone', function() {
if (++done == seeds.length) {
server.close();
}
});
// immediately write the pipelined requests. // immediately write the pipelined requests.
// Some of these will not have a socket to destroy! // Some of these will not have a socket to destroy!
client.write(generator(), function() { client.write(generator(seeds));
server.close();
});
}); });
process.on('exit', function(c) { process.on('exit', function(c) {

Loading…
Cancel
Save