UNPKG

vertex

Version:
151 lines (108 loc) 4.16 kB
var path = require('path'); var filename = path.basename(__filename); var Subscription = require('../../../lib/server/services/subscription'); const SubscriptionCache = require('../../../lib/server/services/subscription-cache'); var expect = require('expect.js'); const EventEmitter = require('events').EventEmitter; describe(filename, function () { async function mockServer() { var ws = new EventEmitter(); var hashring = new EventEmitter(); var cluster = new EventEmitter(); ws.write = (sessionId, message) => { ws.emit('wrote', {sessionId: sessionId, message: message}); }; cluster.listPeers = function () { return ['10:0.0.1:5000', '10:0.0.2:5000', '10:0.0.3:5000', '10:0.0.4:5000']; }; cluster.request = function (peer, message) { return new Promise(function (resolve) { if (message.action == 'subscription-query') return resolve({subscriptions: ['10:0.0.1:5000', '10:0.0.2:5000']}); resolve('ok'); }) }; cluster.advertiseAddress = '10.0.0.1:8000'; cluster.write = function (address, message) { return new Promise(function (resolve) { resolve(); }); }; hashring.listMembers = function (topic) { return ['10:0.0.1:5000']; }; var cache = new SubscriptionCache({}, mockLogger(), mockConfig()); await cache.start(); return { tearDown:function(){ this.services['subscription-cache'].stop(); }, services: { cluster: cluster, ws: ws, hashring: hashring, 'subscription-cache': cache } } } function mockLogger() { return { info: function () { }, error: function () { } } } function mockConfig() { return {}; } it('starts the subscription service, pushes a subscribe action through', function (done) { mockServer().then(function (server) { var subscription = new Subscription(server, mockLogger(), mockConfig()); subscription.on('message-process-ok', function (data) { expect(data.response == 0 || data.response == 1).to.be(true); server.tearDown(); done(); }); server.services.cluster.emit('message', '10.0.0.1:6767', {action: 'cluster-subscribe', payload: {topic: 'test-topic'}}); }); }); it('starts the subscription service, pushes an unsubscribe action through', function (done) { mockServer().then(function (server) { var subscription = new Subscription(server, mockLogger(), mockConfig()); subscription.on('message-process-ok', function (data) { if (data.message.action == 'cluster-subscribe') { expect(data.response == 0 || data.response == 1).to.be(true); server.services.cluster.emit('message', '10.0.0.1:6767', { action: 'cluster-unsubscribe', payload: {topic: 'test-topic'} }); } else { expect(data.message.action).to.be('cluster-unsubscribe'); expect(data.response == 0 || data.response == 1).to.be(true); server.tearDown(); done(); } }); server.services.cluster.emit('message', '10.0.0.1:6767', {action: 'cluster-subscribe', payload: {topic: 'test-topic'}}); }); }); it('starts the subscription service, pushes a edges action through', function (done) { mockServer().then(function (server) { var subscription = new Subscription(server, mockLogger(), mockConfig()); subscription.on('message-process-ok', function (data) { if (data.message.action == 'cluster-subscribe') { expect(data.response == 0 || data.response == 1).to.be(true); server.services.cluster.emit('message', '10.0.0.1:6767', {action: 'edges', payload: {topic: 'test-topic'}}); } else { expect(data.message.action).to.be('edges'); expect(data.response).to.eql(['10.0.0.1:6767']); server.tearDown(); done(); } }); server.services.cluster.emit('message', '10.0.0.1:6767', {action: 'cluster-subscribe', payload: {topic: 'test-topic'}}); }); }); });