X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=tests%2Fpools%2Fselection-strategies%2Fworker-choice-strategy-context.test.js;h=2c0250efba1ad99544e0818b4bf018ed880c623a;hb=283855e19b579c0b4942b32e1a6b4ff0efa6b801;hp=46ac017c223687891b0eccd438892ea1a22f6c51;hpb=6cdd998caa931ce15a2c59f7e616e0611573ec72;p=poolifier.git diff --git a/tests/pools/selection-strategies/worker-choice-strategy-context.test.js b/tests/pools/selection-strategies/worker-choice-strategy-context.test.js index 46ac017c..2c0250ef 100644 --- a/tests/pools/selection-strategies/worker-choice-strategy-context.test.js +++ b/tests/pools/selection-strategies/worker-choice-strategy-context.test.js @@ -12,17 +12,17 @@ const { RoundRobinWorkerChoiceStrategy } = require('../../../lib/pools/selection-strategies/round-robin-worker-choice-strategy') const { - LessRecentlyUsedWorkerChoiceStrategy -} = require('../../../lib/pools/selection-strategies/less-recently-used-worker-choice-strategy') + LessUsedWorkerChoiceStrategy +} = require('../../../lib/pools/selection-strategies/less-used-worker-choice-strategy') +const { + LessBusyWorkerChoiceStrategy +} = require('../../../lib/pools/selection-strategies/less-busy-worker-choice-strategy') const { FairShareWorkerChoiceStrategy } = require('../../../lib/pools/selection-strategies/fair-share-worker-choice-strategy') const { WeightedRoundRobinWorkerChoiceStrategy } = require('../../../lib/pools/selection-strategies/weighted-round-robin-worker-choice-strategy') -const { - DynamicPoolWorkerChoiceStrategy -} = require('../../../lib/pools/selection-strategies/dynamic-pool-worker-choice-strategy') describe('Worker choice strategy context test suite', () => { const min = 1 @@ -57,15 +57,23 @@ describe('Worker choice strategy context test suite', () => { const WorkerChoiceStrategyStub = sinon.createStubInstance( RoundRobinWorkerChoiceStrategy, { - choose: sinon.stub().returns('worker') + choose: sinon.stub().returns(0) } ) - workerChoiceStrategyContext.workerChoiceStrategy = WorkerChoiceStrategyStub - const chosenWorker = workerChoiceStrategyContext.execute() + expect(workerChoiceStrategyContext.workerChoiceStrategyType).toBe( + WorkerChoiceStrategies.ROUND_ROBIN + ) + workerChoiceStrategyContext.workerChoiceStrategies.set( + workerChoiceStrategyContext.workerChoiceStrategyType, + WorkerChoiceStrategyStub + ) + const chosenWorkerKey = workerChoiceStrategyContext.execute() expect( - workerChoiceStrategyContext.getWorkerChoiceStrategy().choose.calledOnce + workerChoiceStrategyContext.workerChoiceStrategies.get( + workerChoiceStrategyContext.workerChoiceStrategyType + ).choose.calledOnce ).toBe(true) - expect(chosenWorker).toBe('worker') + expect(chosenWorkerKey).toBe(0) }) it('Verify that execute() return the worker chosen by the strategy with dynamic pool', () => { @@ -75,26 +83,52 @@ describe('Worker choice strategy context test suite', () => { const WorkerChoiceStrategyStub = sinon.createStubInstance( RoundRobinWorkerChoiceStrategy, { - choose: sinon.stub().returns('worker') + choose: sinon.stub().returns(0) } ) - workerChoiceStrategyContext.workerChoiceStrategy = WorkerChoiceStrategyStub - const chosenWorker = workerChoiceStrategyContext.execute() + expect(workerChoiceStrategyContext.workerChoiceStrategyType).toBe( + WorkerChoiceStrategies.ROUND_ROBIN + ) + workerChoiceStrategyContext.workerChoiceStrategies.set( + workerChoiceStrategyContext.workerChoiceStrategyType, + WorkerChoiceStrategyStub + ) + const chosenWorkerKey = workerChoiceStrategyContext.execute() expect( - workerChoiceStrategyContext.getWorkerChoiceStrategy().choose.calledOnce + workerChoiceStrategyContext.workerChoiceStrategies.get( + workerChoiceStrategyContext.workerChoiceStrategyType + ).choose.calledOnce ).toBe(true) - expect(chosenWorker).toBe('worker') + expect(chosenWorkerKey).toBe(0) }) it('Verify that setWorkerChoiceStrategy() works with ROUND_ROBIN and fixed pool', () => { const workerChoiceStrategyContext = new WorkerChoiceStrategyContext( fixedPool ) + expect( + workerChoiceStrategyContext.workerChoiceStrategies.get( + WorkerChoiceStrategies.ROUND_ROBIN + ).isDynamicPool + ).toBe(false) + expect( + workerChoiceStrategyContext.workerChoiceStrategies.get( + WorkerChoiceStrategies.ROUND_ROBIN + ) + ).toBeInstanceOf(RoundRobinWorkerChoiceStrategy) + expect(workerChoiceStrategyContext.workerChoiceStrategyType).toBe( + WorkerChoiceStrategies.ROUND_ROBIN + ) workerChoiceStrategyContext.setWorkerChoiceStrategy( WorkerChoiceStrategies.ROUND_ROBIN ) - expect(workerChoiceStrategyContext.workerChoiceStrategy).toBeInstanceOf( - RoundRobinWorkerChoiceStrategy + expect( + workerChoiceStrategyContext.workerChoiceStrategies.get( + WorkerChoiceStrategies.ROUND_ROBIN + ) + ).toBeInstanceOf(RoundRobinWorkerChoiceStrategy) + expect(workerChoiceStrategyContext.workerChoiceStrategyType).toBe( + WorkerChoiceStrategies.ROUND_ROBIN ) }) @@ -102,53 +136,139 @@ describe('Worker choice strategy context test suite', () => { const workerChoiceStrategyContext = new WorkerChoiceStrategyContext( dynamicPool ) - workerChoiceStrategyContext.setWorkerChoiceStrategy( + expect( + workerChoiceStrategyContext.workerChoiceStrategies.get( + WorkerChoiceStrategies.ROUND_ROBIN + ).isDynamicPool + ).toBe(true) + expect( + workerChoiceStrategyContext.workerChoiceStrategies.get( + WorkerChoiceStrategies.ROUND_ROBIN + ) + ).toBeInstanceOf(RoundRobinWorkerChoiceStrategy) + expect(workerChoiceStrategyContext.workerChoiceStrategyType).toBe( WorkerChoiceStrategies.ROUND_ROBIN ) - expect(workerChoiceStrategyContext.workerChoiceStrategy).toBeInstanceOf( - DynamicPoolWorkerChoiceStrategy + workerChoiceStrategyContext.setWorkerChoiceStrategy( + WorkerChoiceStrategies.ROUND_ROBIN ) expect( - workerChoiceStrategyContext.workerChoiceStrategy.workerChoiceStrategy + workerChoiceStrategyContext.workerChoiceStrategies.get( + WorkerChoiceStrategies.ROUND_ROBIN + ) ).toBeInstanceOf(RoundRobinWorkerChoiceStrategy) + expect(workerChoiceStrategyContext.workerChoiceStrategyType).toBe( + WorkerChoiceStrategies.ROUND_ROBIN + ) }) - it('Verify that setWorkerChoiceStrategy() works with LESS_RECENTLY_USED and fixed pool', () => { + it('Verify that setWorkerChoiceStrategy() works with LESS_USED and fixed pool', () => { const workerChoiceStrategyContext = new WorkerChoiceStrategyContext( fixedPool ) + expect( + workerChoiceStrategyContext.workerChoiceStrategies.get( + WorkerChoiceStrategies.LESS_USED + ).isDynamicPool + ).toBe(false) workerChoiceStrategyContext.setWorkerChoiceStrategy( - WorkerChoiceStrategies.LESS_RECENTLY_USED + WorkerChoiceStrategies.LESS_USED ) - expect(workerChoiceStrategyContext.workerChoiceStrategy).toBeInstanceOf( - LessRecentlyUsedWorkerChoiceStrategy + expect( + workerChoiceStrategyContext.workerChoiceStrategies.get( + WorkerChoiceStrategies.LESS_USED + ) + ).toBeInstanceOf(LessUsedWorkerChoiceStrategy) + expect(workerChoiceStrategyContext.workerChoiceStrategyType).toBe( + WorkerChoiceStrategies.LESS_USED ) }) - it('Verify that setWorkerChoiceStrategy() works with LESS_RECENTLY_USED and dynamic pool', () => { + it('Verify that setWorkerChoiceStrategy() works with LESS_USED and dynamic pool', () => { const workerChoiceStrategyContext = new WorkerChoiceStrategyContext( dynamicPool ) + expect( + workerChoiceStrategyContext.workerChoiceStrategies.get( + WorkerChoiceStrategies.LESS_USED + ).isDynamicPool + ).toBe(true) + workerChoiceStrategyContext.setWorkerChoiceStrategy( + WorkerChoiceStrategies.LESS_USED + ) + expect( + workerChoiceStrategyContext.workerChoiceStrategies.get( + WorkerChoiceStrategies.LESS_USED + ) + ).toBeInstanceOf(LessUsedWorkerChoiceStrategy) + expect(workerChoiceStrategyContext.workerChoiceStrategyType).toBe( + WorkerChoiceStrategies.LESS_USED + ) + }) + + it('Verify that setWorkerChoiceStrategy() works with LESS_BUSY and fixed pool', () => { + const workerChoiceStrategyContext = new WorkerChoiceStrategyContext( + fixedPool + ) + expect( + workerChoiceStrategyContext.workerChoiceStrategies.get( + WorkerChoiceStrategies.LESS_BUSY + ).isDynamicPool + ).toBe(false) workerChoiceStrategyContext.setWorkerChoiceStrategy( - WorkerChoiceStrategies.LESS_RECENTLY_USED + WorkerChoiceStrategies.LESS_BUSY ) - expect(workerChoiceStrategyContext.workerChoiceStrategy).toBeInstanceOf( - DynamicPoolWorkerChoiceStrategy + expect( + workerChoiceStrategyContext.workerChoiceStrategies.get( + WorkerChoiceStrategies.LESS_BUSY + ) + ).toBeInstanceOf(LessBusyWorkerChoiceStrategy) + expect(workerChoiceStrategyContext.workerChoiceStrategyType).toBe( + WorkerChoiceStrategies.LESS_BUSY + ) + }) + + it('Verify that setWorkerChoiceStrategy() works with LESS_BUSY and dynamic pool', () => { + const workerChoiceStrategyContext = new WorkerChoiceStrategyContext( + dynamicPool + ) + expect( + workerChoiceStrategyContext.workerChoiceStrategies.get( + WorkerChoiceStrategies.LESS_BUSY + ).isDynamicPool + ).toBe(true) + workerChoiceStrategyContext.setWorkerChoiceStrategy( + WorkerChoiceStrategies.LESS_BUSY ) expect( - workerChoiceStrategyContext.workerChoiceStrategy.workerChoiceStrategy - ).toBeInstanceOf(LessRecentlyUsedWorkerChoiceStrategy) + workerChoiceStrategyContext.workerChoiceStrategies.get( + WorkerChoiceStrategies.LESS_BUSY + ) + ).toBeInstanceOf(LessBusyWorkerChoiceStrategy) + expect(workerChoiceStrategyContext.workerChoiceStrategyType).toBe( + WorkerChoiceStrategies.LESS_BUSY + ) }) it('Verify that setWorkerChoiceStrategy() works with FAIR_SHARE and fixed pool', () => { const workerChoiceStrategyContext = new WorkerChoiceStrategyContext( fixedPool ) + expect( + workerChoiceStrategyContext.workerChoiceStrategies.get( + WorkerChoiceStrategies.FAIR_SHARE + ).isDynamicPool + ).toBe(false) workerChoiceStrategyContext.setWorkerChoiceStrategy( WorkerChoiceStrategies.FAIR_SHARE ) - expect(workerChoiceStrategyContext.workerChoiceStrategy).toBeInstanceOf( - FairShareWorkerChoiceStrategy + expect( + workerChoiceStrategyContext.workerChoiceStrategies.get( + WorkerChoiceStrategies.FAIR_SHARE + ) + ).toBeInstanceOf(FairShareWorkerChoiceStrategy) + expect(workerChoiceStrategyContext.workerChoiceStrategyType).toBe( + WorkerChoiceStrategies.FAIR_SHARE ) }) @@ -156,26 +276,43 @@ describe('Worker choice strategy context test suite', () => { const workerChoiceStrategyContext = new WorkerChoiceStrategyContext( dynamicPool ) + expect( + workerChoiceStrategyContext.workerChoiceStrategies.get( + WorkerChoiceStrategies.FAIR_SHARE + ).isDynamicPool + ).toBe(true) workerChoiceStrategyContext.setWorkerChoiceStrategy( WorkerChoiceStrategies.FAIR_SHARE ) - expect(workerChoiceStrategyContext.workerChoiceStrategy).toBeInstanceOf( - DynamicPoolWorkerChoiceStrategy - ) expect( - workerChoiceStrategyContext.workerChoiceStrategy.workerChoiceStrategy + workerChoiceStrategyContext.workerChoiceStrategies.get( + WorkerChoiceStrategies.FAIR_SHARE + ) ).toBeInstanceOf(FairShareWorkerChoiceStrategy) + expect(workerChoiceStrategyContext.workerChoiceStrategyType).toBe( + WorkerChoiceStrategies.FAIR_SHARE + ) }) it('Verify that setWorkerChoiceStrategy() works with WEIGHTED_ROUND_ROBIN and fixed pool', () => { const workerChoiceStrategyContext = new WorkerChoiceStrategyContext( fixedPool ) + expect( + workerChoiceStrategyContext.workerChoiceStrategies.get( + WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN + ).isDynamicPool + ).toBe(false) workerChoiceStrategyContext.setWorkerChoiceStrategy( WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN ) - expect(workerChoiceStrategyContext.workerChoiceStrategy).toBeInstanceOf( - WeightedRoundRobinWorkerChoiceStrategy + expect( + workerChoiceStrategyContext.workerChoiceStrategies.get( + WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN + ) + ).toBeInstanceOf(WeightedRoundRobinWorkerChoiceStrategy) + expect(workerChoiceStrategyContext.workerChoiceStrategyType).toBe( + WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN ) }) @@ -183,14 +320,21 @@ describe('Worker choice strategy context test suite', () => { const workerChoiceStrategyContext = new WorkerChoiceStrategyContext( dynamicPool ) + expect( + workerChoiceStrategyContext.workerChoiceStrategies.get( + WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN + ).isDynamicPool + ).toBe(true) workerChoiceStrategyContext.setWorkerChoiceStrategy( WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN ) - expect(workerChoiceStrategyContext.workerChoiceStrategy).toBeInstanceOf( - DynamicPoolWorkerChoiceStrategy - ) expect( - workerChoiceStrategyContext.workerChoiceStrategy.workerChoiceStrategy + workerChoiceStrategyContext.workerChoiceStrategies.get( + WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN + ) ).toBeInstanceOf(WeightedRoundRobinWorkerChoiceStrategy) + expect(workerChoiceStrategyContext.workerChoiceStrategyType).toBe( + WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN + ) }) })