1'use strict'; 2const common = require('../common'); 3const assert = require('assert'); 4const http = require('http'); 5 6 7for (const destroyer of ['destroy', 'abort']) { 8 let socketsCreated = 0; 9 10 class Agent extends http.Agent { 11 createConnection(options, oncreate) { 12 const socket = super.createConnection(options, oncreate); 13 socketsCreated++; 14 return socket; 15 } 16 } 17 18 const server = http.createServer((req, res) => res.end()); 19 20 server.listen(0, common.mustCall(() => { 21 const port = server.address().port; 22 const agent = new Agent({ 23 keepAlive: true, 24 maxSockets: 1 25 }); 26 27 http.get({ agent, port }, (res) => res.resume()); 28 29 const req = http.get({ agent, port }, common.mustNotCall()); 30 req[destroyer](); 31 32 if (destroyer === 'destroy') { 33 req.on('error', common.mustCall((err) => { 34 assert.strictEqual(err.code, 'ECONNRESET'); 35 })); 36 } else { 37 req.on('error', common.mustNotCall()); 38 } 39 40 http.get({ agent, port }, common.mustCall((res) => { 41 res.resume(); 42 assert.strictEqual(socketsCreated, 1); 43 agent.destroy(); 44 server.close(); 45 })); 46 })); 47} 48