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
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', () => {
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.getWorkerChoiceStrategy()
+ workerChoiceStrategyContext.workerChoiceStrategies.get(
+ WorkerChoiceStrategies.ROUND_ROBIN
+ )
).toBeInstanceOf(RoundRobinWorkerChoiceStrategy)
+ expect(workerChoiceStrategyContext.workerChoiceStrategyType).toBe(
+ WorkerChoiceStrategies.ROUND_ROBIN
+ )
})
it('Verify that setWorkerChoiceStrategy() works with ROUND_ROBIN and dynamic pool', () => {
const workerChoiceStrategyContext = new WorkerChoiceStrategyContext(
dynamicPool
)
+ 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
+ )
workerChoiceStrategyContext.setWorkerChoiceStrategy(
WorkerChoiceStrategies.ROUND_ROBIN
)
expect(
- workerChoiceStrategyContext.getWorkerChoiceStrategy()
- ).toBeInstanceOf(DynamicPoolWorkerChoiceStrategy)
- expect(
- workerChoiceStrategyContext.getWorkerChoiceStrategy().workerChoiceStrategy
+ workerChoiceStrategyContext.workerChoiceStrategies.get(
+ WorkerChoiceStrategies.ROUND_ROBIN
+ )
).toBeInstanceOf(RoundRobinWorkerChoiceStrategy)
+ expect(workerChoiceStrategyContext.workerChoiceStrategyType).toBe(
+ WorkerChoiceStrategies.ROUND_ROBIN
+ )
})
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_USED
)
expect(
- workerChoiceStrategyContext.getWorkerChoiceStrategy()
+ workerChoiceStrategyContext.workerChoiceStrategies.get(
+ WorkerChoiceStrategies.LESS_USED
+ )
).toBeInstanceOf(LessUsedWorkerChoiceStrategy)
+ expect(workerChoiceStrategyContext.workerChoiceStrategyType).toBe(
+ WorkerChoiceStrategies.LESS_USED
+ )
})
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.getWorkerChoiceStrategy()
- ).toBeInstanceOf(DynamicPoolWorkerChoiceStrategy)
- expect(
- workerChoiceStrategyContext.getWorkerChoiceStrategy().workerChoiceStrategy
+ 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_BUSY
)
expect(
- workerChoiceStrategyContext.getWorkerChoiceStrategy()
+ 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.getWorkerChoiceStrategy()
- ).toBeInstanceOf(DynamicPoolWorkerChoiceStrategy)
- expect(
- workerChoiceStrategyContext.getWorkerChoiceStrategy().workerChoiceStrategy
+ 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.getWorkerChoiceStrategy()
+ workerChoiceStrategyContext.workerChoiceStrategies.get(
+ WorkerChoiceStrategies.FAIR_SHARE
+ )
).toBeInstanceOf(FairShareWorkerChoiceStrategy)
+ expect(workerChoiceStrategyContext.workerChoiceStrategyType).toBe(
+ WorkerChoiceStrategies.FAIR_SHARE
+ )
})
it('Verify that setWorkerChoiceStrategy() works with FAIR_SHARE and dynamic pool', () => {
const workerChoiceStrategyContext = new WorkerChoiceStrategyContext(
dynamicPool
)
+ expect(
+ workerChoiceStrategyContext.workerChoiceStrategies.get(
+ WorkerChoiceStrategies.FAIR_SHARE
+ ).isDynamicPool
+ ).toBe(true)
workerChoiceStrategyContext.setWorkerChoiceStrategy(
WorkerChoiceStrategies.FAIR_SHARE
)
expect(
- workerChoiceStrategyContext.getWorkerChoiceStrategy()
- ).toBeInstanceOf(DynamicPoolWorkerChoiceStrategy)
- expect(
- workerChoiceStrategyContext.getWorkerChoiceStrategy().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.getWorkerChoiceStrategy()
+ workerChoiceStrategyContext.workerChoiceStrategies.get(
+ WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN
+ )
).toBeInstanceOf(WeightedRoundRobinWorkerChoiceStrategy)
+ expect(workerChoiceStrategyContext.workerChoiceStrategyType).toBe(
+ WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN
+ )
})
it('Verify that setWorkerChoiceStrategy() works with WEIGHTED_ROUND_ROBIN and dynamic pool', () => {
const workerChoiceStrategyContext = new WorkerChoiceStrategyContext(
dynamicPool
)
+ expect(
+ workerChoiceStrategyContext.workerChoiceStrategies.get(
+ WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN
+ ).isDynamicPool
+ ).toBe(true)
workerChoiceStrategyContext.setWorkerChoiceStrategy(
WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN
)
expect(
- workerChoiceStrategyContext.getWorkerChoiceStrategy()
- ).toBeInstanceOf(DynamicPoolWorkerChoiceStrategy)
- expect(
- workerChoiceStrategyContext.getWorkerChoiceStrategy().workerChoiceStrategy
+ workerChoiceStrategyContext.workerChoiceStrategies.get(
+ WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN
+ )
).toBeInstanceOf(WeightedRoundRobinWorkerChoiceStrategy)
+ expect(workerChoiceStrategyContext.workerChoiceStrategyType).toBe(
+ WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN
+ )
})
})