Skip to content

Commit

Permalink
test: improve cluster-disconnect-handles test
Browse files Browse the repository at this point in the history
This commit fixes two issues in test-cluster-disconnect-handles:

1. If the master's TCP connection to the worker fails, the worker
process stays alive and causes many other tests that use the same
common port number to also fail (with EADDRINUSE).

2. One particular problem that can cause the master's TCP connection
to fail is attempting an IPv6 connection to the worker when no IPv6
network interfaces are available.

PR-URL: #4084
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
  • Loading branch information
mscdex authored and Myles Borins committed Jan 19, 2016
1 parent 22ba1b4 commit ac939d5
Showing 1 changed file with 22 additions and 2 deletions.
24 changes: 22 additions & 2 deletions test/parallel/test-cluster-disconnect-handles.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ cluster.schedulingPolicy = cluster.SCHED_RR;
// is to make sure the connection is still sitting in the master's
// pending handle queue.
if (cluster.isMaster) {
let isKilling = false;
const handles = require('internal/cluster').handles;
// FIXME(bnoordhuis) lib/cluster.js scans the execArgv arguments for
// debugger flags and renumbers any port numbers it sees starting
Expand Down Expand Up @@ -68,11 +69,30 @@ if (cluster.isMaster) {
}));
}));
process.on('exit', () => assert.deepStrictEqual(handles, {}));
process.on('uncaughtException', function(ex) {
// Make sure we clean up so as not to leave a stray worker process running
// if we encounter a connection or other error
if (!worker.isDead()) {
if (!isKilling) {
isKilling = true;
worker.once('exit', function() {
throw ex;
});
worker.process.kill();
}
return;
}
throw ex;
});
} else {
const server = net.createServer(socket => socket.pipe(socket));
server.listen(() => {
const cb = () => {
process.send(['listening', server.address()]);
debugger;
});
};
if (common.hasIPv6)
server.listen(cb);
else
server.listen(0, common.localhostIPv4, cb);
process.on('disconnect', process.exit);
}

0 comments on commit ac939d5

Please sign in to comment.