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
)
464 if (process
.platform
!== 'win32') {
466 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
467 pool
.workerChoiceStrategyContext
.workerChoiceStrategy
468 ).workersVirtualTaskTimestamp
.length
469 ).toBe(pool
.workerNodes
.length
)
471 // We need to clean up the resources after our test
475 it('Verify FAIR_SHARE strategy can be run in a dynamic pool with median run time statistic', async () => {
476 const pool
= new DynamicThreadPool(
479 './tests/worker-files/thread/testWorker.js',
481 workerChoiceStrategy
: WorkerChoiceStrategies
.FAIR_SHARE
,
482 workerChoiceStrategyOptions
: {
487 // TODO: Create a better test to cover `FairShareChoiceStrategy#choose`
489 const maxMultiplier
= 2
490 for (let i
= 0; i
< max
* maxMultiplier
; i
++) {
491 promises
.push(pool
.execute())
493 await Promise
.all(promises
)
494 for (const workerNode
of pool
.workerNodes
) {
495 expect(workerNode
.tasksUsage
.avgRunTime
).toBeDefined()
496 expect(workerNode
.tasksUsage
.avgRunTime
).toBe(0)
497 expect(workerNode
.tasksUsage
.medRunTime
).toBeDefined()
498 expect(workerNode
.tasksUsage
.medRunTime
).toBeGreaterThan(0)
500 if (process
.platform
!== 'win32') {
502 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
503 pool
.workerChoiceStrategyContext
.workerChoiceStrategy
504 ).workersVirtualTaskTimestamp
.length
505 ).toBe(pool
.workerNodes
.length
)
507 // We need to clean up the resources after our test
511 it('Verify FAIR_SHARE strategy internals are resets after setting it', async () => {
512 const workerChoiceStrategy
= WorkerChoiceStrategies
.FAIR_SHARE
513 let pool
= new FixedThreadPool(
515 './tests/worker-files/thread/testWorker.js'
518 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
520 ).workersVirtualTaskTimestamp
521 ).toBeInstanceOf(Array
)
523 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
525 ).workersVirtualTaskTimestamp
.length
527 pool
.setWorkerChoiceStrategy(workerChoiceStrategy
)
529 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
531 ).workersVirtualTaskTimestamp
532 ).toBeInstanceOf(Array
)
533 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
535 ).workersVirtualTaskTimestamp
[0] = 0
537 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
539 ).workersVirtualTaskTimestamp
.length
542 pool
= new DynamicThreadPool(
545 './tests/worker-files/thread/testWorker.js'
548 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
550 ).workersVirtualTaskTimestamp
551 ).toBeInstanceOf(Array
)
552 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
554 ).workersVirtualTaskTimestamp
[0] = 0
556 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
558 ).workersVirtualTaskTimestamp
.length
560 pool
.setWorkerChoiceStrategy(workerChoiceStrategy
)
562 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
564 ).workersVirtualTaskTimestamp
565 ).toBeInstanceOf(Array
)
567 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
569 ).workersVirtualTaskTimestamp
.length
571 // We need to clean up the resources after our test
575 it('Verify WEIGHTED_ROUND_ROBIN strategy default tasks usage statistics requirements', async () => {
576 const workerChoiceStrategy
= WorkerChoiceStrategies
.WEIGHTED_ROUND_ROBIN
577 let pool
= new FixedThreadPool(
579 './tests/worker-files/thread/testWorker.js',
580 { workerChoiceStrategy
}
583 pool
.workerChoiceStrategyContext
.getRequiredStatistics().runTime
586 pool
.workerChoiceStrategyContext
.getRequiredStatistics().avgRunTime
589 pool
.workerChoiceStrategyContext
.getRequiredStatistics().medRunTime
592 pool
= new DynamicThreadPool(
595 './tests/worker-files/thread/testWorker.js',
596 { workerChoiceStrategy
}
599 pool
.workerChoiceStrategyContext
.getRequiredStatistics().runTime
602 pool
.workerChoiceStrategyContext
.getRequiredStatistics().avgRunTime
605 pool
.workerChoiceStrategyContext
.getRequiredStatistics().medRunTime
607 // We need to clean up the resources after our test
611 it('Verify WEIGHTED_ROUND_ROBIN strategy can be run in a fixed pool', async () => {
612 const pool
= new FixedThreadPool(
614 './tests/worker-files/thread/testWorker.js',
615 { workerChoiceStrategy
: WorkerChoiceStrategies
.WEIGHTED_ROUND_ROBIN
}
617 // TODO: Create a better test to cover `WeightedRoundRobinWorkerChoiceStrategy#choose`
619 const maxMultiplier
= 2
620 for (let i
= 0; i
< max
* maxMultiplier
; i
++) {
621 promises
.push(pool
.execute())
623 await Promise
.all(promises
)
625 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
626 pool
.workerChoiceStrategyContext
.workerChoiceStrategy
627 ).defaultWorkerWeight
630 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
631 pool
.workerChoiceStrategyContext
.workerChoiceStrategy
632 ).workerVirtualTaskRunTime
633 ).toBeGreaterThanOrEqual(0)
634 // We need to clean up the resources after our test
638 it('Verify WEIGHTED_ROUND_ROBIN strategy can be run in a dynamic pool', async () => {
639 const pool
= new DynamicThreadPool(
642 './tests/worker-files/thread/testWorker.js',
643 { workerChoiceStrategy
: WorkerChoiceStrategies
.WEIGHTED_ROUND_ROBIN
}
645 // TODO: Create a better test to cover `WeightedRoundRobinWorkerChoiceStrategy#choose`
647 const maxMultiplier
=
648 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
649 pool
.workerChoiceStrategyContext
.workerChoiceStrategy
650 ).defaultWorkerWeight
* 50
651 for (let i
= 0; i
< max
* maxMultiplier
; i
++) {
652 promises
.push(pool
.execute())
654 await Promise
.all(promises
)
655 if (process
.platform
!== 'win32') {
657 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
658 pool
.workerChoiceStrategyContext
.workerChoiceStrategy
659 ).defaultWorkerWeight
662 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
663 pool
.workerChoiceStrategyContext
.workerChoiceStrategy
664 ).workerVirtualTaskRunTime
665 ).toBeGreaterThanOrEqual(0)
667 // We need to clean up the resources after our test
671 it('Verify WEIGHTED_ROUND_ROBIN strategy can be run in a dynamic pool with median run time statistic', async () => {
672 const pool
= new DynamicThreadPool(
675 './tests/worker-files/thread/testWorker.js',
677 workerChoiceStrategy
: WorkerChoiceStrategies
.WEIGHTED_ROUND_ROBIN
,
678 workerChoiceStrategyOptions
: {
683 // TODO: Create a better test to cover `WeightedRoundRobinWorkerChoiceStrategy#choose`
685 const maxMultiplier
= 2
686 for (let i
= 0; i
< max
* maxMultiplier
; i
++) {
687 promises
.push(pool
.execute())
689 await Promise
.all(promises
)
690 for (const workerNode
of pool
.workerNodes
) {
691 expect(workerNode
.tasksUsage
.avgRunTime
).toBeDefined()
692 expect(workerNode
.tasksUsage
.avgRunTime
).toBe(0)
693 expect(workerNode
.tasksUsage
.medRunTime
).toBeDefined()
694 expect(workerNode
.tasksUsage
.medRunTime
).toBeGreaterThan(0)
697 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
698 pool
.workerChoiceStrategyContext
.workerChoiceStrategy
699 ).defaultWorkerWeight
702 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
703 pool
.workerChoiceStrategyContext
.workerChoiceStrategy
704 ).workerVirtualTaskRunTime
705 ).toBeGreaterThanOrEqual(0)
706 // We need to clean up the resources after our test
710 it('Verify WEIGHTED_ROUND_ROBIN strategy internals are resets after setting it', async () => {
711 const workerChoiceStrategy
= WorkerChoiceStrategies
.WEIGHTED_ROUND_ROBIN
712 let pool
= new FixedThreadPool(
714 './tests/worker-files/thread/testWorker.js'
717 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
719 ).currentWorkerNodeId
722 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
724 ).defaultWorkerWeight
727 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
729 ).workerVirtualTaskRunTime
731 pool
.setWorkerChoiceStrategy(workerChoiceStrategy
)
733 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
734 pool
.workerChoiceStrategyContext
.workerChoiceStrategy
735 ).currentWorkerNodeId
738 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
739 pool
.workerChoiceStrategyContext
.workerChoiceStrategy
740 ).defaultWorkerWeight
743 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
745 ).workerVirtualTaskRunTime
748 pool
= new DynamicThreadPool(
751 './tests/worker-files/thread/testWorker.js'
754 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
756 ).currentWorkerNodeId
759 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
761 ).defaultWorkerWeight
764 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
766 ).workerVirtualTaskRunTime
768 pool
.setWorkerChoiceStrategy(workerChoiceStrategy
)
770 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
771 pool
.workerChoiceStrategyContext
.workerChoiceStrategy
772 ).currentWorkerNodeId
775 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
776 pool
.workerChoiceStrategyContext
.workerChoiceStrategy
777 ).defaultWorkerWeight
780 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
782 ).workerVirtualTaskRunTime
784 // We need to clean up the resources after our test
788 it('Verify unknown strategy throw error', () => {
791 new DynamicThreadPool(
794 './tests/worker-files/thread/testWorker.js',
795 { workerChoiceStrategy
: 'UNKNOWN_STRATEGY' }
797 ).toThrowError("Invalid worker choice strategy 'UNKNOWN_STRATEGY'")