workforce
Version:
A cluster manager inspired by Learnboost's cluster.
127 lines (100 loc) • 2.55 kB
JavaScript
var workforce = require('..');
describe('events', function(){
var server;
beforeEach(function(){
server = workforce(__dirname + '/server')
.set('workers', 2);
});
describe('worker', function(){
it('should emit for each worker listening', function(done){
var count = 0;
server.on('worker', function(worker){
worker.should.have.property('state', 'listening');
count += 1;
});
server.listen(3000, function(){
count.should.equal(2);
server.exit();
done();
});
});
});
describe('listening', function(){
it('should emit after all workers are ready', function(done){
var count = 0;
server.on('worker', function(){
count += 1;
});
server.on('listening', function(){
count.should.equal(2);
});
server.listen(3000, function(){
server.exit();
done();
});
});
});
describe('worker exit', function(){
it('should emit for each worker', function(done){
var count = 0;
server.on('worker exit', function(){
count += 1;
});
server.listen(3000, function(){
server.exit(function(){
count.should.equal(2);
done();
});
});
});
});
describe('exit', function(){
it('should emit after all workers have exited', function(){
var count = 0;
server.on('worker exit', function(){
count += 1;
});
server.on('exit', function(){
count.should.equal(2);
});
server.listen(3000, function(){
server.exit();
});
});
});
describe('shutdown', function(){
it('should emit after all workers have exited', function(){
var count = 0;
server.on('worker exit', function(){
count += 1;
});
server.on('shutdown', function(){
count.should.equal(2);
});
server.listen(3000, function(){
server.shutdown();
});
});
});
describe('restart', function(){
it('should emit after all workers have exited', function(){
var exits = 0;
var workers = 0;
server.on('worker', function(){
workers += 1;
});
server.on('worker exit', function(){
exits += 1;
});
server.on('restart', function(){
workers.should.equal(3);
exits.should.equal(2);
done();
server.exit();
});
server.listen(3000, function(){
server.restart();
});
});
});
});