X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=tests%2Fpools%2Fthread%2Fdynamic.test.mjs;h=77c5aaeb5afd3893c8c7eb265a7d65ed4d3cdda6;hb=071391d62928c8b8bcb58fd9e27cfae5fdb58efa;hp=efcc417e9a2ff5b98db606638efff112bfdc54ed;hpb=b73887071ac359b50a7f117a76b3edf268841aac;p=poolifier.git diff --git a/tests/pools/thread/dynamic.test.mjs b/tests/pools/thread/dynamic.test.mjs index efcc417e..77c5aaeb 100644 --- a/tests/pools/thread/dynamic.test.mjs +++ b/tests/pools/thread/dynamic.test.mjs @@ -1,7 +1,11 @@ import { expect } from 'expect' -import { DynamicThreadPool, PoolEvents } from '../../../lib/index.js' -import { TaskFunctions } from '../../test-types.js' -import { sleep, waitWorkerEvents } from '../../test-utils.js' +import { + DynamicThreadPool, + PoolEvents, + WorkerChoiceStrategies +} from '../../../lib/index.cjs' +import { TaskFunctions } from '../../test-types.cjs' +import { sleep, waitPoolEvents, waitWorkerEvents } from '../../test-utils.cjs' describe('Dynamic thread pool test suite', () => { const min = 1 @@ -76,7 +80,7 @@ describe('Dynamic thread pool test suite', () => { it('Validation of inputs test', () => { expect(() => new DynamicThreadPool(min)).toThrow( - "Cannot find the worker file 'undefined'" + 'The worker file path must be specified' ) }) @@ -152,4 +156,37 @@ describe('Dynamic thread pool test suite', () => { // We need to clean up the resources after our test await pool.destroy() }) + + it('Verify that a pool with zero worker works', async () => { + 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() + } + }) })