Browse Source

test: use random ports where possible

This helps to prevent issues where a failed test can keep a bound
socket open long enough to cause other tests to fail with EADDRINUSE
because the same port number is used.

PR-URL: https://github.com/nodejs/node/pull/7045
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Rod Vagg <rod@vagg.org>
v4.x
Brian White 9 years ago
committed by Myles Borins
parent
commit
9a8acad6ff
  1. 13
      test/parallel/test-async-wrap-check-providers.js
  2. 6
      test/parallel/test-async-wrap-disabled-propagate-parent.js
  3. 6
      test/parallel/test-async-wrap-propagate-parent.js
  4. 4
      test/parallel/test-beforeexit-event.js
  5. 10
      test/parallel/test-child-process-disconnect.js
  6. 4
      test/parallel/test-child-process-fork-dgram.js
  7. 2
      test/parallel/test-child-process-fork-net.js
  8. 4
      test/parallel/test-child-process-fork-net2.js
  9. 4
      test/parallel/test-child-process-fork-regr-gh-2847.js
  10. 2
      test/parallel/test-child-process-recv-handle.js
  11. 4
      test/parallel/test-crypto-verify-failure.js
  12. 12
      test/parallel/test-dgram-address.js
  13. 12
      test/parallel/test-dgram-bind-default-address.js
  14. 39
      test/parallel/test-dgram-empty-packet.js
  15. 12
      test/parallel/test-dgram-error-message-address.js
  16. 9
      test/parallel/test-dgram-implicit-bind.js
  17. 4
      test/parallel/test-dgram-multicast-setTTL.js
  18. 8
      test/parallel/test-dgram-send-callback-recursive.js
  19. 22
      test/parallel/test-dgram-send-empty-buffer.js
  20. 4
      test/parallel/test-dgram-setTTL.js
  21. 9
      test/parallel/test-dgram-udp4.js
  22. 4
      test/parallel/test-domain-abort-on-uncaught.js
  23. 9
      test/parallel/test-domain-http-server.js
  24. 32
      test/parallel/test-domain-multi.js
  25. 12
      test/parallel/test-http-1.0-keep-alive.js
  26. 7
      test/parallel/test-http-1.0.js
  27. 10
      test/parallel/test-http-abort-before-end.js
  28. 7
      test/parallel/test-http-abort-client.js
  29. 4
      test/parallel/test-http-abort-queued.js
  30. 8
      test/parallel/test-http-after-connect.js
  31. 138
      test/parallel/test-http-agent-destroyed-socket.js
  32. 52
      test/parallel/test-http-agent-error-on-idle.js
  33. 9
      test/parallel/test-http-agent-keepalive.js
  34. 6
      test/parallel/test-http-agent-maxsockets-regress-4050.js
  35. 6
      test/parallel/test-http-agent-maxsockets.js
  36. 6
      test/parallel/test-http-agent-no-protocol.js
  37. 4
      test/parallel/test-http-agent-null.js
  38. 7
      test/parallel/test-http-agent.js
  39. 6
      test/parallel/test-http-allow-req-after-204-res.js
  40. 8
      test/parallel/test-http-automatic-headers.js
  41. 19
      test/parallel/test-http-bind-twice.js
  42. 6
      test/parallel/test-http-blank-header.js
  43. 6
      test/parallel/test-http-buffer-sanity.js
  44. 6
      test/parallel/test-http-byteswritten.js
  45. 4
      test/parallel/test-http-catch-uncaughtexception.js
  46. 8
      test/parallel/test-http-chunk-problem.js
  47. 4
      test/parallel/test-http-chunked-304.js
  48. 6
      test/parallel/test-http-chunked.js
  49. 6
      test/parallel/test-http-client-abort-event.js
  50. 6
      test/parallel/test-http-client-abort.js
  51. 6
      test/parallel/test-http-client-abort2.js
  52. 9
      test/parallel/test-http-client-agent.js
  53. 6
      test/parallel/test-http-client-default-headers-exist.js
  54. 6
      test/parallel/test-http-client-encoding.js
  55. 6
      test/parallel/test-http-client-get-url.js
  56. 6
      test/parallel/test-http-client-parse-error.js
  57. 8
      test/parallel/test-http-client-race-2.js
  58. 8
      test/parallel/test-http-client-race.js
  59. 4
      test/parallel/test-http-client-reject-chunked-with-content-length.js
  60. 4
      test/parallel/test-http-client-reject-cr-no-lf.js
  61. 7
      test/parallel/test-http-client-timeout-agent.js
  62. 5
      test/parallel/test-http-client-timeout-event.js
  63. 5
      test/parallel/test-http-client-timeout-with-data.js
  64. 7
      test/parallel/test-http-client-timeout.js
  65. 6
      test/parallel/test-http-client-upload-buf.js
  66. 6
      test/parallel/test-http-client-upload.js
  67. 7
      test/parallel/test-http-conn-reset.js
  68. 6
      test/parallel/test-http-connect-req-res.js
  69. 8
      test/parallel/test-http-connect.js
  70. 10
      test/parallel/test-http-content-length.js
  71. 6
      test/parallel/test-http-contentLength0.js
  72. 6
      test/parallel/test-http-createConnection.js
  73. 6
      test/parallel/test-http-date-header.js
  74. 6
      test/parallel/test-http-default-encoding.js
  75. 18
      test/parallel/test-http-default-port.js
  76. 4
      test/parallel/test-http-destroyed-socket-write2.js
  77. 4
      test/parallel/test-http-double-content-length.js
  78. 4
      test/parallel/test-http-end-throw-socket-handling.js
  79. 6
      test/parallel/test-http-eof-on-connect.js
  80. 6
      test/parallel/test-http-exceptions.js
  81. 6
      test/parallel/test-http-expect-continue.js
  82. 6
      test/parallel/test-http-extra-response.js
  83. 6
      test/parallel/test-http-flush-headers.js
  84. 4
      test/parallel/test-http-flush-response-headers.js
  85. 6
      test/parallel/test-http-flush.js
  86. 4
      test/parallel/test-http-full-response.js
  87. 4
      test/parallel/test-http-get-pipeline-problem.js
  88. 10
      test/parallel/test-http-head-request.js
  89. 6
      test/parallel/test-http-head-response-has-no-body-end.js
  90. 6
      test/parallel/test-http-head-response-has-no-body.js
  91. 4
      test/parallel/test-http-header-obstext.js
  92. 6
      test/parallel/test-http-header-read.js
  93. 5
      test/parallel/test-http-header-response-splitting.js
  94. 6
      test/parallel/test-http-hex-write.js
  95. 5
      test/parallel/test-http-host-header-ipv6-fail.js
  96. 20
      test/parallel/test-http-host-headers.js
  97. 8
      test/parallel/test-http-incoming-pipelined-socket-destroy.js
  98. 12
      test/parallel/test-http-keep-alive-close-on-header.js
  99. 13
      test/parallel/test-http-keep-alive.js
  100. 9
      test/parallel/test-http-keepalive-client.js

13
test/parallel/test-async-wrap-check-providers.js

@ -76,12 +76,12 @@ net.createServer(function(c) {
net.createServer(function(c) { net.createServer(function(c) {
c.end(); c.end();
this.close(checkTLS); this.close(checkTLS);
}).listen(common.PORT, function() { }).listen(0, function() {
net.connect(common.PORT, noop); net.connect(this.address().port, noop);
}); });
dgram.createSocket('udp4').bind(common.PORT, function() { dgram.createSocket('udp4').bind(0, function() {
this.send(new Buffer(2), 0, 2, common.PORT, '::', () => { this.send(new Buffer(2), 0, 2, this.address().port, '::', () => {
this.close(); this.close();
}); });
}); });
@ -95,8 +95,9 @@ function checkTLS() {
cert: fs.readFileSync(common.fixturesDir + '/keys/ec-cert.pem') cert: fs.readFileSync(common.fixturesDir + '/keys/ec-cert.pem')
}; };
const server = tls.createServer(options, noop) const server = tls.createServer(options, noop)
.listen(common.PORT, function() { .listen(0, function() {
tls.connect(common.PORT, { rejectUnauthorized: false }, function() { const connectOpts = { rejectUnauthorized: false };
tls.connect(this.address().port, connectOpts, function() {
this.destroy(); this.destroy();
server.close(); server.close();
}); });

6
test/parallel/test-async-wrap-disabled-propagate-parent.js

@ -1,6 +1,6 @@
'use strict'; 'use strict';
const common = require('../common'); require('../common');
const assert = require('assert'); const assert = require('assert');
const net = require('net'); const net = require('net');
const async_wrap = process.binding('async_wrap'); const async_wrap = process.binding('async_wrap');
@ -40,8 +40,8 @@ const server = net.createServer(function(c) {
c.end(); c.end();
this.close(); this.close();
}); });
}).listen(common.PORT, function() { }).listen(0, function() {
net.connect(common.PORT, noop); net.connect(this.address().port, noop);
}); });
async_wrap.disable(); async_wrap.disable();

6
test/parallel/test-async-wrap-propagate-parent.js

@ -1,6 +1,6 @@
'use strict'; 'use strict';
const common = require('../common'); require('../common');
const assert = require('assert'); const assert = require('assert');
const net = require('net'); const net = require('net');
const async_wrap = process.binding('async_wrap'); const async_wrap = process.binding('async_wrap');
@ -40,8 +40,8 @@ const server = net.createServer(function(c) {
c.end(); c.end();
this.close(); this.close();
}); });
}).listen(common.PORT, function() { }).listen(0, function() {
net.connect(common.PORT, noop); net.connect(this.address().port, noop);
}); });

4
test/parallel/test-beforeexit-event.js

