X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=tests%2Fpools%2Fabstract%2Fabstract-pool.test.js;h=6118897584d8b61c2693e19d8b8363462f266ef8;hb=765457872257684691f93befb94175a2aaa83502;hp=d9b5695e53f369bd45f889a28c4a4846d6ab351f;hpb=164d950a1bcdc39b4762294c1581e8befbb344e2;p=poolifier.git diff --git a/tests/pools/abstract/abstract-pool.test.js b/tests/pools/abstract/abstract-pool.test.js index d9b5695e..61188975 100644 --- a/tests/pools/abstract/abstract-pool.test.js +++ b/tests/pools/abstract/abstract-pool.test.js @@ -1,15 +1,17 @@ const { expect } = require('expect') const { - FixedClusterPool, DynamicThreadPool, + FixedClusterPool, FixedThreadPool, + PoolEvents, WorkerChoiceStrategies } = require('../../../lib/index') +const { CircularArray } = require('../../../lib/circular-array') describe('Abstract pool test suite', () => { const numberOfWorkers = 1 const workerNotFoundInPoolError = new Error( - 'Worker could not be found in the pool' + 'Worker could not be found in the pool worker nodes' ) class StubPoolWithRemoveAllWorker extends FixedThreadPool { removeAllWorker () { @@ -85,9 +87,13 @@ describe('Abstract pool test suite', () => { ) expect(pool.opts.enableEvents).toBe(true) expect(pool.emitter).toBeDefined() + expect(pool.opts.enableTasksQueue).toBe(false) expect(pool.opts.workerChoiceStrategy).toBe( WorkerChoiceStrategies.ROUND_ROBIN ) + expect(pool.opts.workerChoiceStrategyOptions).toStrictEqual({ + medRunTime: false + }) expect(pool.opts.messageHandler).toBeUndefined() expect(pool.opts.errorHandler).toBeUndefined() expect(pool.opts.onlineHandler).toBeUndefined() @@ -99,7 +105,9 @@ describe('Abstract pool test suite', () => { './tests/worker-files/thread/testWorker.js', { workerChoiceStrategy: WorkerChoiceStrategies.LESS_USED, + workerChoiceStrategyOptions: { medRunTime: true }, enableEvents: false, + enableTasksQueue: true, messageHandler: testHandler, errorHandler: testHandler, onlineHandler: testHandler, @@ -108,9 +116,13 @@ describe('Abstract pool test suite', () => { ) expect(pool.opts.enableEvents).toBe(false) expect(pool.emitter).toBeUndefined() + expect(pool.opts.enableTasksQueue).toBe(true) expect(pool.opts.workerChoiceStrategy).toBe( WorkerChoiceStrategies.LESS_USED ) + expect(pool.opts.workerChoiceStrategyOptions).toStrictEqual({ + medRunTime: true + }) expect(pool.opts.messageHandler).toStrictEqual(testHandler) expect(pool.opts.errorHandler).toStrictEqual(testHandler) expect(pool.opts.onlineHandler).toStrictEqual(testHandler) @@ -139,13 +151,29 @@ describe('Abstract pool test suite', () => { numberOfWorkers, './tests/worker-files/cluster/testWorker.js' ) - for (const workerItem of pool.workers) { - expect(workerItem.tasksUsage).toBeDefined() - expect(workerItem.tasksUsage.run).toBe(0) - expect(workerItem.tasksUsage.running).toBe(0) - expect(workerItem.tasksUsage.runTime).toBe(0) - expect(workerItem.tasksUsage.avgRunTime).toBe(0) - expect(workerItem.tasksUsage.error).toBe(0) + for (const workerNode of pool.workerNodes) { + expect(workerNode.tasksUsage).toBeDefined() + expect(workerNode.tasksUsage.run).toBe(0) + expect(workerNode.tasksUsage.running).toBe(0) + expect(workerNode.tasksUsage.runTime).toBe(0) + expect(workerNode.tasksUsage.runTimeHistory).toBeInstanceOf(CircularArray) + expect(workerNode.tasksUsage.runTimeHistory.length).toBe(0) + expect(workerNode.tasksUsage.avgRunTime).toBe(0) + expect(workerNode.tasksUsage.medRunTime).toBe(0) + expect(workerNode.tasksUsage.error).toBe(0) + } + await pool.destroy() + }) + + it('Verify that worker pool tasks queue are initialized', async () => { + const pool = new FixedClusterPool( + numberOfWorkers, + './tests/worker-files/cluster/testWorker.js' + ) + for (const workerNode of pool.workerNodes) { + expect(workerNode.tasksQueue).toBeDefined() + expect(workerNode.tasksQueue).toBeInstanceOf(Array) + expect(workerNode.tasksQueue.length).toBe(0) } await pool.destroy() }) @@ -159,22 +187,28 @@ describe('Abstract pool test suite', () => { for (let i = 0; i < numberOfWorkers * 2; i++) { promises.push(pool.execute()) } - for (const workerItem of pool.workers) { - expect(workerItem.tasksUsage).toBeDefined() - expect(workerItem.tasksUsage.run).toBe(0) - expect(workerItem.tasksUsage.running).toBe(numberOfWorkers * 2) - expect(workerItem.tasksUsage.runTime).toBe(0) - expect(workerItem.tasksUsage.avgRunTime).toBe(0) - expect(workerItem.tasksUsage.error).toBe(0) + for (const workerNode of pool.workerNodes) { + expect(workerNode.tasksUsage).toBeDefined() + expect(workerNode.tasksUsage.run).toBe(0) + expect(workerNode.tasksUsage.running).toBe(numberOfWorkers * 2) + expect(workerNode.tasksUsage.runTime).toBe(0) + expect(workerNode.tasksUsage.runTimeHistory).toBeInstanceOf(CircularArray) + expect(workerNode.tasksUsage.runTimeHistory.length).toBe(0) + expect(workerNode.tasksUsage.avgRunTime).toBe(0) + expect(workerNode.tasksUsage.medRunTime).toBe(0) + expect(workerNode.tasksUsage.error).toBe(0) } await Promise.all(promises) - for (const workerItem of pool.workers) { - expect(workerItem.tasksUsage).toBeDefined() - expect(workerItem.tasksUsage.run).toBe(numberOfWorkers * 2) - expect(workerItem.tasksUsage.running).toBe(0) - expect(workerItem.tasksUsage.runTime).toBeGreaterThanOrEqual(0) - expect(workerItem.tasksUsage.avgRunTime).toBeGreaterThanOrEqual(0) - expect(workerItem.tasksUsage.error).toBe(0) + for (const workerNode of pool.workerNodes) { + expect(workerNode.tasksUsage).toBeDefined() + expect(workerNode.tasksUsage.run).toBe(numberOfWorkers * 2) + expect(workerNode.tasksUsage.running).toBe(0) + expect(workerNode.tasksUsage.runTime).toBeGreaterThanOrEqual(0) + expect(workerNode.tasksUsage.runTimeHistory).toBeInstanceOf(CircularArray) + expect(workerNode.tasksUsage.runTimeHistory.length).toBe(0) + expect(workerNode.tasksUsage.avgRunTime).toBeGreaterThanOrEqual(0) + expect(workerNode.tasksUsage.medRunTime).toBe(0) + expect(workerNode.tasksUsage.error).toBe(0) } await pool.destroy() }) @@ -190,22 +224,28 @@ describe('Abstract pool test suite', () => { promises.push(pool.execute()) } await Promise.all(promises) - for (const workerItem of pool.workers) { - expect(workerItem.tasksUsage).toBeDefined() - expect(workerItem.tasksUsage.run).toBe(numberOfWorkers * 2) - expect(workerItem.tasksUsage.running).toBe(0) - expect(workerItem.tasksUsage.runTime).toBeGreaterThanOrEqual(0) - expect(workerItem.tasksUsage.avgRunTime).toBeGreaterThanOrEqual(0) - expect(workerItem.tasksUsage.error).toBe(0) + for (const workerNode of pool.workerNodes) { + expect(workerNode.tasksUsage).toBeDefined() + expect(workerNode.tasksUsage.run).toBe(numberOfWorkers * 2) + expect(workerNode.tasksUsage.running).toBe(0) + expect(workerNode.tasksUsage.runTime).toBeGreaterThanOrEqual(0) + expect(workerNode.tasksUsage.runTimeHistory).toBeInstanceOf(CircularArray) + expect(workerNode.tasksUsage.runTimeHistory.length).toBe(0) + expect(workerNode.tasksUsage.avgRunTime).toBeGreaterThanOrEqual(0) + expect(workerNode.tasksUsage.medRunTime).toBe(0) + expect(workerNode.tasksUsage.error).toBe(0) } pool.setWorkerChoiceStrategy(WorkerChoiceStrategies.FAIR_SHARE) - for (const workerItem of pool.workers) { - expect(workerItem.tasksUsage).toBeDefined() - expect(workerItem.tasksUsage.run).toBe(0) - expect(workerItem.tasksUsage.running).toBe(0) - expect(workerItem.tasksUsage.runTime).toBe(0) - expect(workerItem.tasksUsage.avgRunTime).toBe(0) - expect(workerItem.tasksUsage.error).toBe(0) + for (const workerNode of pool.workerNodes) { + expect(workerNode.tasksUsage).toBeDefined() + expect(workerNode.tasksUsage.run).toBe(0) + expect(workerNode.tasksUsage.running).toBe(0) + expect(workerNode.tasksUsage.runTime).toBe(0) + expect(workerNode.tasksUsage.runTimeHistory).toBeInstanceOf(CircularArray) + expect(workerNode.tasksUsage.runTimeHistory.length).toBe(0) + expect(workerNode.tasksUsage.avgRunTime).toBe(0) + expect(workerNode.tasksUsage.medRunTime).toBe(0) + expect(workerNode.tasksUsage.error).toBe(0) } await pool.destroy() }) @@ -218,7 +258,7 @@ describe('Abstract pool test suite', () => { ) const promises = [] let poolFull = 0 - pool.emitter.on('full', () => ++poolFull) + pool.emitter.on(PoolEvents.full, () => ++poolFull) for (let i = 0; i < numberOfWorkers * 2; i++) { promises.push(pool.execute()) } @@ -236,7 +276,7 @@ describe('Abstract pool test suite', () => { ) const promises = [] let poolBusy = 0 - pool.emitter.on('busy', () => ++poolBusy) + pool.emitter.on(PoolEvents.busy, () => ++poolBusy) for (let i = 0; i < numberOfWorkers * 2; i++) { promises.push(pool.execute()) }