X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=tests%2Fpools%2Fcluster%2Fdynamic.test.mjs;h=d2a250c15b6b1032a6687634caa6cc905e115e00;hb=8e8d9101768c28914dabc95c14740985e18f1f04;hp=93dcc7fad89e8adb942ce667d99e21ebb2a91e88;hpb=7ef6859d79e3a30918f2c53c898e94cd22104622;p=poolifier.git diff --git a/tests/pools/cluster/dynamic.test.mjs b/tests/pools/cluster/dynamic.test.mjs index 93dcc7fa..d2a250c1 100644 --- a/tests/pools/cluster/dynamic.test.mjs +++ b/tests/pools/cluster/dynamic.test.mjs @@ -1,7 +1,11 @@ import { expect } from 'expect' -import { DynamicClusterPool, PoolEvents } from '../../../lib/index.js' -import { TaskFunctions } from '../../test-types.js' -import { sleep, waitWorkerEvents } from '../../test-utils.js' +import { + DynamicClusterPool, + PoolEvents, + WorkerChoiceStrategies +} from '../../../lib/index.cjs' +import { TaskFunctions } from '../../test-types.cjs' +import { sleep, waitPoolEvents, waitWorkerEvents } from '../../test-utils.cjs' describe('Dynamic cluster pool test suite', () => { const min = 1 @@ -9,7 +13,7 @@ describe('Dynamic cluster pool test suite', () => { const pool = new DynamicClusterPool( min, max, - './tests/worker-files/cluster/testWorker.js', + './tests/worker-files/cluster/testWorker.cjs', { errorHandler: e => console.error(e) } @@ -37,10 +41,10 @@ describe('Dynamic cluster pool test suite', () => { expect(poolBusy).toBe(1) const numberOfExitEvents = await waitWorkerEvents(pool, 'exit', max - min) expect(numberOfExitEvents).toBe(max - min) + expect(pool.workerNodes.length).toBe(min) }) it('Verify scale worker up and down is working', async () => { - expect(pool.workerNodes.length).toBe(min) for (let i = 0; i < max * 2; i++) { pool.execute() } @@ -67,14 +71,16 @@ describe('Dynamic cluster pool test suite', () => { await pool.destroy() const numberOfExitEvents = await exitPromise expect(pool.started).toBe(false) + expect(pool.emitter.eventNames()).toStrictEqual([]) + expect(pool.readyEventEmitted).toBe(false) expect(pool.workerNodes.length).toBe(0) expect(numberOfExitEvents).toBe(min) expect(poolDestroy).toBe(1) }) it('Validation of inputs test', () => { - expect(() => new DynamicClusterPool(min)).toThrowError( - "Cannot find the worker file 'undefined'" + expect(() => new DynamicClusterPool(min)).toThrow( + 'The worker file path must be specified' ) }) @@ -82,7 +88,7 @@ describe('Dynamic cluster pool test suite', () => { const pool = new DynamicClusterPool( min, max, - './tests/worker-files/cluster/testWorker.js' + './tests/worker-files/cluster/testWorker.cjs' ) const result = await pool.execute() expect(result).toStrictEqual({ ok: 1 }) @@ -94,7 +100,7 @@ describe('Dynamic cluster pool test suite', () => { const longRunningPool = new DynamicClusterPool( min, max, - './tests/worker-files/cluster/longRunningWorkerHardBehavior.js', + './tests/worker-files/cluster/longRunningWorkerHardBehavior.cjs', { errorHandler: e => console.error(e), onlineHandler: () => console.info('long executing worker is online'), @@ -121,7 +127,7 @@ describe('Dynamic cluster pool test suite', () => { const longRunningPool = new DynamicClusterPool( min, max, - './tests/worker-files/cluster/longRunningWorkerSoftBehavior.js', + './tests/worker-files/cluster/longRunningWorkerSoftBehavior.cjs', { errorHandler: e => console.error(e), onlineHandler: () => console.info('long executing worker is online'), @@ -144,10 +150,41 @@ describe('Dynamic cluster pool test suite', () => { const pool = new DynamicClusterPool( 0, max, - './tests/worker-files/cluster/testWorker.js' + './tests/worker-files/cluster/testWorker.cjs' ) expect(pool).toBeInstanceOf(DynamicClusterPool) // We need to clean up the resources after our test await pool.destroy() }) + + it.skip('Verify that a pool with zero worker works', async () => { + const pool = new DynamicClusterPool( + 0, + max, + './tests/worker-files/thread/testWorker.mjs' + ) + expect(pool.starting).toBe(false) + for (const workerChoiceStrategy of Object.values(WorkerChoiceStrategies)) { + pool.setWorkerChoiceStrategy(workerChoiceStrategy) + 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() + }) })