plex-web-downloader/node_modules/cluster/test/test.restart.js

66 lines
1.4 KiB
JavaScript

/**
* Module dependencies.
*/
var cluster = require('../')
, http = require('http')
, fs = require('fs');
require('./common');
var server = http.createServer(function(req, res){
setTimeout(function(){
res.writeHead(200);
res.end('Hello World');
}, 1000);
});
cluster = cluster(server)
.set('workers', 2)
.use(cluster.pidfiles())
.listen(3002);
var a, b
, options = { host: 'localhost', port: 3002 };
function getPID(name) {
var pid = fs.readFileSync(__dirname + '/pids/' + name, 'ascii');
return parseInt(pid, 10);
}
function movePID(name) {
var pid = getPID(name);
fs.writeFileSync(__dirname + '/pids/old.' + name, pid.toString(), 'ascii');
}
if (cluster.isChild) {
cluster.on('restart', function(){
http.get(options, function(res){
res.statusCode.should.equal(200);
var a = getPID('old.worker.0.pid')
, b = getPID('old.worker.1.pid');
a.should.not.equal(getPID('worker.0.pid'));
b.should.not.equal(getPID('worker.1.pid'));
cluster.close();
});
});
} else {
var pending = 2;
cluster.on('worker pidfile', function(){
--pending || (function(){
movePID('worker.0.pid')
movePID('worker.1.pid');
// issue some requests
var n = 20
, pending = n;
while (n--) {
http.get(options, function(res){
res.statusCode.should.equal(200);
--pending || cluster.restart();
});
}
})();
});
}