@ -1,7 +1,7 @@
'use strict'; 'use strict';
require('../common');
var assert = require('assert'); var assert = require('assert');
var net = require('net'); var net = require('net');
var common = require('../common');
var revivals = 0; var revivals = 0;
var deaths = 0; var deaths = 0;
@ -29,7 +29,7 @@ function tryTimer() {
function tryListen() { function tryListen() {
console.log('create a server'); console.log('create a server');
net.createServer() net.createServer()
.listen(common.PORT) .listen(0)
.on('listening', function() { .on('listening', function() {
revivals++; revivals++;
this.close(); this.close();

10
test/parallel/test-child-process-disconnect.js

@ -38,10 +38,10 @@ if (process.argv[2] === 'child') {
// when the server is ready tell parent // when the server is ready tell parent
server.on('listening', function() { server.on('listening', function() {
process.send('ready'); process.send({ msg: 'ready', port: server.address().port });
}); });
server.listen(common.PORT); server.listen(0);
} else { } else {
// testcase // testcase
@ -65,11 +65,11 @@ if (process.argv[2] === 'child') {
}); });
// when child is listening // when child is listening
child.on('message', function(msg) { child.on('message', function(obj) {
if (msg === 'ready') { if (obj && obj.msg === 'ready') {
// connect to child using TCP to know if disconnect was emitted // connect to child using TCP to know if disconnect was emitted
var socket = net.connect(common.PORT); var socket = net.connect(obj.port);
socket.on('data', function(data) { socket.on('data', function(data) {
data = data.toString(); data = data.toString();

4
test/parallel/test-child-process-fork-dgram.js

@ -72,7 +72,7 @@ if (process.argv[2] === 'child') {
msg, msg,
0, 0,
msg.length, msg.length,
common.PORT, server.address().port,
'127.0.0.1', '127.0.0.1',
function(err) { function(err) {
if (err) throw err; if (err) throw err;
@ -98,7 +98,7 @@ if (process.argv[2] === 'child') {
client.close(); client.close();
}; };
server.bind(common.PORT, '127.0.0.1'); server.bind(0, '127.0.0.1');
process.once('exit', function() { process.once('exit', function() {
assert(parentGotMessage); assert(parentGotMessage);

2
test/parallel/test-child-process-fork-net.js

@ -1,6 +1,6 @@
'use strict'; 'use strict';
const assert = require('assert');
require('../common'); require('../common');
const assert = require('assert');
const fork = require('child_process').fork; const fork = require('child_process').fork;
const net = require('net'); const net = require('net');

4
test/parallel/test-child-process-fork-net2.js

@ -99,7 +99,7 @@ if (process.argv[2] === 'child') {
var j = count, client; var j = count, client;
while (j--) { while (j--) {
client = net.connect(common.PORT, '127.0.0.1'); client = net.connect(this.address().port, '127.0.0.1');
client.on('error', function() { client.on('error', function() {
// This can happen if we kill the child too early. // This can happen if we kill the child too early.
// The client should still get a close event afterwards. // The client should still get a close event afterwards.
@ -125,7 +125,7 @@ if (process.argv[2] === 'child') {
child3.kill(); child3.kill();
})); }));
server.listen(common.PORT, '127.0.0.1'); server.listen(0, '127.0.0.1');
var closeServer = function() { var closeServer = function() {
server.close(); server.close();

4
test/parallel/test-child-process-fork-regr-gh-2847.js

@ -25,11 +25,11 @@ var server = net.createServer(function(s) {
setTimeout(function() { setTimeout(function() {
s.destroy(); s.destroy();
}, 100); }, 100);
}).listen(common.PORT, function() { }).listen(0, function() {
var worker = cluster.fork(); var worker = cluster.fork();
function send(callback) { function send(callback) {
var s = net.connect(common.PORT, function() { var s = net.connect(server.address().port, function() {
worker.send({}, s, callback); worker.send({}, s, callback);
}); });

2
test/parallel/test-child-process-recv-handle.js

@ -24,7 +24,7 @@ function master() {
}); });
proc.stdout.on('data', function(data) { proc.stdout.on('data', function(data) {
assert.equal(data, 'ok\r\n'); assert.equal(data, 'ok\r\n');
net.createServer(common.fail).listen(common.PORT, function() { net.createServer(common.fail).listen(0, function() {
handle = this._handle; handle = this._handle;
proc.send('one'); proc.send('one');
proc.send('two', handle); proc.send('two', handle);

4
test/parallel/test-crypto-verify-failure.js

@ -36,9 +36,9 @@ function verify() {
.verify(certPem, 'asdfasdfas', 'base64'); .verify(certPem, 'asdfasdfas', 'base64');
} }
server.listen(common.PORT, function() { server.listen(0, function() {
tls.connect({ tls.connect({
port: common.PORT, port: this.address().port,
rejectUnauthorized: false rejectUnauthorized: false
}, function() { }, function() {
verify(); verify();

12
test/parallel/test-dgram-address.js

@ -10,7 +10,9 @@ var family_ipv4 = 'IPv4';
socket_ipv4.on('listening', function() { socket_ipv4.on('listening', function() {
var address_ipv4 = socket_ipv4.address(); var address_ipv4 = socket_ipv4.address();
assert.strictEqual(address_ipv4.address, common.localhostIPv4); assert.strictEqual(address_ipv4.address, common.localhostIPv4);
assert.strictEqual(address_ipv4.port, common.PORT); assert.strictEqual(typeof address_ipv4.port, 'number');
assert.ok(isFinite(address_ipv4.port));
assert.ok(address_ipv4.port > 0);
assert.strictEqual(address_ipv4.family, family_ipv4); assert.strictEqual(address_ipv4.family, family_ipv4);
socket_ipv4.close(); socket_ipv4.close();
}); });
@ -20,7 +22,7 @@ socket_ipv4.on('error', function(e) {
socket_ipv4.close(); socket_ipv4.close();
}); });
socket_ipv4.bind(common.PORT, common.localhostIPv4); socket_ipv4.bind(0, common.localhostIPv4);
// IPv6 Test // IPv6 Test
var localhost_ipv6 = '::1'; var localhost_ipv6 = '::1';
@ -30,7 +32,9 @@ var family_ipv6 = 'IPv6';
socket_ipv6.on('listening', function() { socket_ipv6.on('listening', function() {
var address_ipv6 = socket_ipv6.address(); var address_ipv6 = socket_ipv6.address();
assert.strictEqual(address_ipv6.address, localhost_ipv6); assert.strictEqual(address_ipv6.address, localhost_ipv6);
assert.strictEqual(address_ipv6.port, common.PORT); assert.strictEqual(typeof address_ipv6.port, 'number');
assert.ok(isFinite(address_ipv6.port));
assert.ok(address_ipv6.port > 0);
assert.strictEqual(address_ipv6.family, family_ipv6); assert.strictEqual(address_ipv6.family, family_ipv6);
socket_ipv6.close(); socket_ipv6.close();
}); });
@ -40,4 +44,4 @@ socket_ipv6.on('error', function(e) {
socket_ipv6.close(); socket_ipv6.close();
}); });
socket_ipv6.bind(common.PORT, localhost_ipv6); socket_ipv6.bind(0, localhost_ipv6);

12
test/parallel/test-dgram-bind-default-address.js

@ -9,8 +9,10 @@ if (common.inFreeBSDJail) {
return; return;
} }
dgram.createSocket('udp4').bind(common.PORT + 0, common.mustCall(function() { dgram.createSocket('udp4').bind(0, common.mustCall(function() {
assert.equal(this.address().port, common.PORT + 0); assert.strictEqual(typeof this.address().port, 'number');
assert.ok(isFinite(this.address().port));
assert.ok(this.address().port > 0);
assert.equal(this.address().address, '0.0.0.0'); assert.equal(this.address().address, '0.0.0.0');
this.close(); this.close();
})); }));
@ -20,8 +22,10 @@ if (!common.hasIPv6) {
return; return;
} }
dgram.createSocket('udp6').bind(common.PORT + 1, common.mustCall(function() { dgram.createSocket('udp6').bind(0, common.mustCall(function() {
assert.equal(this.address().port, common.PORT + 1); assert.strictEqual(typeof this.address().port, 'number');
assert.ok(isFinite(this.address().port));
assert.ok(this.address().port > 0);
var address = this.address().address; var address = this.address().address;
if (address === '::ffff:0.0.0.0') if (address === '::ffff:0.0.0.0')
address = '::'; address = '::';

39
test/parallel/test-dgram-empty-packet.js

@ -13,26 +13,27 @@ if (process.platform === 'darwin') {
client = dgram.createSocket('udp4'); client = dgram.createSocket('udp4');
client.bind(common.PORT); client.bind(0, function() {
function callback() {
function callback() { callbacks++;
callbacks++; if (callbacks == 2) {
if (callbacks == 2) { clearTimeout(timer);
clearTimeout(timer); client.close();
client.close(); } else if (callbacks > 2) {
} else if (callbacks > 2) { throw new Error('the callbacks should be called only two times');
throw new Error('the callbacks should be called only two times'); }
} }
}
client.on('message', function(buffer, bytes) { client.on('message', function(buffer, bytes) {
callback(); callback();
}); });
client.send(new Buffer(1), 0, 0, common.PORT, '127.0.0.1', function(err, len) { const port = this.address().port;
callback(); client.send(new Buffer(1), 0, 0, port, '127.0.0.1', function(err, len) {
}); callback();
});
timer = setTimeout(function() { timer = setTimeout(function() {
throw new Error('Timeout'); throw new Error('Timeout');
}, 200); }, 200);
});

12
test/parallel/test-dgram-error-message-address.js

@ -9,14 +9,14 @@ var socket_ipv4 = dgram.createSocket('udp4');
socket_ipv4.on('listening', common.fail); socket_ipv4.on('listening', common.fail);
socket_ipv4.on('error', common.mustCall(function(e) { socket_ipv4.on('error', common.mustCall(function(e) {
assert.equal(e.message, 'bind EADDRNOTAVAIL 1.1.1.1:' + common.PORT); assert.strictEqual(e.port, undefined);
assert.equal(e.message, 'bind EADDRNOTAVAIL 1.1.1.1');
assert.equal(e.address, '1.1.1.1'); assert.equal(e.address, '1.1.1.1');
assert.equal(e.port, common.PORT);
assert.equal(e.code, 'EADDRNOTAVAIL'); assert.equal(e.code, 'EADDRNOTAVAIL');
socket_ipv4.close(); socket_ipv4.close();
})); }));
socket_ipv4.bind(common.PORT, '1.1.1.1'); socket_ipv4.bind(0, '1.1.1.1');
// IPv6 Test // IPv6 Test
var socket_ipv6 = dgram.createSocket('udp6'); var socket_ipv6 = dgram.createSocket('udp6');
@ -27,10 +27,10 @@ socket_ipv6.on('error', common.mustCall(function(e) {
// EAFNOSUPPORT or EPROTONOSUPPORT means IPv6 is disabled on this system. // EAFNOSUPPORT or EPROTONOSUPPORT means IPv6 is disabled on this system.
var allowed = ['EADDRNOTAVAIL', 'EAFNOSUPPORT', 'EPROTONOSUPPORT']; var allowed = ['EADDRNOTAVAIL', 'EAFNOSUPPORT', 'EPROTONOSUPPORT'];
assert.notEqual(allowed.indexOf(e.code), -1); assert.notEqual(allowed.indexOf(e.code), -1);
assert.equal(e.message, 'bind ' + e.code + ' 111::1:' + common.PORT); assert.strictEqual(e.port, undefined);
assert.equal(e.message, 'bind ' + e.code + ' 111::1');
assert.equal(e.address, '111::1'); assert.equal(e.address, '111::1');
assert.equal(e.port, common.PORT);
socket_ipv6.close(); socket_ipv6.close();
})); }));
socket_ipv6.bind(common.PORT, '111::1'); socket_ipv6.bind(0, '111::1');

9
test/parallel/test-dgram-implicit-bind.js

@ -1,5 +1,5 @@
'use strict'; 'use strict';
var common = require('../common'); require('../common');
var assert = require('assert'); var assert = require('assert');
var dgram = require('dgram'); var dgram = require('dgram');
@ -22,8 +22,9 @@ target.on('message', function(buf) {
target.on('listening', function() { target.on('listening', function() {
// Second .send() call should not throw a bind error. // Second .send() call should not throw a bind error.
source.send(Buffer('abc'), 0, 3, common.PORT, '127.0.0.1'); const port = this.address().port;
source.send(Buffer('def'), 0, 3, common.PORT, '127.0.0.1'); source.send(Buffer('abc'), 0, 3, port, '127.0.0.1');
source.send(Buffer('def'), 0, 3, port, '127.0.0.1');
}); });
target.bind(common.PORT); target.bind(0);

4
test/parallel/test-dgram-multicast-setTTL.js

@ -1,11 +1,11 @@
'use strict'; 'use strict';
const common = require('../common'); require('../common');
const assert = require('assert'); const assert = require('assert');
const dgram = require('dgram'); const dgram = require('dgram');
const socket = dgram.createSocket('udp4'); const socket = dgram.createSocket('udp4');
let thrown = false; let thrown = false;
socket.bind(common.PORT); socket.bind(0);
socket.on('listening', function() { socket.on('listening', function() {
socket.setMulticastTTL(16); socket.setMulticastTTL(16);

8
test/parallel/test-dgram-send-callback-recursive.js

@ -9,17 +9,19 @@ let received = 0;
let sent = 0; let sent = 0;
const limit = 10; const limit = 10;
let async = false; let async = false;
let port;
function onsend() { function onsend() {
if (sent++ < limit) { if (sent++ < limit) {
client.send( client.send(chunk, 0, chunk.length, port, common.localhostIPv4, onsend);
chunk, 0, chunk.length, common.PORT, common.localhostIPv4, onsend);
} else { } else {
assert.strictEqual(async, true, 'Send should be asynchronous.'); assert.strictEqual(async, true, 'Send should be asynchronous.');
} }
} }
client.on('listening', function() { client.on('listening', function() {
port = this.address().port;
setImmediate(function() { setImmediate(function() {
async = true; async = true;
}); });
@ -38,4 +40,4 @@ client.on('close', common.mustCall(function() {
assert.equal(received, limit); assert.equal(received, limit);
})); }));
client.bind(common.PORT); client.bind(0);

22
test/parallel/test-dgram-send-empty-buffer.js

@ -9,16 +9,18 @@ if (process.platform === 'darwin') {
const client = dgram.createSocket('udp4'); const client = dgram.createSocket('udp4');
client.bind(common.PORT); client.bind(0, function() {
const port = this.address().port;
client.on('message', function(buffer, bytes) { client.on('message', common.mustCall(function onMessage(buffer, bytes) {
clearTimeout(timer); clearTimeout(timer);
client.close(); client.close();
}); }));
const buf = new Buffer(0); const buf = new Buffer(0);
client.send(buf, 0, 0, common.PORT, '127.0.0.1', function(err, len) { }); client.send(buf, 0, 0, port, '127.0.0.1', function(err, len) { });
const timer = setTimeout(function() { const timer = setTimeout(function() {
throw new Error('Timeout'); throw new Error('Timeout');
}, common.platformTimeout(200)); }, common.platformTimeout(200));
});

4
test/parallel/test-dgram-setTTL.js

@ -1,10 +1,10 @@
'use strict'; 'use strict';
const common = require('../common'); require('../common');
const assert = require('assert'); const assert = require('assert');
const dgram = require('dgram'); const dgram = require('dgram');
const socket = dgram.createSocket('udp4'); const socket = dgram.createSocket('udp4');
socket.bind(common.PORT); socket.bind(0);
socket.on('listening', function() { socket.on('listening', function() {
var result = socket.setTTL(16); var result = socket.setTTL(16);
assert.strictEqual(result, 16); assert.strictEqual(result, 16);

9
test/parallel/test-dgram-udp4.js

@ -2,7 +2,6 @@
const common = require('../common'); const common = require('../common');
const assert = require('assert'); const assert = require('assert');
const dgram = require('dgram'); const dgram = require('dgram');
const server_port = common.PORT;
const message_to_send = 'A message to send'; const message_to_send = 'A message to send';
const server = dgram.createSocket('udp4'); const server = dgram.createSocket('udp4');
@ -13,9 +12,10 @@ server.on('message', common.mustCall((msg, rinfo) => {
})); }));
server.on('listening', common.mustCall(() => { server.on('listening', common.mustCall(() => {
const client = dgram.createSocket('udp4'); const client = dgram.createSocket('udp4');
const port = server.address().port;
client.on('message', common.mustCall((msg, rinfo) => { client.on('message', common.mustCall((msg, rinfo) => {
assert.strictEqual(rinfo.address, common.localhostIPv4); assert.strictEqual(rinfo.address, common.localhostIPv4);
assert.strictEqual(rinfo.port, server_port); assert.strictEqual(rinfo.port, port);
assert.strictEqual(msg.toString(), message_to_send.toString()); assert.strictEqual(msg.toString(), message_to_send.toString());
client.close(); client.close();
server.close(); server.close();
@ -23,10 +23,9 @@ server.on('listening', common.mustCall(() => {
client.send(message_to_send, client.send(message_to_send,
0, 0,
message_to_send.length, message_to_send.length,
server_port, port,
'localhost'); 'localhost');
client.on('close', common.mustCall(() => {})); client.on('close', common.mustCall(() => {}));
})); }));
server.on('close', common.mustCall(() => {})); server.on('close', common.mustCall(() => {}));
server.bind(server_port); server.bind(0);

4
test/parallel/test-domain-abort-on-uncaught.js

@ -109,8 +109,8 @@ const tests = [
const server = net.createServer(function(conn) { const server = net.createServer(function(conn) {
conn.pipe(conn); conn.pipe(conn);
}); });
server.listen(common.PORT, common.localhostIPv4, function() { server.listen(0, common.localhostIPv4, function() {
const conn = net.connect(common.PORT, common.localhostIPv4); const conn = net.connect(this.address().port, common.localhostIPv4);
conn.once('data', function() { conn.once('data', function() {
throw new Error('ok'); throw new Error('ok');
}); });

9
test/parallel/test-domain-http-server.js

@ -1,8 +1,8 @@
'use strict'; 'use strict';
require('../common');
var domain = require('domain'); var domain = require('domain');
var http = require('http'); var http = require('http');
var assert = require('assert'); var assert = require('assert');
var common = require('../common');
var objects = { foo: 'bar', baz: {}, num: 42, arr: [1, 2, 3] }; var objects = { foo: 'bar', baz: {}, num: 42, arr: [1, 2, 3] };
objects.baz.asdf = objects; objects.baz.asdf = objects;
@ -37,10 +37,11 @@ var server = http.createServer(function(req, res) {
}); });
}); });
server.listen(common.PORT, next); server.listen(0, next);
function next() { function next() {
console.log('listening on localhost:%d', common.PORT); const port = this.address().port;
console.log('listening on localhost:%d', port);
var requests = 0; var requests = 0;
var responses = 0; var responses = 0;
@ -61,7 +62,7 @@ function next() {
req.socket.destroy(); req.socket.destroy();
}); });
var req = http.get({ host: 'localhost', port: common.PORT, path: p }); var req = http.get({ host: 'localhost', port: port, path: p });
dom.add(req); dom.add(req);
req.on('response', function(res) { req.on('response', function(res) {
responses++; responses++;

32
test/parallel/test-domain-multi.js

@ -1,7 +1,7 @@
'use strict'; 'use strict';
// Tests of multiple domains happening at once. // Tests of multiple domains happening at once.
var common = require('../common'); require('../common');
var assert = require('assert'); var assert = require('assert');
var domain = require('domain'); var domain = require('domain');
@ -49,24 +49,24 @@ var server = http.createServer(function(req, res) {
throw new Error('this kills domain B, not A'); throw new Error('this kills domain B, not A');
})); }));
}).listen(common.PORT); }).listen(0, function() {
var c = domain.create();
var req = http.get({ host: 'localhost', port: this.address().port });
var c = domain.create(); // add the request to the C domain
var req = http.get({ host: 'localhost', port: common.PORT }); c.add(req);
// add the request to the C domain req.on('response', function(res) {
c.add(req); console.error('got response');
// add the response object to the C domain
req.on('response', function(res) { c.add(res);
console.error('got response'); res.pipe(process.stdout);
// add the response object to the C domain });
c.add(res);
res.pipe(process.stdout);
});
c.on('error', function(er) { c.on('error', function(er) {
caughtC = true; caughtC = true;
console.error('Error on c', er.message); console.error('Error on c', er.message);
});
}); });
process.on('exit', function() { process.on('exit', function() {

12
test/parallel/test-http-1.0-keep-alive.js

@ -1,5 +1,5 @@
'use strict'; 'use strict';
var common = require('../common'); require('../common');
var http = require('http'); var http = require('http');
var net = require('net'); var net = require('net');
@ -84,14 +84,17 @@ check([{
function check(tests) { function check(tests) {
var test = tests[0]; var test = tests[0];
if (test) http.createServer(server).listen(common.PORT, '127.0.0.1', client); var server;
if (test) {
server = http.createServer(serverHandler).listen(0, '127.0.0.1', client);
}
var current = 0; var current = 0;
function next() { function next() {
check(tests.slice(1)); check(tests.slice(1));
} }
function server(req, res) { function serverHandler(req, res) {
if (current + 1 === test.responses.length) this.close(); if (current + 1 === test.responses.length) this.close();
var ctx = test.responses[current]; var ctx = test.responses[current];
console.error('< SERVER SENDING RESPONSE', ctx); console.error('< SERVER SENDING RESPONSE', ctx);
@ -102,7 +105,8 @@ function check(tests) {
function client() { function client() {
if (current === test.requests.length) return next(); if (current === test.requests.length) return next();
var conn = net.createConnection(common.PORT, '127.0.0.1', connected); const port = server.address().port;
var conn = net.createConnection(port, '127.0.0.1', connected);
function connected() { function connected() {
var ctx = test.requests[current]; var ctx = test.requests[current];

7
test/parallel/test-http-1.0.js

@ -6,18 +6,15 @@ var http = require('http');
var body = 'hello world\n'; var body = 'hello world\n';
var common_port = common.PORT;
function test(handler, request_generator, response_validator) { function test(handler, request_generator, response_validator) {
var port = common_port++;
var server = http.createServer(handler); var server = http.createServer(handler);
var client_got_eof = false; var client_got_eof = false;
var server_response = ''; var server_response = '';
server.listen(port); server.listen(0);
server.on('listening', function() { server.on('listening', function() {
var c = net.createConnection(port); var c = net.createConnection(this.address().port);
c.setEncoding('utf8'); c.setEncoding('utf8');

10
test/parallel/test-http-abort-before-end.js

@ -1,5 +1,5 @@
'use strict'; 'use strict';
var common = require('../common'); require('../common');
var http = require('http'); var http = require('http');
var assert = require('assert'); var assert = require('assert');
@ -7,8 +7,12 @@ var server = http.createServer(function(req, res) {
assert(false); // should not be called assert(false); // should not be called
}); });
server.listen(common.PORT, function() { server.listen(0, function() {
var req = http.request({method: 'GET', host: '127.0.0.1', port: common.PORT}); var req = http.request({
method: 'GET',
host: '127.0.0.1',
port: this.address().port
});
req.on('error', function(ex) { req.on('error', function(ex) {
// https://github.com/joyent/node/issues/1399#issuecomment-2597359 // https://github.com/joyent/node/issues/1399#issuecomment-2597359

7
test/parallel/test-http-abort-client.js

@ -1,5 +1,5 @@
'use strict'; 'use strict';
var common = require('../common'); require('../common');
var http = require('http'); var http = require('http');
var assert = require('assert'); var assert = require('assert');
@ -13,11 +13,10 @@ var server = http.Server(function(req, res) {
var responseClose = false; var responseClose = false;
server.listen(common.PORT, function() { server.listen(0, function() {
http.get({ http.get({
port: common.PORT, port: this.address().port,
headers: { connection: 'keep-alive' } headers: { connection: 'keep-alive' }
}, function(res) { }, function(res) {
server.close(); server.close();

4
test/parallel/test-http-abort-queued.js

@ -1,6 +1,6 @@
'use strict'; 'use strict';
require('../common');
const assert = require('assert'); const assert = require('assert');
const common = require('../common');
const http = require('http'); const http = require('http');
var complete; var complete;
@ -19,7 +19,7 @@ var server = http.createServer(function(req, res) {
}); });
server.listen(common.PORT, function() { server.listen(0, function() {
console.log('listen', server.address().port); console.log('listen', server.address().port);
var agent = new http.Agent({maxSockets: 1}); var agent = new http.Agent({maxSockets: 1});

8
test/parallel/test-http-after-connect.js

@ -1,5 +1,5 @@
'use strict'; 'use strict';
var common = require('../common'); require('../common');
var assert = require('assert'); var assert = require('assert');
var http = require('http'); var http = require('http');
@ -26,9 +26,9 @@ server.on('connect', function(req, socket, firstBodyChunk) {
socket.end(); socket.end();
}); });
}); });
server.listen(common.PORT, function() { server.listen(0, function() {
var req = http.request({ var req = http.request({
port: common.PORT, port: this.address().port,
method: 'CONNECT', method: 'CONNECT',
path: 'google.com:80' path: 'google.com:80'
}); });
@ -46,7 +46,7 @@ server.listen(common.PORT, function() {
function doRequest(i) { function doRequest(i) {
http.get({ http.get({
port: common.PORT, port: server.address().port,
path: '/request' + i path: '/request' + i
}, function(res) { }, function(res) {
console.error('Client got GET response'); console.error('Client got GET response');

138
test/parallel/test-http-agent-destroyed-socket.js

@ -1,86 +1,86 @@
'use strict'; 'use strict';
var common = require('../common'); require('../common');
var assert = require('assert'); var assert = require('assert');
var http = require('http'); var http = require('http');
var server = http.createServer(function(req, res) { var server = http.createServer(function(req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'}); res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n'); res.end('Hello World\n');
}).listen(common.PORT); }).listen(0, function() {
var agent = new http.Agent({maxSockets: 1});
var agent = new http.Agent({maxSockets: 1}); agent.on('free', function(socket, host, port) {
console.log('freeing socket. destroyed? ', socket.destroyed);
agent.on('free', function(socket, host, port) { });
console.log('freeing socket. destroyed? ', socket.destroyed);
});
var requestOptions = { var requestOptions = {
agent: agent, agent: agent,
host: 'localhost', host: 'localhost',
port: common.PORT, port: this.address().port,
path: '/' path: '/'
}; };
var request1 = http.get(requestOptions, function(response) { var request1 = http.get(requestOptions, function(response) {
// assert request2 is queued in the agent // assert request2 is queued in the agent
var key = agent.getName(requestOptions); var key = agent.getName(requestOptions);
assert(agent.requests[key].length === 1); assert(agent.requests[key].length === 1);
console.log('got response1'); console.log('got response1');
request1.socket.on('close', function() { request1.socket.on('close', function() {
console.log('request1 socket closed'); console.log('request1 socket closed');
}); });
response.pipe(process.stdout); response.pipe(process.stdout);
response.on('end', function() { response.on('end', function() {
console.log('response1 done'); console.log('response1 done');
///////////////////////////////// /////////////////////////////////
// //
// THE IMPORTANT PART // THE IMPORTANT PART
// //
// It is possible for the socket to get destroyed and other work // It is possible for the socket to get destroyed and other work
// to run before the 'close' event fires because it happens on // to run before the 'close' event fires because it happens on
// nextTick. This example is contrived because it destroys the // nextTick. This example is contrived because it destroys the
// socket manually at just the right time, but at Voxer we have // socket manually at just the right time, but at Voxer we have
// seen cases where the socket is destroyed by non-user code // seen cases where the socket is destroyed by non-user code
// then handed out again by an agent *before* the 'close' event // then handed out again by an agent *before* the 'close' event
// is triggered. // is triggered.
request1.socket.destroy(); request1.socket.destroy();
response.once('close', function() { response.once('close', function() {
// assert request2 was removed from the queue // assert request2 was removed from the queue
assert(!agent.requests[key]); assert(!agent.requests[key]);
console.log("waiting for request2.onSocket's nextTick"); console.log("waiting for request2.onSocket's nextTick");
process.nextTick(function() { process.nextTick(function() {
// assert that the same socket was not assigned to request2, // assert that the same socket was not assigned to request2,
// since it was destroyed. // since it was destroyed.
assert(request1.socket !== request2.socket); assert(request1.socket !== request2.socket);
assert(!request2.socket.destroyed, 'the socket is destroyed'); assert(!request2.socket.destroyed, 'the socket is destroyed');
});
}); });
}); });
}); });
});
var request2 = http.get(requestOptions, function(response) { var request2 = http.get(requestOptions, function(response) {
assert(!request2.socket.destroyed); assert(!request2.socket.destroyed);
assert(request1.socket.destroyed); assert(request1.socket.destroyed);
// assert not reusing the same socket, since it was destroyed. // assert not reusing the same socket, since it was destroyed.
assert(request1.socket !== request2.socket); assert(request1.socket !== request2.socket);
console.log('got response2'); console.log('got response2');
var gotClose = false; var gotClose = false;
var gotResponseEnd = false; var gotResponseEnd = false;
request2.socket.on('close', function() { request2.socket.on('close', function() {
console.log('request2 socket closed'); console.log('request2 socket closed');
gotClose = true; gotClose = true;
done(); done();
}); });
response.pipe(process.stdout); response.pipe(process.stdout);
response.on('end', function() { response.on('end', function() {
console.log('response2 done'); console.log('response2 done');
gotResponseEnd = true; gotResponseEnd = true;
done(); done();
}); });
function done() { function done() {
if (gotResponseEnd && gotClose) if (gotResponseEnd && gotClose)
server.close(); server.close();
} }
});
}); });

52
test/parallel/test-http-agent-error-on-idle.js

@ -1,31 +1,27 @@
'use strict'; 'use strict';
var common = require('../common'); require('../common');
var assert = require('assert'); var assert = require('assert');
var http = require('http'); var http = require('http');
var Agent = http.Agent; var Agent = http.Agent;
var agent = new Agent({ var server = http.createServer(function(req, res) {
keepAlive: true, res.end('hello world');
}); });
var requestParams = { server.listen(0, function() {
host: 'localhost', var agent = new Agent({
port: common.PORT, keepAlive: true,
agent: agent, });
path: '/'
};
var socketKey = agent.getName(requestParams);
function get(callback) { var requestParams = {
return http.get(requestParams, callback); host: 'localhost',
} port: this.address().port,
agent: agent,
path: '/'
};
var server = http.createServer(function(req, res) { var socketKey = agent.getName(requestParams);
res.end('hello world');
});
server.listen(common.PORT, function() {
get(function(res) { get(function(res) {
assert.equal(res.statusCode, 200); assert.equal(res.statusCode, 200);
res.resume(); res.resume();
@ -43,13 +39,17 @@ server.listen(common.PORT, function() {
}); });
}); });
}); });
});
function done() { function get(callback) {
assert.equal(Object.keys(agent.freeSockets).length, 0, return http.get(requestParams, callback);
'expect the freeSockets pool to be empty'); }
agent.destroy(); function done() {
server.close(); assert.equal(Object.keys(agent.freeSockets).length, 0,
process.exit(0); 'expect the freeSockets pool to be empty');
}
agent.destroy();
server.close();
process.exit(0);
}
});

9
test/parallel/test-http-agent-keepalive.js

@ -4,6 +4,8 @@ const assert = require('assert');
const http = require('http'); const http = require('http');
const Agent = require('_http_agent').Agent; const Agent = require('_http_agent').Agent;
let name;
const agent = new Agent({ const agent = new Agent({
keepAlive: true, keepAlive: true,
keepAliveMsecs: 1000, keepAliveMsecs: 1000,
@ -28,14 +30,12 @@ const server = http.createServer(function(req, res) {
function get(path, callback) { function get(path, callback) {
return http.get({ return http.get({
host: 'localhost', host: 'localhost',
port: common.PORT, port: server.address().port,
agent: agent, agent: agent,
path: path path: path
}, callback); }, callback);
} }
const name = 'localhost:' + common.PORT + ':';
function checkDataAndSockets(body) { function checkDataAndSockets(body) {
assert.equal(body.toString(), 'hello world'); assert.equal(body.toString(), 'hello world');
assert.equal(agent.sockets[name].length, 1); assert.equal(agent.sockets[name].length, 1);
@ -106,7 +106,8 @@ function done() {
process.exit(0); process.exit(0);
} }
server.listen(common.PORT, function() { server.listen(0, function() {
name = `localhost:${server.address().port}:`;
// request first, and keep alive // request first, and keep alive
get('/first', function(res) { get('/first', function(res) {
assert.equal(res.statusCode, 200); assert.equal(res.statusCode, 200);

6
test/parallel/test-http-agent-maxsockets-regress-4050.js

@ -1,5 +1,5 @@
'use strict'; 'use strict';
const common = require('../common'); require('../common');
const assert = require('assert'); const assert = require('assert');
const http = require('http'); const http = require('http');
@ -19,13 +19,13 @@ const server = http.createServer(function(req, res) {
function get(path, callback) { function get(path, callback) {
return http.get({ return http.get({
host: 'localhost', host: 'localhost',
port: common.PORT, port: server.address().port,
agent: agent, agent: agent,
path: path path: path
}, callback); }, callback);
} }
server.listen(common.PORT, function() { server.listen(0, function() {
var finished = 0; var finished = 0;
const num_requests = 6; const num_requests = 6;
for (var i = 0; i < num_requests; i++) { for (var i = 0; i < num_requests; i++) {

6
test/parallel/test-http-agent-maxsockets.js

@ -1,5 +1,5 @@
'use strict'; 'use strict';
var common = require('../common'); require('../common');
var assert = require('assert'); var assert = require('assert');
var http = require('http'); var http = require('http');
@ -17,7 +17,7 @@ var server = http.createServer(function(req, res) {
function get(path, callback) { function get(path, callback) {
return http.get({ return http.get({
host: 'localhost', host: 'localhost',
port: common.PORT, port: server.address().port,
agent: agent, agent: agent,
path: path path: path
}, callback); }, callback);
@ -35,7 +35,7 @@ function done() {
server.close(); server.close();
} }
server.listen(common.PORT, function() { server.listen(0, function() {
get('/1', function(res) { get('/1', function(res) {
assert.equal(res.statusCode, 200); assert.equal(res.statusCode, 200);
res.resume(); res.resume();

6
test/parallel/test-http-agent-no-protocol.js

@ -1,5 +1,5 @@
'use strict'; 'use strict';
var common = require('../common'); require('../common');
var assert = require('assert'); var assert = require('assert');
var http = require('http'); var http = require('http');
var url = require('url'); var url = require('url');
@ -14,8 +14,8 @@ process.on('exit', function() {
var server = http.createServer(function(req, res) { var server = http.createServer(function(req, res) {
res.end(); res.end();
request++; request++;
}).listen(common.PORT, '127.0.0.1', function() { }).listen(0, '127.0.0.1', function() {
var opts = url.parse('http://127.0.0.1:' + common.PORT + '/'); var opts = url.parse(`http://127.0.0.1:${this.address().port}/`);
// remove the `protocol` field… the `http` module should fall back // remove the `protocol` field… the `http` module should fall back
// to "http:", as defined by the global, default `http.Agent` instance. // to "http:", as defined by the global, default `http.Agent` instance.

4
test/parallel/test-http-agent-null.js

@ -1,5 +1,5 @@
'use strict'; 'use strict';
var common = require('../common'); require('../common');
var assert = require('assert'); var assert = require('assert');
var http = require('http'); var http = require('http');
@ -13,7 +13,7 @@ process.on('exit', function() {
var server = http.createServer(function(req, res) { var server = http.createServer(function(req, res) {
request++; request++;
res.end(); res.end();
}).listen(common.PORT, function() { }).listen(0, function() {
var options = { var options = {
agent: null, agent: null,
port: this.address().port port: this.address().port

7
test/parallel/test-http-agent.js

@ -1,5 +1,5 @@
'use strict'; 'use strict';
var common = require('../common'); require('../common');
var assert = require('assert'); var assert = require('assert');
var http = require('http'); var http = require('http');
@ -12,11 +12,12 @@ var responses = 0;
var N = 4; var N = 4;
var M = 4; var M = 4;
server.listen(common.PORT, function() { server.listen(0, function() {
const port = this.address().port;
for (var i = 0; i < N; i++) { for (var i = 0; i < N; i++) {
setTimeout(function() { setTimeout(function() {
for (var j = 0; j < M; j++) { for (var j = 0; j < M; j++) {
http.get({ port: common.PORT, path: '/' }, function(res) { http.get({ port: port, path: '/' }, function(res) {
console.log('%d %d', responses, res.statusCode); console.log('%d %d', responses, res.statusCode);
if (++responses == N * M) { if (++responses == N * M) {
console.error('Received all responses, closing server'); console.error('Received all responses, closing server');

6
test/parallel/test-http-allow-req-after-204-res.js

@ -1,5 +1,5 @@
'use strict'; 'use strict';
var common = require('../common'); require('../common');
var http = require('http'); var http = require('http');
var assert = require('assert'); var assert = require('assert');
@ -23,7 +23,7 @@ function nextRequest() {
console.error('writing request: %s', method); console.error('writing request: %s', method);
var request = http.request({ var request = http.request({
port: common.PORT, port: server.address().port,
method: method, method: method,
path: '/' path: '/'
}, function(response) { }, function(response) {
@ -43,4 +43,4 @@ function nextRequest() {
request.end(); request.end();
} }
server.listen(common.PORT, nextRequest); server.listen(0, nextRequest);

8
test/parallel/test-http-automatic-headers.js

@ -1,5 +1,5 @@
'use strict'; 'use strict';
var common = require('../common'); require('../common');
var assert = require('assert'); var assert = require('assert');
var http = require('http'); var http = require('http');
@ -9,12 +9,12 @@ var server = http.createServer(function(req, res) {
res.setHeader('X-Content-Length', 'baz'); res.setHeader('X-Content-Length', 'baz');
res.end(); res.end();
}); });
server.listen(common.PORT); server.listen(0);
server.on('listening', function() { server.on('listening', function() {
var agent = new http.Agent({ port: common.PORT, maxSockets: 1 }); var agent = new http.Agent({ port: this.address().port, maxSockets: 1 });
http.get({ http.get({
port: common.PORT, port: this.address().port,
path: '/hello', path: '/hello',
agent: agent agent: agent
}, function(res) { }, function(res) {

19
test/parallel/test-http-bind-twice.js

@ -1,5 +1,5 @@
'use strict'; 'use strict';
var common = require('../common'); require('../common');
var assert = require('assert'); var assert = require('assert');
var http = require('http'); var http = require('http');
@ -14,14 +14,13 @@ function dontCall() {
} }
var server1 = http.createServer(dontCall); var server1 = http.createServer(dontCall);
server1.listen(common.PORT, '127.0.0.1', function() {}); server1.listen(0, '127.0.0.1', function() {
var server2 = http.createServer(dontCall);
server2.listen(this.address().port, '127.0.0.1', dontCall);
var server2 = http.createServer(dontCall); server2.on('error', function(e) {
server2.listen(common.PORT, '127.0.0.1', dontCall); assert.equal(e.code, 'EADDRINUSE');
server1.close();
server2.on('error', function(e) { gotError = true;
assert.equal(e.code, 'EADDRINUSE'); });
server1.close();
gotError = true;
}); });

6
test/parallel/test-http-blank-header.js

@ -1,5 +1,5 @@
'use strict'; 'use strict';
var common = require('../common'); require('../common');
var assert = require('assert'); var assert = require('assert');
var http = require('http'); var http = require('http');
var net = require('net'); var net = require('net');
@ -18,8 +18,8 @@ var server = http.createServer(function(req, res) {
}); });
server.listen(common.PORT, function() { server.listen(0, function() {
var c = net.createConnection(common.PORT); var c = net.createConnection(this.address().port);
c.on('connect', function() { c.on('connect', function() {
c.write('GET /blah HTTP/1.1\r\n' + c.write('GET /blah HTTP/1.1\r\n' +

6
test/parallel/test-http-buffer-sanity.js

@ -1,5 +1,5 @@
'use strict'; 'use strict';
var common = require('../common'); require('../common');
var assert = require('assert'); var assert = require('assert');
var http = require('http'); var http = require('http');
@ -44,11 +44,11 @@ var web = http.Server(function(req, res) {
var gotThanks = false; var gotThanks = false;
web.listen(common.PORT, function() { web.listen(0, function() {
console.log('Making request'); console.log('Making request');
var req = http.request({ var req = http.request({
port: common.PORT, port: this.address().port,
method: 'GET', method: 'GET',
path: '/', path: '/',
headers: { 'content-length': buffer.length } headers: { 'content-length': buffer.length }

6
test/parallel/test-http-byteswritten.js

@ -1,5 +1,5 @@
'use strict'; 'use strict';
var common = require('../common'); require('../common');
var assert = require('assert'); var assert = require('assert');
var http = require('http'); var http = require('http');
@ -36,7 +36,7 @@ var httpServer = http.createServer(function(req, res) {
res.end(body); res.end(body);
}); });
httpServer.listen(common.PORT, function() { httpServer.listen(0, function() {
http.get({ port: common.PORT }); http.get({ port: this.address().port });
}); });

4
test/parallel/test-http-catch-uncaughtexception.js

@ -13,8 +13,8 @@ process.on('uncaughtException', uncaughtCallback);
const server = http.createServer(function(req, res) { const server = http.createServer(function(req, res) {
res.writeHead(200, { 'Content-Type': 'text/plain' }); res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('bye'); res.end('bye');
}).listen(common.PORT, function() { }).listen(0, function() {
http.get({ port: common.PORT }, function(res) { http.get({ port: this.address().port }, function(res) {
res.resume(); res.resume();
throw new Error('get did fail'); throw new Error('get did fail');
}).on('close', function() { }).on('close', function() {

8
test/parallel/test-http-chunk-problem.js

@ -10,7 +10,7 @@ if (!common.hasCrypto) {
if (process.argv[2] === 'request') { if (process.argv[2] === 'request') {
const http = require('http'); const http = require('http');
const options = { const options = {
port: common.PORT, port: +process.argv[3],
path: '/' path: '/'
}; };
@ -39,11 +39,13 @@ const http = require('http');
const cp = require('child_process'); const cp = require('child_process');
const filename = require('path').join(common.tmpDir, 'big'); const filename = require('path').join(common.tmpDir, 'big');
let server;
function executeRequest(cb) { function executeRequest(cb) {
cp.exec([process.execPath, cp.exec([process.execPath,
__filename, __filename,
'request', 'request',
server.address().port,
'|', '|',
process.execPath, process.execPath,
__filename, __filename,
@ -64,7 +66,7 @@ const ddcmd = common.ddCommand(filename, 10240);
cp.exec(ddcmd, function(err, stdout, stderr) { cp.exec(ddcmd, function(err, stdout, stderr) {
if (err) throw err; if (err) throw err;
const server = http.createServer(function(req, res) { server = http.createServer(function(req, res) {
res.writeHead(200); res.writeHead(200);
// Create the subprocess // Create the subprocess
@ -87,7 +89,7 @@ cp.exec(ddcmd, function(err, stdout, stderr) {
}); });
server.listen(common.PORT, () => { server.listen(0, () => {
executeRequest(() => server.close()); executeRequest(() => server.close());
}); });
}); });

4
test/parallel/test-http-chunked-304.js

@ -23,8 +23,8 @@ function test(statusCode, next) {
server.close(); server.close();
}); });
server.listen(common.PORT, function() { server.listen(0, function() {
var conn = net.createConnection(common.PORT, function() { var conn = net.createConnection(this.address().port, function() {
conn.write('GET / HTTP/1.1\r\n\r\n'); conn.write('GET / HTTP/1.1\r\n\r\n');
var resp = ''; var resp = '';

6
test/parallel/test-http-chunked.js

@ -1,5 +1,5 @@
'use strict'; 'use strict';
var common = require('../common'); require('../common');
var assert = require('assert'); var assert = require('assert');
var http = require('http'); var http = require('http');
@ -17,12 +17,12 @@ var server = http.createServer(function(req, res) {
res.writeHead(200, {'Content-Type': 'text/plain; charset=utf8'}); res.writeHead(200, {'Content-Type': 'text/plain; charset=utf8'});
res.end(UTF8_STRING, 'utf8'); res.end(UTF8_STRING, 'utf8');
}); });
server.listen(common.PORT, function() { server.listen(0, function() {
var data = ''; var data = '';
var get = http.get({ var get = http.get({
path: '/', path: '/',
host: 'localhost', host: 'localhost',
port: common.PORT port: this.address().port
}, function(x) { }, function(x) {
x.setEncoding('utf8'); x.setEncoding('utf8');
x.on('data', function(c) {data += c;}); x.on('data', function(c) {data += c;});

6
test/parallel/test-http-client-abort-event.js

@ -1,14 +1,14 @@
'use strict'; 'use strict';
require('../common');
var assert = require('assert'); var assert = require('assert');
var http = require('http'); var http = require('http');
var common = require('../common');
var server = http.createServer(function(req, res) { var server = http.createServer(function(req, res) {
res.end(); res.end();
}); });
var count = 0; var count = 0;
server.listen(common.PORT, function() { server.listen(0, function() {
var req = http.request({ var req = http.request({
port: common.PORT port: this.address().port
}, function() { }, function() {
assert(false, 'should not receive data'); assert(false, 'should not receive data');
}); });

6
test/parallel/test-http-client-abort.js

@ -1,5 +1,5 @@
'use strict'; 'use strict';
const common = require('../common'); require('../common');
const assert = require('assert'); const assert = require('assert');
const http = require('http'); const http = require('http');
@ -33,12 +33,12 @@ var responses = 0;
const N = 8; const N = 8;
const requests = []; const requests = [];
server.listen(common.PORT, function() { server.listen(0, function() {
console.log('Server listening.'); console.log('Server listening.');
for (var i = 0; i < N; i++) { for (var i = 0; i < N; i++) {
console.log('Making client ' + i); console.log('Making client ' + i);
var options = { port: common.PORT, path: '/?id=' + i }; var options = { port: this.address().port, path: '/?id=' + i };
var req = http.get(options, function(res) { var req = http.get(options, function(res) {
console.log('Client response code ' + res.statusCode); console.log('Client response code ' + res.statusCode);

6
test/parallel/test-http-client-abort2.js

@ -1,13 +1,13 @@
'use strict'; 'use strict';
var common = require('../common'); require('../common');
var http = require('http'); var http = require('http');
var server = http.createServer(function(req, res) { var server = http.createServer(function(req, res) {
res.end('Hello'); res.end('Hello');
}); });
server.listen(common.PORT, function() { server.listen(0, function() {
var req = http.get({port: common.PORT}, function(res) { var req = http.get({port: this.address().port}, function(res) {
res.on('data', function(data) { res.on('data', function(data) {
req.abort(); req.abort();
server.close(); server.close();

9
test/parallel/test-http-client-agent.js

@ -1,9 +1,9 @@
'use strict'; 'use strict';
var common = require('../common'); require('../common');
var assert = require('assert'); var assert = require('assert');
var http = require('http'); var http = require('http');
var name = http.globalAgent.getName({ port: common.PORT }); var name;
var max = 3; var max = 3;
var count = 0; var count = 0;
@ -18,7 +18,8 @@ var server = http.Server(function(req, res) {
res.end('Hello, World!'); res.end('Hello, World!');
} }
}); });
server.listen(common.PORT, function() { server.listen(0, function() {
name = http.globalAgent.getName({ port: this.address().port });
for (var i = 0; i < max; ++i) { for (var i = 0; i < max; ++i) {
request(i); request(i);
} }
@ -26,7 +27,7 @@ server.listen(common.PORT, function() {
function request(i) { function request(i) {
var req = http.get({ var req = http.get({
port: common.PORT, port: server.address().port,
path: '/' + i path: '/' + i
}, function(res) { }, function(res) {
var socket = req.socket; var socket = req.socket;

6
test/parallel/test-http-client-default-headers-exist.js

@ -1,5 +1,5 @@
'use strict'; 'use strict';
var common = require('../common'); require('../common');
var assert = require('assert'); var assert = require('assert');
var http = require('http'); var http = require('http');
@ -36,11 +36,11 @@ var server = http.createServer(function(req, res) {
server.close(); server.close();
}); });
server.listen(common.PORT, function() { server.listen(0, function() {
expectedMethods.forEach(function(method) { expectedMethods.forEach(function(method) {
http.request({ http.request({
method: method, method: method,
port: common.PORT port: server.address().port
}).end(); }).end();
}); });
}); });

6
test/parallel/test-http-client-encoding.js

@ -1,16 +1,16 @@
'use strict'; 'use strict';
var common = require('../common'); require('../common');
var http = require('http'); var http = require('http');
http.createServer(function(req, res) { http.createServer(function(req, res) {
res.end('ok\n'); res.end('ok\n');
this.close(); this.close();
}).listen(common.PORT, test); }).listen(0, test);
function test() { function test() {
http.request({ http.request({
port: common.PORT, port: this.address().port,
encoding: 'utf8' encoding: 'utf8'
}, function(res) { }, function(res) {
res.pipe(process.stdout); res.pipe(process.stdout);

6
test/parallel/test-http-client-get-url.js

@ -1,5 +1,5 @@
'use strict'; 'use strict';
var common = require('../common'); require('../common');
var assert = require('assert'); var assert = require('assert');
var http = require('http'); var http = require('http');
@ -15,8 +15,8 @@ var server = http.createServer(function(req, res) {
seen_req = true; seen_req = true;
}); });
server.listen(common.PORT, function() { server.listen(0, function() {
http.get('http://127.0.0.1:' + common.PORT + '/foo?bar'); http.get(`http://127.0.0.1:${this.address().port}/foo?bar`);
}); });
process.on('exit', function() { process.on('exit', function() {

6
test/parallel/test-http-client-parse-error.js

@ -1,5 +1,5 @@
'use strict'; 'use strict';
var common = require('../common'); require('../common');
var assert = require('assert'); var assert = require('assert');
var http = require('http'); var http = require('http');
@ -17,11 +17,11 @@ net.createServer(function(c) {
c.end('bad http - should trigger parse error\r\n'); c.end('bad http - should trigger parse error\r\n');
this.close(); this.close();
} }
}).listen(common.PORT, '127.0.0.1', function() { }).listen(0, '127.0.0.1', function() {
for (var i = 0; i < 2; i++) { for (var i = 0; i < 2; i++) {
http.request({ http.request({
host: '127.0.0.1', host: '127.0.0.1',
port: common.PORT, port: this.address().port,
method: 'GET', method: 'GET',
path: '/' path: '/'
}).on('error', function(e) { }).on('error', function(e) {

8
test/parallel/test-http-client-race-2.js

@ -1,5 +1,5 @@
'use strict'; 'use strict';
var common = require('../common'); require('../common');
var assert = require('assert'); var assert = require('assert');
var http = require('http'); var http = require('http');
var url = require('url'); var url = require('url');
@ -27,14 +27,14 @@ var server = http.createServer(function(req, res) {
{'Content-Type': 'text/plain', 'Content-Length': body.length}); {'Content-Type': 'text/plain', 'Content-Length': body.length});
res.end(body); res.end(body);
}); });
server.listen(common.PORT); server.listen(0);
var body1 = ''; var body1 = '';
var body2 = ''; var body2 = '';
var body3 = ''; var body3 = '';
server.on('listening', function() { server.on('listening', function() {
var client = http.createClient(common.PORT); var client = http.createClient(this.address().port);
// //
// Client #1 is assigned Parser #1 // Client #1 is assigned Parser #1
@ -59,7 +59,7 @@ server.on('listening', function() {
// parser that previously belonged to Client #1. But we're not finished // parser that previously belonged to Client #1. But we're not finished
// with Client #1 yet! // with Client #1 yet!
// //
var client2 = http.createClient(common.PORT); var client2 = http.createClient(server.address().port);
// //
// At this point, the bug would manifest itself and crash because the // At this point, the bug would manifest itself and crash because the

8
test/parallel/test-http-client-race.js

@ -1,5 +1,5 @@
'use strict'; 'use strict';
var common = require('../common'); require('../common');
var assert = require('assert'); var assert = require('assert');
var http = require('http'); var http = require('http');
var url = require('url'); var url = require('url');
@ -13,13 +13,13 @@ var server = http.createServer(function(req, res) {
{'Content-Type': 'text/plain', 'Content-Length': body.length}); {'Content-Type': 'text/plain', 'Content-Length': body.length});
res.end(body); res.end(body);
}); });
server.listen(common.PORT); server.listen(0);
var body1 = ''; var body1 = '';
var body2 = ''; var body2 = '';
server.on('listening', function() { server.on('listening', function() {
var req1 = http.request({ port: common.PORT, path: '/1' }); var req1 = http.request({ port: this.address().port, path: '/1' });
req1.end(); req1.end();
req1.on('response', function(res1) { req1.on('response', function(res1) {
res1.setEncoding('utf8'); res1.setEncoding('utf8');
@ -29,7 +29,7 @@ server.on('listening', function() {
}); });
res1.on('end', function() { res1.on('end', function() {
var req2 = http.request({ port: common.PORT, path: '/2' }); var req2 = http.request({ port: server.address().port, path: '/2' });
req2.end(); req2.end();
req2.on('response', function(res2) { req2.on('response', function(res2) {
res2.setEncoding('utf8'); res2.setEncoding('utf8');

4
test/parallel/test-http-client-reject-chunked-with-content-length.js

@ -13,11 +13,11 @@ const server = net.createServer((socket) => {
socket.write(reqstr); socket.write(reqstr);
}); });
server.listen(common.PORT, () => { server.listen(0, () => {
// The callback should not be called because the server is sending // The callback should not be called because the server is sending
// both a Content-Length header and a Transfer-Encoding: chunked // both a Content-Length header and a Transfer-Encoding: chunked
// header, which is a violation of the HTTP spec. // header, which is a violation of the HTTP spec.
const req = http.get({port: common.PORT}, (res) => { const req = http.get({port: server.address().port}, (res) => {
assert.fail(null, null, 'callback should not be called'); assert.fail(null, null, 'callback should not be called');
}); });
req.on('error', common.mustCall((err) => { req.on('error', common.mustCall((err) => {

4
test/parallel/test-http-client-reject-cr-no-lf.js

@ -13,10 +13,10 @@ const server = net.createServer((socket) => {
socket.write(reqstr); socket.write(reqstr);
}); });
server.listen(common.PORT, () => { server.listen(0, () => {
// The callback should not be called because the server is sending a // The callback should not be called because the server is sending a
// header field that ends only in \r with no following \n // header field that ends only in \r with no following \n
const req = http.get({port: common.PORT}, (res) => { const req = http.get({port: server.address().port}, (res) => {
assert.fail(null, null, 'callback should not be called'); assert.fail(null, null, 'callback should not be called');
}); });
req.on('error', common.mustCall((err) => { req.on('error', common.mustCall((err) => {

7
test/parallel/test-http-client-timeout-agent.js

@ -1,5 +1,5 @@
'use strict'; 'use strict';
var common = require('../common'); require('../common');
var assert = require('assert'); var assert = require('assert');
var http = require('http'); var http = require('http');
@ -7,7 +7,7 @@ var requests_sent = 0;
var requests_done = 0; var requests_done = 0;
var options = { var options = {
method: 'GET', method: 'GET',
port: common.PORT, port: undefined,
host: '127.0.0.1', host: '127.0.0.1',
}; };
@ -25,7 +25,8 @@ var server = http.createServer(function(req, res) {
} }
}); });
server.listen(options.port, options.host, function() { server.listen(0, options.host, function() {
options.port = this.address().port;
var req; var req;
for (requests_sent = 0; requests_sent < 30; requests_sent += 1) { for (requests_sent = 0; requests_sent < 30; requests_sent += 1) {

5
test/parallel/test-http-client-timeout-event.js

@ -5,7 +5,7 @@ var http = require('http');
var options = { var options = {
method: 'GET', method: 'GET',
port: common.PORT, port: undefined,
host: '127.0.0.1', host: '127.0.0.1',
path: '/' path: '/'
}; };
@ -14,7 +14,8 @@ var server = http.createServer(function(req, res) {
// this space intentionally left blank // this space intentionally left blank
}); });
server.listen(options.port, options.host, function() { server.listen(0, options.host, function() {
options.port = this.address().port;
var req = http.request(options, function(res) { var req = http.request(options, function(res) {
// this space intentionally left blank // this space intentionally left blank
}); });

5
test/parallel/test-http-client-timeout-with-data.js

@ -13,7 +13,7 @@ process.on('exit', function() {
const options = { const options = {
method: 'GET', method: 'GET',
port: common.PORT, port: undefined,
host: '127.0.0.1', host: '127.0.0.1',
path: '/' path: '/'
}; };
@ -24,7 +24,8 @@ const server = http.createServer(function(req, res) {
setTimeout(function() { res.end('*'); }, common.platformTimeout(100)); setTimeout(function() { res.end('*'); }, common.platformTimeout(100));
}); });
server.listen(options.port, options.host, function() { server.listen(0, options.host, function() {
options.port = this.address().port;
const req = http.request(options, onresponse); const req = http.request(options, onresponse);
req.end(); req.end();

7
test/parallel/test-http-client-timeout.js

@ -1,11 +1,11 @@
'use strict'; 'use strict';
var common = require('../common'); require('../common');
var assert = require('assert'); var assert = require('assert');
var http = require('http'); var http = require('http');
var options = { var options = {
method: 'GET', method: 'GET',
port: common.PORT, port: undefined,
host: '127.0.0.1', host: '127.0.0.1',
path: '/' path: '/'
}; };
@ -14,7 +14,8 @@ var server = http.createServer(function(req, res) {
// this space intentionally left blank // this space intentionally left blank
}); });
server.listen(options.port, options.host, function() { server.listen(0, options.host, function() {
options.port = this.address().port;
var req = http.request(options, function(res) { var req = http.request(options, function(res) {
// this space intentionally left blank // this space intentionally left blank
}); });

6
test/parallel/test-http-client-upload-buf.js

@ -1,5 +1,5 @@
'use strict'; 'use strict';
var common = require('../common'); require('../common');
var assert = require('assert'); var assert = require('assert');
var http = require('http'); var http = require('http');
@ -23,11 +23,11 @@ var server = http.createServer(function(req, res) {
res.end(); res.end();
}); });
}); });
server.listen(common.PORT); server.listen(0);
server.on('listening', function() { server.on('listening', function() {
var req = http.request({ var req = http.request({
port: common.PORT, port: this.address().port,
method: 'POST', method: 'POST',
path: '/' path: '/'
}, function(res) { }, function(res) {

6
test/parallel/test-http-client-upload.js

@ -1,5 +1,5 @@
'use strict'; 'use strict';
var common = require('../common'); require('../common');
var assert = require('assert'); var assert = require('assert');
var http = require('http'); var http = require('http');
@ -24,11 +24,11 @@ var server = http.createServer(function(req, res) {
res.end(); res.end();
}); });
}); });
server.listen(common.PORT); server.listen(0);
server.on('listening', function() { server.on('listening', function() {
var req = http.request({ var req = http.request({
port: common.PORT, port: this.address().port,
method: 'POST', method: 'POST',
path: '/' path: '/'
}, function(res) { }, function(res) {

7
test/parallel/test-http-conn-reset.js

@ -1,5 +1,5 @@
'use strict'; 'use strict';
var common = require('../common'); require('../common');
var assert = require('assert'); var assert = require('assert');
var http = require('http'); var http = require('http');
var net = require('net'); var net = require('net');
@ -8,7 +8,7 @@ var caughtError = false;
var options = { var options = {
host: '127.0.0.1', host: '127.0.0.1',
port: common.PORT port: undefined
}; };
// start a tcp server that closes incoming connections immediately // start a tcp server that closes incoming connections immediately
@ -16,10 +16,11 @@ var server = net.createServer(function(client) {
client.destroy(); client.destroy();
server.close(); server.close();
}); });
server.listen(options.port, options.host, onListen); server.listen(0, options.host, onListen);
// do a GET request, expect it to fail // do a GET request, expect it to fail
function onListen() { function onListen() {
options.port = this.address().port;
var req = http.request(options, function(res) { var req = http.request(options, function(res) {
assert.ok(false, 'this should never run'); assert.ok(false, 'this should never run');
}); });

6
test/parallel/test-http-connect-req-res.js

@ -28,9 +28,9 @@ server.on('connect', common.mustCall(function(req, socket, firstBodyChunk) {
socket.end(data); socket.end(data);
}); });
})); }));
server.listen(common.PORT, common.mustCall(function() { server.listen(0, common.mustCall(function() {
const req = http.request({ const req = http.request({
port: common.PORT, port: this.address().port,
method: 'CONNECT', method: 'CONNECT',
path: 'example.com:443' path: 'example.com:443'
}, function(res) { }, function(res) {
@ -43,7 +43,7 @@ server.listen(common.PORT, common.mustCall(function() {
console.error('Client got CONNECT request'); console.error('Client got CONNECT request');
// Make sure this request got removed from the pool. // Make sure this request got removed from the pool.
const name = 'localhost:' + common.PORT; const name = 'localhost:' + server.address().port;
assert(!http.globalAgent.sockets.hasOwnProperty(name)); assert(!http.globalAgent.sockets.hasOwnProperty(name));
assert(!http.globalAgent.requests.hasOwnProperty(name)); assert(!http.globalAgent.requests.hasOwnProperty(name));

8
test/parallel/test-http-connect.js

@ -1,5 +1,5 @@
'use strict'; 'use strict';
var common = require('../common'); require('../common');
var assert = require('assert'); var assert = require('assert');
var http = require('http'); var http = require('http');
@ -25,9 +25,9 @@ server.on('connect', function(req, socket, firstBodyChunk) {
socket.end(data); socket.end(data);
}); });
}); });
server.listen(common.PORT, function() { server.listen(0, function() {
var req = http.request({ var req = http.request({
port: common.PORT, port: this.address().port,
method: 'CONNECT', method: 'CONNECT',
path: 'google.com:443' path: 'google.com:443'
}, function(res) { }, function(res) {
@ -44,7 +44,7 @@ server.listen(common.PORT, function() {
clientGotConnect = true; clientGotConnect = true;
// Make sure this request got removed from the pool. // Make sure this request got removed from the pool.
var name = 'localhost:' + common.PORT; var name = 'localhost:' + server.address().port;
assert(!http.globalAgent.sockets.hasOwnProperty(name)); assert(!http.globalAgent.sockets.hasOwnProperty(name));
assert(!http.globalAgent.requests.hasOwnProperty(name)); assert(!http.globalAgent.requests.hasOwnProperty(name));

10
test/parallel/test-http-content-length.js

@ -1,5 +1,5 @@
'use strict'; 'use strict';
var common = require('../common'); require('../common');
var assert = require('assert'); var assert = require('assert');
var http = require('http'); var http = require('http');
@ -46,11 +46,11 @@ var server = http.createServer(function(req, res) {
if (totalRequests === receivedRequests) server.close(); if (totalRequests === receivedRequests) server.close();
}); });
server.listen(common.PORT, function() { server.listen(0, function() {
var req; var req;
req = http.request({ req = http.request({
port: common.PORT, port: this.address().port,
method: 'POST', method: 'POST',
path: '/multiple-writes' path: '/multiple-writes'
}); });
@ -63,7 +63,7 @@ server.listen(common.PORT, function() {
}); });
req = http.request({ req = http.request({
port: common.PORT, port: this.address().port,
method: 'POST', method: 'POST',
path: '/end-with-data' path: '/end-with-data'
}); });
@ -75,7 +75,7 @@ server.listen(common.PORT, function() {
}); });
req = http.request({ req = http.request({
port: common.PORT, port: this.address().port,
method: 'POST', method: 'POST',
path: '/empty' path: '/empty'
}); });

6
test/parallel/test-http-contentLength0.js

@ -1,5 +1,5 @@
'use strict'; 'use strict';
var common = require('../common'); require('../common');
var http = require('http'); var http = require('http');
// Simple test of Node's HTTP Client choking on a response // Simple test of Node's HTTP Client choking on a response
@ -11,9 +11,9 @@ var s = http.createServer(function(req, res) {
res.writeHead(200, {'Content-Length': '0 '}); res.writeHead(200, {'Content-Length': '0 '});
res.end(); res.end();
}); });
s.listen(common.PORT, function() { s.listen(0, function() {
var request = http.request({ port: common.PORT }, function(response) { var request = http.request({ port: this.address().port }, function(response) {
console.log('STATUS: ' + response.statusCode); console.log('STATUS: ' + response.statusCode);
s.close(); s.close();
response.resume(); response.resume();

6
test/parallel/test-http-createConnection.js

@ -1,5 +1,5 @@
'use strict'; 'use strict';
var common = require('../common'); require('../common');
var assert = require('assert'); var assert = require('assert');
var http = require('http'); var http = require('http');
var net = require('net'); var net = require('net');
@ -14,7 +14,7 @@ process.on('exit', function() {
var server = http.createServer(function(req, res) { var server = http.createServer(function(req, res) {
res.end(); res.end();
response++; response++;
}).listen(common.PORT, '127.0.0.1', function() { }).listen(0, '127.0.0.1', function() {
http.get({ createConnection: createConnection }, function(res) { http.get({ createConnection: createConnection }, function(res) {
res.resume(); res.resume();
server.close(); server.close();
@ -23,5 +23,5 @@ var server = http.createServer(function(req, res) {
function createConnection() { function createConnection() {
create++; create++;
return net.createConnection(common.PORT, '127.0.0.1'); return net.createConnection(server.address().port, '127.0.0.1');
} }

6
test/parallel/test-http-date-header.js

@ -1,5 +1,5 @@
'use strict'; 'use strict';
var common = require('../common'); require('../common');
var assert = require('assert'); var assert = require('assert');
var http = require('http'); var http = require('http');
@ -13,12 +13,12 @@ var server = http.createServer(function(req, res) {
}); });
res.end(testResBody); res.end(testResBody);
}); });
server.listen(common.PORT); server.listen(0);
server.addListener('listening', function() { server.addListener('listening', function() {
var options = { var options = {
port: common.PORT, port: this.address().port,
path: '/', path: '/',
method: 'GET' method: 'GET'
}; };

6
test/parallel/test-http-default-encoding.js

@ -1,5 +1,5 @@
'use strict'; 'use strict';
var common = require('../common'); require('../common');
var assert = require('assert'); var assert = require('assert');
var http = require('http'); var http = require('http');
@ -18,9 +18,9 @@ var server = http.Server(function(req, res) {
}); });
server.listen(common.PORT, function() { server.listen(0, function() {
http.request({ http.request({
port: common.PORT, port: this.address().port,
path: '/', path: '/',
method: 'POST' method: 'POST'
}, function(res) { }, function(res) {

18
test/parallel/test-http-default-port.js

@ -1,8 +1,6 @@
'use strict'; 'use strict';
const common = require('../common'); const common = require('../common');
const http = require('http'); const http = require('http');
const PORT = common.PORT;
const SSLPORT = common.PORT + 1;
const assert = require('assert'); const assert = require('assert');
const hostExpect = 'localhost'; const hostExpect = 'localhost';
const fs = require('fs'); const fs = require('fs');
@ -29,18 +27,18 @@ process.on('exit', function() {
console.log('ok'); console.log('ok');
}); });
http.globalAgent.defaultPort = PORT;
http.createServer(function(req, res) { http.createServer(function(req, res) {
assert.equal(req.headers.host, hostExpect); assert.equal(req.headers.host, hostExpect);
assert.equal(req.headers['x-port'], PORT); assert.equal(req.headers['x-port'], this.address().port);
res.writeHead(200); res.writeHead(200);
res.end('ok'); res.end('ok');
this.close(); this.close();
}).listen(PORT, function() { }).listen(0, function() {
http.globalAgent.defaultPort = this.address().port;
http.get({ http.get({
host: 'localhost', host: 'localhost',
headers: { headers: {
'x-port': PORT 'x-port': this.address().port
} }
}, function(res) { }, function(res) {
gotHttpResp = true; gotHttpResp = true;
@ -49,19 +47,19 @@ http.createServer(function(req, res) {
}); });
if (common.hasCrypto) { if (common.hasCrypto) {
https.globalAgent.defaultPort = SSLPORT;
https.createServer(options, function(req, res) { https.createServer(options, function(req, res) {
assert.equal(req.headers.host, hostExpect); assert.equal(req.headers.host, hostExpect);
assert.equal(req.headers['x-port'], SSLPORT); assert.equal(req.headers['x-port'], this.address().port);
res.writeHead(200); res.writeHead(200);
res.end('ok'); res.end('ok');
this.close(); this.close();
}).listen(SSLPORT, function() { }).listen(0, function() {
https.globalAgent.defaultPort = this.address().port;
https.get({ https.get({
host: 'localhost', host: 'localhost',
rejectUnauthorized: false, rejectUnauthorized: false,
headers: { headers: {
'x-port': SSLPORT 'x-port': this.address().port
} }
}, function(res) { }, function(res) {
gotHttpsResp = true; gotHttpsResp = true;

4
test/parallel/test-http-destroyed-socket-write2.js

@ -12,9 +12,9 @@ var server = http.createServer(function(req, res) {
}); });
}); });
server.listen(common.PORT, function() { server.listen(0, function() {
var req = http.request({ var req = http.request({
port: common.PORT, port: this.address().port,
path: '/', path: '/',
method: 'POST' method: 'POST'
}); });

4
test/parallel/test-http-double-content-length.js

@ -17,9 +17,9 @@ server.on('clientError', common.mustCall((err, socket) => {
socket.destroy(); socket.destroy();
})); }));
server.listen(common.PORT, () => { server.listen(0, () => {
const req = http.get({ const req = http.get({
port: common.PORT, port: server.address().port,
// Send two content-length header values. // Send two content-length header values.
headers: {'Content-Length': [1, 2]}}, headers: {'Content-Length': [1, 2]}},
(res) => { (res) => {

4
test/parallel/test-http-end-throw-socket-handling.js

@ -16,9 +16,9 @@ const server = http.createServer((req, res) => {
res.end('ok'); res.end('ok');
}); });
server.listen(common.PORT, common.mustCall(() => { server.listen(0, common.mustCall(() => {
for (let i = 0; i < 10; i++) { for (let i = 0; i < 10; i++) {
const options = { port: common.PORT }; const options = { port: server.address().port };
const req = http.request(options, (res) => { const req = http.request(options, (res) => {
res.resume(); res.resume();
res.on('end', common.mustCall(() => { res.on('end', common.mustCall(() => {

6
test/parallel/test-http-eof-on-connect.js

@ -1,5 +1,5 @@
'use strict'; 'use strict';
var common = require('../common'); require('../common');
var net = require('net'); var net = require('net');
var http = require('http'); var http = require('http');
@ -8,10 +8,10 @@ var http = require('http');
// reproduceable on the first packet on the first connection to a server. // reproduceable on the first packet on the first connection to a server.
var server = http.createServer(function(req, res) {}); var server = http.createServer(function(req, res) {});
server.listen(common.PORT); server.listen(0);
server.on('listening', function() { server.on('listening', function() {
net.createConnection(common.PORT).on('connect', function() { net.createConnection(this.address().port).on('connect', function() {
this.destroy(); this.destroy();
}).on('close', function() { }).on('close', function() {
server.close(); server.close();

6
test/parallel/test-http-exceptions.js

@ -1,5 +1,5 @@
'use strict'; 'use strict';
var common = require('../common'); require('../common');
var http = require('http'); var http = require('http');
var server = http.createServer(function(req, res) { var server = http.createServer(function(req, res) {
@ -9,9 +9,9 @@ var server = http.createServer(function(req, res) {
res.end(); res.end();
}); });
server.listen(common.PORT, function() { server.listen(0, function() {
for (var i = 0; i < 4; i += 1) { for (var i = 0; i < 4; i += 1) {
http.get({ port: common.PORT, path: '/busy/' + i }); http.get({ port: this.address().port, path: '/busy/' + i });
} }
}); });

6
test/parallel/test-http-expect-continue.js

@ -1,5 +1,5 @@
'use strict'; 'use strict';
var common = require('../common'); require('../common');
var assert = require('assert'); var assert = require('assert');
var http = require('http'); var http = require('http');
@ -28,12 +28,12 @@ server.on('checkContinue', function(req, res) {
handler(req, res); handler(req, res);
}, 100); }, 100);
}); });
server.listen(common.PORT); server.listen(0);
server.on('listening', function() { server.on('listening', function() {
var req = http.request({ var req = http.request({
port: common.PORT, port: this.address().port,
method: 'POST', method: 'POST',
path: '/world', path: '/world',
headers: { 'Expect': '100-continue' } headers: { 'Expect': '100-continue' }

6
test/parallel/test-http-extra-response.js

@ -1,5 +1,5 @@
'use strict'; 'use strict';
var common = require('../common'); require('../common');
var assert = require('assert'); var assert = require('assert');
var http = require('http'); var http = require('http');
var net = require('net'); var net = require('net');
@ -44,8 +44,8 @@ var server = net.createServer(function(socket) {
}); });
server.listen(common.PORT, function() { server.listen(0, function() {
http.get({ port: common.PORT }, function(res) { http.get({ port: this.address().port }, function(res) {
var buffer = ''; var buffer = '';
console.log('Got res code: ' + res.statusCode); console.log('Got res code: ' + res.statusCode);

6
test/parallel/test-http-flush-headers.js

@ -1,5 +1,5 @@
'use strict'; 'use strict';
const common = require('../common'); require('../common');
const assert = require('assert'); const assert = require('assert');
const http = require('http'); const http = require('http');
@ -9,11 +9,11 @@ server.on('request', function(req, res) {
res.end('ok'); res.end('ok');
server.close(); server.close();
}); });
server.listen(common.PORT, '127.0.0.1', function() { server.listen(0, '127.0.0.1', function() {
const req = http.request({ const req = http.request({
method: 'GET', method: 'GET',
host: '127.0.0.1', host: '127.0.0.1',
port: common.PORT, port: this.address().port,
}); });
req.setHeader('foo', 'bar'); req.setHeader('foo', 'bar');
req.flushHeaders(); req.flushHeaders();

4
test/parallel/test-http-flush-response-headers.js

@ -10,11 +10,11 @@ server.on('request', function(req, res) {
res.flushHeaders(); res.flushHeaders();
res.flushHeaders(); // Should be idempotent. res.flushHeaders(); // Should be idempotent.
}); });
server.listen(common.PORT, common.localhostIPv4, function() { server.listen(0, common.localhostIPv4, function() {
var req = http.request({ var req = http.request({
method: 'GET', method: 'GET',
host: common.localhostIPv4, host: common.localhostIPv4,
port: common.PORT, port: this.address().port,
}, onResponse); }, onResponse);
req.end(); req.end();

6
test/parallel/test-http-flush.js

@ -1,15 +1,15 @@
'use strict'; 'use strict';
var common = require('../common'); require('../common');
var http = require('http'); var http = require('http');
http.createServer(function(req, res) { http.createServer(function(req, res) {
res.end('ok'); res.end('ok');
this.close(); this.close();
}).listen(common.PORT, '127.0.0.1', function() { }).listen(0, '127.0.0.1', function() {
var req = http.request({ var req = http.request({
method: 'POST', method: 'POST',
host: '127.0.0.1', host: '127.0.0.1',
port: common.PORT, port: this.address().port,
}); });
req.flush(); // Flush the request headers. req.flush(); // Flush the request headers.
req.flush(); // Should be idempotent. req.flush(); // Should be idempotent.

4
test/parallel/test-http-full-response.js

@ -20,7 +20,7 @@ var server = http.createServer(function(req, res) {
var runs = 0; var runs = 0;
function runAb(opts, callback) { function runAb(opts, callback) {
var command = 'ab ' + opts + ' http://127.0.0.1:' + common.PORT + '/'; var command = `ab ${opts} http://127.0.0.1:${server.address().port}/`;
exec(command, function(err, stdout, stderr) { exec(command, function(err, stdout, stderr) {
if (err) { if (err) {
if (/ab|apr/mi.test(stderr)) { if (/ab|apr/mi.test(stderr)) {
@ -49,7 +49,7 @@ function runAb(opts, callback) {
}); });
} }
server.listen(common.PORT, function() { server.listen(0, function() {
runAb('-c 1 -n 10', function() { runAb('-c 1 -n 10', function() {
console.log('-c 1 -n 10 okay'); console.log('-c 1 -n 10 okay');

4
test/parallel/test-http-get-pipeline-problem.js

@ -34,13 +34,13 @@ var server = http.Server(function(req, res) {
}); });
server.listen(common.PORT, function() { server.listen(0, function() {
for (var i = 0; i < total; i++) { for (var i = 0; i < total; i++) {
(function() { (function() {
var x = i; var x = i;
var opts = { var opts = {
port: common.PORT, port: server.address().port,
headers: { connection: 'close' } headers: { connection: 'close' }
}; };

10
test/parallel/test-http-head-request.js

@ -1,15 +1,11 @@
'use strict'; 'use strict';
var common = require('../common'); require('../common');
var assert = require('assert'); var assert = require('assert');
var http = require('http'); var http = require('http');
var body = 'hello world\n'; var body = 'hello world\n';
var id = 0;
function test(headers) { function test(headers) {
var port = common.PORT + id++;
var server = http.createServer(function(req, res) { var server = http.createServer(function(req, res) {
console.error('req: %s headers: %j', req.method, headers); console.error('req: %s headers: %j', req.method, headers);
res.writeHead(200, headers); res.writeHead(200, headers);
@ -19,9 +15,9 @@ function test(headers) {
var gotEnd = false; var gotEnd = false;
server.listen(port, function() { server.listen(0, function() {
var request = http.request({ var request = http.request({
port: port, port: this.address().port,
method: 'HEAD', method: 'HEAD',
path: '/' path: '/'
}, function(response) { }, function(response) {

6
test/parallel/test-http-head-response-has-no-body-end.js

@ -1,5 +1,5 @@
'use strict'; 'use strict';
var common = require('../common'); require('../common');
var assert = require('assert'); var assert = require('assert');
var http = require('http'); var http = require('http');
@ -12,13 +12,13 @@ var server = http.createServer(function(req, res) {
res.writeHead(200); res.writeHead(200);
res.end('FAIL'); // broken: sends FAIL from hot path. res.end('FAIL'); // broken: sends FAIL from hot path.
}); });
server.listen(common.PORT); server.listen(0);
var responseComplete = false; var responseComplete = false;
server.on('listening', function() { server.on('listening', function() {
var req = http.request({ var req = http.request({
port: common.PORT, port: this.address().port,
method: 'HEAD', method: 'HEAD',
path: '/' path: '/'
}, function(res) { }, function(res) {

6
test/parallel/test-http-head-response-has-no-body.js

@ -1,5 +1,5 @@
'use strict'; 'use strict';
var common = require('../common'); require('../common');
var assert = require('assert'); var assert = require('assert');
var http = require('http'); var http = require('http');
@ -12,13 +12,13 @@ var server = http.createServer(function(req, res) {
res.writeHead(200); // broken: defaults to TE chunked res.writeHead(200); // broken: defaults to TE chunked
res.end(); res.end();
}); });
server.listen(common.PORT); server.listen(0);
var responseComplete = false; var responseComplete = false;
server.on('listening', function() { server.on('listening', function() {
var req = http.request({ var req = http.request({
port: common.PORT, port: this.address().port,
method: 'HEAD', method: 'HEAD',
path: '/' path: '/'
}, function(res) { }, function(res) {

4
test/parallel/test-http-header-obstext.js

@ -7,9 +7,9 @@ const assert = require('assert');
const server = http.createServer(common.mustCall((req, res) => { const server = http.createServer(common.mustCall((req, res) => {
res.end('ok'); res.end('ok');
})); }));
server.listen(common.PORT, () => { server.listen(0, () => {
http.get({ http.get({
port: common.PORT, port: server.address().port,
headers: {'Test': 'Düsseldorf'} headers: {'Test': 'Düsseldorf'}
}, common.mustCall((res) => { }, common.mustCall((res) => {
assert.equal(res.statusCode, 200); assert.equal(res.statusCode, 200);

6
test/parallel/test-http-header-read.js

@ -1,5 +1,5 @@
'use strict'; 'use strict';
var common = require('../common'); require('../common');
var assert = require('assert'); var assert = require('assert');
var http = require('http'); var http = require('http');
@ -23,10 +23,10 @@ var s = http.createServer(function(req, res) {
); );
}); });
s.listen(common.PORT, runTest); s.listen(0, runTest);
function runTest() { function runTest() {
http.get({ port: common.PORT }, function(response) { http.get({ port: this.address().port }, function(response) {
response.on('end', function() { response.on('end', function() {
s.close(); s.close();
}); });

5
test/parallel/test-http-header-response-splitting.js

@ -65,9 +65,10 @@ var server = http.createServer(function(req, res) {
} }
}); });
server.listen(common.PORT, common.mustCall(function() { server.listen(0, common.mustCall(function() {
const port = this.address().port;
for (var i = 0; i < testCount; i++) { for (var i = 0; i < testCount; i++) {
http.get({ port: common.PORT, path: '/' }, common.mustCall(function(res) { http.get({ port: port, path: '/' }, common.mustCall(function(res) {
assert.strictEqual(res.headers.a, 'foo invalid: bar'); assert.strictEqual(res.headers.a, 'foo invalid: bar');
assert.strictEqual(res.headers.b, 'foo invalid: bar'); assert.strictEqual(res.headers.b, 'foo invalid: bar');
assert.strictEqual(res.headers.foo, undefined); assert.strictEqual(res.headers.foo, undefined);

6
test/parallel/test-http-hex-write.js

@ -1,5 +1,5 @@
'use strict'; 'use strict';
var common = require('../common'); require('../common');
var assert = require('assert'); var assert = require('assert');
var http = require('http'); var http = require('http');
@ -20,8 +20,8 @@ http.createServer(function(q, s) {
s.write('utf8\n'); s.write('utf8\n');
s.end(); s.end();
this.close(); this.close();
}).listen(common.PORT, function() { }).listen(0, function() {
http.request({ port: common.PORT }).on('response', function(res) { http.request({ port: this.address().port }).on('response', function(res) {
res.setEncoding('ascii'); res.setEncoding('ascii');
res.on('data', function(c) { res.on('data', function(c) {
data += c; data += c;

5
test/parallel/test-http-host-header-ipv6-fail.js

@ -14,12 +14,11 @@ const assert = require('assert');
const http = require('http'); const http = require('http');
const hostname = '::1'; const hostname = '::1';
const port = common.PORT;
function httpreq() { function httpreq() {
var req = http.request({ var req = http.request({
host: hostname, host: hostname,
port: port, port: server.address().port,
path: '/', path: '/',
method: 'GET' method: 'GET'
}); });
@ -37,4 +36,4 @@ const server = http.createServer(common.mustCall(function(req, res) {
server.close(true); server.close(true);
})); }));
server.listen(port, hostname, () => httpreq()); server.listen(0, hostname, () => httpreq());

20
test/parallel/test-http-host-headers.js

@ -1,6 +1,6 @@
'use strict'; 'use strict';
require('../common');
const http = require('http'); const http = require('http');
const common = require('../common');
const assert = require('assert'); const assert = require('assert');
const httpServer = http.createServer(reqHandler); const httpServer = http.createServer(reqHandler);
@ -9,7 +9,7 @@ function reqHandler(req, res) {
if (req.url === '/setHostFalse5') { if (req.url === '/setHostFalse5') {
assert.equal(req.headers.host, undefined); assert.equal(req.headers.host, undefined);
} else { } else {
assert.equal(req.headers.host, 'localhost:' + common.PORT, assert.equal(req.headers.host, `localhost:${this.address().port}`,
'Wrong host header for req[' + req.url + ']: ' + 'Wrong host header for req[' + req.url + ']: ' +
req.headers.host); req.headers.host);
} }
@ -26,8 +26,6 @@ testHttp();
function testHttp() { function testHttp() {
console.log('testing http on port ' + common.PORT);
var counter = 0; var counter = 0;
function cb(res) { function cb(res) {
@ -39,8 +37,8 @@ function testHttp() {
res.resume(); res.resume();
} }
httpServer.listen(common.PORT, function(er) { httpServer.listen(0, function(er) {
console.error('listening on ' + common.PORT); console.error(`test http server listening on ${this.address().port}`);
if (er) throw er; if (er) throw er;
@ -49,7 +47,7 @@ function testHttp() {
path: '/' + (counter++), path: '/' + (counter++),
host: 'localhost', host: 'localhost',
//agent: false, //agent: false,
port: common.PORT, port: this.address().port,
rejectUnauthorized: false rejectUnauthorized: false
}, cb).on('error', thrower); }, cb).on('error', thrower);
@ -58,7 +56,7 @@ function testHttp() {
path: '/' + (counter++), path: '/' + (counter++),
host: 'localhost', host: 'localhost',
//agent: false, //agent: false,
port: common.PORT, port: this.address().port,
rejectUnauthorized: false rejectUnauthorized: false
}, cb).on('error', thrower).end(); }, cb).on('error', thrower).end();
@ -67,7 +65,7 @@ function testHttp() {
path: '/' + (counter++), path: '/' + (counter++),
host: 'localhost', host: 'localhost',
//agent: false, //agent: false,
port: common.PORT, port: this.address().port,
rejectUnauthorized: false rejectUnauthorized: false
}, cb).on('error', thrower).end(); }, cb).on('error', thrower).end();
@ -76,7 +74,7 @@ function testHttp() {
path: '/' + (counter++), path: '/' + (counter++),
host: 'localhost', host: 'localhost',
//agent: false, //agent: false,
port: common.PORT, port: this.address().port,
rejectUnauthorized: false rejectUnauthorized: false
}, cb).on('error', thrower).end(); }, cb).on('error', thrower).end();
@ -85,7 +83,7 @@ function testHttp() {
path: '/' + (counter++), path: '/' + (counter++),
host: 'localhost', host: 'localhost',
//agent: false, //agent: false,
port: common.PORT, port: this.address().port,
rejectUnauthorized: false rejectUnauthorized: false
}, cb).on('error', thrower).end(); }, cb).on('error', thrower).end();
}); });

8
test/parallel/test-http-incoming-pipelined-socket-destroy.js

@ -1,5 +1,5 @@
'use strict'; 'use strict';
var common = require('../common'); require('../common');
var http = require('http'); var http = require('http');
var net = require('net'); var net = require('net');
@ -40,16 +40,16 @@ var server = http.createServer(function(req, res) {
function generator(seeds) { function generator(seeds) {
return seeds.map(function(r) { return seeds.map(function(r) {
return 'GET /' + r + ' HTTP/1.1\r\n' + return 'GET /' + r + ' HTTP/1.1\r\n' +
'Host: localhost:' + common.PORT + '\r\n' + `Host: localhost:${server.address().port}\r\n` +
'\r\n' + '\r\n' +
'\r\n'; '\r\n';
}).join(''); }).join('');
} }
server.listen(common.PORT, function() { server.listen(0, function() {
var seeds = [ 3, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4 ]; var seeds = [ 3, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4 ];
var client = net.connect({ port: common.PORT }); var client = net.connect({ port: this.address().port });
var done = 0; var done = 0;
server.on('requestDone', function() { server.on('requestDone', function() {
if (++done == seeds.length) { if (++done == seeds.length) {

12
test/parallel/test-http-keep-alive-close-on-header.js

@ -1,5 +1,5 @@
'use strict'; 'use strict';
var common = require('../common'); require('../common');
var assert = require('assert'); var assert = require('assert');
var http = require('http'); var http = require('http');
@ -15,14 +15,14 @@ var server = http.createServer(function(req, res) {
var connectCount = 0; var connectCount = 0;
server.listen(common.PORT, function() { server.listen(0, function() {
var agent = new http.Agent({ maxSockets: 1 }); var agent = new http.Agent({ maxSockets: 1 });
var name = agent.getName({ port: common.PORT }); var name = agent.getName({ port: this.address().port });
var request = http.request({ var request = http.request({
method: 'GET', method: 'GET',
path: '/', path: '/',
headers: headers, headers: headers,
port: common.PORT, port: this.address().port,
agent: agent agent: agent
}, function(res) { }, function(res) {
assert.equal(1, agent.sockets[name].length); assert.equal(1, agent.sockets[name].length);
@ -39,7 +39,7 @@ server.listen(common.PORT, function() {
method: 'GET', method: 'GET',
path: '/', path: '/',
headers: headers, headers: headers,
port: common.PORT, port: this.address().port,
agent: agent agent: agent
}, function(res) { }, function(res) {
assert.equal(1, agent.sockets[name].length); assert.equal(1, agent.sockets[name].length);
@ -55,7 +55,7 @@ server.listen(common.PORT, function() {
method: 'GET', method: 'GET',
path: '/', path: '/',
headers: headers, headers: headers,
port: common.PORT, port: this.address().port,
agent: agent agent: agent
}, function(response) { }, function(response) {
response.on('end', function() { response.on('end', function() {

13
test/parallel/test-http-keep-alive.js

@ -1,5 +1,5 @@
'use strict'; 'use strict';
var common = require('../common'); require('../common');
var assert = require('assert'); var assert = require('assert');
var http = require('http'); var http = require('http');
@ -13,11 +13,12 @@ var server = http.createServer(function(req, res) {
var agent = new http.Agent({maxSockets: 1}); var agent = new http.Agent({maxSockets: 1});
var headers = {'connection': 'keep-alive'}; var headers = {'connection': 'keep-alive'};
var name = agent.getName({ port: common.PORT }); var name;
server.listen(common.PORT, function() { server.listen(0, function() {
name = agent.getName({ port: this.address().port });
http.get({ http.get({
path: '/', headers: headers, port: common.PORT, agent: agent path: '/', headers: headers, port: this.address().port, agent: agent
}, function(response) { }, function(response) {
assert.equal(agent.sockets[name].length, 1); assert.equal(agent.sockets[name].length, 1);
assert.equal(agent.requests[name].length, 2); assert.equal(agent.requests[name].length, 2);
@ -25,7 +26,7 @@ server.listen(common.PORT, function() {
}); });
http.get({ http.get({
path: '/', headers: headers, port: common.PORT, agent: agent path: '/', headers: headers, port: this.address().port, agent: agent
}, function(response) { }, function(response) {
assert.equal(agent.sockets[name].length, 1); assert.equal(agent.sockets[name].length, 1);
assert.equal(agent.requests[name].length, 1); assert.equal(agent.requests[name].length, 1);
@ -33,7 +34,7 @@ server.listen(common.PORT, function() {
}); });
http.get({ http.get({
path: '/', headers: headers, port: common.PORT, agent: agent path: '/', headers: headers, port: this.address().port, agent: agent
}, function(response) { }, function(response) {
response.on('end', function() { response.on('end', function() {
assert.equal(agent.sockets[name].length, 1); assert.equal(agent.sockets[name].length, 1);

9
test/parallel/test-http-keepalive-client.js

@ -1,5 +1,5 @@
'use strict'; 'use strict';
var common = require('../common'); require('../common');
var assert = require('assert'); var assert = require('assert');
var http = require('http'); var http = require('http');
@ -16,7 +16,9 @@ var server = http.createServer(function(req, res) {
res.end(req.url); res.end(req.url);
}); });
server.listen(common.PORT); server.listen(0, function() {
makeRequest(expectRequests);
});
var agent = http.Agent({ keepAlive: true }); var agent = http.Agent({ keepAlive: true });
@ -26,7 +28,6 @@ var expectRequests = 10;
var actualRequests = 0; var actualRequests = 0;
makeRequest(expectRequests);
function makeRequest(n) { function makeRequest(n) {
if (n === 0) { if (n === 0) {
server.close(); server.close();
@ -35,7 +36,7 @@ function makeRequest(n) {
} }
var req = http.request({ var req = http.request({
port: common.PORT, port: server.address().port,
agent: agent, agent: agent,
path: '/' + n path: '/' + n
}); });

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save