mirror of
https://github.com/nodejs/node.git
synced 2024-11-25 08:19:38 +01:00
3e1b1dd4a9
The copyright and license notice is already in the LICENSE file. There is no justifiable reason to also require that it be included in every file, since the individual files are not individually distributed except as part of the entire package.
77 lines
1.6 KiB
JavaScript
77 lines
1.6 KiB
JavaScript
var common = require('../common');
|
|
var assert = require('assert');
|
|
var cluster = require('cluster');
|
|
|
|
if (cluster.isWorker) {
|
|
|
|
// keep the worker alive
|
|
var http = require('http');
|
|
http.Server().listen(common.PORT, '127.0.0.1');
|
|
|
|
} else if (process.argv[2] === 'cluster') {
|
|
|
|
var worker = cluster.fork();
|
|
|
|
// send PID info to testcase process
|
|
process.send({
|
|
pid: worker.process.pid
|
|
});
|
|
|
|
// terminate the cluster process
|
|
worker.once('listening', function() {
|
|
setTimeout(function() {
|
|
process.exit(0);
|
|
}, 1000);
|
|
});
|
|
|
|
} else {
|
|
|
|
// This is the testcase
|
|
var fork = require('child_process').fork;
|
|
|
|
// is process alive helper
|
|
var isAlive = function(pid) {
|
|
try {
|
|
//this will throw an error if the process is dead
|
|
process.kill(pid, 0);
|
|
|
|
return true;
|
|
} catch (e) {
|
|
return false;
|
|
}
|
|
};
|
|
|
|
// Spawn a cluster process
|
|
var master = fork(process.argv[1], ['cluster']);
|
|
|
|
// get pid info
|
|
var pid = null;
|
|
master.once('message', function(data) {
|
|
pid = data.pid;
|
|
});
|
|
|
|
// When master is dead
|
|
var alive = true;
|
|
master.on('exit', function(code) {
|
|
|
|
// make sure that the master died by purpose
|
|
assert.equal(code, 0);
|
|
|
|
// check worker process status
|
|
setTimeout(function() {
|
|
alive = isAlive(pid);
|
|
}, 200);
|
|
});
|
|
|
|
process.once('exit', function() {
|
|
// cleanup: kill the worker if alive
|
|
if (alive) {
|
|
process.kill(pid);
|
|
}
|
|
|
|
assert.equal(typeof pid, 'number', 'did not get worker pid info');
|
|
assert.equal(alive, false, 'worker was alive after master died');
|
|
});
|
|
|
|
}
|