1'use strict'; 2const common = require('../common'); 3const assert = require('assert'); 4const http = require('http'); 5const Countdown = require('../common/countdown'); 6 7const agent = new http.Agent({ 8 keepAlive: true, 9 keepAliveMsecs: 1000, 10 maxSockets: 2, 11 maxFreeSockets: 2 12}); 13 14const server = http.createServer(common.mustCall((req, res) => { 15 res.end('hello world'); 16}, 2)); 17 18server.keepAliveTimeout = 0; 19 20function get(path, callback) { 21 return http.get({ 22 host: 'localhost', 23 port: server.address().port, 24 agent: agent, 25 path: path 26 }, callback); 27} 28 29const countdown = new Countdown(2, () => { 30 const freepool = agent.freeSockets[Object.keys(agent.freeSockets)[0]]; 31 assert.strictEqual(freepool.length, 2, 32 `expect keep 2 free sockets, but got ${freepool.length}`); 33 agent.destroy(); 34 server.close(); 35}); 36 37function dec() { 38 process.nextTick(() => countdown.dec()); 39} 40 41function onGet(res) { 42 assert.strictEqual(res.statusCode, 200); 43 res.resume(); 44 res.on('end', common.mustCall(dec)); 45} 46 47server.listen(0, common.mustCall(() => { 48 get('/1', common.mustCall(onGet)); 49 get('/2', common.mustCall(onGet)); 50})); 51