summaryrefslogtreecommitdiff
path: root/test/parallel/test-cluster-eaccess.js
diff options
context:
space:
mode:
authorSakthipriyan Vairamani <thechargingvolcano@gmail.com>2015-07-19 19:20:21 +0000
committerSakthipriyan Vairamani <thechargingvolcano@gmail.com>2015-08-27 11:35:23 +0530
commitbdef668881498f519e4a9432a239d5178c00e87a (patch)
tree6b9510b3e22c467b48676302e6faa621e6b63f20 /test/parallel/test-cluster-eaccess.js
parent34e25b2313cd0b4027cbfb5e626596e4b9cff038 (diff)
downloadandroid-node-v8-bdef668881498f519e4a9432a239d5178c00e87a.tar.gz
android-node-v8-bdef668881498f519e4a9432a239d5178c00e87a.tar.bz2
android-node-v8-bdef668881498f519e4a9432a239d5178c00e87a.zip
test: handling failure cases properly
Refer: https://github.com/nodejs/io.js/issues/1543 When this test fails, it leaves dead processes in the system. This patch makes sure that the child processes exit first, in case of errors. PR-URL: https://github.com/nodejs/node/pull/2206 Reviewed-By: Johan Bergström <bugs@bergstroem.nu> Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Diffstat (limited to 'test/parallel/test-cluster-eaccess.js')
-rw-r--r--test/parallel/test-cluster-eaccess.js53
1 files changed, 32 insertions, 21 deletions
diff --git a/test/parallel/test-cluster-eaccess.js b/test/parallel/test-cluster-eaccess.js
index ad4de97e38..b8c05a2c8a 100644
--- a/test/parallel/test-cluster-eaccess.js
+++ b/test/parallel/test-cluster-eaccess.js
@@ -1,41 +1,51 @@
'use strict';
-// test that errors propagated from cluster children are properly
-// received in their master creates an EADDRINUSE condition by also
-// forking a child process to listen on a socket
-
-var common = require('../common');
-var assert = require('assert');
-var cluster = require('cluster');
-var fork = require('child_process').fork;
-var fs = require('fs');
-var net = require('net');
+// Test that errors propagated from cluster workers are properly
+// received in their master. Creates an EADDRINUSE condition by forking
+// a process in child cluster and propagates the error to the master.
+const common = require('../common');
+const assert = require('assert');
+const cluster = require('cluster');
+const fork = require('child_process').fork;
+const fs = require('fs');
+const net = require('net');
if (cluster.isMaster) {
- var worker = cluster.fork();
- var gotError = 0;
- worker.on('message', function(err) {
- gotError++;
+ const worker = cluster.fork();
+
+ // makes sure master is able to fork the worker
+ cluster.on('fork', common.mustCall(function() {}));
+
+ // makes sure the worker is ready
+ worker.on('online', common.mustCall(function() {}));
+
+ worker.on('message', common.mustCall(function(err) {
+ // disconnect first, so that we will not leave zombies
+ worker.disconnect();
+
console.log(err);
assert.strictEqual('EADDRINUSE', err.code);
- worker.disconnect();
- });
+ }));
+
process.on('exit', function() {
console.log('master exited');
try {
fs.unlinkSync(common.PIPE);
} catch (e) {
}
- assert.equal(gotError, 1);
});
+
} else {
var cp = fork(common.fixturesDir + '/listen-on-socket-and-exit.js',
{ stdio: 'inherit' });
// message from the child indicates it's ready and listening
- cp.on('message', function() {
- var server = net.createServer().listen(common.PIPE, function() {
- console.log('parent listening, should not be!');
+ cp.on('message', common.mustCall(function() {
+ const server = net.createServer().listen(common.PIPE, function() {
+ // message child process so that it can exit
+ cp.send('end');
+ // inform master about the unexpected situation
+ process.send('PIPE should have been in use.');
});
server.on('error', function(err) {
@@ -45,5 +55,6 @@ if (cluster.isMaster) {
// propagate error to parent
process.send(err);
});
- });
+
+ }));
}