node/test/parallel/test-cluster-eaccess.js
Rich Trott b7b38bdbaf
test: adjust indentation for stricter linting
ESLint 4.x has stricter linting than previous versions. We are currently
using the legacy indentation rules in the test directory. This commit
changes the indentation of files to comply with the stricter 4.x linting
and enable stricter linting in the test directory.

Backport-PR-URL: https://github.com/nodejs/node/pull/14835
PR-URL: https://github.com/nodejs/node/pull/14431
Reviewed-By: Refael Ackermann <refack@gmail.com>
Reviewed-By: Vse Mozhet Byt <vsemozhetbyt@gmail.com>
Reviewed-By: Trevor Norris <trev.norris@gmail.com>
2017-09-05 12:49:50 -04:00

61 lines
1.7 KiB
JavaScript

'use strict';
// 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) {
const worker = cluster.fork();
// makes sure master is able to fork the worker
cluster.on('fork', common.mustCall());
// makes sure the worker is ready
worker.on('online', common.mustCall());
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);
}));
process.on('exit', function() {
console.log('master exited');
try {
fs.unlinkSync(common.PIPE);
} catch (e) {
}
});
} else {
common.refreshTmpDir();
const 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', 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) {
console.log('parent error, ending');
// message to child process tells it to exit
cp.send('end');
// propagate error to parent
process.send(err);
});
}));
}