test: fix assumption of worker exit on disconnect
authorSam Roberts <sam@strongloop.com>
Tue, 31 Dec 2013 05:36:49 +0000 (21:36 -0800)
committerTimothy J Fontaine <tjfontaine@gmail.com>
Tue, 31 Dec 2013 19:43:44 +0000 (11:43 -0800)
Master was disconnecting its workers as soon as they both started up.
Meanwhile, the workers were trying to listen. Its a race, sometimes the
disconnect would happen between when worker gets the response message,
and acks that message with a 'listening'. This worked OK after v0.11
introduced a behaviour where disconnect would always exit the worker,
but once that backwards-incompatible behaviour is removed, the worker
lives long enough to try and respond to the master, and child_process
errors at the attempt to send from a disconnected child.

test/fixtures/clustered-server/app.js
test/simple/test-debug-cluster.js
test/simple/test-debug-port-cluster.js

index 86d66c5..4053cd3 100644 (file)
@@ -13,9 +13,6 @@ if (cluster.isMaster) {
   cluster.on('online', function() {
     if (++workersOnline === NUMBER_OF_WORKERS) {
       console.error('all workers are running');
-      for (var key in cluster.workers) {
-        cluster.workers[key].disconnect();
-      }
     }
   });
 
index 18e8ffa..c0963c3 100644 (file)
@@ -35,11 +35,16 @@ child.stderr.on('data', function(data) {
 
   if (line === 'all workers are running') {
     assertOutputLines();
+    process.exit();
   } else {
     outputLines = outputLines.concat(lines);
   }
 });
 
+process.on('exit', function onExit() {
+  child.kill();
+});
+
 var assertOutputLines = common.mustCall(function() {
   var expectedLines = [
     'Debugger listening on port ' + 5858,
index 7e71dff..34ae3a0 100644 (file)
@@ -41,11 +41,16 @@ child.stderr.on('data', function(data) {
 
   if (line === 'all workers are running') {
     assertOutputLines();
+    process.exit();
   } else {
     outputLines = outputLines.concat(lines);
   }
 });
 
+process.on('exit', function onExit() {
+  child.kill();
+});
+
 var assertOutputLines = common.mustCall(function() {
   var expectedLines = [
     'Debugger listening on port ' + port,