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_cleanup_spec.js
var should = require('should'),
    needle = require('./../'),
    fs = require('fs'),
    https = require('https'),
    stream = require('stream');

describe('socket cleanup', function(){

  var outFile = 'test/tmp';
  var httpAgent, readStream, writeStream

  var file = 'ubuntu-21.04-desktop-amd64.iso',
      url = 'https://releases.ubuntu.com/21.04/' + file;

  function getActiveSockets() {
    return Object.keys(httpAgent.sockets).length
  }

  before(function() {
    httpAgent = new https.Agent({
      keepAlive  : true,
      maxSockets : 1
    });
  })

  after(function() {
    httpAgent.destroy()
    fs.unlinkSync(outFile);
  })

  it('should cleanup sockets on ERR_STREAM_PREMATURE_CLOSE (using .pipe)', function(done) {
    getActiveSockets().should.eql(0);

    var resp = needle.get(url, { agent: httpAgent });
    var writable = fs.createWriteStream(outFile);
    resp.pipe(writable);

    writable.on('close', function(e) {
      if (!resp.done) resp.abort();
    })

    setTimeout(function() {
      getActiveSockets().should.eql(1);
      writable.destroy();
    }, 50);

    setTimeout(function() {
      getActiveSockets().should.eql(0);
      done();
    }, 500); // takes a bit
  })

  it('should cleanup sockets on ERR_STREAM_PREMATURE_CLOSE (using stream.pipeline)', function(done) {
    if (!stream.pipeline)
      return done()

    getActiveSockets().should.eql(0);

    var resp = needle.get(url, { agent: httpAgent });
    var writable = fs.createWriteStream(outFile);

    stream.pipeline(resp, writable, function(err) {
      err.code.should.eql('ERR_STREAM_PREMATURE_CLOSE')
      if (err) resp.request.destroy();
    });

    setTimeout(function() {
      getActiveSockets().should.eql(1);
      writable.destroy();
    }, 50);

    setTimeout(function() {
      getActiveSockets().should.eql(0);
      done();
    }, 1000); // takes a bit

  })

})