12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- 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();
- }
- });
- });
- });
|