DynamicThreadPool,
FixedThreadPool,
WorkerChoiceStrategies
-} from '../../../lib/index.js'
-import { WorkerChoiceStrategyContext } from '../../../lib/pools/selection-strategies/worker-choice-strategy-context.js'
-import { RoundRobinWorkerChoiceStrategy } from '../../../lib/pools/selection-strategies/round-robin-worker-choice-strategy.js'
-import { LeastUsedWorkerChoiceStrategy } from '../../../lib/pools/selection-strategies/least-used-worker-choice-strategy.js'
-import { LeastBusyWorkerChoiceStrategy } from '../../../lib/pools/selection-strategies/least-busy-worker-choice-strategy.js'
-import { LeastEluWorkerChoiceStrategy } from '../../../lib/pools/selection-strategies/least-elu-worker-choice-strategy.js'
-import { FairShareWorkerChoiceStrategy } from '../../../lib/pools/selection-strategies/fair-share-worker-choice-strategy.js'
-import { WeightedRoundRobinWorkerChoiceStrategy } from '../../../lib/pools/selection-strategies/weighted-round-robin-worker-choice-strategy.js'
-import { InterleavedWeightedRoundRobinWorkerChoiceStrategy } from '../../../lib/pools/selection-strategies/interleaved-weighted-round-robin-worker-choice-strategy.js'
+} from '../../../lib/index.cjs'
+import { WorkerChoiceStrategyContext } from '../../../lib/pools/selection-strategies/worker-choice-strategy-context.cjs'
+import { RoundRobinWorkerChoiceStrategy } from '../../../lib/pools/selection-strategies/round-robin-worker-choice-strategy.cjs'
+import { LeastUsedWorkerChoiceStrategy } from '../../../lib/pools/selection-strategies/least-used-worker-choice-strategy.cjs'
+import { LeastBusyWorkerChoiceStrategy } from '../../../lib/pools/selection-strategies/least-busy-worker-choice-strategy.cjs'
+import { LeastEluWorkerChoiceStrategy } from '../../../lib/pools/selection-strategies/least-elu-worker-choice-strategy.cjs'
+import { FairShareWorkerChoiceStrategy } from '../../../lib/pools/selection-strategies/fair-share-worker-choice-strategy.cjs'
+import { WeightedRoundRobinWorkerChoiceStrategy } from '../../../lib/pools/selection-strategies/weighted-round-robin-worker-choice-strategy.cjs'
+import { InterleavedWeightedRoundRobinWorkerChoiceStrategy } from '../../../lib/pools/selection-strategies/interleaved-weighted-round-robin-worker-choice-strategy.cjs'
describe('Worker choice strategy context test suite', () => {
const min = 1
workerChoiceStrategyUndefinedStub
)
expect(() => workerChoiceStrategyContext.execute()).toThrow(
- new Error('Worker node key chosen is null or undefined after 6 retries')
+ new Error(
+ `Worker node key chosen is null or undefined after ${
+ fixedPool.info.maxSize +
+ Object.keys(workerChoiceStrategyContext.opts.weights).length
+ } retries`
+ )
)
const workerChoiceStrategyNullStub = createStubInstance(
RoundRobinWorkerChoiceStrategy,
workerChoiceStrategyNullStub
)
expect(() => workerChoiceStrategyContext.execute()).toThrow(
- new Error('Worker node key chosen is null or undefined after 6 retries')
+ new Error(
+ `Worker node key chosen is null or undefined after ${
+ fixedPool.info.maxSize +
+ Object.keys(workerChoiceStrategyContext.opts.weights).length
+ } retries`
+ )
)
})
.returns(false)
.onCall(4)
.returns(false)
- .onCall(6)
- .returns(false)
- .onCall(7)
- .returns(false)
- .onCall(8)
- .returns(false)
.returns(true),
choose: stub().returns(1)
}
workerChoiceStrategyContext.workerChoiceStrategies.get(
workerChoiceStrategyContext.workerChoiceStrategy
).hasPoolWorkerNodesReady.callCount
- ).toBe(12)
+ ).toBe(6)
expect(
workerChoiceStrategyContext.workerChoiceStrategies.get(
workerChoiceStrategyContext.workerChoiceStrategy
expect(chosenWorkerKey).toBe(1)
})
- it('Verify that execute() throws error if worker choice strategy consecutive executions has been reached', () => {
+ it('Verify that execute() throws error if worker choice strategy recursion reach the maximum depth', () => {
const workerChoiceStrategyContext = new WorkerChoiceStrategyContext(
fixedPool
)
workerChoiceStrategyStub
)
expect(() => workerChoiceStrategyContext.execute()).toThrow(
- new RangeError(
- 'Worker choice strategy consecutive executions has exceeded the maximum of 10000'
- )
+ new RangeError('Maximum call stack size exceeded')
)
})