aboutsummaryrefslogtreecommitdiff
path: root/test/parallel/test-cluster-eaccess.js
diff options
context:
space:
mode:
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);
});
- });
+
+ }));
}