mirror of
https://github.com/nodejs/node.git
synced 2024-11-29 23:16:30 +01:00
test: add test for missing close
/finish
event
See next commit for the actual fix. PR-URL: https://github.com/iojs/io.js/pull/1373 Reviewed-By: Fedor Indutny <fedor@indutny.com>
This commit is contained in:
parent
3754920ffd
commit
9436a860cb
90
test/parallel/test-http-response-close-event-race.js
Normal file
90
test/parallel/test-http-response-close-event-race.js
Normal file
@ -0,0 +1,90 @@
|
||||
var common = require('../common');
|
||||
var assert = require('assert');
|
||||
var http = require('http');
|
||||
|
||||
var clientRequest = null;
|
||||
var eventCount = 0;
|
||||
var testTickCount = 3;
|
||||
|
||||
var server = http.createServer(function(req, res) {
|
||||
console.log('server: request');
|
||||
|
||||
res.on('finish', function() {
|
||||
console.log('server: response finish');
|
||||
eventCount++;
|
||||
});
|
||||
res.on('close', function() {
|
||||
console.log('server: response close');
|
||||
eventCount++;
|
||||
});
|
||||
|
||||
console.log('client: aborting request');
|
||||
clientRequest.abort();
|
||||
|
||||
var ticks = 0;
|
||||
function tick() {
|
||||
console.log('server: tick ' + ticks +
|
||||
(req.connection.destroyed ? ' (connection destroyed!)' : ''));
|
||||
|
||||
if (ticks < testTickCount) {
|
||||
ticks++;
|
||||
setImmediate(tick);
|
||||
} else {
|
||||
sendResponse();
|
||||
}
|
||||
}
|
||||
tick();
|
||||
|
||||
function sendResponse() {
|
||||
console.log('server: sending response');
|
||||
res.writeHead(200, {'Content-Type': 'text/plain'});
|
||||
res.end('Response\n');
|
||||
console.log('server: res.end() returned');
|
||||
|
||||
handleResponseEnd();
|
||||
}
|
||||
});
|
||||
|
||||
server.on('listening', function() {
|
||||
console.log('server: listening on port ' + common.PORT);
|
||||
console.log('-----------------------------------------------------');
|
||||
startRequest();
|
||||
});
|
||||
|
||||
server.on('connection', function(connection) {
|
||||
console.log('server: connection');
|
||||
connection.on('close', function() {
|
||||
console.log('server: connection close');
|
||||
});
|
||||
});
|
||||
|
||||
server.on('close', function() {
|
||||
console.log('server: close');
|
||||
});
|
||||
|
||||
server.listen(common.PORT);
|
||||
|
||||
function startRequest() {
|
||||
console.log('client: starting request - testing with %d ticks after abort()',
|
||||
testTickCount);
|
||||
eventCount = 0;
|
||||
|
||||
var options = {port: common.PORT, path: '/'};
|
||||
clientRequest = http.get(options, function() {});
|
||||
clientRequest.on('error', function() {});
|
||||
}
|
||||
|
||||
function handleResponseEnd() {
|
||||
setImmediate(function() {
|
||||
setImmediate(function() {
|
||||
assert.equal(eventCount, 1);
|
||||
|
||||
if (testTickCount > 0) {
|
||||
testTickCount--;
|
||||
startRequest();
|
||||
} else {
|
||||
server.close();
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
Loading…
Reference in New Issue
Block a user