UNPKG

systemic-service-runner

Version:
108 lines (97 loc) 2.58 kB
const assert = require('assert'); const runner = require('../index'); describe('systemic service runner', () => { let system; let exit; beforeEach(() => { system = createSystem(); exit = process.exit; }); afterEach(() => { process.removeAllListeners(); process.exit = exit; }); it('should start a system', (t, done) => { runner(system).start(() => { assert(system.started); done(); }); }); it('should stop a system', (t, done) => { runner(system).stop(() => { assert(system.stopped); done(); }); }); it('should stop on unhandled error', (t, done) => { process.exit = (code) => { assert(system.stopped); assert.equal(code, 1); done(); }; const logger = { error: (message) => assert.equal(message, 'Unhandled error. Invoking shutdown.'), }; runner(system, { logger }).start(() => { assert(system.started); setTimeout(() => process.emit('error')); }); }); it('should stop on unhandled rejection', (t, done) => { process.exit = (code) => { assert(system.stopped); assert.equal(code, 1); done(); }; const logger = { error: (message) => assert.equal(message, 'Unhandled rejection. Invoking shutdown.'), }; runner(system, { logger }).start(() => { assert(system.started); setTimeout(() => process.emit('unhandledRejection')); }); }); it('should stop on SIGINT', (t, done) => { process.exit = (code) => { assert(system.stopped); assert.equal(code, 0); done(); }; const logger = { info: (message) => assert.equal(message, 'Received SIGINT. Attempting to shutdown gracefully.'), }; runner(system, { logger }).start(() => { assert(system.started); setTimeout(() => process.emit('SIGINT')); }); }); it('should stop on SIGTERM', (t, done) => { process.exit = (code) => { assert(system.stopped); assert.equal(code, 0); done(); }; var logger = { info: (message) => assert.equal(message, 'Received SIGTERM. Attempting to shutdown gracefully.'), }; runner(system, { logger }).start(() => { assert(system.started); setTimeout(() => process.emit('SIGTERM')); }); }); function createSystem() { return { started: false, stopped: false, restarted: false, start: function (cb) { this.started = true; cb(); }, stop: function (cb) { this.stopped = true; cb(); }, }; } });