X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=tests%2Fworker%2Fabstract-worker.test.mjs;h=781f7790a1bfcbd3b9bc63657484b1fc7f667fce;hb=53a0019f59b1d5f10be6acbaca2e6a970dd1fc6c;hp=9058790b46654acbd2ea7ecc17ca0e38617dad3e;hpb=a074ffee1b46f43d0dcfba58128748c7492104dd;p=poolifier.git diff --git a/tests/worker/abstract-worker.test.mjs b/tests/worker/abstract-worker.test.mjs index 9058790b..781f7790 100644 --- a/tests/worker/abstract-worker.test.mjs +++ b/tests/worker/abstract-worker.test.mjs @@ -1,7 +1,8 @@ import { expect } from 'expect' import { restore, stub } from 'sinon' -import { ClusterWorker, KillBehaviors, ThreadWorker } from '../../lib/index.js' -import { DEFAULT_TASK_NAME, EMPTY_FUNCTION } from '../../lib/utils.js' + +import { ClusterWorker, KillBehaviors, ThreadWorker } from '../../lib/index.cjs' +import { DEFAULT_TASK_NAME, EMPTY_FUNCTION } from '../../lib/utils.cjs' describe('Abstract worker test suite', () => { class StubWorkerWithMainWorker extends ThreadWorker { @@ -25,44 +26,37 @@ describe('Abstract worker test suite', () => { }) it('Verify that worker options are checked at worker creation', () => { - expect(() => new ClusterWorker(() => {}, '')).toThrowError( + expect(() => new ClusterWorker(() => {}, '')).toThrow( new TypeError('opts worker options parameter is not a plain object') ) - expect( - () => new ClusterWorker(() => {}, { killBehavior: '' }) - ).toThrowError(new TypeError("killBehavior option '' is not valid")) - expect(() => new ClusterWorker(() => {}, { killBehavior: 0 })).toThrowError( + expect(() => new ClusterWorker(() => {}, { killBehavior: '' })).toThrow( + new TypeError("killBehavior option '' is not valid") + ) + expect(() => new ClusterWorker(() => {}, { killBehavior: 0 })).toThrow( new TypeError("killBehavior option '0' is not valid") ) - expect( - () => new ThreadWorker(() => {}, { maxInactiveTime: '' }) - ).toThrowError(new TypeError('maxInactiveTime option is not an integer')) - expect( - () => new ThreadWorker(() => {}, { maxInactiveTime: 0.5 }) - ).toThrowError(new TypeError('maxInactiveTime option is not an integer')) - expect( - () => new ThreadWorker(() => {}, { maxInactiveTime: 0 }) - ).toThrowError( + expect(() => new ThreadWorker(() => {}, { maxInactiveTime: '' })).toThrow( + new TypeError('maxInactiveTime option is not an integer') + ) + expect(() => new ThreadWorker(() => {}, { maxInactiveTime: 0.5 })).toThrow( + new TypeError('maxInactiveTime option is not an integer') + ) + expect(() => new ThreadWorker(() => {}, { maxInactiveTime: 0 })).toThrow( new TypeError( 'maxInactiveTime option is not a positive integer greater or equal than 5' ) ) - expect( - () => new ThreadWorker(() => {}, { maxInactiveTime: 4 }) - ).toThrowError( + expect(() => new ThreadWorker(() => {}, { maxInactiveTime: 4 })).toThrow( new TypeError( 'maxInactiveTime option is not a positive integer greater or equal than 5' ) ) - expect(() => new ThreadWorker(() => {}, { killHandler: '' })).toThrowError( + expect(() => new ThreadWorker(() => {}, { killHandler: '' })).toThrow( new TypeError('killHandler option is not a function') ) - expect(() => new ThreadWorker(() => {}, { killHandler: 0 })).toThrowError( + expect(() => new ThreadWorker(() => {}, { killHandler: 0 })).toThrow( new TypeError('killHandler option is not a function') ) - expect(() => new ThreadWorker(() => {}, { async: true })).toThrowError( - new TypeError('async option is deprecated') - ) }) it('Verify that worker options are set at worker creation', () => { @@ -82,48 +76,48 @@ describe('Abstract worker test suite', () => { }) it('Verify that taskFunctions parameter is mandatory', () => { - expect(() => new ClusterWorker()).toThrowError( + expect(() => new ClusterWorker()).toThrow( new Error('taskFunctions parameter is mandatory') ) }) it('Verify that taskFunctions parameter is a function or a plain object', () => { - expect(() => new ClusterWorker(0)).toThrowError( + expect(() => new ClusterWorker(0)).toThrow( new TypeError( 'taskFunctions parameter is not a function or a plain object' ) ) - expect(() => new ClusterWorker('')).toThrowError( + expect(() => new ClusterWorker('')).toThrow( new TypeError( 'taskFunctions parameter is not a function or a plain object' ) ) - expect(() => new ClusterWorker(true)).toThrowError( + expect(() => new ClusterWorker(true)).toThrow( new TypeError( 'taskFunctions parameter is not a function or a plain object' ) ) - expect(() => new ClusterWorker([])).toThrowError( + expect(() => new ClusterWorker([])).toThrow( new TypeError( 'taskFunctions parameter is not a function or a plain object' ) ) - expect(() => new ClusterWorker(new Map())).toThrowError( + expect(() => new ClusterWorker(new Map())).toThrow( new TypeError( 'taskFunctions parameter is not a function or a plain object' ) ) - expect(() => new ClusterWorker(new Set())).toThrowError( + expect(() => new ClusterWorker(new Set())).toThrow( new TypeError( 'taskFunctions parameter is not a function or a plain object' ) ) - expect(() => new ClusterWorker(new WeakMap())).toThrowError( + expect(() => new ClusterWorker(new WeakMap())).toThrow( new TypeError( 'taskFunctions parameter is not a function or a plain object' ) ) - expect(() => new ClusterWorker(new WeakSet())).toThrowError( + expect(() => new ClusterWorker(new WeakSet())).toThrow( new TypeError( 'taskFunctions parameter is not a function or a plain object' ) @@ -131,7 +125,7 @@ describe('Abstract worker test suite', () => { }) it('Verify that taskFunctions parameter is not an empty object', () => { - expect(() => new ClusterWorker({})).toThrowError( + expect(() => new ClusterWorker({})).toThrow( new Error('taskFunctions parameter object is empty') ) }) @@ -151,10 +145,10 @@ describe('Abstract worker test suite', () => { return 1 } const fn2 = '' - expect(() => new ThreadWorker({ '': fn1 })).toThrowError( + expect(() => new ThreadWorker({ '': fn1 })).toThrow( new TypeError('A taskFunctions parameter object key is an empty string') ) - expect(() => new ThreadWorker({ fn1, fn2 })).toThrowError( + expect(() => new ThreadWorker({ fn1, fn2 })).toThrow( new TypeError('A taskFunctions parameter object value is not a function') ) }) @@ -176,43 +170,20 @@ describe('Abstract worker test suite', () => { ) }) - 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().send.calledOnce).toBe(true) - expect(worker.opts.killHandler.calledOnce).toBe(true) - }) - it('Verify that async kill handler is called when worker is killed', () => { const killHandlerStub = stub().returns() const worker = new ClusterWorker(() => {}, { - killHandler: async () => Promise.resolve(killHandlerStub()) + killHandler: async () => await Promise.resolve(killHandlerStub()) }) worker.isMain = false worker.handleKillMessage() expect(killHandlerStub.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 that getMainWorker() throw error if main worker is not set', () => { expect(() => new StubWorkerWithMainWorker(() => {}).getMainWorker() - ).toThrowError('Main worker not set') + ).toThrow('Main worker not set') }) it('Verify that hasTaskFunction() is working', () => { @@ -292,53 +263,6 @@ describe('Abstract worker test suite', () => { ) }) - it('Verify that removeTaskFunction() is working', () => { - const fn1 = () => { - return 1 - } - const fn2 = () => { - return 2 - } - const worker = new ClusterWorker({ 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.getMainWorker = stub().returns({ - id: 1, - send: 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.getMainWorker().send.calledOnce).toBe(true) - }) - it('Verify that listTaskFunctionNames() is working', () => { const fn1 = () => { return 1