refactor: remove unused method argument
[poolifier.git] / tests / pools / selection-strategies / worker-choice-strategy-context.test.js
CommitLineData
40ad1d27
JB
1const { expect } = require('expect')
2const sinon = require('sinon')
3const {
4 FixedThreadPool,
5 DynamicThreadPool,
6 WorkerChoiceStrategies
7} = require('../../../lib/index')
23ff945a
JB
8const {
9 WorkerChoiceStrategyContext
10} = require('../../../lib/pools/selection-strategies/worker-choice-strategy-context')
40ad1d27
JB
11const {
12 RoundRobinWorkerChoiceStrategy
13} = require('../../../lib/pools/selection-strategies/round-robin-worker-choice-strategy')
14const {
737c6d97
JB
15 LessUsedWorkerChoiceStrategy
16} = require('../../../lib/pools/selection-strategies/less-used-worker-choice-strategy')
168c526f
JB
17const {
18 LessBusyWorkerChoiceStrategy
19} = require('../../../lib/pools/selection-strategies/less-busy-worker-choice-strategy')
40ad1d27 20const {
23ff945a
JB
21 FairShareWorkerChoiceStrategy
22} = require('../../../lib/pools/selection-strategies/fair-share-worker-choice-strategy')
c15273f2
JB
23const {
24 WeightedRoundRobinWorkerChoiceStrategy
fa6f1296 25} = require('../../../lib/pools/selection-strategies/weighted-round-robin-worker-choice-strategy')
40ad1d27
JB
26
27describe('Worker choice strategy context test suite', () => {
c15273f2
JB
28 const min = 1
29 const max = 3
40ad1d27 30 let fixedPool, dynamicPool
c15273f2
JB
31
32 before(() => {
33 fixedPool = new FixedThreadPool(
34 max,
35 './tests/worker-files/thread/testWorker.js'
36 )
37 dynamicPool = new DynamicThreadPool(
38 min,
39 max,
40 './tests/worker-files/thread/testWorker.js'
41 )
40ad1d27
JB
42 })
43
44 afterEach(() => {
45 sinon.restore()
46 })
47
fd7ebd49
JB
48 after(async () => {
49 await fixedPool.destroy()
50 await dynamicPool.destroy()
c15273f2
JB
51 })
52
40ad1d27
JB
53 it('Verify that execute() return the worker chosen by the strategy with fixed pool', () => {
54 const workerChoiceStrategyContext = new WorkerChoiceStrategyContext(
55 fixedPool
56 )
57 const WorkerChoiceStrategyStub = sinon.createStubInstance(
58 RoundRobinWorkerChoiceStrategy,
59 {
c923ce56 60 choose: sinon.stub().returns(0)
40ad1d27
JB
61 }
62 )
95c83464
JB
63 expect(workerChoiceStrategyContext.workerChoiceStrategyType).toBe(
64 WorkerChoiceStrategies.ROUND_ROBIN
65 )
66 workerChoiceStrategyContext.workerChoiceStrategies.set(
67 workerChoiceStrategyContext.workerChoiceStrategyType,
68 WorkerChoiceStrategyStub
69 )
c923ce56 70 const chosenWorkerKey = workerChoiceStrategyContext.execute()
40ad1d27 71 expect(
95c83464
JB
72 workerChoiceStrategyContext.workerChoiceStrategies.get(
73 workerChoiceStrategyContext.workerChoiceStrategyType
74 ).choose.calledOnce
40ad1d27 75 ).toBe(true)
c923ce56 76 expect(chosenWorkerKey).toBe(0)
40ad1d27
JB
77 })
78
79 it('Verify that execute() return the worker chosen by the strategy with dynamic pool', () => {
80 const workerChoiceStrategyContext = new WorkerChoiceStrategyContext(
81 dynamicPool
82 )
83 const WorkerChoiceStrategyStub = sinon.createStubInstance(
84 RoundRobinWorkerChoiceStrategy,
85 {
c923ce56 86 choose: sinon.stub().returns(0)
40ad1d27
JB
87 }
88 )
95c83464
JB
89 expect(workerChoiceStrategyContext.workerChoiceStrategyType).toBe(
90 WorkerChoiceStrategies.ROUND_ROBIN
91 )
92 workerChoiceStrategyContext.workerChoiceStrategies.set(
93 workerChoiceStrategyContext.workerChoiceStrategyType,
94 WorkerChoiceStrategyStub
95 )
c923ce56 96 const chosenWorkerKey = workerChoiceStrategyContext.execute()
40ad1d27 97 expect(
95c83464
JB
98 workerChoiceStrategyContext.workerChoiceStrategies.get(
99 workerChoiceStrategyContext.workerChoiceStrategyType
100 ).choose.calledOnce
40ad1d27 101 ).toBe(true)
c923ce56 102 expect(chosenWorkerKey).toBe(0)
40ad1d27
JB
103 })
104
105 it('Verify that setWorkerChoiceStrategy() works with ROUND_ROBIN and fixed pool', () => {
106 const workerChoiceStrategyContext = new WorkerChoiceStrategyContext(
107 fixedPool
108 )
95c83464
JB
109 expect(
110 workerChoiceStrategyContext.workerChoiceStrategies.get(
111 WorkerChoiceStrategies.ROUND_ROBIN
112 )
113 ).toBeInstanceOf(RoundRobinWorkerChoiceStrategy)
b2b1d84e
JB
114 expect(workerChoiceStrategyContext.workerChoiceStrategyType).toBe(
115 WorkerChoiceStrategies.ROUND_ROBIN
116 )
40ad1d27
JB
117 workerChoiceStrategyContext.setWorkerChoiceStrategy(
118 WorkerChoiceStrategies.ROUND_ROBIN
119 )
95c83464
JB
120 expect(
121 workerChoiceStrategyContext.workerChoiceStrategies.get(
122 WorkerChoiceStrategies.ROUND_ROBIN
123 )
124 ).toBeInstanceOf(RoundRobinWorkerChoiceStrategy)
b2b1d84e
JB
125 expect(workerChoiceStrategyContext.workerChoiceStrategyType).toBe(
126 WorkerChoiceStrategies.ROUND_ROBIN
127 )
40ad1d27
JB
128 })
129
23ff945a 130 it('Verify that setWorkerChoiceStrategy() works with ROUND_ROBIN and dynamic pool', () => {
40ad1d27
JB
131 const workerChoiceStrategyContext = new WorkerChoiceStrategyContext(
132 dynamicPool
133 )
95c83464
JB
134 expect(
135 workerChoiceStrategyContext.workerChoiceStrategies.get(
136 WorkerChoiceStrategies.ROUND_ROBIN
137 )
138 ).toBeInstanceOf(RoundRobinWorkerChoiceStrategy)
b2b1d84e
JB
139 expect(workerChoiceStrategyContext.workerChoiceStrategyType).toBe(
140 WorkerChoiceStrategies.ROUND_ROBIN
141 )
40ad1d27
JB
142 workerChoiceStrategyContext.setWorkerChoiceStrategy(
143 WorkerChoiceStrategies.ROUND_ROBIN
144 )
95c83464
JB
145 expect(
146 workerChoiceStrategyContext.workerChoiceStrategies.get(
147 WorkerChoiceStrategies.ROUND_ROBIN
148 )
149 ).toBeInstanceOf(RoundRobinWorkerChoiceStrategy)
b2b1d84e
JB
150 expect(workerChoiceStrategyContext.workerChoiceStrategyType).toBe(
151 WorkerChoiceStrategies.ROUND_ROBIN
152 )
40ad1d27
JB
153 })
154
737c6d97 155 it('Verify that setWorkerChoiceStrategy() works with LESS_USED and fixed pool', () => {
40ad1d27
JB
156 const workerChoiceStrategyContext = new WorkerChoiceStrategyContext(
157 fixedPool
158 )
159 workerChoiceStrategyContext.setWorkerChoiceStrategy(
737c6d97 160 WorkerChoiceStrategies.LESS_USED
40ad1d27 161 )
95c83464
JB
162 expect(
163 workerChoiceStrategyContext.workerChoiceStrategies.get(
164 WorkerChoiceStrategies.LESS_USED
165 )
166 ).toBeInstanceOf(LessUsedWorkerChoiceStrategy)
b2b1d84e
JB
167 expect(workerChoiceStrategyContext.workerChoiceStrategyType).toBe(
168 WorkerChoiceStrategies.LESS_USED
169 )
40ad1d27
JB
170 })
171
737c6d97 172 it('Verify that setWorkerChoiceStrategy() works with LESS_USED and dynamic pool', () => {
40ad1d27
JB
173 const workerChoiceStrategyContext = new WorkerChoiceStrategyContext(
174 dynamicPool
175 )
176 workerChoiceStrategyContext.setWorkerChoiceStrategy(
737c6d97 177 WorkerChoiceStrategies.LESS_USED
40ad1d27 178 )
95c83464
JB
179 expect(
180 workerChoiceStrategyContext.workerChoiceStrategies.get(
181 WorkerChoiceStrategies.LESS_USED
182 )
183 ).toBeInstanceOf(LessUsedWorkerChoiceStrategy)
b2b1d84e
JB
184 expect(workerChoiceStrategyContext.workerChoiceStrategyType).toBe(
185 WorkerChoiceStrategies.LESS_USED
186 )
168c526f
JB
187 })
188
189 it('Verify that setWorkerChoiceStrategy() works with LESS_BUSY and fixed pool', () => {
190 const workerChoiceStrategyContext = new WorkerChoiceStrategyContext(
191 fixedPool
192 )
193 workerChoiceStrategyContext.setWorkerChoiceStrategy(
194 WorkerChoiceStrategies.LESS_BUSY
195 )
95c83464
JB
196 expect(
197 workerChoiceStrategyContext.workerChoiceStrategies.get(
198 WorkerChoiceStrategies.LESS_BUSY
199 )
200 ).toBeInstanceOf(LessBusyWorkerChoiceStrategy)
b2b1d84e
JB
201 expect(workerChoiceStrategyContext.workerChoiceStrategyType).toBe(
202 WorkerChoiceStrategies.LESS_BUSY
203 )
168c526f
JB
204 })
205
206 it('Verify that setWorkerChoiceStrategy() works with LESS_BUSY and dynamic pool', () => {
207 const workerChoiceStrategyContext = new WorkerChoiceStrategyContext(
208 dynamicPool
209 )
210 workerChoiceStrategyContext.setWorkerChoiceStrategy(
211 WorkerChoiceStrategies.LESS_BUSY
212 )
95c83464
JB
213 expect(
214 workerChoiceStrategyContext.workerChoiceStrategies.get(
215 WorkerChoiceStrategies.LESS_BUSY
216 )
217 ).toBeInstanceOf(LessBusyWorkerChoiceStrategy)
b2b1d84e
JB
218 expect(workerChoiceStrategyContext.workerChoiceStrategyType).toBe(
219 WorkerChoiceStrategies.LESS_BUSY
220 )
40ad1d27 221 })
23ff945a
JB
222
223 it('Verify that setWorkerChoiceStrategy() works with FAIR_SHARE and fixed pool', () => {
224 const workerChoiceStrategyContext = new WorkerChoiceStrategyContext(
225 fixedPool
226 )
227 workerChoiceStrategyContext.setWorkerChoiceStrategy(
228 WorkerChoiceStrategies.FAIR_SHARE
229 )
95c83464
JB
230 expect(
231 workerChoiceStrategyContext.workerChoiceStrategies.get(
232 WorkerChoiceStrategies.FAIR_SHARE
233 )
234 ).toBeInstanceOf(FairShareWorkerChoiceStrategy)
b2b1d84e
JB
235 expect(workerChoiceStrategyContext.workerChoiceStrategyType).toBe(
236 WorkerChoiceStrategies.FAIR_SHARE
237 )
23ff945a
JB
238 })
239
240 it('Verify that setWorkerChoiceStrategy() works with FAIR_SHARE and dynamic pool', () => {
241 const workerChoiceStrategyContext = new WorkerChoiceStrategyContext(
242 dynamicPool
243 )
244 workerChoiceStrategyContext.setWorkerChoiceStrategy(
245 WorkerChoiceStrategies.FAIR_SHARE
246 )
95c83464
JB
247 expect(
248 workerChoiceStrategyContext.workerChoiceStrategies.get(
249 WorkerChoiceStrategies.FAIR_SHARE
250 )
251 ).toBeInstanceOf(FairShareWorkerChoiceStrategy)
b2b1d84e
JB
252 expect(workerChoiceStrategyContext.workerChoiceStrategyType).toBe(
253 WorkerChoiceStrategies.FAIR_SHARE
254 )
23ff945a
JB
255 })
256
c15273f2
JB
257 it('Verify that setWorkerChoiceStrategy() works with WEIGHTED_ROUND_ROBIN and fixed pool', () => {
258 const workerChoiceStrategyContext = new WorkerChoiceStrategyContext(
259 fixedPool
260 )
261 workerChoiceStrategyContext.setWorkerChoiceStrategy(
262 WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN
263 )
95c83464
JB
264 expect(
265 workerChoiceStrategyContext.workerChoiceStrategies.get(
266 WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN
267 )
268 ).toBeInstanceOf(WeightedRoundRobinWorkerChoiceStrategy)
b2b1d84e
JB
269 expect(workerChoiceStrategyContext.workerChoiceStrategyType).toBe(
270 WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN
271 )
c15273f2 272 })
23ff945a 273
c15273f2
JB
274 it('Verify that setWorkerChoiceStrategy() works with WEIGHTED_ROUND_ROBIN and dynamic pool', () => {
275 const workerChoiceStrategyContext = new WorkerChoiceStrategyContext(
276 dynamicPool
277 )
278 workerChoiceStrategyContext.setWorkerChoiceStrategy(
279 WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN
280 )
95c83464
JB
281 expect(
282 workerChoiceStrategyContext.workerChoiceStrategies.get(
283 WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN
284 )
285 ).toBeInstanceOf(WeightedRoundRobinWorkerChoiceStrategy)
b2b1d84e
JB
286 expect(workerChoiceStrategyContext.workerChoiceStrategyType).toBe(
287 WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN
288 )
c15273f2 289 })
40ad1d27 290})