UNPKG

tallship-manifest

Version:

High availability service management - a list of the cargo carried by a ship, made for the use of various agents and officials at the ports of destination.

183 lines (147 loc) 4.12 kB
var should = require('should'); var _ = require('underscore'); var net = require('net'); var Manifest = require('../'); var HubSocket = require('../lib/hub-socket'); describe('manifest', function() { describe('server', function() { var manifest; var m; after(function(done) { this.timeout(10000); var manifestClosed = false; var mClosed = false; manifest.close(); m.close(); manifest.once('close', function() { manifestClosed = true; if (manifestClosed && mClosed) done(); }); m.once('close', function() { mClosed = true; if (manifestClosed && mClosed) done(); }); }); it('should be an instance of Manifest', function(done) { manifest = new Manifest(); manifest.should.be.an.instanceOf(Manifest); done(); }); it('should begin listening for connections', function(done) { var socket = manifest.createServer(); should.exist(socket); socket.once('listening', done); }); it('should be able to connect to another Manifest server and register itself', function(done) { this.timeout(10000); m = new Manifest(); m.createServer({ port: 4100 }); var hlSocket = manifest.connect({ port: 4100 }); hlSocket.should.be.an.instanceOf(HubSocket); m.on('register', function(service) { if (service.owner === manifest.id) done(); }); }); }); describe('client', function() { var manifest; var m; after(function(done) { this.timeout(10000); var manifestClosed = false; var mClosed = false; manifest.close(); m.close(); manifest.once('close', function() { manifestClosed = true; if (manifestClosed && mClosed) done(); }); m.once('close', function() { mClosed = true; if (manifestClosed && mClosed) done(); }); }); it('should be an instance of Manifest', function(done) { manifest = new Manifest(); manifest.should.be.an.instanceOf(Manifest); done(); }); it('should be able to connect to another Manifest server', function(done) { this.timeout(10000); m = new Manifest(); m.createServer({ port: 4100 }); var hlSocket = manifest.connect({ port: 4100 }); hlSocket.should.be.an.instanceOf(HubSocket); manifest.on('register', function(service) { if (service.owner === m.id) done(); }); }); }); describe('hub', function(done) { var m1; var m2; var m3; after(function(done) { this.timeout(10000); var m1Closed = false; var m2Closed = false; var m3Closed = false; m1.close(); m2.close(); m3.close(); m1.once('close', function() { m1Closed = true; if (m1Closed && m2Closed && m3Closed) done(); }); m2.once('close', function() { m2Closed = true; if (m1Closed && m2Closed && m3Closed) done(); }); m3.once('close', function() { m3Closed = true; if (m1Closed && m2Closed && m3Closed) done(); }); }); it('should not get the same event twice', function(done) { this.timeout(5000); var events = {}; m1 = new Manifest(); m1.createServer({ port: 3100 }); var register = 2; m1.hub.bus.on('register', function(service) { if (!events[service.owner]) events[service.owner] = []; var key = service.owner + ':' + service.id + ':' + service.timestamp; events[service.owner].should.not.containEql(key); events[service.owner].push(key); if (!--register) done(); }); m2 = new Manifest(); m2.createServer({ port: 4100 }); m3 = new Manifest(); m3.createServer({ port: 5100 }); var hls1 = m1.connect({ port: 4100 }); var hls2 = m2.connect({ port: 5100 }); var hls3 = m3.connect({ port: 3100 }); }); }); });