build(deps-dev): apply updates
[poolifier.git] / tests / pools / selection-strategies / worker-choice-strategy-context.test.mjs
CommitLineData
a074ffee
JB
1import { expect } from 'expect'
2import { createStubInstance, restore, stub } from 'sinon'
ded253e2 3
a074ffee 4import {
40ad1d27 5 DynamicThreadPool,
a074ffee 6 FixedThreadPool,
40ad1d27 7 WorkerChoiceStrategies
d35e5717 8} from '../../../lib/index.cjs'
ded253e2
JB
9import { FairShareWorkerChoiceStrategy } from '../../../lib/pools/selection-strategies/fair-share-worker-choice-strategy.cjs'
10import { InterleavedWeightedRoundRobinWorkerChoiceStrategy } from '../../../lib/pools/selection-strategies/interleaved-weighted-round-robin-worker-choice-strategy.cjs'
d35e5717
JB
11import { LeastBusyWorkerChoiceStrategy } from '../../../lib/pools/selection-strategies/least-busy-worker-choice-strategy.cjs'
12import { LeastEluWorkerChoiceStrategy } from '../../../lib/pools/selection-strategies/least-elu-worker-choice-strategy.cjs'
ded253e2
JB
13import { LeastUsedWorkerChoiceStrategy } from '../../../lib/pools/selection-strategies/least-used-worker-choice-strategy.cjs'
14import { RoundRobinWorkerChoiceStrategy } from '../../../lib/pools/selection-strategies/round-robin-worker-choice-strategy.cjs'
d35e5717 15import { WeightedRoundRobinWorkerChoiceStrategy } from '../../../lib/pools/selection-strategies/weighted-round-robin-worker-choice-strategy.cjs'
ded253e2 16import { WorkerChoiceStrategyContext } from '../../../lib/pools/selection-strategies/worker-choice-strategy-context.cjs'
40ad1d27
JB
17
18describe('Worker choice strategy context test suite', () => {
c15273f2
JB
19 const min = 1
20 const max = 3
40ad1d27 21 let fixedPool, dynamicPool
c15273f2
JB
22
23 before(() => {
24 fixedPool = new FixedThreadPool(
25 max,
b2fd3f4a 26 './tests/worker-files/thread/testWorker.mjs'
c15273f2
JB
27 )
28 dynamicPool = new DynamicThreadPool(
29 min,
30 max,
b2fd3f4a 31 './tests/worker-files/thread/testWorker.mjs'
c15273f2 32 )
40ad1d27
JB
33 })
34
35 afterEach(() => {
a074ffee 36 restore()
40ad1d27
JB
37 })
38
fd7ebd49
JB
39 after(async () => {
40 await fixedPool.destroy()
41 await dynamicPool.destroy()
c15273f2
JB
42 })
43
2285a040 44 it('Verify that constructor() initializes the context with all the available worker choice strategies', () => {
39618ede
JB
45 let workerChoiceStrategyContext = new WorkerChoiceStrategyContext(fixedPool)
46 expect(workerChoiceStrategyContext.workerChoiceStrategies.size).toBe(
47 Object.keys(WorkerChoiceStrategies).length
2285a040 48 )
39618ede 49 workerChoiceStrategyContext = new WorkerChoiceStrategyContext(dynamicPool)
2285a040
JB
50 expect(workerChoiceStrategyContext.workerChoiceStrategies.size).toBe(
51 Object.keys(WorkerChoiceStrategies).length
52 )
53 })
54
39618ede
JB
55 it('Verify that constructor() initializes the context with retries attribute properly set', () => {
56 let workerChoiceStrategyContext = new WorkerChoiceStrategyContext(fixedPool)
57 expect(workerChoiceStrategyContext.retries).toBe(fixedPool.info.maxSize * 2)
58 workerChoiceStrategyContext = new WorkerChoiceStrategyContext(dynamicPool)
59 expect(workerChoiceStrategyContext.retries).toBe(
60 dynamicPool.info.maxSize * 2
61 )
62 })
63
4ba8492f 64 it('Verify that execute() throws error if null or undefined is returned after retries', () => {
527e715f
JB
65 const workerChoiceStrategyContext = new WorkerChoiceStrategyContext(
66 fixedPool
67 )
6ff68506
JB
68 expect(workerChoiceStrategyContext.workerChoiceStrategy).toBe(
69 WorkerChoiceStrategies.ROUND_ROBIN
70 )
33d2304b 71 const workerChoiceStrategyUndefinedStub = createStubInstance(
527e715f
JB
72 RoundRobinWorkerChoiceStrategy,
73 {
a074ffee 74 choose: stub().returns(undefined)
527e715f
JB
75 }
76 )
527e715f
JB
77 workerChoiceStrategyContext.workerChoiceStrategies.set(
78 workerChoiceStrategyContext.workerChoiceStrategy,
33d2304b 79 workerChoiceStrategyUndefinedStub
fa418e12 80 )
948faff7 81 expect(() => workerChoiceStrategyContext.execute()).toThrow(
26ce26ca 82 new Error(
39618ede 83 `Worker node key chosen is null or undefined after ${workerChoiceStrategyContext.retries} retries`
26ce26ca 84 )
fa418e12 85 )
6ff68506
JB
86 const workerChoiceStrategyNullStub = createStubInstance(
87 RoundRobinWorkerChoiceStrategy,
88 {
6ff68506
JB
89 choose: stub().returns(null)
90 }
91 )
fa418e12
JB
92 workerChoiceStrategyContext.workerChoiceStrategies.set(
93 workerChoiceStrategyContext.workerChoiceStrategy,
33d2304b 94 workerChoiceStrategyNullStub
527e715f 95 )
948faff7 96 expect(() => workerChoiceStrategyContext.execute()).toThrow(
26ce26ca 97 new Error(
39618ede 98 `Worker node key chosen is null or undefined after ${workerChoiceStrategyContext.retries} retries`
26ce26ca 99 )
527e715f
JB
100 )
101 })
102
21f2ae12 103 it('Verify that execute() retry until a worker node is chosen', () => {
fb5a7307
JB
104 const workerChoiceStrategyContext = new WorkerChoiceStrategyContext(
105 fixedPool
106 )
107 const workerChoiceStrategyStub = createStubInstance(
108 RoundRobinWorkerChoiceStrategy,
109 {
21f2ae12 110 choose: stub()
fb5a7307 111 .onCall(0)
21f2ae12 112 .returns(undefined)
fb5a7307 113 .onCall(1)
21f2ae12 114 .returns(undefined)
fb5a7307 115 .onCall(2)
21f2ae12 116 .returns(undefined)
fb5a7307 117 .onCall(3)
21f2ae12 118 .returns(undefined)
fb5a7307 119 .onCall(4)
21f2ae12
JB
120 .returns(undefined)
121 .returns(1)
fb5a7307
JB
122 }
123 )
124 expect(workerChoiceStrategyContext.workerChoiceStrategy).toBe(
125 WorkerChoiceStrategies.ROUND_ROBIN
126 )
127 workerChoiceStrategyContext.workerChoiceStrategies.set(
128 workerChoiceStrategyContext.workerChoiceStrategy,
129 workerChoiceStrategyStub
130 )
131 const chosenWorkerKey = workerChoiceStrategyContext.execute()
fb5a7307
JB
132 expect(
133 workerChoiceStrategyContext.workerChoiceStrategies.get(
134 workerChoiceStrategyContext.workerChoiceStrategy
135 ).choose.callCount
21f2ae12 136 ).toBe(6)
fb5a7307
JB
137 expect(chosenWorkerKey).toBe(1)
138 })
139
21f2ae12
JB
140 it('Verify that execute() return the worker node key chosen by the strategy with fixed pool', () => {
141 const workerChoiceStrategyContext = new WorkerChoiceStrategyContext(
142 fixedPool
143 )
144 const workerChoiceStrategyStub = createStubInstance(
145 RoundRobinWorkerChoiceStrategy,
146 {
147 choose: stub().returns(0)
148 }
149 )
150 expect(workerChoiceStrategyContext.workerChoiceStrategy).toBe(
151 WorkerChoiceStrategies.ROUND_ROBIN
152 )
153 workerChoiceStrategyContext.workerChoiceStrategies.set(
154 workerChoiceStrategyContext.workerChoiceStrategy,
155 workerChoiceStrategyStub
156 )
157 const chosenWorkerKey = workerChoiceStrategyContext.execute()
158 expect(
159 workerChoiceStrategyContext.workerChoiceStrategies.get(
160 workerChoiceStrategyContext.workerChoiceStrategy
161 ).choose.calledOnce
162 ).toBe(true)
163 expect(chosenWorkerKey).toBe(0)
164 })
165
fb5a7307 166 it('Verify that execute() return the worker node key chosen by the strategy with dynamic pool', () => {
40ad1d27
JB
167 const workerChoiceStrategyContext = new WorkerChoiceStrategyContext(
168 dynamicPool
169 )
33d2304b 170 const workerChoiceStrategyStub = createStubInstance(
40ad1d27
JB
171 RoundRobinWorkerChoiceStrategy,
172 {
a074ffee 173 choose: stub().returns(0)
40ad1d27
JB
174 }
175 )
d710242d 176 expect(workerChoiceStrategyContext.workerChoiceStrategy).toBe(
95c83464
JB
177 WorkerChoiceStrategies.ROUND_ROBIN
178 )
179 workerChoiceStrategyContext.workerChoiceStrategies.set(
d710242d 180 workerChoiceStrategyContext.workerChoiceStrategy,
33d2304b 181 workerChoiceStrategyStub
95c83464 182 )
c923ce56 183 const chosenWorkerKey = workerChoiceStrategyContext.execute()
40ad1d27 184 expect(
95c83464 185 workerChoiceStrategyContext.workerChoiceStrategies.get(
d710242d 186 workerChoiceStrategyContext.workerChoiceStrategy
95c83464 187 ).choose.calledOnce
40ad1d27 188 ).toBe(true)
c923ce56 189 expect(chosenWorkerKey).toBe(0)
40ad1d27
JB
190 })
191
192 it('Verify that setWorkerChoiceStrategy() works with ROUND_ROBIN and fixed pool', () => {
594bfb84 193 const workerChoiceStrategy = WorkerChoiceStrategies.ROUND_ROBIN
40ad1d27
JB
194 const workerChoiceStrategyContext = new WorkerChoiceStrategyContext(
195 fixedPool
196 )
95c83464
JB
197 expect(
198 workerChoiceStrategyContext.workerChoiceStrategies.get(
594bfb84 199 workerChoiceStrategy
95c83464
JB
200 )
201 ).toBeInstanceOf(RoundRobinWorkerChoiceStrategy)
d710242d 202 expect(workerChoiceStrategyContext.workerChoiceStrategy).toBe(
594bfb84 203 workerChoiceStrategy
40ad1d27 204 )
594bfb84 205 workerChoiceStrategyContext.setWorkerChoiceStrategy(workerChoiceStrategy)
95c83464
JB
206 expect(
207 workerChoiceStrategyContext.workerChoiceStrategies.get(
594bfb84 208 workerChoiceStrategy
95c83464
JB
209 )
210 ).toBeInstanceOf(RoundRobinWorkerChoiceStrategy)
d710242d 211 expect(workerChoiceStrategyContext.workerChoiceStrategy).toBe(
594bfb84 212 workerChoiceStrategy
b2b1d84e 213 )
40ad1d27
JB
214 })
215
23ff945a 216 it('Verify that setWorkerChoiceStrategy() works with ROUND_ROBIN and dynamic pool', () => {
594bfb84 217 const workerChoiceStrategy = WorkerChoiceStrategies.ROUND_ROBIN
40ad1d27
JB
218 const workerChoiceStrategyContext = new WorkerChoiceStrategyContext(
219 dynamicPool
220 )
95c83464
JB
221 expect(
222 workerChoiceStrategyContext.workerChoiceStrategies.get(
594bfb84 223 workerChoiceStrategy
95c83464
JB
224 )
225 ).toBeInstanceOf(RoundRobinWorkerChoiceStrategy)
d710242d 226 expect(workerChoiceStrategyContext.workerChoiceStrategy).toBe(
594bfb84 227 workerChoiceStrategy
40ad1d27 228 )
594bfb84 229 workerChoiceStrategyContext.setWorkerChoiceStrategy(workerChoiceStrategy)
95c83464
JB
230 expect(
231 workerChoiceStrategyContext.workerChoiceStrategies.get(
594bfb84 232 workerChoiceStrategy
95c83464
JB
233 )
234 ).toBeInstanceOf(RoundRobinWorkerChoiceStrategy)
d710242d 235 expect(workerChoiceStrategyContext.workerChoiceStrategy).toBe(
594bfb84 236 workerChoiceStrategy
b2b1d84e 237 )
40ad1d27
JB
238 })
239
e4543b14
JB
240 it('Verify that setWorkerChoiceStrategy() works with LEAST_USED and fixed pool', () => {
241 const workerChoiceStrategy = WorkerChoiceStrategies.LEAST_USED
40ad1d27
JB
242 const workerChoiceStrategyContext = new WorkerChoiceStrategyContext(
243 fixedPool
244 )
594bfb84 245 workerChoiceStrategyContext.setWorkerChoiceStrategy(workerChoiceStrategy)
95c83464
JB
246 expect(
247 workerChoiceStrategyContext.workerChoiceStrategies.get(
594bfb84 248 workerChoiceStrategy
95c83464 249 )
e4543b14 250 ).toBeInstanceOf(LeastUsedWorkerChoiceStrategy)
d710242d 251 expect(workerChoiceStrategyContext.workerChoiceStrategy).toBe(
594bfb84 252 workerChoiceStrategy
b2b1d84e 253 )
40ad1d27
JB
254 })
255
e4543b14
JB
256 it('Verify that setWorkerChoiceStrategy() works with LEAST_USED and dynamic pool', () => {
257 const workerChoiceStrategy = WorkerChoiceStrategies.LEAST_USED
40ad1d27
JB
258 const workerChoiceStrategyContext = new WorkerChoiceStrategyContext(
259 dynamicPool
260 )
594bfb84 261 workerChoiceStrategyContext.setWorkerChoiceStrategy(workerChoiceStrategy)
95c83464
JB
262 expect(
263 workerChoiceStrategyContext.workerChoiceStrategies.get(
594bfb84 264 workerChoiceStrategy
95c83464 265 )
e4543b14 266 ).toBeInstanceOf(LeastUsedWorkerChoiceStrategy)
d710242d 267 expect(workerChoiceStrategyContext.workerChoiceStrategy).toBe(
594bfb84 268 workerChoiceStrategy
b2b1d84e 269 )
168c526f
JB
270 })
271
e4543b14
JB
272 it('Verify that setWorkerChoiceStrategy() works with LEAST_BUSY and fixed pool', () => {
273 const workerChoiceStrategy = WorkerChoiceStrategies.LEAST_BUSY
168c526f
JB
274 const workerChoiceStrategyContext = new WorkerChoiceStrategyContext(
275 fixedPool
276 )
594bfb84 277 workerChoiceStrategyContext.setWorkerChoiceStrategy(workerChoiceStrategy)
95c83464
JB
278 expect(
279 workerChoiceStrategyContext.workerChoiceStrategies.get(
594bfb84 280 workerChoiceStrategy
95c83464 281 )
e4543b14 282 ).toBeInstanceOf(LeastBusyWorkerChoiceStrategy)
d710242d 283 expect(workerChoiceStrategyContext.workerChoiceStrategy).toBe(
594bfb84 284 workerChoiceStrategy
b2b1d84e 285 )
168c526f
JB
286 })
287
e4543b14
JB
288 it('Verify that setWorkerChoiceStrategy() works with LEAST_BUSY and dynamic pool', () => {
289 const workerChoiceStrategy = WorkerChoiceStrategies.LEAST_BUSY
168c526f
JB
290 const workerChoiceStrategyContext = new WorkerChoiceStrategyContext(
291 dynamicPool
292 )
594bfb84 293 workerChoiceStrategyContext.setWorkerChoiceStrategy(workerChoiceStrategy)
95c83464
JB
294 expect(
295 workerChoiceStrategyContext.workerChoiceStrategies.get(
594bfb84 296 workerChoiceStrategy
95c83464 297 )
e4543b14 298 ).toBeInstanceOf(LeastBusyWorkerChoiceStrategy)
d710242d 299 expect(workerChoiceStrategyContext.workerChoiceStrategy).toBe(
594bfb84 300 workerChoiceStrategy
b2b1d84e 301 )
40ad1d27 302 })
23ff945a 303
a1c82d5d
JB
304 it('Verify that setWorkerChoiceStrategy() works with LEAST_ELU and fixed pool', () => {
305 const workerChoiceStrategy = WorkerChoiceStrategies.LEAST_ELU
306 const workerChoiceStrategyContext = new WorkerChoiceStrategyContext(
307 fixedPool
308 )
309 workerChoiceStrategyContext.setWorkerChoiceStrategy(workerChoiceStrategy)
310 expect(
311 workerChoiceStrategyContext.workerChoiceStrategies.get(
312 workerChoiceStrategy
313 )
314 ).toBeInstanceOf(LeastEluWorkerChoiceStrategy)
315 expect(workerChoiceStrategyContext.workerChoiceStrategy).toBe(
316 workerChoiceStrategy
317 )
318 })
319
320 it('Verify that setWorkerChoiceStrategy() works with LEAST_ELU and dynamic pool', () => {
321 const workerChoiceStrategy = WorkerChoiceStrategies.LEAST_ELU
322 const workerChoiceStrategyContext = new WorkerChoiceStrategyContext(
323 dynamicPool
324 )
325 workerChoiceStrategyContext.setWorkerChoiceStrategy(workerChoiceStrategy)
326 expect(
327 workerChoiceStrategyContext.workerChoiceStrategies.get(
328 workerChoiceStrategy
329 )
330 ).toBeInstanceOf(LeastEluWorkerChoiceStrategy)
331 expect(workerChoiceStrategyContext.workerChoiceStrategy).toBe(
332 workerChoiceStrategy
333 )
334 })
335
23ff945a 336 it('Verify that setWorkerChoiceStrategy() works with FAIR_SHARE and fixed pool', () => {
594bfb84 337 const workerChoiceStrategy = WorkerChoiceStrategies.FAIR_SHARE
23ff945a
JB
338 const workerChoiceStrategyContext = new WorkerChoiceStrategyContext(
339 fixedPool
340 )
594bfb84 341 workerChoiceStrategyContext.setWorkerChoiceStrategy(workerChoiceStrategy)
95c83464
JB
342 expect(
343 workerChoiceStrategyContext.workerChoiceStrategies.get(
594bfb84 344 workerChoiceStrategy
95c83464
JB
345 )
346 ).toBeInstanceOf(FairShareWorkerChoiceStrategy)
d710242d 347 expect(workerChoiceStrategyContext.workerChoiceStrategy).toBe(
594bfb84 348 workerChoiceStrategy
b2b1d84e 349 )
23ff945a
JB
350 })
351
352 it('Verify that setWorkerChoiceStrategy() works with FAIR_SHARE and dynamic pool', () => {
594bfb84 353 const workerChoiceStrategy = WorkerChoiceStrategies.FAIR_SHARE
23ff945a
JB
354 const workerChoiceStrategyContext = new WorkerChoiceStrategyContext(
355 dynamicPool
356 )
594bfb84 357 workerChoiceStrategyContext.setWorkerChoiceStrategy(workerChoiceStrategy)
95c83464
JB
358 expect(
359 workerChoiceStrategyContext.workerChoiceStrategies.get(
594bfb84 360 workerChoiceStrategy
95c83464
JB
361 )
362 ).toBeInstanceOf(FairShareWorkerChoiceStrategy)
d710242d 363 expect(workerChoiceStrategyContext.workerChoiceStrategy).toBe(
594bfb84 364 workerChoiceStrategy
b2b1d84e 365 )
23ff945a
JB
366 })
367
c15273f2 368 it('Verify that setWorkerChoiceStrategy() works with WEIGHTED_ROUND_ROBIN and fixed pool', () => {
594bfb84 369 const workerChoiceStrategy = WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN
c15273f2
JB
370 const workerChoiceStrategyContext = new WorkerChoiceStrategyContext(
371 fixedPool
372 )
594bfb84 373 workerChoiceStrategyContext.setWorkerChoiceStrategy(workerChoiceStrategy)
95c83464
JB
374 expect(
375 workerChoiceStrategyContext.workerChoiceStrategies.get(
594bfb84 376 workerChoiceStrategy
95c83464
JB
377 )
378 ).toBeInstanceOf(WeightedRoundRobinWorkerChoiceStrategy)
d710242d 379 expect(workerChoiceStrategyContext.workerChoiceStrategy).toBe(
594bfb84 380 workerChoiceStrategy
b2b1d84e 381 )
c15273f2 382 })
23ff945a 383
c15273f2 384 it('Verify that setWorkerChoiceStrategy() works with WEIGHTED_ROUND_ROBIN and dynamic pool', () => {
594bfb84 385 const workerChoiceStrategy = WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN
c15273f2
JB
386 const workerChoiceStrategyContext = new WorkerChoiceStrategyContext(
387 dynamicPool
388 )
594bfb84 389 workerChoiceStrategyContext.setWorkerChoiceStrategy(workerChoiceStrategy)
95c83464
JB
390 expect(
391 workerChoiceStrategyContext.workerChoiceStrategies.get(
594bfb84 392 workerChoiceStrategy
95c83464
JB
393 )
394 ).toBeInstanceOf(WeightedRoundRobinWorkerChoiceStrategy)
d710242d 395 expect(workerChoiceStrategyContext.workerChoiceStrategy).toBe(
594bfb84 396 workerChoiceStrategy
b2b1d84e 397 )
c15273f2 398 })
2fc5cae3 399
8beab0d3
JB
400 it('Verify that setWorkerChoiceStrategy() works with INTERLEAVED_WEIGHTED_ROUND_ROBIN and fixed pool', () => {
401 const workerChoiceStrategy =
402 WorkerChoiceStrategies.INTERLEAVED_WEIGHTED_ROUND_ROBIN
403 const workerChoiceStrategyContext = new WorkerChoiceStrategyContext(
404 fixedPool
405 )
406 workerChoiceStrategyContext.setWorkerChoiceStrategy(workerChoiceStrategy)
407 expect(
408 workerChoiceStrategyContext.workerChoiceStrategies.get(
409 workerChoiceStrategy
410 )
411 ).toBeInstanceOf(InterleavedWeightedRoundRobinWorkerChoiceStrategy)
412 expect(workerChoiceStrategyContext.workerChoiceStrategy).toBe(
413 workerChoiceStrategy
414 )
415 })
416
417 it('Verify that setWorkerChoiceStrategy() works with INTERLEAVED_WEIGHTED_ROUND_ROBIN and dynamic pool', () => {
418 const workerChoiceStrategy =
419 WorkerChoiceStrategies.INTERLEAVED_WEIGHTED_ROUND_ROBIN
420 const workerChoiceStrategyContext = new WorkerChoiceStrategyContext(
421 dynamicPool
422 )
423 workerChoiceStrategyContext.setWorkerChoiceStrategy(workerChoiceStrategy)
424 expect(
425 workerChoiceStrategyContext.workerChoiceStrategies.get(
426 workerChoiceStrategy
427 )
428 ).toBeInstanceOf(InterleavedWeightedRoundRobinWorkerChoiceStrategy)
429 expect(workerChoiceStrategyContext.workerChoiceStrategy).toBe(
430 workerChoiceStrategy
431 )
432 })
433
9e45c2c4 434 it('Verify that worker choice strategy options enable median runtime pool statistics', () => {
2fc5cae3
JB
435 const wwrWorkerChoiceStrategy = WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN
436 let workerChoiceStrategyContext = new WorkerChoiceStrategyContext(
437 fixedPool,
438 wwrWorkerChoiceStrategy,
439 {
932fc8be 440 runTime: { median: true }
2fc5cae3
JB
441 }
442 )
87de9ff5 443 expect(
932fc8be
JB
444 workerChoiceStrategyContext.getTaskStatisticsRequirements().runTime
445 .average
87de9ff5
JB
446 ).toBe(false)
447 expect(
932fc8be 448 workerChoiceStrategyContext.getTaskStatisticsRequirements().runTime.median
87de9ff5 449 ).toBe(true)
2fc5cae3
JB
450 workerChoiceStrategyContext = new WorkerChoiceStrategyContext(
451 dynamicPool,
452 wwrWorkerChoiceStrategy,
453 {
932fc8be 454 runTime: { median: true }
2fc5cae3
JB
455 }
456 )
87de9ff5 457 expect(
932fc8be
JB
458 workerChoiceStrategyContext.getTaskStatisticsRequirements().runTime
459 .average
87de9ff5
JB
460 ).toBe(false)
461 expect(
932fc8be 462 workerChoiceStrategyContext.getTaskStatisticsRequirements().runTime.median
87de9ff5 463 ).toBe(true)
2fc5cae3
JB
464 const fsWorkerChoiceStrategy = WorkerChoiceStrategies.FAIR_SHARE
465 workerChoiceStrategyContext = new WorkerChoiceStrategyContext(
466 fixedPool,
467 fsWorkerChoiceStrategy,
468 {
932fc8be 469 runTime: { median: true }
2fc5cae3
JB
470 }
471 )
87de9ff5 472 expect(
932fc8be
JB
473 workerChoiceStrategyContext.getTaskStatisticsRequirements().runTime
474 .average
87de9ff5
JB
475 ).toBe(false)
476 expect(
932fc8be 477 workerChoiceStrategyContext.getTaskStatisticsRequirements().runTime.median
87de9ff5 478 ).toBe(true)
2fc5cae3
JB
479 workerChoiceStrategyContext = new WorkerChoiceStrategyContext(
480 dynamicPool,
481 fsWorkerChoiceStrategy,
482 {
932fc8be 483 runTime: { median: true }
2fc5cae3
JB
484 }
485 )
87de9ff5 486 expect(
932fc8be
JB
487 workerChoiceStrategyContext.getTaskStatisticsRequirements().runTime
488 .average
87de9ff5
JB
489 ).toBe(false)
490 expect(
932fc8be 491 workerChoiceStrategyContext.getTaskStatisticsRequirements().runTime.median
87de9ff5 492 ).toBe(true)
2fc5cae3 493 })
40ad1d27 494})