From 2859f9ef927f59965f3fce3ad66af400dcf05267 Mon Sep 17 00:00:00 2001 From: Ben Noordhuis Date: Wed, 16 Dec 2015 15:20:46 +0100 Subject: [PATCH] test: fix debug-port-cluster flakiness Rewrite the test so that stderr reordering of the child processes won't confuse the test's expectations. PR-URL: https://github.com/nodejs/node/pull/4310 Reviewed-By: Colin Ihrig --- test/parallel/test-debug-port-cluster.js | 48 +++++++----------------- 1 file changed, 13 insertions(+), 35 deletions(-) diff --git a/test/parallel/test-debug-port-cluster.js b/test/parallel/test-debug-port-cluster.js index 5bec9dc720599e..912f06d6dc6dd5 100644 --- a/test/parallel/test-debug-port-cluster.js +++ b/test/parallel/test-debug-port-cluster.js @@ -3,47 +3,25 @@ var common = require('../common'); var assert = require('assert'); var spawn = require('child_process').spawn; -var port = common.PORT + 1337; +const PORT_MIN = common.PORT + 1337; +const PORT_MAX = PORT_MIN + 2; var args = [ - '--debug=' + port, + '--debug=' + PORT_MIN, common.fixturesDir + '/clustered-server/app.js' ]; -var child = spawn(process.execPath, args); -var outputLines = []; +const child = spawn(process.execPath, args); +child.stderr.setEncoding('utf8'); -child.stderr.on('data', function(data) { - var lines = data.toString().replace(/\r/g, '').trim().split('\n'); - var line = lines[0]; - - lines.forEach(function(ln) { console.log('> ' + ln); } ); - - if (line === 'all workers are running') { - assertOutputLines(); - process.exit(); - } else { - outputLines = outputLines.concat(lines); - } -}); - -process.on('exit', function onExit() { - child.kill(); +let stderr = ''; +child.stderr.on('data', data => { + stderr += data; + if (child.killed !== true && stderr.includes('all workers are running')) + child.kill(); }); -var assertOutputLines = common.mustCall(function() { - var expectedLines = [ - 'Debugger listening on port ' + port, - 'Debugger listening on port ' + (port + 1), - 'Debugger listening on port ' + (port + 2), - ]; - - // Do not assume any particular order of output messages, - // since workers can take different amout of time to - // start up - outputLines.sort(); - - assert.equal(outputLines.length, expectedLines.length); - for (var i = 0; i < expectedLines.length; i++) - assert.equal(outputLines[i], expectedLines[i]); +process.on('exit', () => { + for (let port = PORT_MIN; port <= PORT_MAX; port += 1) + assert(stderr.includes(`Debugger listening on port ${port}`)); });