test: fix debug-signal-cluster after da update
authorFedor Indutny <fedor@indutny.com>
Wed, 8 Oct 2014 10:35:07 +0000 (14:35 +0400)
committerFedor Indutny <fedor@indutny.com>
Wed, 8 Oct 2014 11:36:16 +0000 (15:36 +0400)
The cluster children are hitting breakpoint at `cluster.onread` and
hanging on a Semaphore wait now. This prevents them from disconnecting
gracefully. Considering that the test is checking different thing, the
cluster children needs to be force killed from the grand parent process.

Reviewed-By: Trevor Norris <trevnorris@gmail.com>
PR-URL: https://github.com/joyent/node/pull/8476

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

index 4053cd3..3fca2aa 100644 (file)
@@ -16,6 +16,16 @@ if (cluster.isMaster) {
     }
   });
 
+  process.on('message', function(msg) {
+    if (msg.type === 'getpids') {
+      var pids = [];
+      pids.push(process.pid);
+      for (var key in cluster.workers)
+        pids.push(cluster.workers[key].process.pid);
+      process.send({ type: 'pids', pids: pids });
+    }
+  });
+
   for (var i = 0; i < NUMBER_OF_WORKERS; i++) {
     cluster.fork();
   }
index 09dc3b4..27d5391 100644 (file)
@@ -24,11 +24,15 @@ var assert = require('assert');
 var spawn = require('child_process').spawn;
 
 var args = [ common.fixturesDir + '/clustered-server/app.js' ];
-var child = spawn(process.execPath, args);
+var child = spawn(process.execPath, args, {
+  stdio: [ 'pipe', 'pipe', 'pipe', 'ipc' ]
+});
 var outputLines = [];
 var outputTimerId;
 var waitingForDebuggers = false;
 
+var pids = null;
+
 child.stderr.on('data', function(data) {
   var lines = data.toString().replace(/\r/g, '').trim().split('\n');
   var line = lines[0];
@@ -42,8 +46,20 @@ child.stderr.on('data', function(data) {
     outputLines = outputLines.concat(lines);
     outputTimerId = setTimeout(onNoMoreLines, 800);
   } else if (line === 'all workers are running') {
-    waitingForDebuggers = true;
-    process._debugProcess(child.pid);
+    child.on('message', function(msg) {
+      if (msg.type !== 'pids')
+        return;
+
+      pids = msg.pids;
+      console.error('got pids %j', pids);
+
+      waitingForDebuggers = true;
+      process._debugProcess(child.pid);
+    });
+
+    child.send({
+      type: 'getpids'
+    });
   }
 });
 
@@ -57,7 +73,9 @@ setTimeout(function testTimedOut() {
 }, 6000);
 
 process.on('exit', function onExit() {
-    child.kill();
+  pids.forEach(function(pid) {
+    process.kill(pid);
+  });
 });
 
 function assertOutputLines() {