| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 | 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  })})
 |