X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=tests%2Fpools%2Fcluster%2Ffixed.test.mjs;h=0397c797d53a547d1cf560c4520de2cadfafdd1e;hb=3c2426eb135938bf35b17771f32ed7a39e252173;hp=426a64f00d29e051985c93371f34c9fe0ea4c86e;hpb=948faff72540848de48b6caa1f3a2c5501b1764d;p=poolifier.git diff --git a/tests/pools/cluster/fixed.test.mjs b/tests/pools/cluster/fixed.test.mjs index 426a64f0..0397c797 100644 --- a/tests/pools/cluster/fixed.test.mjs +++ b/tests/pools/cluster/fixed.test.mjs @@ -1,22 +1,25 @@ +import cluster from 'node:cluster' + import { expect } from 'expect' -import { FixedClusterPool, PoolEvents } from '../../../lib/index.js' -import { TaskFunctions } from '../../test-types.js' -import { waitPoolEvents, waitWorkerEvents } from '../../test-utils.js' -import { DEFAULT_TASK_NAME } from '../../../lib/utils.js' + +import { FixedClusterPool, PoolEvents } from '../../../lib/index.cjs' +import { DEFAULT_TASK_NAME } from '../../../lib/utils.cjs' +import { TaskFunctions } from '../../test-types.cjs' +import { waitPoolEvents, waitWorkerEvents } from '../../test-utils.cjs' describe('Fixed cluster pool test suite', () => { const numberOfWorkers = 8 const tasksConcurrency = 2 const pool = new FixedClusterPool( numberOfWorkers, - './tests/worker-files/cluster/testWorker.js', + './tests/worker-files/cluster/testWorker.cjs', { errorHandler: e => console.error(e) } ) const queuePool = new FixedClusterPool( numberOfWorkers, - './tests/worker-files/cluster/testWorker.js', + './tests/worker-files/cluster/testWorker.cjs', { enableTasksQueue: true, tasksQueueOptions: { @@ -27,30 +30,30 @@ describe('Fixed cluster pool test suite', () => { ) const emptyPool = new FixedClusterPool( numberOfWorkers, - './tests/worker-files/cluster/emptyWorker.js', + './tests/worker-files/cluster/emptyWorker.cjs', { exitHandler: () => console.info('empty pool worker exited') } ) const echoPool = new FixedClusterPool( numberOfWorkers, - './tests/worker-files/cluster/echoWorker.js' + './tests/worker-files/cluster/echoWorker.cjs' ) const errorPool = new FixedClusterPool( numberOfWorkers, - './tests/worker-files/cluster/errorWorker.js', + './tests/worker-files/cluster/errorWorker.cjs', { errorHandler: e => console.error(e) } ) const asyncErrorPool = new FixedClusterPool( numberOfWorkers, - './tests/worker-files/cluster/asyncErrorWorker.js', + './tests/worker-files/cluster/asyncErrorWorker.cjs', { errorHandler: e => console.error(e) } ) const asyncPool = new FixedClusterPool( numberOfWorkers, - './tests/worker-files/cluster/asyncWorker.js' + './tests/worker-files/cluster/asyncWorker.cjs' ) after('Destroy all pools', async () => { @@ -67,7 +70,7 @@ describe('Fixed cluster 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 }) @@ -82,7 +85,7 @@ describe('Fixed cluster pool test suite', () => { it("Verify that 'ready' event is emitted", async () => { const pool = new FixedClusterPool( numberOfWorkers, - './tests/worker-files/cluster/testWorker.js', + './tests/worker-files/cluster/testWorker.cjs', { errorHandler: e => console.error(e) } @@ -130,6 +133,7 @@ describe('Fixed cluster pool test suite', () => { expect(workerNode.usage.tasks.maxQueued).toBe( maxMultiplier - queuePool.opts.tasksQueueOptions.concurrency ) + expect(workerNode.usage.tasks.sequentiallyStolen).toBe(0) expect(workerNode.usage.tasks.stolen).toBe(0) } expect(queuePool.info.executedTasks).toBe(0) @@ -157,6 +161,12 @@ describe('Fixed cluster pool test suite', () => { expect(workerNode.usage.tasks.maxQueued).toBe( maxMultiplier - queuePool.opts.tasksQueueOptions.concurrency ) + expect(workerNode.usage.tasks.sequentiallyStolen).toBeGreaterThanOrEqual( + 0 + ) + expect(workerNode.usage.tasks.sequentiallyStolen).toBeLessThanOrEqual( + numberOfWorkers * maxMultiplier + ) expect(workerNode.usage.tasks.stolen).toBeGreaterThanOrEqual(0) expect(workerNode.usage.tasks.stolen).toBeLessThanOrEqual( numberOfWorkers * maxMultiplier @@ -262,16 +272,25 @@ describe('Fixed cluster pool test suite', () => { await pool.destroy() const numberOfExitEvents = await exitPromise expect(pool.started).toBe(false) + expect(pool.emitter.eventNames()).toStrictEqual([ + PoolEvents.busy, + PoolEvents.destroy + ]) + expect(pool.readyEventEmitted).toBe(false) expect(pool.workerNodes.length).toBe(0) expect(numberOfExitEvents).toBe(numberOfWorkers) expect(poolDestroy).toBe(1) }) it('Verify that cluster pool options are checked', async () => { - const workerFilePath = './tests/worker-files/cluster/testWorker.js' + const workerFilePath = './tests/worker-files/cluster/testWorker.cjs' let pool = new FixedClusterPool(numberOfWorkers, workerFilePath) expect(pool.opts.env).toBeUndefined() expect(pool.opts.settings).toBeUndefined() + expect(cluster.settings).toMatchObject({ + exec: workerFilePath, + silent: false + }) await pool.destroy() pool = new FixedClusterPool(numberOfWorkers, workerFilePath, { env: { TEST: 'test' }, @@ -282,7 +301,7 @@ describe('Fixed cluster pool test suite', () => { args: ['--use', 'http'], silent: true }) - expect({ ...pool.opts.settings, exec: workerFilePath }).toStrictEqual({ + expect(cluster.settings).toMatchObject({ args: ['--use', 'http'], silent: true, exec: workerFilePath @@ -291,7 +310,7 @@ describe('Fixed cluster pool test suite', () => { }) it('Should work even without opts in input', async () => { - const workerFilePath = './tests/worker-files/cluster/testWorker.js' + const workerFilePath = './tests/worker-files/cluster/testWorker.cjs' const pool = new FixedClusterPool(numberOfWorkers, workerFilePath) const res = await pool.execute() expect(res).toStrictEqual({ ok: 1 }) @@ -300,7 +319,7 @@ describe('Fixed cluster pool test suite', () => { }) it('Verify destroyWorkerNode()', async () => { - const workerFilePath = './tests/worker-files/cluster/testWorker.js' + const workerFilePath = './tests/worker-files/cluster/testWorker.cjs' const pool = new FixedClusterPool(numberOfWorkers, workerFilePath) const workerNodeKey = 0 let disconnectEvent = 0 @@ -314,14 +333,15 @@ describe('Fixed cluster pool test suite', () => { await expect(pool.destroyWorkerNode(workerNodeKey)).resolves.toBeUndefined() expect(disconnectEvent).toBe(1) expect(exitEvent).toBe(1) - expect(pool.workerNodes.length).toBe(numberOfWorkers - 1) + // Simulates an illegitimate worker node destroy and the minimum number of worker nodes is guaranteed + expect(pool.workerNodes.length).toBe(numberOfWorkers) await pool.destroy() }) it('Verify that a pool with zero worker fails', () => { expect( () => - new FixedClusterPool(0, './tests/worker-files/cluster/testWorker.js') + new FixedClusterPool(0, './tests/worker-files/cluster/testWorker.cjs') ).toThrow('Cannot instantiate a fixed pool with zero worker') }) })