1 const { expect
} = require('expect')
3 WorkerChoiceStrategies
,
7 } = require('../../../lib')
9 describe('Selection strategies test suite', () => {
13 it('Verify that WorkerChoiceStrategies enumeration provides string values', () => {
14 expect(WorkerChoiceStrategies
.ROUND_ROBIN
).toBe('ROUND_ROBIN')
15 expect(WorkerChoiceStrategies
.LESS_USED
).toBe('LESS_USED')
16 expect(WorkerChoiceStrategies
.LESS_BUSY
).toBe('LESS_BUSY')
17 expect(WorkerChoiceStrategies
.FAIR_SHARE
).toBe('FAIR_SHARE')
18 expect(WorkerChoiceStrategies
.WEIGHTED_ROUND_ROBIN
).toBe(
19 'WEIGHTED_ROUND_ROBIN'
23 it('Verify ROUND_ROBIN strategy is the default at pool creation', async () => {
24 const pool
= new DynamicThreadPool(
27 './tests/worker-files/thread/testWorker.js'
29 expect(pool
.opts
.workerChoiceStrategy
).toBe(
30 WorkerChoiceStrategies
.ROUND_ROBIN
32 // We need to clean up the resources after our test
36 it('Verify available strategies are taken at pool creation', async () => {
37 for (const workerChoiceStrategy
of Object
.values(WorkerChoiceStrategies
)) {
38 const pool
= new FixedThreadPool(
40 './tests/worker-files/thread/testWorker.js',
41 { workerChoiceStrategy
}
43 expect(pool
.opts
.workerChoiceStrategy
).toBe(workerChoiceStrategy
)
44 expect(pool
.workerChoiceStrategyContext
.workerChoiceStrategy
).toBe(
51 it('Verify available strategies can be set after pool creation', async () => {
52 for (const workerChoiceStrategy
of Object
.values(WorkerChoiceStrategies
)) {
53 const pool
= new DynamicThreadPool(
56 './tests/worker-files/thread/testWorker.js'
58 pool
.setWorkerChoiceStrategy(workerChoiceStrategy
)
59 expect(pool
.opts
.workerChoiceStrategy
).toBe(workerChoiceStrategy
)
60 expect(pool
.workerChoiceStrategyContext
.workerChoiceStrategy
).toBe(
67 it('Verify available strategies default internals at pool creation', async () => {
68 const pool
= new FixedThreadPool(
70 './tests/worker-files/thread/testWorker.js'
72 for (const workerChoiceStrategy
of Object
.values(WorkerChoiceStrategies
)) {
73 if (workerChoiceStrategy
=== WorkerChoiceStrategies
.ROUND_ROBIN
) {
75 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
79 } else if (workerChoiceStrategy
=== WorkerChoiceStrategies
.FAIR_SHARE
) {
81 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
83 ).workersVirtualTaskTimestamp
84 ).toBeInstanceOf(Array
)
86 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
88 ).workersVirtualTaskTimestamp
.length
91 workerChoiceStrategy
=== WorkerChoiceStrategies
.WEIGHTED_ROUND_ROBIN
94 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
99 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
101 ).defaultWorkerWeight
104 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
106 ).workerVirtualTaskRunTime
113 it('Verify ROUND_ROBIN strategy default tasks usage statistics requirements', async () => {
114 const workerChoiceStrategy
= WorkerChoiceStrategies
.ROUND_ROBIN
115 let pool
= new FixedThreadPool(
117 './tests/worker-files/thread/testWorker.js',
118 { workerChoiceStrategy
}
121 pool
.workerChoiceStrategyContext
.getRequiredStatistics().runTime
124 pool
.workerChoiceStrategyContext
.getRequiredStatistics().avgRunTime
127 pool
.workerChoiceStrategyContext
.getRequiredStatistics().medRunTime
130 pool
= new DynamicThreadPool(
133 './tests/worker-files/thread/testWorker.js',
134 { workerChoiceStrategy
}
137 pool
.workerChoiceStrategyContext
.getRequiredStatistics().runTime
140 pool
.workerChoiceStrategyContext
.getRequiredStatistics().avgRunTime
143 pool
.workerChoiceStrategyContext
.getRequiredStatistics().medRunTime
145 // We need to clean up the resources after our test
149 it('Verify ROUND_ROBIN strategy can be run in a fixed pool', async () => {
150 const pool
= new FixedThreadPool(
152 './tests/worker-files/thread/testWorker.js',
153 { workerChoiceStrategy
: WorkerChoiceStrategies
.ROUND_ROBIN
}
155 // TODO: Create a better test to cover `RoundRobinWorkerChoiceStrategy#choose`
157 const maxMultiplier
= 2
158 for (let i
= 0; i
< max
* maxMultiplier
; i
++) {
159 promises
.push(pool
.execute())
161 await Promise
.all(promises
)
162 // We need to clean up the resources after our test
166 it('Verify ROUND_ROBIN strategy can be run in a dynamic pool', async () => {
167 const pool
= new DynamicThreadPool(
170 './tests/worker-files/thread/testWorker.js',
171 { workerChoiceStrategy
: WorkerChoiceStrategies
.ROUND_ROBIN
}
173 // TODO: Create a better test to cover `RoundRobinWorkerChoiceStrategy#choose`
175 const maxMultiplier
= 2
176 for (let i
= 0; i
< max
* maxMultiplier
; i
++) {
177 promises
.push(pool
.execute())
179 await Promise
.all(promises
)
180 // We need to clean up the resources after our test
184 it('Verify ROUND_ROBIN strategy runtime behavior', async () => {
185 const workerChoiceStrategy
= WorkerChoiceStrategies
.ROUND_ROBIN
186 let pool
= new FixedClusterPool(
188 './tests/worker-files/cluster/testWorker.js',
189 { workerChoiceStrategy
}
191 let results
= new Set()
192 for (let i
= 0; i
< max
; i
++) {
193 results
.add(pool
.chooseWorkerNode()[1].worker
.id
)
195 expect(results
.size
).toBe(max
)
197 pool
= new FixedThreadPool(
199 './tests/worker-files/thread/testWorker.js',
200 { workerChoiceStrategy
}
203 for (let i
= 0; i
< max
; i
++) {
204 results
.add(pool
.chooseWorkerNode()[1].worker
.threadId
)
206 expect(results
.size
).toBe(max
)
210 it('Verify ROUND_ROBIN strategy internals are resets after setting it', async () => {
211 const workerChoiceStrategy
= WorkerChoiceStrategies
.ROUND_ROBIN
212 let pool
= new FixedThreadPool(
214 './tests/worker-files/thread/testWorker.js',
215 { workerChoiceStrategy
: WorkerChoiceStrategies
.WEIGHTED_ROUND_ROBIN
}
218 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
222 pool
.setWorkerChoiceStrategy(workerChoiceStrategy
)
224 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
225 pool
.workerChoiceStrategyContext
.workerChoiceStrategy
229 pool
= new DynamicThreadPool(
232 './tests/worker-files/thread/testWorker.js',
233 { workerChoiceStrategy
: WorkerChoiceStrategies
.WEIGHTED_ROUND_ROBIN
}
236 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
240 pool
.setWorkerChoiceStrategy(workerChoiceStrategy
)
242 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
243 pool
.workerChoiceStrategyContext
.workerChoiceStrategy
246 // We need to clean up the resources after our test
250 it('Verify LESS_USED strategy default tasks usage statistics requirements', async () => {
251 const workerChoiceStrategy
= WorkerChoiceStrategies
.LESS_USED
252 let pool
= new FixedThreadPool(
254 './tests/worker-files/thread/testWorker.js',
255 { workerChoiceStrategy
}
258 pool
.workerChoiceStrategyContext
.getRequiredStatistics().runTime
261 pool
.workerChoiceStrategyContext
.getRequiredStatistics().avgRunTime
264 pool
.workerChoiceStrategyContext
.getRequiredStatistics().medRunTime
267 pool
= new DynamicThreadPool(
270 './tests/worker-files/thread/testWorker.js',
271 { workerChoiceStrategy
}
274 pool
.workerChoiceStrategyContext
.getRequiredStatistics().runTime
277 pool
.workerChoiceStrategyContext
.getRequiredStatistics().avgRunTime
280 pool
.workerChoiceStrategyContext
.getRequiredStatistics().medRunTime
282 // We need to clean up the resources after our test
286 it('Verify LESS_USED strategy can be run in a fixed pool', async () => {
287 const pool
= new FixedThreadPool(
289 './tests/worker-files/thread/testWorker.js',
290 { workerChoiceStrategy
: WorkerChoiceStrategies
.LESS_USED
}
292 // TODO: Create a better test to cover `LessUsedWorkerChoiceStrategy#choose`
294 const maxMultiplier
= 2
295 for (let i
= 0; i
< max
* maxMultiplier
; i
++) {
296 promises
.push(pool
.execute())
298 await Promise
.all(promises
)
299 // We need to clean up the resources after our test
303 it('Verify LESS_USED strategy can be run in a dynamic pool', async () => {
304 const pool
= new DynamicThreadPool(
307 './tests/worker-files/thread/testWorker.js',
308 { workerChoiceStrategy
: WorkerChoiceStrategies
.LESS_USED
}
310 // TODO: Create a better test to cover `LessUsedWorkerChoiceStrategy#choose`
312 const maxMultiplier
= 2
313 for (let i
= 0; i
< max
* maxMultiplier
; i
++) {
314 promises
.push(pool
.execute())
316 await Promise
.all(promises
)
317 // We need to clean up the resources after our test
321 it('Verify LESS_BUSY strategy default tasks usage statistics requirements', async () => {
322 const workerChoiceStrategy
= WorkerChoiceStrategies
.LESS_BUSY
323 let pool
= new FixedThreadPool(
325 './tests/worker-files/thread/testWorker.js',
326 { workerChoiceStrategy
}
329 pool
.workerChoiceStrategyContext
.getRequiredStatistics().runTime
332 pool
.workerChoiceStrategyContext
.getRequiredStatistics().avgRunTime
335 pool
.workerChoiceStrategyContext
.getRequiredStatistics().medRunTime
338 pool
= new DynamicThreadPool(
341 './tests/worker-files/thread/testWorker.js',
342 { workerChoiceStrategy
}
345 pool
.workerChoiceStrategyContext
.getRequiredStatistics().runTime
348 pool
.workerChoiceStrategyContext
.getRequiredStatistics().avgRunTime
351 pool
.workerChoiceStrategyContext
.getRequiredStatistics().medRunTime
353 // We need to clean up the resources after our test
357 it('Verify LESS_BUSY strategy can be run in a fixed pool', async () => {
358 const pool
= new FixedThreadPool(
360 './tests/worker-files/thread/testWorker.js',
361 { workerChoiceStrategy
: WorkerChoiceStrategies
.LESS_BUSY
}
363 // TODO: Create a better test to cover `LessBusyWorkerChoiceStrategy#choose`
365 const maxMultiplier
= 2
366 for (let i
= 0; i
< max
* maxMultiplier
; i
++) {
367 promises
.push(pool
.execute())
369 await Promise
.all(promises
)
370 // We need to clean up the resources after our test
374 it('Verify LESS_BUSY strategy can be run in a dynamic pool', async () => {
375 const pool
= new DynamicThreadPool(
378 './tests/worker-files/thread/testWorker.js',
379 { workerChoiceStrategy
: WorkerChoiceStrategies
.LESS_BUSY
}
381 // TODO: Create a better test to cover `LessBusyWorkerChoiceStrategy#choose`
383 const maxMultiplier
= 2
384 for (let i
= 0; i
< max
* maxMultiplier
; i
++) {
385 promises
.push(pool
.execute())
387 await Promise
.all(promises
)
388 // We need to clean up the resources after our test
392 it('Verify FAIR_SHARE strategy default tasks usage statistics requirements', async () => {
393 const workerChoiceStrategy
= WorkerChoiceStrategies
.FAIR_SHARE
394 let pool
= new FixedThreadPool(
396 './tests/worker-files/thread/testWorker.js',
397 { workerChoiceStrategy
}
400 pool
.workerChoiceStrategyContext
.getRequiredStatistics().runTime
403 pool
.workerChoiceStrategyContext
.getRequiredStatistics().avgRunTime
406 pool
.workerChoiceStrategyContext
.getRequiredStatistics().medRunTime
409 pool
= new DynamicThreadPool(
412 './tests/worker-files/thread/testWorker.js',
413 { workerChoiceStrategy
}
416 pool
.workerChoiceStrategyContext
.getRequiredStatistics().runTime
419 pool
.workerChoiceStrategyContext
.getRequiredStatistics().avgRunTime
422 pool
.workerChoiceStrategyContext
.getRequiredStatistics().medRunTime
424 // We need to clean up the resources after our test
428 it('Verify FAIR_SHARE strategy can be run in a fixed pool', async () => {
429 const pool
= new FixedThreadPool(
431 './tests/worker-files/thread/testWorker.js',
432 { workerChoiceStrategy
: WorkerChoiceStrategies
.FAIR_SHARE
}
434 // TODO: Create a better test to cover `FairShareChoiceStrategy#choose`
436 const maxMultiplier
= 2
437 for (let i
= 0; i
< max
* maxMultiplier
; i
++) {
438 promises
.push(pool
.execute())
440 await Promise
.all(promises
)
442 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
443 pool
.workerChoiceStrategyContext
.workerChoiceStrategy
444 ).workersVirtualTaskTimestamp
.length
445 ).toBe(pool
.workerNodes
.length
)
446 // We need to clean up the resources after our test
450 it('Verify FAIR_SHARE strategy can be run in a dynamic pool', async () => {
451 const pool
= new DynamicThreadPool(
454 './tests/worker-files/thread/testWorker.js',
455 { workerChoiceStrategy
: WorkerChoiceStrategies
.FAIR_SHARE
}
457 // TODO: Create a better test to cover `FairShareChoiceStrategy#choose`
459 const maxMultiplier
= 2
460 for (let i
= 0; i
< max
* maxMultiplier
; i
++) {
461 promises
.push(pool
.execute())
463 await Promise
.all(promises
)
465 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
466 pool
.workerChoiceStrategyContext
.workerChoiceStrategy
467 ).workersVirtualTaskTimestamp
.length
468 ).toBe(pool
.workerNodes
.length
)
469 // We need to clean up the resources after our test
473 it('Verify FAIR_SHARE strategy can be run in a dynamic pool with median run time statistic', async () => {
474 const pool
= new DynamicThreadPool(
477 './tests/worker-files/thread/testWorker.js',
479 workerChoiceStrategy
: WorkerChoiceStrategies
.FAIR_SHARE
,
480 workerChoiceStrategyOptions
: {
485 // TODO: Create a better test to cover `FairShareChoiceStrategy#choose`
487 const maxMultiplier
= 2
488 for (let i
= 0; i
< max
* maxMultiplier
; i
++) {
489 promises
.push(pool
.execute())
491 await Promise
.all(promises
)
492 for (const workerNode
of pool
.workerNodes
) {
493 expect(workerNode
.tasksUsage
.avgRunTime
).toBeDefined()
494 expect(workerNode
.tasksUsage
.avgRunTime
).toBe(0)
495 expect(workerNode
.tasksUsage
.medRunTime
).toBeDefined()
496 expect(workerNode
.tasksUsage
.medRunTime
).toBeGreaterThan(0)
499 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
500 pool
.workerChoiceStrategyContext
.workerChoiceStrategy
501 ).workersVirtualTaskTimestamp
.length
502 ).toBe(pool
.workerNodes
.length
)
503 // We need to clean up the resources after our test
507 it('Verify FAIR_SHARE strategy internals are resets after setting it', async () => {
508 const workerChoiceStrategy
= WorkerChoiceStrategies
.FAIR_SHARE
509 let pool
= new FixedThreadPool(
511 './tests/worker-files/thread/testWorker.js'
514 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
516 ).workersVirtualTaskTimestamp
517 ).toBeInstanceOf(Array
)
519 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
521 ).workersVirtualTaskTimestamp
.length
523 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
525 ).workersVirtualTaskTimestamp
[0] = 0
527 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
529 ).workersVirtualTaskTimestamp
.length
531 pool
.setWorkerChoiceStrategy(workerChoiceStrategy
)
533 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
535 ).workersVirtualTaskTimestamp
536 ).toBeInstanceOf(Array
)
538 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
540 ).workersVirtualTaskTimestamp
.length
543 pool
= new DynamicThreadPool(
546 './tests/worker-files/thread/testWorker.js'
549 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
551 ).workersVirtualTaskTimestamp
552 ).toBeInstanceOf(Array
)
554 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
556 ).workersVirtualTaskTimestamp
.length
558 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
560 ).workersVirtualTaskTimestamp
[0] = 0
562 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
564 ).workersVirtualTaskTimestamp
.length
566 pool
.setWorkerChoiceStrategy(workerChoiceStrategy
)
568 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
570 ).workersVirtualTaskTimestamp
571 ).toBeInstanceOf(Array
)
573 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
575 ).workersVirtualTaskTimestamp
.length
577 // We need to clean up the resources after our test
581 it('Verify WEIGHTED_ROUND_ROBIN strategy default tasks usage statistics requirements', async () => {
582 const workerChoiceStrategy
= WorkerChoiceStrategies
.WEIGHTED_ROUND_ROBIN
583 let pool
= new FixedThreadPool(
585 './tests/worker-files/thread/testWorker.js',
586 { workerChoiceStrategy
}
589 pool
.workerChoiceStrategyContext
.getRequiredStatistics().runTime
592 pool
.workerChoiceStrategyContext
.getRequiredStatistics().avgRunTime
595 pool
.workerChoiceStrategyContext
.getRequiredStatistics().medRunTime
598 pool
= new DynamicThreadPool(
601 './tests/worker-files/thread/testWorker.js',
602 { workerChoiceStrategy
}
605 pool
.workerChoiceStrategyContext
.getRequiredStatistics().runTime
608 pool
.workerChoiceStrategyContext
.getRequiredStatistics().avgRunTime
611 pool
.workerChoiceStrategyContext
.getRequiredStatistics().medRunTime
613 // We need to clean up the resources after our test
617 it('Verify WEIGHTED_ROUND_ROBIN strategy can be run in a fixed pool', async () => {
618 const pool
= new FixedThreadPool(
620 './tests/worker-files/thread/testWorker.js',
621 { workerChoiceStrategy
: WorkerChoiceStrategies
.WEIGHTED_ROUND_ROBIN
}
623 // TODO: Create a better test to cover `WeightedRoundRobinWorkerChoiceStrategy#choose`
625 const maxMultiplier
= 2
626 for (let i
= 0; i
< max
* maxMultiplier
; i
++) {
627 promises
.push(pool
.execute())
629 await Promise
.all(promises
)
631 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
632 pool
.workerChoiceStrategyContext
.workerChoiceStrategy
633 ).defaultWorkerWeight
636 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
637 pool
.workerChoiceStrategyContext
.workerChoiceStrategy
638 ).workerVirtualTaskRunTime
639 ).toBeGreaterThanOrEqual(0)
640 // We need to clean up the resources after our test
644 it('Verify WEIGHTED_ROUND_ROBIN strategy can be run in a dynamic pool', async () => {
645 const pool
= new DynamicThreadPool(
648 './tests/worker-files/thread/testWorker.js',
649 { workerChoiceStrategy
: WorkerChoiceStrategies
.WEIGHTED_ROUND_ROBIN
}
651 // TODO: Create a better test to cover `WeightedRoundRobinWorkerChoiceStrategy#choose`
653 const maxMultiplier
=
654 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
655 pool
.workerChoiceStrategyContext
.workerChoiceStrategy
656 ).defaultWorkerWeight
* 50
657 for (let i
= 0; i
< max
* maxMultiplier
; i
++) {
658 promises
.push(pool
.execute())
660 await Promise
.all(promises
)
662 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
663 pool
.workerChoiceStrategyContext
.workerChoiceStrategy
664 ).defaultWorkerWeight
667 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
668 pool
.workerChoiceStrategyContext
.workerChoiceStrategy
669 ).workerVirtualTaskRunTime
670 ).toBeGreaterThanOrEqual(0)
671 // We need to clean up the resources after our test
675 it('Verify WEIGHTED_ROUND_ROBIN strategy can be run in a dynamic pool with median run time statistic', async () => {
676 const pool
= new DynamicThreadPool(
679 './tests/worker-files/thread/testWorker.js',
681 workerChoiceStrategy
: WorkerChoiceStrategies
.WEIGHTED_ROUND_ROBIN
,
682 workerChoiceStrategyOptions
: {
687 // TODO: Create a better test to cover `WeightedRoundRobinWorkerChoiceStrategy#choose`
689 const maxMultiplier
= 2
690 for (let i
= 0; i
< max
* maxMultiplier
; i
++) {
691 promises
.push(pool
.execute())
693 await Promise
.all(promises
)
694 for (const workerNode
of pool
.workerNodes
) {
695 expect(workerNode
.tasksUsage
.avgRunTime
).toBeDefined()
696 expect(workerNode
.tasksUsage
.avgRunTime
).toBe(0)
697 expect(workerNode
.tasksUsage
.medRunTime
).toBeDefined()
698 expect(workerNode
.tasksUsage
.medRunTime
).toBeGreaterThan(0)
701 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
702 pool
.workerChoiceStrategyContext
.workerChoiceStrategy
703 ).defaultWorkerWeight
706 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
707 pool
.workerChoiceStrategyContext
.workerChoiceStrategy
708 ).workerVirtualTaskRunTime
709 ).toBeGreaterThanOrEqual(0)
710 // We need to clean up the resources after our test
714 it('Verify WEIGHTED_ROUND_ROBIN strategy internals are resets after setting it', async () => {
715 const workerChoiceStrategy
= WorkerChoiceStrategies
.WEIGHTED_ROUND_ROBIN
716 let pool
= new FixedThreadPool(
718 './tests/worker-files/thread/testWorker.js'
721 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
723 ).currentWorkerNodeId
726 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
728 ).defaultWorkerWeight
731 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
733 ).workerVirtualTaskRunTime
735 pool
.setWorkerChoiceStrategy(workerChoiceStrategy
)
737 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
738 pool
.workerChoiceStrategyContext
.workerChoiceStrategy
739 ).currentWorkerNodeId
742 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
743 pool
.workerChoiceStrategyContext
.workerChoiceStrategy
744 ).defaultWorkerWeight
747 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
749 ).workerVirtualTaskRunTime
752 pool
= new DynamicThreadPool(
755 './tests/worker-files/thread/testWorker.js'
758 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
760 ).currentWorkerNodeId
763 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
765 ).defaultWorkerWeight
768 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
770 ).workerVirtualTaskRunTime
772 pool
.setWorkerChoiceStrategy(workerChoiceStrategy
)
774 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
775 pool
.workerChoiceStrategyContext
.workerChoiceStrategy
776 ).currentWorkerNodeId
779 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
780 pool
.workerChoiceStrategyContext
.workerChoiceStrategy
781 ).defaultWorkerWeight
784 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
786 ).workerVirtualTaskRunTime
788 // We need to clean up the resources after our test
792 it('Verify unknown strategy throw error', () => {
795 new DynamicThreadPool(
798 './tests/worker-files/thread/testWorker.js',
799 { workerChoiceStrategy
: 'UNKNOWN_STRATEGY' }
801 ).toThrowError("Invalid worker choice strategy 'UNKNOWN_STRATEGY'")