• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1'use strict';
2const common = require('../common');
3
4// This test ensures that `ClientRequest.prototype.setTimeout()` does
5// not add a listener for the `'connect'` event to the socket if the
6// socket is already connected.
7
8const assert = require('assert');
9const http = require('http');
10
11// Maximum allowed value for timeouts.
12const timeout = 2 ** 31 - 1;
13
14const server = http.createServer((req, res) => {
15  res.end();
16});
17
18server.listen(0, common.mustCall(() => {
19  const agent = new http.Agent({ keepAlive: true, maxSockets: 1 });
20  const options = { port: server.address().port, agent: agent };
21
22  doRequest(options, common.mustCall(() => {
23    const req = doRequest(options, common.mustCall(() => {
24      agent.destroy();
25      server.close();
26    }));
27
28    req.on('socket', common.mustCall((socket) => {
29      assert.strictEqual(socket.listenerCount('connect'), 0);
30    }));
31  }));
32}));
33
34function doRequest(options, callback) {
35  const req = http.get(options, (res) => {
36    res.on('end', callback);
37    res.resume();
38  });
39
40  req.setTimeout(timeout);
41  return req;
42}
43