| 'use strict'; |
| const common = require('../common'); |
| const assert = require('assert'); |
| const http = require('http'); |
| const Countdown = require('../common/countdown'); |
| |
| const agent = new http.Agent({ |
| keepAlive: true, |
| keepAliveMsecs: 1000, |
| maxSockets: 2, |
| maxFreeSockets: 2 |
| }); |
| |
| const server = http.createServer(common.mustCall((req, res) => { |
| res.end('hello world'); |
| }, 2)); |
| |
| server.keepAliveTimeout = 0; |
| |
| function get(path, callback) { |
| return http.get({ |
| host: 'localhost', |
| port: server.address().port, |
| agent: agent, |
| path: path |
| }, callback); |
| } |
| |
| const countdown = new Countdown(2, () => { |
| const freepool = agent.freeSockets[Object.keys(agent.freeSockets)[0]]; |
| assert.strictEqual(freepool.length, 2, |
| `expect keep 2 free sockets, but got ${freepool.length}`); |
| agent.destroy(); |
| server.close(); |
| }); |
| |
| function dec() { |
| process.nextTick(() => countdown.dec()); |
| } |
| |
| function onGet(res) { |
| assert.strictEqual(res.statusCode, 200); |
| res.resume(); |
| res.on('end', common.mustCall(dec)); |
| } |
| |
| server.listen(0, common.mustCall(() => { |
| get('/1', common.mustCall(onGet)); |
| get('/2', common.mustCall(onGet)); |
| })); |