X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;ds=inline;f=tests%2Fworker%2Fabstract-worker.test.mjs;h=ee89911ce5b15bbe83075b94db38a3d1769fc370;hb=d0bd5062d33c01a4ce0a75d5eb8f79b5fb51cd27;hp=4abbbeb1e17a0ff0528944e0f6e8707e4ad607d5;hpb=948faff72540848de48b6caa1f3a2c5501b1764d;p=poolifier.git diff --git a/tests/worker/abstract-worker.test.mjs b/tests/worker/abstract-worker.test.mjs index 4abbbeb1..ee89911c 100644 --- a/tests/worker/abstract-worker.test.mjs +++ b/tests/worker/abstract-worker.test.mjs @@ -1,7 +1,13 @@ 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, + WorkerChoiceStrategies +} from '../../lib/index.cjs' +import { DEFAULT_TASK_NAME, EMPTY_FUNCTION } from '../../lib/utils.cjs' describe('Abstract worker test suite', () => { class StubWorkerWithMainWorker extends ThreadWorker { @@ -131,8 +137,8 @@ describe('Abstract worker test suite', () => { it('Verify that taskFunctions parameter with unique function is taken', () => { const worker = new ThreadWorker(() => {}) - expect(worker.taskFunctions.get(DEFAULT_TASK_NAME)).toBeInstanceOf(Function) - expect(worker.taskFunctions.get('fn1')).toBeInstanceOf(Function) + expect(worker.taskFunctions.get(DEFAULT_TASK_NAME)).toBeInstanceOf(Object) + expect(worker.taskFunctions.get('fn1')).toBeInstanceOf(Object) expect(worker.taskFunctions.size).toBe(2) expect(worker.taskFunctions.get(DEFAULT_TASK_NAME)).toStrictEqual( worker.taskFunctions.get('fn1') @@ -148,7 +154,36 @@ describe('Abstract worker test suite', () => { new TypeError('A taskFunctions parameter object key is an empty string') ) expect(() => new ThreadWorker({ fn1, fn2 })).toThrow( - new TypeError('A taskFunctions parameter object value is not a function') + new TypeError( + "taskFunction object 'taskFunction' property 'undefined' is not a function" + ) + ) + expect(() => new ThreadWorker({ fn1: { fn1 } })).toThrow( + new TypeError( + "taskFunction object 'taskFunction' property 'undefined' is not a function" + ) + ) + expect(() => new ThreadWorker({ fn2: { taskFunction: fn2 } })).toThrow( + new TypeError( + "taskFunction object 'taskFunction' property '' is not a function" + ) + ) + expect( + () => new ThreadWorker({ fn1: { taskFunction: fn1, priority: '' } }) + ).toThrow(new TypeError("Invalid priority ''")) + expect( + () => new ThreadWorker({ fn1: { taskFunction: fn1, priority: -21 } }) + ).toThrow(new TypeError('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')) + expect( + () => + new ThreadWorker({ + fn1: { taskFunction: fn1, strategy: 'invalidStrategy' } + }) + ).toThrow( + new RangeError("Invalid worker choice strategy 'invalidStrategy'") ) }) @@ -160,9 +195,36 @@ describe('Abstract worker test suite', () => { return 2 } const worker = new ClusterWorker({ fn1, fn2 }) - 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.get(DEFAULT_TASK_NAME)).toBeInstanceOf(Object) + expect(worker.taskFunctions.get('fn1')).toBeInstanceOf(Object) + expect(worker.taskFunctions.get('fn2')).toBeInstanceOf(Object) + expect(worker.taskFunctions.size).toBe(3) + expect(worker.taskFunctions.get(DEFAULT_TASK_NAME)).toStrictEqual( + worker.taskFunctions.get('fn1') + ) + }) + + it('Verify that taskFunctions parameter with multiple task functions object is taken', () => { + const fn1Obj = { + taskFunction: () => { + return 1 + }, + priority: 5 + } + const fn2Obj = { + taskFunction: () => { + return 2 + }, + priority: 6, + strategy: WorkerChoiceStrategies.LESS_BUSY + } + const worker = new ThreadWorker({ + fn1: fn1Obj, + fn2: fn2Obj + }) + expect(worker.taskFunctions.get(DEFAULT_TASK_NAME)).toStrictEqual(fn1Obj) + expect(worker.taskFunctions.get('fn1')).toStrictEqual(fn1Obj) + expect(worker.taskFunctions.get('fn2')).toStrictEqual(fn2Obj) expect(worker.taskFunctions.size).toBe(3) expect(worker.taskFunctions.get(DEFAULT_TASK_NAME)).toStrictEqual( worker.taskFunctions.get('fn1') @@ -230,10 +292,12 @@ describe('Abstract worker test suite', () => { }) expect(worker.addTaskFunction('fn3', '')).toStrictEqual({ status: false, - error: new TypeError('fn parameter is not a function') + error: new TypeError( + "taskFunction object 'taskFunction' property 'undefined' is not a function" + ) }) - expect(worker.taskFunctions.get(DEFAULT_TASK_NAME)).toBeInstanceOf(Function) - expect(worker.taskFunctions.get('fn1')).toBeInstanceOf(Function) + expect(worker.taskFunctions.get(DEFAULT_TASK_NAME)).toBeInstanceOf(Object) + expect(worker.taskFunctions.get('fn1')).toBeInstanceOf(Object) expect(worker.taskFunctions.size).toBe(2) expect(worker.taskFunctions.get(DEFAULT_TASK_NAME)).toStrictEqual( worker.taskFunctions.get('fn1') @@ -245,17 +309,17 @@ describe('Abstract worker test suite', () => { ) }) worker.addTaskFunction('fn2', fn2) - 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.get(DEFAULT_TASK_NAME)).toBeInstanceOf(Object) + expect(worker.taskFunctions.get('fn1')).toBeInstanceOf(Object) + expect(worker.taskFunctions.get('fn2')).toBeInstanceOf(Object) expect(worker.taskFunctions.size).toBe(3) expect(worker.taskFunctions.get(DEFAULT_TASK_NAME)).toStrictEqual( worker.taskFunctions.get('fn1') ) worker.addTaskFunction('fn1', fn1Replacement) - 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.get(DEFAULT_TASK_NAME)).toBeInstanceOf(Object) + expect(worker.taskFunctions.get('fn1')).toBeInstanceOf(Object) + expect(worker.taskFunctions.get('fn2')).toBeInstanceOf(Object) expect(worker.taskFunctions.size).toBe(3) expect(worker.taskFunctions.get(DEFAULT_TASK_NAME)).toStrictEqual( worker.taskFunctions.get('fn1') @@ -270,10 +334,10 @@ describe('Abstract worker test suite', () => { return 2 } const worker = new ClusterWorker({ fn1, fn2 }) - expect(worker.listTaskFunctionNames()).toStrictEqual([ - DEFAULT_TASK_NAME, - 'fn1', - 'fn2' + expect(worker.listTaskFunctionsProperties()).toStrictEqual([ + { name: DEFAULT_TASK_NAME }, + { name: 'fn1' }, + { name: 'fn2' } ]) }) @@ -293,9 +357,9 @@ describe('Abstract worker test suite', () => { 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.get(DEFAULT_TASK_NAME)).toBeInstanceOf(Object) + expect(worker.taskFunctions.get('fn1')).toBeInstanceOf(Object) + expect(worker.taskFunctions.get('fn2')).toBeInstanceOf(Object) expect(worker.taskFunctions.size).toBe(3) expect(worker.taskFunctions.get(DEFAULT_TASK_NAME)).toStrictEqual( worker.taskFunctions.get('fn1')