--- /dev/null
+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();
+ }
+ });
+ });
+}