test: don't call process.exit() in debugger tests
authorBen Noordhuis <info@bnoordhuis.nl>
Fri, 6 Sep 2013 00:44:16 +0000 (02:44 +0200)
committerBen Noordhuis <info@bnoordhuis.nl>
Fri, 6 Sep 2013 02:40:24 +0000 (04:40 +0200)
process.exit() tends to hide bugs, both in tests and node.js.
Rewrite the tests so that the event loop exits naturally.

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

index 16ebc69..86d66c5 100644 (file)
@@ -11,10 +11,13 @@ var workersOnline = 0;
 
 if (cluster.isMaster) {
   cluster.on('online', function() {
-      workersOnline++;
-      if (workersOnline == NUMBER_OF_WORKERS)
-        console.error('all workers are running');
-    });
+    if (++workersOnline === NUMBER_OF_WORKERS) {
+      console.error('all workers are running');
+      for (var key in cluster.workers) {
+        cluster.workers[key].disconnect();
+      }
+    }
+  });
 
   for (var i = 0; i < NUMBER_OF_WORKERS; i++) {
     cluster.fork();
index d91f9ca..2364181 100644 (file)
@@ -27,7 +27,6 @@ var args = ['--debug', common.fixturesDir + '/clustered-server/app.js' ];
 var child = spawn(process.execPath, args);
 var outputLines = [];
 
-
 child.stderr.on('data', function(data) {
   var lines = data.toString().replace(/\r/g, '').trim().split('\n');
   var line = lines[0];
@@ -36,21 +35,12 @@ child.stderr.on('data', function(data) {
 
   if (line === 'all workers are running') {
     assertOutputLines();
-    process.exit();
   } else {
     outputLines = outputLines.concat(lines);
   }
 });
 
-setTimeout(function testTimedOut() {
-  assert(false, 'test timed out.');
-}, 3000);
-
-process.on('exit', function() {
-    child.kill();
-});
-
-function assertOutputLines() {
+var assertOutputLines = common.mustCall(function() {
   var expectedLines = [
     'debugger listening on port ' + 5858,
     'debugger listening on port ' + 5859,
@@ -65,4 +55,4 @@ function assertOutputLines() {
   assert.equal(outputLines.length, expectedLines.length)
   for (var i = 0; i < expectedLines.length; i++)
     assert.equal(outputLines[i], expectedLines[i]);
-}
+});
index 8a74ba1..729eb2e 100644 (file)
@@ -41,21 +41,12 @@ child.stderr.on('data', function(data) {
 
   if (line === 'all workers are running') {
     assertOutputLines();
-    process.exit();
   } else {
     outputLines = outputLines.concat(lines);
   }
 });
 
-setTimeout(function testTimedOut() {
-  assert(false, 'test timed out.');
-}, 3000);
-
-process.on('exit', function() {
-    child.kill();
-});
-
-function assertOutputLines() {
+var assertOutputLines = common.mustCall(function() {
   var expectedLines = [
     'debugger listening on port ' + port,
     'debugger listening on port ' + (port+1),
@@ -70,4 +61,4 @@ function assertOutputLines() {
   assert.equal(outputLines.length, expectedLines.length)
   for (var i = 0; i < expectedLines.length; i++)
     assert.equal(outputLines[i], expectedLines[i]);
-}
+});