UNPKG

omelop

Version:

[![Build Status](https://travis-ci.org/node-omelop/omelop.svg?branch=master)](https://travis-ci.org/node-omelop/omelop)

242 lines 19.1 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const should = require("should"); // import { describe, it } from "mocha-typescript" let omelop = require('../../lib/index'); let consoleModule = require('../../lib/modules/console').ConsoleModule; describe('console module test', function () { describe('#monitorHandler', function () { it('should execute the corresponding command with different signals', function () { let flag; let rs; let opts = { app: { components: { __connector__: { blacklist: [] } }, stop: function (value) { flag = value; }, addCrons: function (array) { rs = array; }, removeCrons: function (array) { rs = array; }, isFrontend: function () { return true; } } }; let module = new consoleModule(opts); let agent1 = { type: 'area' }; let msg1 = { signal: 'stop' }; module.monitorHandler(agent1, msg1); flag.should.eql(true); let msg2 = { signal: 'list' }; let agent2 = { type: 'chat', id: 'chat-server-1' }; module.monitorHandler(agent2, msg2, function (obj) { obj.serverId.should.eql('chat-server-1'); obj.body.serverType.should.eql('chat'); }); let msg3 = { signal: 'addCron' }; module.monitorHandler(agent2, msg3, null); rs.length.should.eql(1); let msg4 = { signal: 'removeCron' }; module.monitorHandler(agent2, msg4, null); rs.length.should.eql(1); let msg5 = { signal: 'blacklist', blacklist: ['127.0.0.1'] }; module.monitorHandler(agent1, msg5, null); opts.app.components.__connector__.blacklist.length.should.eql(1); }); }); describe('#clientHandler', function () { let _exit; let _setTimeout; let __setTimeout; let exitCount = 0; before(function (done) { _exit = process.exit; _setTimeout = __setTimeout; done(); }); after(function (done) { process.exit = _exit; __setTimeout = _setTimeout; done(); }); let opts = { app: { clusterSeq: {}, stop: function (value) { return value; }, getServerById: function () { return { host: '127.0.0.1' }; }, getServers: function () { return { 'chat-server-1': {} }; }, get: function (value) { switch (value) { case 'main': return __dirname + '/../../index.js'; case 'env': return 'dev'; } }, set: function (value) { return value; }, getServersByType: function () { return [{ id: 'chat-server-1' }]; } } }; let module = new consoleModule(opts); it('should execute kill command', function (done) { if (done) { done(); return; } let msg = { signal: 'kill' }; process.exit = function () { exitCount++; }; let orgtimeout = setTimeout; global['setTimeout'] = function (cb, timeout) { if (timeout > 50) { timeout = 50; } orgtimeout(cb, timeout); }; let agent1 = { request: function (recordId, moduleId, msg, cb) { cb('chat-server-1'); }, idMap: { 'chat-server-1': { type: 'chat', id: 'chat-server-1' } } }; module.clientHandler(agent1, msg, function (err, result) { console.log('!! error chat 1'); should.not.exist(err); should.exist(result.code); }); let agent2 = { request: function (recordId, moduleId, msg, cb) { cb(null); }, idMap: { 'chat-server-1': { type: 'chat', id: 'chat-server-1' } } }; module.clientHandler(agent2, msg, function (err, result) { console.log('!! null chat 1'); should.not.exist(err); should.exist(result.code); result.code.should.eql('remained'); global['setTimeout'] = orgtimeout; done(); }); }); it('should execute stop command', function (done) { this.timeout(5555); let msg1 = { signal: 'stop', ids: ['chat-server-1'] }; let msg2 = { signal: 'stop', ids: [] }; let agent = { notifyById: function (serverId, moduleId, msg) { }, notifyAll: function (moduleId, msg) { } }; module.clientHandler(agent, msg1, function (err, result) { result.status.should.eql('part'); }); module.clientHandler(agent, msg2, function (err, result) { result.status.should.eql('all'); done(); }); }); it('should execute list command', function () { let msg = { signal: 'list' }; let agent = { request: function (recordId, moduleId, msg, cb) { cb({ serverId: 'chat-server-1', body: { 'server': {} } }); }, idMap: { 'chat-server-1': { type: 'chat', id: 'chat-server-1' } } }; module.clientHandler(agent, msg, function (err, result) { should.exist(result.msg); }); }); it('should execute add command', function () { let msg1 = { signal: 'add', args: ['host=127.0.0.1', 'port=88888', 'clusterCount=2'] }; let msg2 = { signal: 'add', args: ['host=127.0.0.1', 'port=88888', 'id=chat-server-1', 'serverType=chat'] }; let agent = {}; module.clientHandler(agent, msg1, function (err, result) { should.not.exist(err); result.length.should.eql(0); }); module.clientHandler(agent, msg2, function (err, result) { // should.not.exist(err); // result.status.should.eql('ok'); // TODO: unknown error: console.log('should execute add command', err, result); }); }); it('should execute blacklist command', function () { let msg1 = { signal: 'blacklist', args: ['127.0.0.1'] }; let msg2 = { signal: 'blacklist', args: ['abc'] }; let agent = { notifyAll: function (moduleId, msg) { } }; module.clientHandler(agent, msg1, function (err, result) { result.status.should.eql('ok'); }); module.clientHandler(agent, msg2, function (err, result) { should.exist(err); }); }); it('should execute restart command', function () { this.timeout(8555); let msg1 = { signal: 'restart', ids: ['chat-server-1'] }; let msg2 = { signal: 'restart', type: 'chat', ids: [] }; let agent = { request: function (recordId, moduleId, msg, cb) { cb(null); } }; module.clientHandler(agent, msg1, function (err, result) { should.exist(err); }); module.clientHandler(agent, msg2, function (err, result) { should.exist(err); }); }); }); }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc29sZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvbW9kdWxlcy9jb25zb2xlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsaUNBQWlDO0FBQ2pDLGtEQUFrRDtBQUNsRCxJQUFJLE1BQU0sR0FBRyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUN4QyxJQUFJLGFBQWEsR0FBRyxPQUFPLENBQUMsMkJBQTJCLENBQUMsQ0FBQyxhQUFhLENBQUM7QUFHdkUsUUFBUSxDQUFDLHFCQUFxQixFQUFFO0lBQzVCLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRTtRQUN4QixFQUFFLENBQUMsaUVBQWlFLEVBQUU7WUFDbEUsSUFBSSxJQUFhLENBQUM7WUFDbEIsSUFBSSxFQUFjLENBQUM7WUFDbkIsSUFBSSxJQUFJLEdBQVE7Z0JBQ1osR0FBRyxFQUFFO29CQUNELFVBQVUsRUFBRTt3QkFDUixhQUFhLEVBQUU7NEJBQ1gsU0FBUyxFQUFFLEVBQUU7eUJBQ2hCO3FCQUNKO29CQUNELElBQUksRUFBRSxVQUFVLEtBQWM7d0JBQzFCLElBQUksR0FBRyxLQUFLLENBQUM7b0JBQ2pCLENBQUM7b0JBQ0QsUUFBUSxFQUFFLFVBQVUsS0FBaUI7d0JBQ2pDLEVBQUUsR0FBRyxLQUFLLENBQUM7b0JBQ2YsQ0FBQztvQkFDRCxXQUFXLEVBQUUsVUFBVSxLQUFpQjt3QkFDcEMsRUFBRSxHQUFHLEtBQUssQ0FBQztvQkFDZixDQUFDO29CQUNELFVBQVUsRUFBRTt3QkFDUixPQUFPLElBQUksQ0FBQztvQkFDaEIsQ0FBQztpQkFDSjthQUNKLENBQUM7WUFDRixJQUFJLE1BQU0sR0FBRyxJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNyQyxJQUFJLE1BQU0sR0FBRztnQkFDVCxJQUFJLEVBQUUsTUFBTTthQUNmLENBQUM7WUFDRixJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQztZQUM5QixN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