From fe885b819d49807465579dfe10fd4fcdfa38ea00 Mon Sep 17 00:00:00 2001 From: Rich Trott Date: Sun, 10 Jan 2016 21:18:02 -0800 Subject: [PATCH 1/4] test: remove 1 second delay from test --- test/parallel/test-cluster-worker-wait-server-close.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/parallel/test-cluster-worker-wait-server-close.js b/test/parallel/test-cluster-worker-wait-server-close.js index 0488343cae3365..a9d423d327ae88 100644 --- a/test/parallel/test-cluster-worker-wait-server-close.js +++ b/test/parallel/test-cluster-worker-wait-server-close.js @@ -24,14 +24,14 @@ if (cluster.isWorker) { worker.once('listening', function() { net.createConnection(common.PORT, common.localhostIPv4, function() { var socket = this; + this.on('end', function() { + connectionDone = true; + }); this.on('data', function() { console.log('got data from client'); // socket definitely connected to worker if we got data worker.disconnect(); - setTimeout(function() { - socket.end(); - connectionDone = true; - }, 1000); + socket.end(); }); }); }); From 3be471197225f06ff19d23d45577419f1b38d5e1 Mon Sep 17 00:00:00 2001 From: Rich Trott Date: Sun, 10 Jan 2016 22:06:32 -0800 Subject: [PATCH 2/4] fixup: use readyState instead of event firing order --- test/parallel/test-cluster-worker-wait-server-close.js | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/test/parallel/test-cluster-worker-wait-server-close.js b/test/parallel/test-cluster-worker-wait-server-close.js index a9d423d327ae88..357cc750981127 100644 --- a/test/parallel/test-cluster-worker-wait-server-close.js +++ b/test/parallel/test-cluster-worker-wait-server-close.js @@ -14,19 +14,16 @@ if (cluster.isWorker) { }).listen(common.PORT, common.localhostIPv4); } else if (cluster.isMaster) { - var connectionDone; var ok; // start worker var worker = cluster.fork(); + var socket; // Disconnect worker when it is ready worker.once('listening', function() { net.createConnection(common.PORT, common.localhostIPv4, function() { - var socket = this; - this.on('end', function() { - connectionDone = true; - }); + socket = this; this.on('data', function() { console.log('got data from client'); // socket definitely connected to worker if we got data @@ -38,7 +35,8 @@ if (cluster.isWorker) { // Check worker events and properties worker.once('disconnect', function() { - assert.ok(connectionDone, 'disconnect should occur after socket close'); + // disconnect should occur after socket close + assert.equal(socket.readyState, 'closed'); ok = true; }); From 30d15846489cd0d414013fb74e4167a727dd8595 Mon Sep 17 00:00:00 2001 From: Rich Trott Date: Sun, 10 Jan 2016 22:36:17 -0800 Subject: [PATCH 3/4] fixup: fix flakiness in test --- .../parallel/test-cluster-worker-wait-server-close.js | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/test/parallel/test-cluster-worker-wait-server-close.js b/test/parallel/test-cluster-worker-wait-server-close.js index 357cc750981127..d52b4833639477 100644 --- a/test/parallel/test-cluster-worker-wait-server-close.js +++ b/test/parallel/test-cluster-worker-wait-server-close.js @@ -13,8 +13,9 @@ if (cluster.isWorker) { }); }).listen(common.PORT, common.localhostIPv4); } else if (cluster.isMaster) { - - var ok; + // Although not typical, the worker process can exit before the disconnect + // event fires. Use this to keep the process open until the event has fired. + var keepOpen = setInterval(function() {}, 9999); // start worker var worker = cluster.fork(); @@ -37,10 +38,6 @@ if (cluster.isWorker) { worker.once('disconnect', function() { // disconnect should occur after socket close assert.equal(socket.readyState, 'closed'); - ok = true; - }); - - process.once('exit', function() { - assert.ok(ok); + clearInterval(keepOpen); }); } From c5c09da85917d5b911a6d44b575a5f3efa3da15e Mon Sep 17 00:00:00 2001 From: Rich Trott Date: Tue, 12 Jan 2016 21:48:29 -0800 Subject: [PATCH 4/4] fixup: remove flakiness --- .../test-cluster-worker-wait-server-close.js | 27 +++++++++++-------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/test/parallel/test-cluster-worker-wait-server-close.js b/test/parallel/test-cluster-worker-wait-server-close.js index d52b4833639477..dfcc4a0de592f9 100644 --- a/test/parallel/test-cluster-worker-wait-server-close.js +++ b/test/parallel/test-cluster-worker-wait-server-close.js @@ -5,18 +5,30 @@ var assert = require('assert'); var cluster = require('cluster'); var net = require('net'); +var serverClosed = false; + if (cluster.isWorker) { - net.createServer(function(socket) { + var server = net.createServer(function(socket) { // Wait for any data, then close connection socket.write('.'); - socket.on('data', function discard() { - }); + socket.on('data', function discard() {}); }).listen(common.PORT, common.localhostIPv4); -} else if (cluster.isMaster) { + + server.once('close', function() { + serverClosed = true; + }); + // Although not typical, the worker process can exit before the disconnect // event fires. Use this to keep the process open until the event has fired. var keepOpen = setInterval(function() {}, 9999); + // Check worker events and properties + process.once('disconnect', function() { + // disconnect should occur after socket close + assert(serverClosed); + clearInterval(keepOpen); + }); +} else if (cluster.isMaster) { // start worker var worker = cluster.fork(); @@ -33,11 +45,4 @@ if (cluster.isWorker) { }); }); }); - - // Check worker events and properties - worker.once('disconnect', function() { - // disconnect should occur after socket close - assert.equal(socket.readyState, 'closed'); - clearInterval(keepOpen); - }); }