X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=tests%2Fpools%2Fselection-strategies%2Fworker-choice-strategy-context.test.js;h=23d954c9f13159940e542c8774a3d22feefeaaad;hb=ec82cfa1f7bd62462991c1c034f2fb473f660440;hp=a93104d225f3e9c27ff8d252719619d20654bf0a;hpb=51fe3d3cb0858b5e2ad96076b51a6b9daa8f852c;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 a93104d2..23d954c9 100644 --- a/tests/pools/selection-strategies/worker-choice-strategy-context.test.js +++ b/tests/pools/selection-strategies/worker-choice-strategy-context.test.js @@ -50,6 +50,15 @@ describe('Worker choice strategy context test suite', () => { await dynamicPool.destroy() }) + it('Verify that constructor() initializes the context with all the available worker choice strategies', () => { + const workerChoiceStrategyContext = new WorkerChoiceStrategyContext( + fixedPool + ) + expect(workerChoiceStrategyContext.workerChoiceStrategies.size).toBe( + Object.keys(WorkerChoiceStrategies).length + ) + }) + it('Verify that execute() return the worker chosen by the strategy with fixed pool', () => { const workerChoiceStrategyContext = new WorkerChoiceStrategyContext( fixedPool @@ -60,10 +69,18 @@ describe('Worker choice strategy context test suite', () => { choose: sinon.stub().returns(0) } ) - workerChoiceStrategyContext.workerChoiceStrategy = WorkerChoiceStrategyStub + expect(workerChoiceStrategyContext.workerChoiceStrategy).toBe( + WorkerChoiceStrategies.ROUND_ROBIN + ) + workerChoiceStrategyContext.workerChoiceStrategies.set( + workerChoiceStrategyContext.workerChoiceStrategy, + WorkerChoiceStrategyStub + ) const chosenWorkerKey = workerChoiceStrategyContext.execute() expect( - workerChoiceStrategyContext.workerChoiceStrategy.choose.calledOnce + workerChoiceStrategyContext.workerChoiceStrategies.get( + workerChoiceStrategyContext.workerChoiceStrategy + ).choose.calledOnce ).toBe(true) expect(chosenWorkerKey).toBe(0) }) @@ -78,261 +95,245 @@ describe('Worker choice strategy context test suite', () => { choose: sinon.stub().returns(0) } ) - workerChoiceStrategyContext.workerChoiceStrategy = WorkerChoiceStrategyStub + expect(workerChoiceStrategyContext.workerChoiceStrategy).toBe( + WorkerChoiceStrategies.ROUND_ROBIN + ) + workerChoiceStrategyContext.workerChoiceStrategies.set( + workerChoiceStrategyContext.workerChoiceStrategy, + WorkerChoiceStrategyStub + ) const chosenWorkerKey = workerChoiceStrategyContext.execute() expect( - workerChoiceStrategyContext.workerChoiceStrategy.choose.calledOnce + workerChoiceStrategyContext.workerChoiceStrategies.get( + workerChoiceStrategyContext.workerChoiceStrategy + ).choose.calledOnce ).toBe(true) expect(chosenWorkerKey).toBe(0) }) it('Verify that setWorkerChoiceStrategy() works with ROUND_ROBIN and fixed pool', () => { + const workerChoiceStrategy = WorkerChoiceStrategies.ROUND_ROBIN const workerChoiceStrategyContext = new WorkerChoiceStrategyContext( fixedPool ) - expect(workerChoiceStrategyContext.workerChoiceStrategy).toBeInstanceOf( - RoundRobinWorkerChoiceStrategy - ) - expect(workerChoiceStrategyContext.workerChoiceStrategyType).toBe( - WorkerChoiceStrategies.ROUND_ROBIN - ) - workerChoiceStrategyContext.setWorkerChoiceStrategy( - fixedPool, - WorkerChoiceStrategies.ROUND_ROBIN - ) - expect(workerChoiceStrategyContext.workerChoiceStrategy).toBeInstanceOf( - RoundRobinWorkerChoiceStrategy + expect( + workerChoiceStrategyContext.workerChoiceStrategies.get( + workerChoiceStrategy + ).isDynamicPool + ).toBe(false) + expect( + workerChoiceStrategyContext.workerChoiceStrategies.get( + workerChoiceStrategy + ) + ).toBeInstanceOf(RoundRobinWorkerChoiceStrategy) + expect(workerChoiceStrategyContext.workerChoiceStrategy).toBe( + workerChoiceStrategy ) - expect(workerChoiceStrategyContext.workerChoiceStrategyType).toBe( - WorkerChoiceStrategies.ROUND_ROBIN + workerChoiceStrategyContext.setWorkerChoiceStrategy(workerChoiceStrategy) + expect( + workerChoiceStrategyContext.workerChoiceStrategies.get( + workerChoiceStrategy + ) + ).toBeInstanceOf(RoundRobinWorkerChoiceStrategy) + expect(workerChoiceStrategyContext.workerChoiceStrategy).toBe( + workerChoiceStrategy ) }) it('Verify that setWorkerChoiceStrategy() works with ROUND_ROBIN and dynamic pool', () => { + const workerChoiceStrategy = WorkerChoiceStrategies.ROUND_ROBIN const workerChoiceStrategyContext = new WorkerChoiceStrategyContext( dynamicPool ) - expect(workerChoiceStrategyContext.workerChoiceStrategy).toBeInstanceOf( - RoundRobinWorkerChoiceStrategy - ) - expect(workerChoiceStrategyContext.workerChoiceStrategyType).toBe( - WorkerChoiceStrategies.ROUND_ROBIN - ) - workerChoiceStrategyContext.setWorkerChoiceStrategy( - dynamicPool, - WorkerChoiceStrategies.ROUND_ROBIN - ) - expect(workerChoiceStrategyContext.workerChoiceStrategy).toBeInstanceOf( - RoundRobinWorkerChoiceStrategy + expect( + workerChoiceStrategyContext.workerChoiceStrategies.get( + workerChoiceStrategy + ).isDynamicPool + ).toBe(true) + expect( + workerChoiceStrategyContext.workerChoiceStrategies.get( + workerChoiceStrategy + ) + ).toBeInstanceOf(RoundRobinWorkerChoiceStrategy) + expect(workerChoiceStrategyContext.workerChoiceStrategy).toBe( + workerChoiceStrategy ) - expect(workerChoiceStrategyContext.workerChoiceStrategyType).toBe( - WorkerChoiceStrategies.ROUND_ROBIN + workerChoiceStrategyContext.setWorkerChoiceStrategy(workerChoiceStrategy) + expect( + workerChoiceStrategyContext.workerChoiceStrategies.get( + workerChoiceStrategy + ) + ).toBeInstanceOf(RoundRobinWorkerChoiceStrategy) + expect(workerChoiceStrategyContext.workerChoiceStrategy).toBe( + workerChoiceStrategy ) }) it('Verify that setWorkerChoiceStrategy() works with LESS_USED and fixed pool', () => { + const workerChoiceStrategy = WorkerChoiceStrategies.LESS_USED const workerChoiceStrategyContext = new WorkerChoiceStrategyContext( fixedPool ) - workerChoiceStrategyContext.setWorkerChoiceStrategy( - fixedPool, - WorkerChoiceStrategies.LESS_USED - ) - expect(workerChoiceStrategyContext.workerChoiceStrategy).toBeInstanceOf( - LessUsedWorkerChoiceStrategy - ) - expect(workerChoiceStrategyContext.workerChoiceStrategyType).toBe( - WorkerChoiceStrategies.LESS_USED + expect( + workerChoiceStrategyContext.workerChoiceStrategies.get( + workerChoiceStrategy + ).isDynamicPool + ).toBe(false) + workerChoiceStrategyContext.setWorkerChoiceStrategy(workerChoiceStrategy) + expect( + workerChoiceStrategyContext.workerChoiceStrategies.get( + workerChoiceStrategy + ) + ).toBeInstanceOf(LessUsedWorkerChoiceStrategy) + expect(workerChoiceStrategyContext.workerChoiceStrategy).toBe( + workerChoiceStrategy ) }) it('Verify that setWorkerChoiceStrategy() works with LESS_USED and dynamic pool', () => { + const workerChoiceStrategy = WorkerChoiceStrategies.LESS_USED const workerChoiceStrategyContext = new WorkerChoiceStrategyContext( dynamicPool ) - workerChoiceStrategyContext.setWorkerChoiceStrategy( - dynamicPool, - WorkerChoiceStrategies.LESS_USED - ) - expect(workerChoiceStrategyContext.workerChoiceStrategy).toBeInstanceOf( - LessUsedWorkerChoiceStrategy - ) - expect(workerChoiceStrategyContext.workerChoiceStrategyType).toBe( - WorkerChoiceStrategies.LESS_USED + expect( + workerChoiceStrategyContext.workerChoiceStrategies.get( + workerChoiceStrategy + ).isDynamicPool + ).toBe(true) + workerChoiceStrategyContext.setWorkerChoiceStrategy(workerChoiceStrategy) + expect( + workerChoiceStrategyContext.workerChoiceStrategies.get( + workerChoiceStrategy + ) + ).toBeInstanceOf(LessUsedWorkerChoiceStrategy) + expect(workerChoiceStrategyContext.workerChoiceStrategy).toBe( + workerChoiceStrategy ) }) it('Verify that setWorkerChoiceStrategy() works with LESS_BUSY and fixed pool', () => { + const workerChoiceStrategy = WorkerChoiceStrategies.LESS_BUSY const workerChoiceStrategyContext = new WorkerChoiceStrategyContext( fixedPool ) - workerChoiceStrategyContext.setWorkerChoiceStrategy( - fixedPool, - WorkerChoiceStrategies.LESS_BUSY - ) - expect(workerChoiceStrategyContext.workerChoiceStrategy).toBeInstanceOf( - LessBusyWorkerChoiceStrategy - ) - expect(workerChoiceStrategyContext.workerChoiceStrategyType).toBe( - WorkerChoiceStrategies.LESS_BUSY + expect( + workerChoiceStrategyContext.workerChoiceStrategies.get( + workerChoiceStrategy + ).isDynamicPool + ).toBe(false) + workerChoiceStrategyContext.setWorkerChoiceStrategy(workerChoiceStrategy) + expect( + workerChoiceStrategyContext.workerChoiceStrategies.get( + workerChoiceStrategy + ) + ).toBeInstanceOf(LessBusyWorkerChoiceStrategy) + expect(workerChoiceStrategyContext.workerChoiceStrategy).toBe( + workerChoiceStrategy ) }) it('Verify that setWorkerChoiceStrategy() works with LESS_BUSY and dynamic pool', () => { + const workerChoiceStrategy = WorkerChoiceStrategies.LESS_BUSY const workerChoiceStrategyContext = new WorkerChoiceStrategyContext( dynamicPool ) - workerChoiceStrategyContext.setWorkerChoiceStrategy( - dynamicPool, - WorkerChoiceStrategies.LESS_BUSY - ) - expect(workerChoiceStrategyContext.workerChoiceStrategy).toBeInstanceOf( - LessBusyWorkerChoiceStrategy - ) - expect(workerChoiceStrategyContext.workerChoiceStrategyType).toBe( - WorkerChoiceStrategies.LESS_BUSY + expect( + workerChoiceStrategyContext.workerChoiceStrategies.get( + workerChoiceStrategy + ).isDynamicPool + ).toBe(true) + workerChoiceStrategyContext.setWorkerChoiceStrategy(workerChoiceStrategy) + expect( + workerChoiceStrategyContext.workerChoiceStrategies.get( + workerChoiceStrategy + ) + ).toBeInstanceOf(LessBusyWorkerChoiceStrategy) + expect(workerChoiceStrategyContext.workerChoiceStrategy).toBe( + workerChoiceStrategy ) }) it('Verify that setWorkerChoiceStrategy() works with FAIR_SHARE and fixed pool', () => { + const workerChoiceStrategy = WorkerChoiceStrategies.FAIR_SHARE const workerChoiceStrategyContext = new WorkerChoiceStrategyContext( fixedPool ) - workerChoiceStrategyContext.setWorkerChoiceStrategy( - fixedPool, - WorkerChoiceStrategies.FAIR_SHARE - ) - expect(workerChoiceStrategyContext.workerChoiceStrategy).toBeInstanceOf( - FairShareWorkerChoiceStrategy - ) - expect(workerChoiceStrategyContext.workerChoiceStrategyType).toBe( - WorkerChoiceStrategies.FAIR_SHARE + expect( + workerChoiceStrategyContext.workerChoiceStrategies.get( + workerChoiceStrategy + ).isDynamicPool + ).toBe(false) + workerChoiceStrategyContext.setWorkerChoiceStrategy(workerChoiceStrategy) + expect( + workerChoiceStrategyContext.workerChoiceStrategies.get( + workerChoiceStrategy + ) + ).toBeInstanceOf(FairShareWorkerChoiceStrategy) + expect(workerChoiceStrategyContext.workerChoiceStrategy).toBe( + workerChoiceStrategy ) }) it('Verify that setWorkerChoiceStrategy() works with FAIR_SHARE and dynamic pool', () => { + const workerChoiceStrategy = WorkerChoiceStrategies.FAIR_SHARE const workerChoiceStrategyContext = new WorkerChoiceStrategyContext( dynamicPool ) - workerChoiceStrategyContext.setWorkerChoiceStrategy( - dynamicPool, - WorkerChoiceStrategies.FAIR_SHARE - ) - expect(workerChoiceStrategyContext.workerChoiceStrategy).toBeInstanceOf( - FairShareWorkerChoiceStrategy - ) - expect(workerChoiceStrategyContext.workerChoiceStrategyType).toBe( - WorkerChoiceStrategies.FAIR_SHARE + expect( + workerChoiceStrategyContext.workerChoiceStrategies.get( + workerChoiceStrategy + ).isDynamicPool + ).toBe(true) + workerChoiceStrategyContext.setWorkerChoiceStrategy(workerChoiceStrategy) + expect( + workerChoiceStrategyContext.workerChoiceStrategies.get( + workerChoiceStrategy + ) + ).toBeInstanceOf(FairShareWorkerChoiceStrategy) + expect(workerChoiceStrategyContext.workerChoiceStrategy).toBe( + workerChoiceStrategy ) }) it('Verify that setWorkerChoiceStrategy() works with WEIGHTED_ROUND_ROBIN and fixed pool', () => { + const workerChoiceStrategy = WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN const workerChoiceStrategyContext = new WorkerChoiceStrategyContext( fixedPool ) - workerChoiceStrategyContext.setWorkerChoiceStrategy( - fixedPool, - WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN - ) - expect(workerChoiceStrategyContext.workerChoiceStrategy).toBeInstanceOf( - WeightedRoundRobinWorkerChoiceStrategy - ) - expect(workerChoiceStrategyContext.workerChoiceStrategyType).toBe( - WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN + expect( + workerChoiceStrategyContext.workerChoiceStrategies.get( + workerChoiceStrategy + ).isDynamicPool + ).toBe(false) + workerChoiceStrategyContext.setWorkerChoiceStrategy(workerChoiceStrategy) + expect( + workerChoiceStrategyContext.workerChoiceStrategies.get( + workerChoiceStrategy + ) + ).toBeInstanceOf(WeightedRoundRobinWorkerChoiceStrategy) + expect(workerChoiceStrategyContext.workerChoiceStrategy).toBe( + workerChoiceStrategy ) }) it('Verify that setWorkerChoiceStrategy() works with WEIGHTED_ROUND_ROBIN and dynamic pool', () => { + const workerChoiceStrategy = WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN const workerChoiceStrategyContext = new WorkerChoiceStrategyContext( dynamicPool ) - workerChoiceStrategyContext.setWorkerChoiceStrategy( - dynamicPool, - WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN - ) - expect(workerChoiceStrategyContext.workerChoiceStrategy).toBeInstanceOf( - WeightedRoundRobinWorkerChoiceStrategy - ) - expect(workerChoiceStrategyContext.workerChoiceStrategyType).toBe( - WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN - ) - }) - - it('Verify that getWorkerChoiceStrategy() default return ROUND_ROBIN strategy', () => { - const workerChoiceStrategyContext = new WorkerChoiceStrategyContext( - fixedPool - ) - const strategy = - workerChoiceStrategyContext.getWorkerChoiceStrategy(fixedPool) - expect(strategy).toBeInstanceOf(RoundRobinWorkerChoiceStrategy) - }) - - it('Verify that getWorkerChoiceStrategy() can return ROUND_ROBIN strategy', () => { - const workerChoiceStrategyContext = new WorkerChoiceStrategyContext( - fixedPool - ) - const strategy = workerChoiceStrategyContext.getWorkerChoiceStrategy( - fixedPool, - WorkerChoiceStrategies.ROUND_ROBIN - ) - expect(strategy).toBeInstanceOf(RoundRobinWorkerChoiceStrategy) - }) - - it('Verify that getWorkerChoiceStrategy() can return LESS_USED strategy', () => { - const workerChoiceStrategyContext = new WorkerChoiceStrategyContext( - fixedPool - ) - const strategy = workerChoiceStrategyContext.getWorkerChoiceStrategy( - fixedPool, - WorkerChoiceStrategies.LESS_USED - ) - expect(strategy).toBeInstanceOf(LessUsedWorkerChoiceStrategy) - }) - - it('Verify that getWorkerChoiceStrategy() can return LESS_BUSY strategy', () => { - const workerChoiceStrategyContext = new WorkerChoiceStrategyContext( - fixedPool - ) - const strategy = workerChoiceStrategyContext.getWorkerChoiceStrategy( - fixedPool, - WorkerChoiceStrategies.LESS_BUSY - ) - expect(strategy).toBeInstanceOf(LessBusyWorkerChoiceStrategy) - }) - - it('Verify that getWorkerChoiceStrategy() can return FAIR_SHARE strategy', () => { - const workerChoiceStrategyContext = new WorkerChoiceStrategyContext( - fixedPool - ) - const strategy = workerChoiceStrategyContext.getWorkerChoiceStrategy( - fixedPool, - WorkerChoiceStrategies.FAIR_SHARE - ) - expect(strategy).toBeInstanceOf(FairShareWorkerChoiceStrategy) - }) - - it('Verify that getWorkerChoiceStrategy() can return WEIGHTED_ROUND_ROBIN strategy', () => { - const workerChoiceStrategyContext = new WorkerChoiceStrategyContext( - fixedPool - ) - const strategy = workerChoiceStrategyContext.getWorkerChoiceStrategy( - fixedPool, - WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN - ) - expect(strategy).toBeInstanceOf(WeightedRoundRobinWorkerChoiceStrategy) - }) - - it('Verify that getWorkerChoiceStrategy() throw error on unknown strategy', () => { - const workerChoiceStrategyContext = new WorkerChoiceStrategyContext( - fixedPool - ) - expect(() => { - workerChoiceStrategyContext.getWorkerChoiceStrategy( - fixedPool, - 'UNKNOWN_STRATEGY' + expect( + workerChoiceStrategyContext.workerChoiceStrategies.get( + workerChoiceStrategy + ).isDynamicPool + ).toBe(true) + workerChoiceStrategyContext.setWorkerChoiceStrategy(workerChoiceStrategy) + expect( + workerChoiceStrategyContext.workerChoiceStrategies.get( + workerChoiceStrategy ) - }).toThrowError( - new Error("Worker choice strategy 'UNKNOWN_STRATEGY' not found") + ).toBeInstanceOf(WeightedRoundRobinWorkerChoiceStrategy) + expect(workerChoiceStrategyContext.workerChoiceStrategy).toBe( + workerChoiceStrategy ) }) })