From d87480beb29b764ba37cd983b594ad25a406a4c7 Mon Sep 17 00:00:00 2001 From: Fedor Indutny Date: Wed, 8 Oct 2014 14:35:07 +0400 Subject: [PATCH] test: fix debug-signal-cluster after da update 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 PR-URL: https://github.com/joyent/node/pull/8476 --- test/fixtures/clustered-server/app.js | 10 +++++++++ test/simple/test-debug-signal-cluster.js | 26 ++++++++++++++++++++---- 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/test/fixtures/clustered-server/app.js b/test/fixtures/clustered-server/app.js index 4053cd3af27..3fca2aaa42f 100644 --- a/test/fixtures/clustered-server/app.js +++ b/test/fixtures/clustered-server/app.js @@ -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(); } diff --git a/test/simple/test-debug-signal-cluster.js b/test/simple/test-debug-signal-cluster.js index 09dc3b4c2fd..27d53910b74 100644 --- a/test/simple/test-debug-signal-cluster.js +++ b/test/simple/test-debug-signal-cluster.js @@ -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() {