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
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)
})
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.workerChoiceStrategyType).toBe(
- WorkerChoiceStrategies.ROUND_ROBIN
+ expect(
+ workerChoiceStrategyContext.workerChoiceStrategies.get(
+ workerChoiceStrategy
+ ).isDynamicPool
+ ).toBe(false)
+ expect(
+ workerChoiceStrategyContext.workerChoiceStrategies.get(
+ workerChoiceStrategy
+ )
+ ).toBeInstanceOf(RoundRobinWorkerChoiceStrategy)
+ expect(workerChoiceStrategyContext.workerChoiceStrategy).toBe(
+ workerChoiceStrategy
+ )
+ 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.workerChoiceStrategyType).toBe(
- WorkerChoiceStrategies.ROUND_ROBIN
+ expect(
+ workerChoiceStrategyContext.workerChoiceStrategies.get(
+ workerChoiceStrategy
+ ).isDynamicPool
+ ).toBe(true)
+ expect(
+ workerChoiceStrategyContext.workerChoiceStrategies.get(
+ workerChoiceStrategy
+ )
+ ).toBeInstanceOf(RoundRobinWorkerChoiceStrategy)
+ expect(workerChoiceStrategyContext.workerChoiceStrategy).toBe(
+ workerChoiceStrategy
+ )
+ 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
+ expect(
+ workerChoiceStrategyContext.workerChoiceStrategies.get(
+ workerChoiceStrategy
+ ).isDynamicPool
+ ).toBe(true)
+ workerChoiceStrategyContext.setWorkerChoiceStrategy(workerChoiceStrategy)
+ expect(
+ workerChoiceStrategyContext.workerChoiceStrategies.get(
+ workerChoiceStrategy
+ )
+ ).toBeInstanceOf(WeightedRoundRobinWorkerChoiceStrategy)
+ expect(workerChoiceStrategyContext.workerChoiceStrategy).toBe(
+ workerChoiceStrategy
)
})
})