feat: add less busy worker choice strategy
[poolifier.git] / tests / pools / selection-strategies / selection-strategies-utils.test.js
CommitLineData
a3809289 1const { expect } = require('expect')
c15273f2 2// const sinon = require('sinon')
a3809289 3const {
78cea37e 4 getWorkerChoiceStrategy
a3809289
JB
5} = require('../../../lib/pools/selection-strategies/selection-strategies-utils')
6const {
7 FixedThreadPool,
8 WorkerChoiceStrategies
9} = require('../../../lib/index')
10const {
11 RoundRobinWorkerChoiceStrategy
12} = require('../../../lib/pools/selection-strategies/round-robin-worker-choice-strategy')
13const {
737c6d97
JB
14 LessUsedWorkerChoiceStrategy
15} = require('../../../lib/pools/selection-strategies/less-used-worker-choice-strategy')
168c526f
JB
16const {
17 LessBusyWorkerChoiceStrategy
18} = require('../../../lib/pools/selection-strategies/less-busy-worker-choice-strategy')
23ff945a
JB
19const {
20 FairShareWorkerChoiceStrategy
21} = require('../../../lib/pools/selection-strategies/fair-share-worker-choice-strategy')
c15273f2
JB
22const {
23 WeightedRoundRobinWorkerChoiceStrategy
fa6f1296 24} = require('../../../lib/pools/selection-strategies/weighted-round-robin-worker-choice-strategy')
a3809289
JB
25
26describe('Selection strategies utils test suite', () => {
c15273f2 27 const max = 3
a3809289 28 let pool
c15273f2
JB
29
30 before(() => {
31 pool = new FixedThreadPool(max, './tests/worker-files/thread/testWorker.js')
a3809289
JB
32 })
33
c15273f2
JB
34 // afterEach(() => {
35 // sinon.restore()
36 // })
37
fd7ebd49
JB
38 after(async () => {
39 await pool.destroy()
a3809289
JB
40 })
41
42 it('Verify that getWorkerChoiceStrategy() default return ROUND_ROBIN strategy', () => {
78cea37e 43 const strategy = getWorkerChoiceStrategy(pool)
a3809289
JB
44 expect(strategy).toBeInstanceOf(RoundRobinWorkerChoiceStrategy)
45 })
46
47 it('Verify that getWorkerChoiceStrategy() can return ROUND_ROBIN strategy', () => {
78cea37e 48 const strategy = getWorkerChoiceStrategy(
a3809289
JB
49 pool,
50 WorkerChoiceStrategies.ROUND_ROBIN
51 )
52 expect(strategy).toBeInstanceOf(RoundRobinWorkerChoiceStrategy)
53 })
54
737c6d97 55 it('Verify that getWorkerChoiceStrategy() can return LESS_USED strategy', () => {
78cea37e 56 const strategy = getWorkerChoiceStrategy(
a3809289 57 pool,
737c6d97 58 WorkerChoiceStrategies.LESS_USED
a3809289 59 )
737c6d97 60 expect(strategy).toBeInstanceOf(LessUsedWorkerChoiceStrategy)
a3809289
JB
61 })
62
168c526f
JB
63 it('Verify that getWorkerChoiceStrategy() can return LESS_BUSY strategy', () => {
64 const strategy = getWorkerChoiceStrategy(
65 pool,
66 WorkerChoiceStrategies.LESS_BUSY
67 )
68 expect(strategy).toBeInstanceOf(LessBusyWorkerChoiceStrategy)
69 })
70
23ff945a 71 it('Verify that getWorkerChoiceStrategy() can return FAIR_SHARE strategy', () => {
78cea37e 72 const strategy = getWorkerChoiceStrategy(
23ff945a
JB
73 pool,
74 WorkerChoiceStrategies.FAIR_SHARE
75 )
76 expect(strategy).toBeInstanceOf(FairShareWorkerChoiceStrategy)
77 })
78
c15273f2 79 it('Verify that getWorkerChoiceStrategy() can return WEIGHTED_ROUND_ROBIN strategy', () => {
78cea37e 80 const strategy = getWorkerChoiceStrategy(
c15273f2
JB
81 pool,
82 WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN
83 )
84 expect(strategy).toBeInstanceOf(WeightedRoundRobinWorkerChoiceStrategy)
85 })
23ff945a 86
a3809289
JB
87 it('Verify that getWorkerChoiceStrategy() throw error on unknown strategy', () => {
88 expect(() => {
78cea37e 89 getWorkerChoiceStrategy(pool, 'UNKNOWN_STRATEGY')
a3809289
JB
90 }).toThrowError(
91 new Error("Worker choice strategy 'UNKNOWN_STRATEGY' not found")
92 )
93 })
94})