1 const { expect
} = require('expect')
2 const sinon
= require('sinon')
7 } = require('../../../lib/index')
9 WorkerChoiceStrategyContext
10 } = require('../../../lib/pools/selection-strategies/worker-choice-strategy-context')
12 RoundRobinWorkerChoiceStrategy
13 } = require('../../../lib/pools/selection-strategies/round-robin-worker-choice-strategy')
15 LessUsedWorkerChoiceStrategy
16 } = require('../../../lib/pools/selection-strategies/less-used-worker-choice-strategy')
18 LessBusyWorkerChoiceStrategy
19 } = require('../../../lib/pools/selection-strategies/less-busy-worker-choice-strategy')
21 FairShareWorkerChoiceStrategy
22 } = require('../../../lib/pools/selection-strategies/fair-share-worker-choice-strategy')
24 WeightedRoundRobinWorkerChoiceStrategy
25 } = require('../../../lib/pools/selection-strategies/weighted-round-robin-worker-choice-strategy')
27 describe('Worker choice strategy context test suite', () => {
30 let fixedPool
, dynamicPool
33 fixedPool
= new FixedThreadPool(
35 './tests/worker-files/thread/testWorker.js'
37 dynamicPool
= new DynamicThreadPool(
40 './tests/worker-files/thread/testWorker.js'
49 await fixedPool
.destroy()
50 await dynamicPool
.destroy()
53 it('Verify that execute() return the worker chosen by the strategy with fixed pool', () => {
54 const workerChoiceStrategyContext
= new WorkerChoiceStrategyContext(
57 const WorkerChoiceStrategyStub
= sinon
.createStubInstance(
58 RoundRobinWorkerChoiceStrategy
,
60 choose
: sinon
.stub().returns(0)
63 expect(workerChoiceStrategyContext
.workerChoiceStrategyType
).toBe(
64 WorkerChoiceStrategies
.ROUND_ROBIN
66 workerChoiceStrategyContext
.workerChoiceStrategies
.set(
67 workerChoiceStrategyContext
.workerChoiceStrategyType
,
68 WorkerChoiceStrategyStub
70 const chosenWorkerKey
= workerChoiceStrategyContext
.execute()
72 workerChoiceStrategyContext
.workerChoiceStrategies
.get(
73 workerChoiceStrategyContext
.workerChoiceStrategyType
76 expect(chosenWorkerKey
).toBe(0)
79 it('Verify that execute() return the worker chosen by the strategy with dynamic pool', () => {
80 const workerChoiceStrategyContext
= new WorkerChoiceStrategyContext(
83 const WorkerChoiceStrategyStub
= sinon
.createStubInstance(
84 RoundRobinWorkerChoiceStrategy
,
86 choose
: sinon
.stub().returns(0)
89 expect(workerChoiceStrategyContext
.workerChoiceStrategyType
).toBe(
90 WorkerChoiceStrategies
.ROUND_ROBIN
92 workerChoiceStrategyContext
.workerChoiceStrategies
.set(
93 workerChoiceStrategyContext
.workerChoiceStrategyType
,
94 WorkerChoiceStrategyStub
96 const chosenWorkerKey
= workerChoiceStrategyContext
.execute()
98 workerChoiceStrategyContext
.workerChoiceStrategies
.get(
99 workerChoiceStrategyContext
.workerChoiceStrategyType
102 expect(chosenWorkerKey
).toBe(0)
105 it('Verify that setWorkerChoiceStrategy() works with ROUND_ROBIN and fixed pool', () => {
106 const workerChoiceStrategyContext
= new WorkerChoiceStrategyContext(
110 workerChoiceStrategyContext
.workerChoiceStrategies
.get(
111 WorkerChoiceStrategies
.ROUND_ROBIN
115 workerChoiceStrategyContext
.workerChoiceStrategies
.get(
116 WorkerChoiceStrategies
.ROUND_ROBIN
118 ).toBeInstanceOf(RoundRobinWorkerChoiceStrategy
)
119 expect(workerChoiceStrategyContext
.workerChoiceStrategyType
).toBe(
120 WorkerChoiceStrategies
.ROUND_ROBIN
122 workerChoiceStrategyContext
.setWorkerChoiceStrategy(
123 WorkerChoiceStrategies
.ROUND_ROBIN
126 workerChoiceStrategyContext
.workerChoiceStrategies
.get(
127 WorkerChoiceStrategies
.ROUND_ROBIN
129 ).toBeInstanceOf(RoundRobinWorkerChoiceStrategy
)
130 expect(workerChoiceStrategyContext
.workerChoiceStrategyType
).toBe(
131 WorkerChoiceStrategies
.ROUND_ROBIN
135 it('Verify that setWorkerChoiceStrategy() works with ROUND_ROBIN and dynamic pool', () => {
136 const workerChoiceStrategyContext
= new WorkerChoiceStrategyContext(
140 workerChoiceStrategyContext
.workerChoiceStrategies
.get(
141 WorkerChoiceStrategies
.ROUND_ROBIN
145 workerChoiceStrategyContext
.workerChoiceStrategies
.get(
146 WorkerChoiceStrategies
.ROUND_ROBIN
148 ).toBeInstanceOf(RoundRobinWorkerChoiceStrategy
)
149 expect(workerChoiceStrategyContext
.workerChoiceStrategyType
).toBe(
150 WorkerChoiceStrategies
.ROUND_ROBIN
152 workerChoiceStrategyContext
.setWorkerChoiceStrategy(
153 WorkerChoiceStrategies
.ROUND_ROBIN
156 workerChoiceStrategyContext
.workerChoiceStrategies
.get(
157 WorkerChoiceStrategies
.ROUND_ROBIN
159 ).toBeInstanceOf(RoundRobinWorkerChoiceStrategy
)
160 expect(workerChoiceStrategyContext
.workerChoiceStrategyType
).toBe(
161 WorkerChoiceStrategies
.ROUND_ROBIN
165 it('Verify that setWorkerChoiceStrategy() works with LESS_USED and fixed pool', () => {
166 const workerChoiceStrategyContext
= new WorkerChoiceStrategyContext(
170 workerChoiceStrategyContext
.workerChoiceStrategies
.get(
171 WorkerChoiceStrategies
.LESS_USED
174 workerChoiceStrategyContext
.setWorkerChoiceStrategy(
175 WorkerChoiceStrategies
.LESS_USED
178 workerChoiceStrategyContext
.workerChoiceStrategies
.get(
179 WorkerChoiceStrategies
.LESS_USED
181 ).toBeInstanceOf(LessUsedWorkerChoiceStrategy
)
182 expect(workerChoiceStrategyContext
.workerChoiceStrategyType
).toBe(
183 WorkerChoiceStrategies
.LESS_USED
187 it('Verify that setWorkerChoiceStrategy() works with LESS_USED and dynamic pool', () => {
188 const workerChoiceStrategyContext
= new WorkerChoiceStrategyContext(
192 workerChoiceStrategyContext
.workerChoiceStrategies
.get(
193 WorkerChoiceStrategies
.LESS_USED
196 workerChoiceStrategyContext
.setWorkerChoiceStrategy(
197 WorkerChoiceStrategies
.LESS_USED
200 workerChoiceStrategyContext
.workerChoiceStrategies
.get(
201 WorkerChoiceStrategies
.LESS_USED
203 ).toBeInstanceOf(LessUsedWorkerChoiceStrategy
)
204 expect(workerChoiceStrategyContext
.workerChoiceStrategyType
).toBe(
205 WorkerChoiceStrategies
.LESS_USED
209 it('Verify that setWorkerChoiceStrategy() works with LESS_BUSY and fixed pool', () => {
210 const workerChoiceStrategyContext
= new WorkerChoiceStrategyContext(
214 workerChoiceStrategyContext
.workerChoiceStrategies
.get(
215 WorkerChoiceStrategies
.LESS_BUSY
218 workerChoiceStrategyContext
.setWorkerChoiceStrategy(
219 WorkerChoiceStrategies
.LESS_BUSY
222 workerChoiceStrategyContext
.workerChoiceStrategies
.get(
223 WorkerChoiceStrategies
.LESS_BUSY
225 ).toBeInstanceOf(LessBusyWorkerChoiceStrategy
)
226 expect(workerChoiceStrategyContext
.workerChoiceStrategyType
).toBe(
227 WorkerChoiceStrategies
.LESS_BUSY
231 it('Verify that setWorkerChoiceStrategy() works with LESS_BUSY and dynamic pool', () => {
232 const workerChoiceStrategyContext
= new WorkerChoiceStrategyContext(
236 workerChoiceStrategyContext
.workerChoiceStrategies
.get(
237 WorkerChoiceStrategies
.LESS_BUSY
240 workerChoiceStrategyContext
.setWorkerChoiceStrategy(
241 WorkerChoiceStrategies
.LESS_BUSY
244 workerChoiceStrategyContext
.workerChoiceStrategies
.get(
245 WorkerChoiceStrategies
.LESS_BUSY
247 ).toBeInstanceOf(LessBusyWorkerChoiceStrategy
)
248 expect(workerChoiceStrategyContext
.workerChoiceStrategyType
).toBe(
249 WorkerChoiceStrategies
.LESS_BUSY
253 it('Verify that setWorkerChoiceStrategy() works with FAIR_SHARE and fixed pool', () => {
254 const workerChoiceStrategyContext
= new WorkerChoiceStrategyContext(
258 workerChoiceStrategyContext
.workerChoiceStrategies
.get(
259 WorkerChoiceStrategies
.FAIR_SHARE
262 workerChoiceStrategyContext
.setWorkerChoiceStrategy(
263 WorkerChoiceStrategies
.FAIR_SHARE
266 workerChoiceStrategyContext
.workerChoiceStrategies
.get(
267 WorkerChoiceStrategies
.FAIR_SHARE
269 ).toBeInstanceOf(FairShareWorkerChoiceStrategy
)
270 expect(workerChoiceStrategyContext
.workerChoiceStrategyType
).toBe(
271 WorkerChoiceStrategies
.FAIR_SHARE
275 it('Verify that setWorkerChoiceStrategy() works with FAIR_SHARE and dynamic pool', () => {
276 const workerChoiceStrategyContext
= new WorkerChoiceStrategyContext(
280 workerChoiceStrategyContext
.workerChoiceStrategies
.get(
281 WorkerChoiceStrategies
.FAIR_SHARE
284 workerChoiceStrategyContext
.setWorkerChoiceStrategy(
285 WorkerChoiceStrategies
.FAIR_SHARE
288 workerChoiceStrategyContext
.workerChoiceStrategies
.get(
289 WorkerChoiceStrategies
.FAIR_SHARE
291 ).toBeInstanceOf(FairShareWorkerChoiceStrategy
)
292 expect(workerChoiceStrategyContext
.workerChoiceStrategyType
).toBe(
293 WorkerChoiceStrategies
.FAIR_SHARE
297 it('Verify that setWorkerChoiceStrategy() works with WEIGHTED_ROUND_ROBIN and fixed pool', () => {
298 const workerChoiceStrategyContext
= new WorkerChoiceStrategyContext(
302 workerChoiceStrategyContext
.workerChoiceStrategies
.get(
303 WorkerChoiceStrategies
.WEIGHTED_ROUND_ROBIN
306 workerChoiceStrategyContext
.setWorkerChoiceStrategy(
307 WorkerChoiceStrategies
.WEIGHTED_ROUND_ROBIN
310 workerChoiceStrategyContext
.workerChoiceStrategies
.get(
311 WorkerChoiceStrategies
.WEIGHTED_ROUND_ROBIN
313 ).toBeInstanceOf(WeightedRoundRobinWorkerChoiceStrategy
)
314 expect(workerChoiceStrategyContext
.workerChoiceStrategyType
).toBe(
315 WorkerChoiceStrategies
.WEIGHTED_ROUND_ROBIN
319 it('Verify that setWorkerChoiceStrategy() works with WEIGHTED_ROUND_ROBIN and dynamic pool', () => {
320 const workerChoiceStrategyContext
= new WorkerChoiceStrategyContext(
324 workerChoiceStrategyContext
.workerChoiceStrategies
.get(
325 WorkerChoiceStrategies
.WEIGHTED_ROUND_ROBIN
328 workerChoiceStrategyContext
.setWorkerChoiceStrategy(
329 WorkerChoiceStrategies
.WEIGHTED_ROUND_ROBIN
332 workerChoiceStrategyContext
.workerChoiceStrategies
.get(
333 WorkerChoiceStrategies
.WEIGHTED_ROUND_ROBIN
335 ).toBeInstanceOf(WeightedRoundRobinWorkerChoiceStrategy
)
336 expect(workerChoiceStrategyContext
.workerChoiceStrategyType
).toBe(
337 WorkerChoiceStrategies
.WEIGHTED_ROUND_ROBIN