X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=tests%2Fpools%2Fthread%2Fdynamic.test.mjs;h=22d89223f337c0d7a714811fa3b37c09ecd6b861;hb=af66adf6d7514f45660caaded5e8b3f92aa41b7f;hp=9d35ce8aa8088b58809b4c54d67ec2712e06d974;hpb=e44639e9af74427b71f1556ff7ec9f7606373e0d;p=poolifier.git diff --git a/tests/pools/thread/dynamic.test.mjs b/tests/pools/thread/dynamic.test.mjs index 9d35ce8a..22d89223 100644 --- a/tests/pools/thread/dynamic.test.mjs +++ b/tests/pools/thread/dynamic.test.mjs @@ -1,7 +1,12 @@ import { expect } from 'expect' -import { DynamicThreadPool, PoolEvents } from '../../../lib/index.cjs' + +import { + DynamicThreadPool, + PoolEvents, + WorkerChoiceStrategies +} from '../../../lib/index.cjs' import { TaskFunctions } from '../../test-types.cjs' -import { sleep, waitWorkerEvents } from '../../test-utils.cjs' +import { sleep, waitPoolEvents, waitWorkerEvents } from '../../test-utils.cjs' describe('Dynamic thread pool test suite', () => { const min = 1 @@ -19,7 +24,7 @@ describe('Dynamic thread pool test suite', () => { let result = await pool.execute({ function: TaskFunctions.fibonacci }) - expect(result).toBe(75025) + expect(result).toBe(354224848179262000000) result = await pool.execute({ function: TaskFunctions.factorial }) @@ -67,7 +72,10 @@ describe('Dynamic thread pool test suite', () => { await pool.destroy() const numberOfExitEvents = await exitPromise expect(pool.started).toBe(false) - expect(pool.emitter.eventNames()).toStrictEqual([]) + expect(pool.emitter.eventNames()).toStrictEqual([ + PoolEvents.busy, + PoolEvents.destroy + ]) expect(pool.readyEventEmitted).toBe(false) expect(pool.workerNodes.length).toBe(0) expect(numberOfExitEvents).toBe(min) @@ -111,8 +119,9 @@ describe('Dynamic thread pool test suite', () => { await waitWorkerEvents(longRunningPool, 'exit', max - min) expect(longRunningPool.workerNodes.length).toBe(min) expect( - longRunningPool.workerChoiceStrategyContext.workerChoiceStrategies.get( - longRunningPool.workerChoiceStrategyContext.workerChoiceStrategy + longRunningPool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + longRunningPool.workerChoiceStrategiesContext + .defaultWorkerChoiceStrategy ).nextWorkerNodeKey ).toBeLessThan(longRunningPool.workerNodes.length) // We need to clean up the resources after our test @@ -154,21 +163,35 @@ describe('Dynamic thread pool test suite', () => { }) it('Verify that a pool with zero worker works', async () => { - const pool = new DynamicThreadPool( - 0, - max, - './tests/worker-files/thread/testWorker.mjs' - ) - expect(pool.starting).toBe(false) - expect(pool.workerNodes.length).toBe(pool.info.minSize) - const maxMultiplier = 10000 - const promises = new Set() - for (let i = 0; i < max * maxMultiplier; i++) { - promises.add(pool.execute()) + for (const workerChoiceStrategy of Object.values(WorkerChoiceStrategies)) { + const pool = new DynamicThreadPool( + 0, + max, + './tests/worker-files/thread/testWorker.mjs', + { + workerChoiceStrategy + } + ) + expect(pool.starting).toBe(false) + expect(pool.readyEventEmitted).toBe(false) + for (let run = 0; run < 2; run++) { + run % 2 !== 0 && pool.enableTasksQueue(true) + const maxMultiplier = 4 + const promises = new Set() + expect(pool.workerNodes.length).toBe(pool.info.minSize) + for (let i = 0; i < max * maxMultiplier; i++) { + promises.add(pool.execute()) + } + await Promise.all(promises) + expect(pool.readyEventEmitted).toBe(true) + expect(pool.workerNodes.length).toBeGreaterThan(pool.info.minSize) + expect(pool.workerNodes.length).toBeLessThanOrEqual(pool.info.maxSize) + await waitPoolEvents(pool, PoolEvents.empty, 1) + expect(pool.readyEventEmitted).toBe(false) + expect(pool.workerNodes.length).toBe(pool.info.minSize) + } + // We need to clean up the resources after our test + await pool.destroy() } - await Promise.all(promises) - expect(pool.workerNodes.length).toBe(max) - // We need to clean up the resources after our test - await pool.destroy() }) })