X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;ds=sidebyside;f=tests%2Fworker%2Fabstract-worker.test.mjs;h=ed4fcbdb2f887068d53212b6e7e3b2e36aed5111;hb=HEAD;hp=d94cd4400d2cd70cb7f618c4b1af773700d8a6ec;hpb=915040cce0e378cc1e806391bf77af06880c12f2;p=poolifier.git diff --git a/tests/worker/abstract-worker.test.mjs b/tests/worker/abstract-worker.test.mjs index d94cd440..669f9b3f 100644 --- a/tests/worker/abstract-worker.test.mjs +++ b/tests/worker/abstract-worker.test.mjs @@ -5,7 +5,7 @@ import { ClusterWorker, KillBehaviors, ThreadWorker, - WorkerChoiceStrategies + WorkerChoiceStrategies, } from '../../lib/index.cjs' import { DEFAULT_TASK_NAME, EMPTY_FUNCTION } from '../../lib/utils.cjs' @@ -25,8 +25,8 @@ describe('Abstract worker test suite', () => { const worker = new ThreadWorker(() => {}) expect(worker.opts).toStrictEqual({ killBehavior: KillBehaviors.SOFT, + killHandler: EMPTY_FUNCTION, maxInactiveTime: 60000, - killHandler: EMPTY_FUNCTION }) }) @@ -70,13 +70,13 @@ describe('Abstract worker test suite', () => { } const worker = new ClusterWorker(() => {}, { killBehavior: KillBehaviors.HARD, + killHandler, maxInactiveTime: 6000, - killHandler }) expect(worker.opts).toStrictEqual({ killBehavior: KillBehaviors.HARD, + killHandler, maxInactiveTime: 6000, - killHandler }) }) @@ -136,12 +136,12 @@ describe('Abstract worker test suite', () => { }) it('Verify that taskFunctions parameter with unique function is taken', () => { - const worker = new ThreadWorker(EMPTY_FUNCTION) + const worker = new ThreadWorker(() => {}) expect(worker.taskFunctions.get(DEFAULT_TASK_NAME)).toStrictEqual({ - taskFunction: expect.any(Function) + taskFunction: expect.any(Function), }) expect(worker.taskFunctions.get('fn1')).toStrictEqual({ - taskFunction: expect.any(Function) + taskFunction: expect.any(Function), }) expect(worker.taskFunctions.size).toBe(2) expect(worker.taskFunctions.get(DEFAULT_TASK_NAME)).toStrictEqual( @@ -173,22 +173,20 @@ describe('Abstract worker test suite', () => { ) ) expect( - () => new ThreadWorker({ fn1: { taskFunction: fn1, priority: '' } }) - ).toThrow(new TypeError("Invalid priority ''")) + () => new ThreadWorker({ fn1: { priority: '', taskFunction: fn1 } }) + ).toThrow(new TypeError("Invalid property 'priority': ''")) expect( - () => new ThreadWorker({ fn1: { taskFunction: fn1, priority: -21 } }) - ).toThrow(new TypeError('Property priority must be between -20 and 19')) + () => new ThreadWorker({ fn1: { priority: -21, taskFunction: fn1 } }) + ).toThrow(new RangeError("Property 'priority' must be between -20 and 19")) expect( - () => new ThreadWorker({ fn1: { taskFunction: fn1, priority: 20 } }) - ).toThrow(new RangeError('Property priority must be between -20 and 19')) + () => new ThreadWorker({ fn1: { priority: 20, taskFunction: fn1 } }) + ).toThrow(new RangeError("Property 'priority' must be between -20 and 19")) expect( () => new ThreadWorker({ - fn1: { taskFunction: fn1, strategy: 'invalidStrategy' } + fn1: { strategy: 'invalidStrategy', taskFunction: fn1 }, }) - ).toThrow( - new RangeError("Invalid worker choice strategy 'invalidStrategy'") - ) + ).toThrow(new Error("Invalid worker choice strategy 'invalidStrategy'")) }) it('Verify that taskFunctions parameter with multiple task functions is taken', () => { @@ -200,13 +198,13 @@ describe('Abstract worker test suite', () => { } const worker = new ClusterWorker({ fn1, fn2 }) expect(worker.taskFunctions.get(DEFAULT_TASK_NAME)).toStrictEqual({ - taskFunction: expect.any(Function) + taskFunction: expect.any(Function), }) expect(worker.taskFunctions.get('fn1')).toStrictEqual({ - taskFunction: expect.any(Function) + taskFunction: expect.any(Function), }) expect(worker.taskFunctions.get('fn2')).toStrictEqual({ - taskFunction: expect.any(Function) + taskFunction: expect.any(Function), }) expect(worker.taskFunctions.size).toBe(3) expect(worker.taskFunctions.get(DEFAULT_TASK_NAME)).toStrictEqual( @@ -216,21 +214,21 @@ describe('Abstract worker test suite', () => { it('Verify that taskFunctions parameter with multiple task functions object is taken', () => { const fn1Obj = { + priority: 5, taskFunction: () => { return 1 }, - priority: 5 } const fn2Obj = { + priority: 6, + strategy: WorkerChoiceStrategies.LESS_BUSY, taskFunction: () => { return 2 }, - priority: 6, - strategy: WorkerChoiceStrategies.LESS_BUSY } const worker = new ThreadWorker({ fn1: fn1Obj, - fn2: fn2Obj + fn2: fn2Obj, }) expect(worker.taskFunctions.get(DEFAULT_TASK_NAME)).toStrictEqual(fn1Obj) expect(worker.taskFunctions.get('fn1')).toStrictEqual(fn1Obj) @@ -244,7 +242,7 @@ describe('Abstract worker test suite', () => { it('Verify that async kill handler is called when worker is killed', () => { const killHandlerStub = stub().returns() const worker = new ClusterWorker(() => {}, { - killHandler: async () => await Promise.resolve(killHandlerStub()) + killHandler: async () => await Promise.resolve(killHandlerStub()), }) worker.isMain = false worker.handleKillMessage() @@ -266,15 +264,15 @@ describe('Abstract worker test suite', () => { } const worker = new ClusterWorker({ fn1, fn2 }) expect(worker.hasTaskFunction(0)).toStrictEqual({ + error: new TypeError('name parameter is not a string'), status: false, - error: new TypeError('name parameter is not a string') }) expect(worker.hasTaskFunction('')).toStrictEqual({ + error: new TypeError('name parameter is an empty string'), status: false, - error: new TypeError('name parameter is an empty string') }) expect(worker.hasTaskFunction(DEFAULT_TASK_NAME)).toStrictEqual({ - status: true + status: true, }) expect(worker.hasTaskFunction('fn1')).toStrictEqual({ status: true }) expect(worker.hasTaskFunction('fn2')).toStrictEqual({ status: true }) @@ -293,44 +291,83 @@ describe('Abstract worker test suite', () => { } const worker = new ThreadWorker(fn1) expect(worker.addTaskFunction(0, fn1)).toStrictEqual({ + error: new TypeError('name parameter is not a string'), status: false, - error: new TypeError('name parameter is not a string') }) expect(worker.addTaskFunction('', fn1)).toStrictEqual({ + error: new TypeError('name parameter is an empty string'), status: false, - error: new TypeError('name parameter is an empty string') }) - expect(worker.addTaskFunction('fn3', '')).toStrictEqual({ + expect(worker.addTaskFunction('fn2', 0)).toStrictEqual({ + error: new TypeError( + "taskFunction object 'taskFunction' property 'undefined' is not a function" + ), status: false, + }) + expect(worker.addTaskFunction('fn3', '')).toStrictEqual({ error: new TypeError( "taskFunction object 'taskFunction' property 'undefined' is not a function" - ) + ), + status: false, + }) + expect(worker.addTaskFunction('fn2', { taskFunction: 0 })).toStrictEqual({ + error: new TypeError( + "taskFunction object 'taskFunction' property '0' is not a function" + ), + status: false, + }) + expect(worker.addTaskFunction('fn3', { taskFunction: '' })).toStrictEqual({ + error: new TypeError( + "taskFunction object 'taskFunction' property '' is not a function" + ), + status: false, + }) + expect( + worker.addTaskFunction('fn2', { priority: -21, taskFunction: () => {} }) + ).toStrictEqual({ + error: new RangeError("Property 'priority' must be between -20 and 19"), + status: false, + }) + expect( + worker.addTaskFunction('fn3', { priority: 20, taskFunction: () => {} }) + ).toStrictEqual({ + error: new RangeError("Property 'priority' must be between -20 and 19"), + status: false, + }) + expect( + worker.addTaskFunction('fn2', { + strategy: 'invalidStrategy', + taskFunction: () => {}, + }) + ).toStrictEqual({ + error: new Error("Invalid worker choice strategy 'invalidStrategy'"), + status: false, }) expect(worker.taskFunctions.get(DEFAULT_TASK_NAME)).toStrictEqual({ - taskFunction: expect.any(Function) + taskFunction: expect.any(Function), }) expect(worker.taskFunctions.get('fn1')).toStrictEqual({ - taskFunction: expect.any(Function) + taskFunction: expect.any(Function), }) expect(worker.taskFunctions.size).toBe(2) expect(worker.taskFunctions.get(DEFAULT_TASK_NAME)).toStrictEqual( worker.taskFunctions.get('fn1') ) expect(worker.addTaskFunction(DEFAULT_TASK_NAME, fn2)).toStrictEqual({ - status: false, error: new Error( 'Cannot add a task function with the default reserved name' - ) + ), + status: false, }) worker.addTaskFunction('fn2', fn2) expect(worker.taskFunctions.get(DEFAULT_TASK_NAME)).toStrictEqual({ - taskFunction: expect.any(Function) + taskFunction: expect.any(Function), }) expect(worker.taskFunctions.get('fn1')).toStrictEqual({ - taskFunction: expect.any(Function) + taskFunction: expect.any(Function), }) expect(worker.taskFunctions.get('fn2')).toStrictEqual({ - taskFunction: expect.any(Function) + taskFunction: expect.any(Function), }) expect(worker.taskFunctions.size).toBe(3) expect(worker.taskFunctions.get(DEFAULT_TASK_NAME)).toStrictEqual( @@ -338,13 +375,13 @@ describe('Abstract worker test suite', () => { ) worker.addTaskFunction('fn1', fn1Replacement) expect(worker.taskFunctions.get(DEFAULT_TASK_NAME)).toStrictEqual({ - taskFunction: expect.any(Function) + taskFunction: expect.any(Function), }) expect(worker.taskFunctions.get('fn1')).toStrictEqual({ - taskFunction: expect.any(Function) + taskFunction: expect.any(Function), }) expect(worker.taskFunctions.get('fn2')).toStrictEqual({ - taskFunction: expect.any(Function) + taskFunction: expect.any(Function), }) expect(worker.taskFunctions.size).toBe(3) expect(worker.taskFunctions.get(DEFAULT_TASK_NAME)).toStrictEqual( @@ -352,7 +389,7 @@ describe('Abstract worker test suite', () => { ) }) - it('Verify that listTaskFunctionNames() is working', () => { + it('Verify that listTaskFunctionsProperties() is working', () => { const fn1 = () => { return 1 } @@ -363,7 +400,7 @@ describe('Abstract worker test suite', () => { expect(worker.listTaskFunctionsProperties()).toStrictEqual([ { name: DEFAULT_TASK_NAME }, { name: 'fn1' }, - { name: 'fn2' } + { name: 'fn2' }, ]) }) @@ -376,37 +413,37 @@ describe('Abstract worker test suite', () => { } const worker = new ThreadWorker({ fn1, fn2 }) expect(worker.setDefaultTaskFunction(0, fn1)).toStrictEqual({ + error: new TypeError('name parameter is not a string'), status: false, - error: new TypeError('name parameter is not a string') }) expect(worker.setDefaultTaskFunction('', fn1)).toStrictEqual({ + error: new TypeError('name parameter is an empty string'), status: false, - error: new TypeError('name parameter is an empty string') }) expect(worker.taskFunctions.get(DEFAULT_TASK_NAME)).toStrictEqual({ - taskFunction: expect.any(Function) + taskFunction: expect.any(Function), }) expect(worker.taskFunctions.get('fn1')).toStrictEqual({ - taskFunction: expect.any(Function) + taskFunction: expect.any(Function), }) expect(worker.taskFunctions.get('fn2')).toStrictEqual({ - taskFunction: expect.any(Function) + taskFunction: expect.any(Function), }) expect(worker.taskFunctions.size).toBe(3) expect(worker.taskFunctions.get(DEFAULT_TASK_NAME)).toStrictEqual( worker.taskFunctions.get('fn1') ) expect(worker.setDefaultTaskFunction(DEFAULT_TASK_NAME)).toStrictEqual({ - status: false, error: new Error( 'Cannot set the default task function reserved name as the default task function' - ) + ), + status: false, }) expect(worker.setDefaultTaskFunction('fn3')).toStrictEqual({ - status: false, error: new Error( 'Cannot set the default task function to a non-existing task function' - ) + ), + status: false, }) worker.setDefaultTaskFunction('fn1') expect(worker.taskFunctions.get(DEFAULT_TASK_NAME)).toStrictEqual(