Skip to content

Commit

Permalink
test: fix cluster-disconnect-handles flakiness
Browse files Browse the repository at this point in the history
Sometimes the test was timing out because the worker process remained
stuck in the breakpoint and didn't exit. This could happen because the
continue was sent before the breakpoint was set. If that's the case,
with this change, a new continue command is sent so the worker process
can end.

PR-URL: #4009
Reviewed-By: Ben Noordhuis <[email protected]>
  • Loading branch information
santigimeno authored and bnoordhuis committed Dec 1, 2015
1 parent bea6742 commit 8677627
Showing 1 changed file with 14 additions and 1 deletion.
15 changes: 14 additions & 1 deletion test/parallel/test-cluster-disconnect-handles.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ if (cluster.isMaster) {
worker.on('message', common.mustCall(message => {
assert.strictEqual(Array.isArray(message), true);
assert.strictEqual(message[0], 'listening');
let continueRecv = false;
const address = message[1];
const host = address.address;
const debugClient = net.connect({ host, port: common.PORT });
Expand All @@ -41,13 +42,25 @@ if (cluster.isMaster) {
debugClient.on('data', data => protocol.execute(data));
debugClient.once('connect', common.mustCall(() => {
protocol.onResponse = common.mustCall(res => {
protocol.onResponse = () => {};
protocol.onResponse = (res) => {
// It can happen that the first continue was sent before the break
// event was received. If that's the case, send also a continue from
// here so the worker exits
if (res.body.command === 'continue') {
continueRecv = true;
} else if (res.body.event === 'break' && continueRecv) {
const req = protocol.serialize({ command: 'continue' });
debugClient.write(req);
}
};
const conn = net.connect({ host, port: address.port });
conn.once('connect', common.mustCall(() => {
conn.destroy();
assert.notDeepStrictEqual(handles, {});
worker.disconnect();
assert.deepStrictEqual(handles, {});
// Always send the continue, as the break event might have already
// been received.
const req = protocol.serialize({ command: 'continue' });
debugClient.write(req);
}));
Expand Down

0 comments on commit 8677627

Please sign in to comment.