Skip to content

Commit

Permalink
test: dynamic port in cluster worker dgram
Browse files Browse the repository at this point in the history
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 <[email protected]>
Reviewed-By: Colin Ihrig <[email protected]>
Reviewed-By: Santiago Gimeno <[email protected]>
  • Loading branch information
Sebastian Plesciuc authored and MylesBorins committed May 18, 2017
1 parent 2b6e588 commit daf6535
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 16 deletions.
6 changes: 3 additions & 3 deletions test/parallel/test-cluster-dgram-1.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,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;

Expand All @@ -39,7 +39,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() {
Expand Down Expand Up @@ -90,5 +90,5 @@ function worker() {
}
}, PACKETS_PER_WORKER));

socket.bind(common.PORT);
socket.bind(0);
}
34 changes: 21 additions & 13 deletions test/parallel/test-cluster-dgram-2.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ const PACKETS_PER_WORKER = 10;

const cluster = require('cluster');
const dgram = require('dgram');
const assert = require('assert');


if (common.isWindows) {
Expand All @@ -24,7 +25,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.
Expand All @@ -40,10 +48,6 @@ function master() {
cluster.disconnect();
}
}, NUM_WORKERS * PACKETS_PER_WORKER));

// Fork workers.
for (let i = 0; i < NUM_WORKERS; i++)
cluster.fork();
}


Expand All @@ -57,13 +61,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 daf6535

Please sign in to comment.