Add fair sharing worker choice strategy
[poolifier.git] / tests / pools / selection-strategies / selection-strategies-utils.test.js
1 const { expect } = require('expect')
2 const sinon = require('sinon')
3 const {
4 SelectionStrategiesUtils
5 } = require('../../../lib/pools/selection-strategies/selection-strategies-utils')
6 const {
7 FixedThreadPool,
8 WorkerChoiceStrategies
9 } = require('../../../lib/index')
10 const {
11 RoundRobinWorkerChoiceStrategy
12 } = require('../../../lib/pools/selection-strategies/round-robin-worker-choice-strategy')
13 const {
14 LessRecentlyUsedWorkerChoiceStrategy
15 } = require('../../../lib/pools/selection-strategies/less-recently-used-worker-choice-strategy')
16 const {
17 FairShareWorkerChoiceStrategy
18 } = require('../../../lib/pools/selection-strategies/fair-share-worker-choice-strategy')
19 // const {
20 // WeightedRoundRobinWorkerChoiceStrategy
21 // } = require('../../../lib/pools/selection-strategies/weighted-round-robin-choice-strategy')
22
23 describe('Selection strategies utils test suite', () => {
24 let pool
25 beforeEach(() => {
26 pool = sinon.createStubInstance(FixedThreadPool)
27 })
28
29 afterEach(() => {
30 sinon.restore()
31 })
32
33 it('Verify that getWorkerChoiceStrategy() default return ROUND_ROBIN strategy', () => {
34 const strategy = SelectionStrategiesUtils.getWorkerChoiceStrategy(pool)
35 expect(strategy).toBeInstanceOf(RoundRobinWorkerChoiceStrategy)
36 })
37
38 it('Verify that getWorkerChoiceStrategy() can return ROUND_ROBIN strategy', () => {
39 const strategy = SelectionStrategiesUtils.getWorkerChoiceStrategy(
40 pool,
41 WorkerChoiceStrategies.ROUND_ROBIN
42 )
43 expect(strategy).toBeInstanceOf(RoundRobinWorkerChoiceStrategy)
44 })
45
46 it('Verify that getWorkerChoiceStrategy() can return LESS_RECENTLY_USED strategy', () => {
47 const strategy = SelectionStrategiesUtils.getWorkerChoiceStrategy(
48 pool,
49 WorkerChoiceStrategies.LESS_RECENTLY_USED
50 )
51 expect(strategy).toBeInstanceOf(LessRecentlyUsedWorkerChoiceStrategy)
52 })
53
54 it('Verify that getWorkerChoiceStrategy() can return FAIR_SHARE strategy', () => {
55 const strategy = SelectionStrategiesUtils.getWorkerChoiceStrategy(
56 pool,
57 WorkerChoiceStrategies.FAIR_SHARE
58 )
59 expect(strategy).toBeInstanceOf(FairShareWorkerChoiceStrategy)
60 })
61
62 // it('Verify that getWorkerChoiceStrategy() can return WEIGHTED_ROUND_ROBIN strategy', () => {
63 // const strategy = SelectionStrategiesUtils.getWorkerChoiceStrategy(
64 // pool,
65 // WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN
66 // )
67 // expect(strategy).toBeInstanceOf(WeightedRoundRobinWorkerChoiceStrategy)
68 // })
69
70 it('Verify that getWorkerChoiceStrategy() throw error on unknown strategy', () => {
71 expect(() => {
72 SelectionStrategiesUtils.getWorkerChoiceStrategy(pool, 'UNKNOWN_STRATEGY')
73 }).toThrowError(
74 new Error("Worker choice strategy 'UNKNOWN_STRATEGY' not found")
75 )
76 })
77 })