X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=tests%2Fworker%2Fcluster-worker.test.mjs;h=33ddf374099ceeaea63acddd095531ae266d6667;hb=c7ed5d3b88f8f2c75675d953a4e9df87a3d9a54c;hp=ea6a0481c00e9a5ae1c2af65882fb51c88158fb6;hpb=a074ffee1b46f43d0dcfba58128748c7492104dd;p=poolifier.git diff --git a/tests/worker/cluster-worker.test.mjs b/tests/worker/cluster-worker.test.mjs index ea6a0481..33ddf374 100644 --- a/tests/worker/cluster-worker.test.mjs +++ b/tests/worker/cluster-worker.test.mjs @@ -1,20 +1,92 @@ import { expect } from 'expect' -import { ClusterWorker } from '../../lib/index.js' +import { restore, stub } from 'sinon' +import { ClusterWorker } from '../../lib/index.cjs' +import { DEFAULT_TASK_NAME } from '../../lib/utils.cjs' describe('Cluster worker test suite', () => { - let numberOfMessagesSent = 0 - const send = () => { - ++numberOfMessagesSent - } - class SpyWorker extends ClusterWorker { - getMainWorker () { - return { send } + afterEach(() => { + restore() + }) + + it('Verify that sync kill handler is called when worker is killed', () => { + const worker = new ClusterWorker(() => {}, { + killHandler: stub().returns() + }) + worker.isMain = false + worker.getMainWorker = stub().returns({ + id: 1, + send: stub().returns() + }) + worker.handleKillMessage() + expect(worker.getMainWorker.calledTwice).toBe(true) + expect(worker.getMainWorker().send.calledOnce).toBe(true) + expect(worker.opts.killHandler.calledOnce).toBe(true) + }) + + it('Verify that removeTaskFunction() is working', () => { + const fn1 = () => { + return 1 } - } + const fn2 = () => { + return 2 + } + const worker = new ClusterWorker({ fn1, fn2 }) + worker.getMainWorker = stub().returns({ + id: 1, + send: stub().returns() + }) + expect(worker.removeTaskFunction(0, fn1)).toStrictEqual({ + status: false, + error: new TypeError('name parameter is not a string') + }) + expect(worker.removeTaskFunction('', fn1)).toStrictEqual({ + status: false, + error: new TypeError('name parameter is an empty string') + }) + expect(worker.taskFunctions.get(DEFAULT_TASK_NAME)).toBeInstanceOf(Function) + expect(worker.taskFunctions.get('fn1')).toBeInstanceOf(Function) + expect(worker.taskFunctions.get('fn2')).toBeInstanceOf(Function) + expect(worker.taskFunctions.size).toBe(3) + expect(worker.taskFunctions.get(DEFAULT_TASK_NAME)).toStrictEqual( + worker.taskFunctions.get('fn1') + ) + expect(worker.removeTaskFunction(DEFAULT_TASK_NAME)).toStrictEqual({ + status: false, + error: new Error( + 'Cannot remove the task function with the default reserved name' + ) + }) + expect(worker.removeTaskFunction('fn1')).toStrictEqual({ + status: false, + error: new Error( + 'Cannot remove the task function used as the default task function' + ) + }) + worker.removeTaskFunction('fn2') + expect(worker.taskFunctions.get(DEFAULT_TASK_NAME)).toBeInstanceOf(Function) + expect(worker.taskFunctions.get('fn1')).toBeInstanceOf(Function) + expect(worker.taskFunctions.get('fn2')).toBeUndefined() + expect(worker.taskFunctions.size).toBe(2) + expect(worker.getMainWorker.calledTwice).toBe(true) + expect(worker.getMainWorker().send.calledOnce).toBe(true) + }) + + it('Verify that handleError() method is working properly', () => { + const error = new Error('Error as an error') + const worker = new ClusterWorker(() => {}) + expect(worker.handleError(error)).not.toBeInstanceOf(Error) + expect(worker.handleError(error)).toStrictEqual(error.message) + const errorMessage = 'Error as a string' + expect(worker.handleError(errorMessage)).toStrictEqual(errorMessage) + }) - it('Verify worker invokes the getMainWorker() and send() methods', () => { - const worker = new SpyWorker(() => {}) + it('Verify that sendToMainWorker() method invokes the getMainWorker() and send() methods', () => { + const worker = new ClusterWorker(() => {}) + worker.getMainWorker = stub().returns({ + send: stub().returns() + }) worker.sendToMainWorker({ ok: 1 }) - expect(numberOfMessagesSent).toBe(1) + expect(worker.getMainWorker.calledTwice).toBe(true) + expect(worker.getMainWorker().send.calledOnce).toBe(true) }) })