HEX
Server: Apache/2.4.41 (Ubuntu)
System: Linux ip-172-31-42-149 5.15.0-1084-aws #91~20.04.1-Ubuntu SMP Fri May 2 07:00:04 UTC 2025 aarch64
User: ubuntu (1000)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /var/www/vhost/disk-apps/pwa.sports-crowd.com/node_modules/needle/test/socket_pool_spec.js
var needle  = require('../'),
    should  = require('should'),
    http    = require('http');

var server, port = 11112;

describe('socket reuse', function() {

  var httpAgent = new http.Agent({
    keepAlive  : true,
    maxSockets : 1
  });

  before(function(done) {
    server = http.createServer(function(req, res) {
      res.setHeader('Content-Type', 'application/json');
      setTimeout(function() {
        res.end('{"foo":"bar"}');
      }, 50);
    }).listen(port, done);
  });

  after(function(done) {
    httpAgent.destroy();
    server.close(done);
  });

  describe('when sockets are reused', function() {

    it('does not duplicate listeners on .end', function(done) {

      var last_error;
      var count = 10;

      function completed(err) {
        --count || done(last_error);
      }

      function send() {
        needle.get('localhost:' + port, { agent: httpAgent }, function(err, resp) {
          if (err)
            throw new Error("Unexpected error: " + err);

          // lets go through all sockets and inspect all socket objects
          for (hostTarget in httpAgent.sockets) {
            httpAgent.sockets[hostTarget].forEach(function(socket) {
              // normally, there are 2 internal listeners and 1 needle sets up,
              // but to be sure the test does not fail even if newer node versions
              // introduce additional listeners, we use a higher limit.
              try {
                socket.listeners('end').length.should.be.below(5, "too many listeners on the socket object's end event");
              } catch (e) {
                last_error = e;
              }
            });
          }

          completed();
        });
      }

      for (var i = 0; i < count; i++) {
        send();
      }
    });
  });
});