X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=tests%2Fpools%2Fselection-strategies%2Fselection-strategies.test.js;h=b5d5903226b9979d0b455548a603eb4df3608512;hb=95ec6006ca39aef0102c82ca42e104a4e9b40b6b;hp=3292ce5686a5f6a014250ec3373510940d196cf3;hpb=594bfb844b5eb66cf533715a6ddad1799b1f5f8f;p=poolifier.git diff --git a/tests/pools/selection-strategies/selection-strategies.test.js b/tests/pools/selection-strategies/selection-strategies.test.js index 3292ce56..b5d59032 100644 --- a/tests/pools/selection-strategies/selection-strategies.test.js +++ b/tests/pools/selection-strategies/selection-strategies.test.js @@ -53,8 +53,7 @@ describe('Selection strategies test suite', () => { const pool = new DynamicThreadPool( min, max, - './tests/worker-files/thread/testWorker.js', - { workerChoiceStrategy } + './tests/worker-files/thread/testWorker.js' ) pool.setWorkerChoiceStrategy(workerChoiceStrategy) expect(pool.opts.workerChoiceStrategy).toBe(workerChoiceStrategy) @@ -168,7 +167,8 @@ describe('Selection strategies test suite', () => { ) // TODO: Create a better test to cover `RoundRobinWorkerChoiceStrategy#choose` const promises = [] - for (let i = 0; i < max * 2; i++) { + const maxMultiplier = 2 + for (let i = 0; i < max * maxMultiplier; i++) { promises.push(pool.execute()) } await Promise.all(promises) @@ -185,7 +185,8 @@ describe('Selection strategies test suite', () => { ) // TODO: Create a better test to cover `RoundRobinWorkerChoiceStrategy#choose` const promises = [] - for (let i = 0; i < max * 2; i++) { + const maxMultiplier = 2 + for (let i = 0; i < max * maxMultiplier; i++) { promises.push(pool.execute()) } await Promise.all(promises) @@ -303,7 +304,8 @@ describe('Selection strategies test suite', () => { ) // TODO: Create a better test to cover `LessUsedWorkerChoiceStrategy#choose` const promises = [] - for (let i = 0; i < max * 2; i++) { + const maxMultiplier = 2 + for (let i = 0; i < max * maxMultiplier; i++) { promises.push(pool.execute()) } await Promise.all(promises) @@ -320,7 +322,8 @@ describe('Selection strategies test suite', () => { ) // TODO: Create a better test to cover `LessUsedWorkerChoiceStrategy#choose` const promises = [] - for (let i = 0; i < max * 2; i++) { + const maxMultiplier = 2 + for (let i = 0; i < max * maxMultiplier; i++) { promises.push(pool.execute()) } await Promise.all(promises) @@ -372,7 +375,8 @@ describe('Selection strategies test suite', () => { ) // TODO: Create a better test to cover `LessBusyWorkerChoiceStrategy#choose` const promises = [] - for (let i = 0; i < max * 2; i++) { + const maxMultiplier = 2 + for (let i = 0; i < max * maxMultiplier; i++) { promises.push(pool.execute()) } await Promise.all(promises) @@ -389,7 +393,8 @@ describe('Selection strategies test suite', () => { ) // TODO: Create a better test to cover `LessBusyWorkerChoiceStrategy#choose` const promises = [] - for (let i = 0; i < max * 2; i++) { + const maxMultiplier = 2 + for (let i = 0; i < max * maxMultiplier; i++) { promises.push(pool.execute()) } await Promise.all(promises) @@ -441,7 +446,8 @@ describe('Selection strategies test suite', () => { ) // TODO: Create a better test to cover `FairShareChoiceStrategy#choose` const promises = [] - for (let i = 0; i < max * 2; i++) { + const maxMultiplier = 2 + for (let i = 0; i < max * maxMultiplier; i++) { promises.push(pool.execute()) } await Promise.all(promises) @@ -479,6 +485,42 @@ describe('Selection strategies test suite', () => { await pool.destroy() }) + it('Verify FAIR_SHARE strategy can be run in a dynamic pool with median run time statistic', async () => { + const pool = new DynamicThreadPool( + min, + max, + './tests/worker-files/thread/testWorker.js', + { + workerChoiceStrategy: WorkerChoiceStrategies.FAIR_SHARE, + workerChoiceStrategyOptions: { + medRunTime: true + } + } + ) + // TODO: Create a better test to cover `FairShareChoiceStrategy#choose` + const promises = [] + const maxMultiplier = 2 + for (let i = 0; i < max * maxMultiplier; i++) { + promises.push(pool.execute()) + } + await Promise.all(promises) + for (const workerNode of pool.workerNodes) { + expect(workerNode.tasksUsage.avgRunTime).toBeDefined() + expect(workerNode.tasksUsage.avgRunTime).toBe(0) + expect(workerNode.tasksUsage.medRunTime).toBeDefined() + expect(workerNode.tasksUsage.medRunTime).toBeGreaterThan(0) + } + // if (process.platform !== 'win32') { + // expect( + // pool.workerChoiceStrategyContext.workerChoiceStrategies.get( + // pool.workerChoiceStrategyContext.workerChoiceStrategy + // ).workerLastVirtualTaskTimestamp.size + // ).toBe(pool.workerNodes.length) + // } + // We need to clean up the resources after our test + await pool.destroy() + }) + it('Verify FAIR_SHARE strategy internals are resets after setting it', async () => { const workerChoiceStrategy = WorkerChoiceStrategies.FAIR_SHARE let pool = new FixedThreadPool( @@ -579,7 +621,8 @@ describe('Selection strategies test suite', () => { ) // TODO: Create a better test to cover `WeightedRoundRobinWorkerChoiceStrategy#choose` const promises = [] - for (let i = 0; i < max * 2; i++) { + const maxMultiplier = 2 + for (let i = 0; i < max * maxMultiplier; i++) { promises.push(pool.execute()) } await Promise.all(promises) @@ -620,6 +663,42 @@ describe('Selection strategies test suite', () => { await pool.destroy() }) + it('Verify WEIGHTED_ROUND_ROBIN strategy can be run in a dynamic pool with median run time statistic', async () => { + const pool = new DynamicThreadPool( + min, + max, + './tests/worker-files/thread/testWorker.js', + { + workerChoiceStrategy: WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN, + workerChoiceStrategyOptions: { + medRunTime: true + } + } + ) + // TODO: Create a better test to cover `WeightedRoundRobinWorkerChoiceStrategy#choose` + const promises = [] + const maxMultiplier = 2 + for (let i = 0; i < max * maxMultiplier; i++) { + promises.push(pool.execute()) + } + await Promise.all(promises) + for (const workerNode of pool.workerNodes) { + expect(workerNode.tasksUsage.avgRunTime).toBeDefined() + expect(workerNode.tasksUsage.avgRunTime).toBe(0) + expect(workerNode.tasksUsage.medRunTime).toBeDefined() + expect(workerNode.tasksUsage.medRunTime).toBeGreaterThan(0) + } + // if (process.platform !== 'win32') { + // expect( + // pool.workerChoiceStrategyContext.workerChoiceStrategies.get( + // pool.workerChoiceStrategyContext.workerChoiceStrategy + // ).workersTaskRunTime.size + // ).toBe(pool.workerNodes.length) + // } + // We need to clean up the resources after our test + await pool.destroy() + }) + it('Verify WEIGHTED_ROUND_ROBIN strategy internals are resets after setting it', async () => { const workerChoiceStrategy = WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN let pool = new FixedThreadPool( @@ -706,7 +785,7 @@ describe('Selection strategies test suite', () => { await pool.destroy() }) - it('Verify unknown strategies throw error', () => { + it('Verify unknown strategy throw error', () => { expect( () => new DynamicThreadPool( @@ -715,8 +794,6 @@ describe('Selection strategies test suite', () => { './tests/worker-files/thread/testWorker.js', { workerChoiceStrategy: 'UNKNOWN_STRATEGY' } ) - ).toThrowError( - new Error("Invalid worker choice strategy 'UNKNOWN_STRATEGY'") - ) + ).toThrowError("Invalid worker choice strategy 'UNKNOWN_STRATEGY'") }) })