X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=tests%2Fworker%2Fthread-worker.test.mjs;h=26da45e12bbe1ac63e3bfa169564faf7d59abcff;hb=0bc53e954d6d832092db4ea6ccea8b0f8f071ebe;hp=4be262a2259bec34203f0743b7f93b721ea2600f;hpb=18ecc6c58fb5ba2e28b874b47980089351b5674f;p=poolifier.git diff --git a/tests/worker/thread-worker.test.mjs b/tests/worker/thread-worker.test.mjs index 4be262a2..26da45e1 100644 --- a/tests/worker/thread-worker.test.mjs +++ b/tests/worker/thread-worker.test.mjs @@ -1,18 +1,83 @@ import { expect } from 'expect' +import { restore, stub } from 'sinon' import { ThreadWorker } from '../../lib/index.js' +import { DEFAULT_TASK_NAME } from '../../lib/utils.js' describe('Thread worker test suite', () => { - let numberOfMessagesPosted = 0 - const postMessage = () => { - ++numberOfMessagesPosted - } class SpyWorker extends ThreadWorker { constructor (fn) { super(fn) - this.port = { postMessage } + this.port = { postMessage: stub().returns() } } } + afterEach(() => { + restore() + }) + + it('Verify that sync kill handler is called when worker is killed', () => { + const worker = new ThreadWorker(() => {}, { + killHandler: stub().returns() + }) + worker.isMain = false + worker.port = { + postMessage: stub().returns(), + unref: stub().returns(), + close: stub().returns() + } + worker.handleKillMessage() + expect(worker.port.postMessage.calledOnce).toBe(true) + expect(worker.port.unref.calledOnce).toBe(true) + expect(worker.port.close.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 ThreadWorker({ fn1, fn2 }) + 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') + }) + worker.port = { + postMessage: stub().returns() + } + 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.port.postMessage.calledOnce).toBe(true) + }) + it('Verify that handleError() method is working properly', () => { const error = new Error('Error as an error') const worker = new ThreadWorker(() => {}) @@ -25,6 +90,6 @@ describe('Thread worker test suite', () => { it('Verify worker invokes the postMessage() method on port property', () => { const worker = new SpyWorker(() => {}) worker.sendToMainWorker({ ok: 1 }) - expect(numberOfMessagesPosted).toBe(1) + expect(worker.port.postMessage.calledOnce).toBe(true) }) })