blob: f2b0120366c3749df72763596f6873f56e37400e [file] [log] [blame]
Roman Reissf29762f2015-05-19 11:00:061'use strict';
Fedor Indutny0e194762014-12-17 13:30:042var assert = require('assert'),
3 common = require('../common'),
4 http = require('http');
5
6var complete;
7
Roman Reissf29762f2015-05-19 11:00:068var server = http.createServer(function(req, res) {
Fedor Indutny0e194762014-12-17 13:30:049 // We should not see the queued /thatotherone request within the server
10 // as it should be aborted before it is sent.
11 assert.equal(req.url, '/');
12
13 res.writeHead(200);
14 res.write('foo');
15
Roman Reissf29762f2015-05-19 11:00:0616 complete = complete || function() {
Fedor Indutny0e194762014-12-17 13:30:0417 res.end();
18 };
19});
20
21
Roman Reissf29762f2015-05-19 11:00:0622server.listen(common.PORT, function() {
Fedor Indutny0e194762014-12-17 13:30:0423 console.log('listen', server.address().port);
24
25 var agent = new http.Agent({maxSockets: 1});
26 assert.equal(Object.keys(agent.sockets).length, 0);
27
28 var options = {
29 hostname: 'localhost',
30 port: server.address().port,
31 method: 'GET',
32 path: '/',
33 agent: agent
34 };
35
36 var req1 = http.request(options);
37 req1.on('response', function(res1) {
38 assert.equal(Object.keys(agent.sockets).length, 1);
39 assert.equal(Object.keys(agent.requests).length, 0);
40
41 var req2 = http.request({
42 method: 'GET',
43 host: 'localhost',
44 port: server.address().port,
45 path: '/thatotherone',
46 agent: agent
47 });
48 assert.equal(Object.keys(agent.sockets).length, 1);
49 assert.equal(Object.keys(agent.requests).length, 1);
50
51 req2.on('error', function(err) {
52 // This is expected in response to our explicit abort call
53 assert.equal(err.code, 'ECONNRESET');
54 });
55
56 req2.end();
57 req2.abort();
58
59 assert.equal(Object.keys(agent.sockets).length, 1);
60 assert.equal(Object.keys(agent.requests).length, 1);
61
62 console.log('Got res: ' + res1.statusCode);
63 console.dir(res1.headers);
64
65 res1.on('data', function(chunk) {
66 console.log('Read ' + chunk.length + ' bytes');
67 console.log(' chunk=%j', chunk.toString());
68 complete();
69 });
70
71 res1.on('end', function() {
72 console.log('Response ended.');
73
74 setTimeout(function() {
75 assert.equal(Object.keys(agent.sockets).length, 0);
76 assert.equal(Object.keys(agent.requests).length, 0);
77
78 server.close();
79 }, 100);
80 });
81 });
82
83 req1.end();
84});