Permalink
Browse files

test: dynamic port in cluster worker dgram

Remove common.PORT from test-cluster-dgram-1 and
test-cluster-dgram-2, in order to eliminate the
possibility of port collision.

PR-URL: #12487
Ref: #12376
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Santiago Gimeno <santiago.gimeno@gmail.com>
  • Loading branch information...
Sebastian Plesciuc authored and Trott committed Apr 18, 2017
1 parent bd97e48 commit cf68280ce1c6f9ee13e4b85a05832993b7e1a3d3
Showing with 24 additions and 16 deletions.
  1. +3 −3 test/parallel/test-cluster-dgram-1.js
  2. +21 −13 test/parallel/test-cluster-dgram-2.js
@@ -49,7 +49,7 @@ function master() {
cluster.fork();
// Wait until all workers are listening.
cluster.on('listening', common.mustCall(() => {
cluster.on('listening', common.mustCall((worker, address) => {
if (++listening < NUM_WORKERS)
return;
@@ -60,7 +60,7 @@ function master() {
doSend();
function doSend() {
socket.send(buf, 0, buf.length, common.PORT, '127.0.0.1', afterSend);
socket.send(buf, 0, buf.length, address.port, address.address, afterSend);
}
function afterSend() {
@@ -111,5 +111,5 @@ function worker() {
}
}, PACKETS_PER_WORKER));
socket.bind(common.PORT);
socket.bind(0);
}
@@ -26,6 +26,7 @@ const PACKETS_PER_WORKER = 10;
const cluster = require('cluster');
const dgram = require('dgram');
const assert = require('assert');
if (common.isWindows) {
@@ -45,7 +46,14 @@ function master() {
// Start listening on a socket.
const socket = dgram.createSocket('udp4');
socket.bind(common.PORT);
socket.bind({ port: 0 }, common.mustCall(() => {
// Fork workers.
for (let i = 0; i < NUM_WORKERS; i++) {
const worker = cluster.fork();
worker.send({ port: socket.address().port });
}
}));
// Disconnect workers when the expected number of messages have been
// received.
@@ -61,10 +69,6 @@ function master() {
cluster.disconnect();
}
}, NUM_WORKERS * PACKETS_PER_WORKER));
// Fork workers.
for (let i = 0; i < NUM_WORKERS; i++)
cluster.fork();
}
@@ -78,13 +82,17 @@ function worker() {
// send(), explicitly bind them to an ephemeral port.
socket.bind(0);
// There is no guarantee that a sent dgram packet will be received so keep
// sending until disconnect.
const interval = setInterval(() => {
socket.send(buf, 0, buf.length, common.PORT, '127.0.0.1');
}, 1);
process.on('message', common.mustCall((msg) => {
assert(msg.port);
// There is no guarantee that a sent dgram packet will be received so keep
// sending until disconnect.
const interval = setInterval(() => {
socket.send(buf, 0, buf.length, msg.port, '127.0.0.1');
}, 1);
cluster.worker.on('disconnect', () => {
clearInterval(interval);
});
cluster.worker.on('disconnect', () => {
clearInterval(interval);
});
}));
}

0 comments on commit cf68280

Please sign in to comment.