1 const { expect
} = require('expect')
3 WorkerChoiceStrategies
,
7 } = require('../../../lib')
8 const { CircularArray
} = require('../../../lib/circular-array')
10 describe('Selection strategies test suite', () => {
14 it('Verify that WorkerChoiceStrategies enumeration provides string values', () => {
15 expect(WorkerChoiceStrategies
.ROUND_ROBIN
).toBe('ROUND_ROBIN')
16 expect(WorkerChoiceStrategies
.LEAST_USED
).toBe('LEAST_USED')
17 expect(WorkerChoiceStrategies
.LEAST_BUSY
).toBe('LEAST_BUSY')
18 expect(WorkerChoiceStrategies
.LEAST_ELU
).toBe('LEAST_ELU')
19 expect(WorkerChoiceStrategies
.FAIR_SHARE
).toBe('FAIR_SHARE')
20 expect(WorkerChoiceStrategies
.WEIGHTED_ROUND_ROBIN
).toBe(
21 'WEIGHTED_ROUND_ROBIN'
23 expect(WorkerChoiceStrategies
.INTERLEAVED_WEIGHTED_ROUND_ROBIN
).toBe(
24 'INTERLEAVED_WEIGHTED_ROUND_ROBIN'
28 it('Verify ROUND_ROBIN strategy is the default at pool creation', async () => {
29 const pool
= new DynamicThreadPool(
32 './tests/worker-files/thread/testWorker.js'
34 expect(pool
.opts
.workerChoiceStrategy
).toBe(
35 WorkerChoiceStrategies
.ROUND_ROBIN
37 // We need to clean up the resources after our test
41 it('Verify available strategies are taken at pool creation', async () => {
42 for (const workerChoiceStrategy
of Object
.values(WorkerChoiceStrategies
)) {
43 const pool
= new FixedThreadPool(
45 './tests/worker-files/thread/testWorker.js',
46 { workerChoiceStrategy
}
48 expect(pool
.opts
.workerChoiceStrategy
).toBe(workerChoiceStrategy
)
49 expect(pool
.workerChoiceStrategyContext
.workerChoiceStrategy
).toBe(
56 it('Verify available strategies can be set after pool creation', async () => {
57 for (const workerChoiceStrategy
of Object
.values(WorkerChoiceStrategies
)) {
58 const pool
= new DynamicThreadPool(
61 './tests/worker-files/thread/testWorker.js'
63 pool
.setWorkerChoiceStrategy(workerChoiceStrategy
)
64 expect(pool
.opts
.workerChoiceStrategy
).toBe(workerChoiceStrategy
)
65 expect(pool
.workerChoiceStrategyContext
.workerChoiceStrategy
).toBe(
72 it('Verify available strategies default internals at pool creation', async () => {
73 const pool
= new FixedThreadPool(
75 './tests/worker-files/thread/testWorker.js'
77 for (const workerChoiceStrategy
of Object
.values(WorkerChoiceStrategies
)) {
78 if (workerChoiceStrategy
=== WorkerChoiceStrategies
.ROUND_ROBIN
) {
80 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
84 } else if (workerChoiceStrategy
=== WorkerChoiceStrategies
.FAIR_SHARE
) {
86 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
88 ).workersVirtualTaskEndTimestamp
89 ).toBeInstanceOf(Array
)
91 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
93 ).workersVirtualTaskEndTimestamp
.length
96 workerChoiceStrategy
=== WorkerChoiceStrategies
.WEIGHTED_ROUND_ROBIN
99 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
101 ).currentWorkerNodeId
104 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
106 ).defaultWorkerWeight
109 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
111 ).workerVirtualTaskRunTime
118 it('Verify ROUND_ROBIN strategy default policy', async () => {
119 const workerChoiceStrategy
= WorkerChoiceStrategies
.ROUND_ROBIN
120 let pool
= new FixedThreadPool(
122 './tests/worker-files/thread/testWorker.js',
123 { workerChoiceStrategy
}
125 expect(pool
.workerChoiceStrategyContext
.getStrategyPolicy()).toStrictEqual({
126 useDynamicWorker
: true
129 pool
= new DynamicThreadPool(
132 './tests/worker-files/thread/testWorker.js',
133 { workerChoiceStrategy
}
135 expect(pool
.workerChoiceStrategyContext
.getStrategyPolicy()).toStrictEqual({
136 useDynamicWorker
: true
138 // We need to clean up the resources after our test
142 it('Verify ROUND_ROBIN strategy default tasks statistics requirements', async () => {
143 const workerChoiceStrategy
= WorkerChoiceStrategies
.ROUND_ROBIN
144 let pool
= new FixedThreadPool(
146 './tests/worker-files/thread/testWorker.js',
147 { workerChoiceStrategy
}
150 pool
.workerChoiceStrategyContext
.getTaskStatisticsRequirements()
169 pool
= new DynamicThreadPool(
172 './tests/worker-files/thread/testWorker.js',
173 { workerChoiceStrategy
}
176 pool
.workerChoiceStrategyContext
.getTaskStatisticsRequirements()
194 // We need to clean up the resources after our test
198 it('Verify ROUND_ROBIN strategy can be run in a fixed pool', async () => {
199 const pool
= new FixedThreadPool(
201 './tests/worker-files/thread/testWorker.js',
202 { workerChoiceStrategy
: WorkerChoiceStrategies
.ROUND_ROBIN
}
204 // TODO: Create a better test to cover `RoundRobinWorkerChoiceStrategy#choose`
205 const promises
= new Set()
206 const maxMultiplier
= 2
207 for (let i
= 0; i
< max
* maxMultiplier
; i
++) {
208 promises
.add(pool
.execute())
210 await Promise
.all(promises
)
211 for (const workerNode
of pool
.workerNodes
) {
212 expect(workerNode
.workerUsage
).toStrictEqual({
214 executed
: maxMultiplier
,
223 history
: expect
.any(CircularArray
)
229 history
: expect
.any(CircularArray
)
236 history
: expect
.any(CircularArray
)
242 history
: expect
.any(CircularArray
)
249 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
250 WorkerChoiceStrategies
.ROUND_ROBIN
253 // We need to clean up the resources after our test
257 it('Verify ROUND_ROBIN strategy can be run in a dynamic pool', async () => {
258 const pool
= new DynamicThreadPool(
261 './tests/worker-files/thread/testWorker.js',
262 { workerChoiceStrategy
: WorkerChoiceStrategies
.ROUND_ROBIN
}
264 // TODO: Create a better test to cover `RoundRobinWorkerChoiceStrategy#choose`
265 const promises
= new Set()
266 const maxMultiplier
= 2
267 for (let i
= 0; i
< max
* maxMultiplier
; i
++) {
268 promises
.add(pool
.execute())
270 await Promise
.all(promises
)
271 for (const workerNode
of pool
.workerNodes
) {
272 expect(workerNode
.workerUsage
).toStrictEqual({
274 executed
: maxMultiplier
,
283 history
: expect
.any(CircularArray
)
289 history
: expect
.any(CircularArray
)
296 history
: expect
.any(CircularArray
)
302 history
: expect
.any(CircularArray
)
309 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
310 WorkerChoiceStrategies
.ROUND_ROBIN
313 // We need to clean up the resources after our test
317 it('Verify ROUND_ROBIN strategy runtime behavior', async () => {
318 const workerChoiceStrategy
= WorkerChoiceStrategies
.ROUND_ROBIN
319 let pool
= new FixedClusterPool(
321 './tests/worker-files/cluster/testWorker.js',
322 { workerChoiceStrategy
}
324 let results
= new Set()
325 for (let i
= 0; i
< max
; i
++) {
326 results
.add(pool
.workerNodes
[pool
.chooseWorkerNode()].worker
.id
)
328 expect(results
.size
).toBe(max
)
330 pool
= new FixedThreadPool(
332 './tests/worker-files/thread/testWorker.js',
333 { workerChoiceStrategy
}
336 for (let i
= 0; i
< max
; i
++) {
337 results
.add(pool
.workerNodes
[pool
.chooseWorkerNode()].worker
.threadId
)
339 expect(results
.size
).toBe(max
)
343 it('Verify ROUND_ROBIN strategy internals are resets after setting it', async () => {
344 const workerChoiceStrategy
= WorkerChoiceStrategies
.ROUND_ROBIN
345 let pool
= new FixedThreadPool(
347 './tests/worker-files/thread/testWorker.js',
348 { workerChoiceStrategy
: WorkerChoiceStrategies
.WEIGHTED_ROUND_ROBIN
}
351 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
355 pool
.setWorkerChoiceStrategy(workerChoiceStrategy
)
357 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
358 pool
.workerChoiceStrategyContext
.workerChoiceStrategy
362 pool
= new DynamicThreadPool(
365 './tests/worker-files/thread/testWorker.js',
366 { workerChoiceStrategy
: WorkerChoiceStrategies
.WEIGHTED_ROUND_ROBIN
}
369 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
373 pool
.setWorkerChoiceStrategy(workerChoiceStrategy
)
375 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
376 pool
.workerChoiceStrategyContext
.workerChoiceStrategy
379 // We need to clean up the resources after our test
383 it('Verify LEAST_USED strategy default policy', async () => {
384 const workerChoiceStrategy
= WorkerChoiceStrategies
.LEAST_USED
385 let pool
= new FixedThreadPool(
387 './tests/worker-files/thread/testWorker.js',
388 { workerChoiceStrategy
}
390 expect(pool
.workerChoiceStrategyContext
.getStrategyPolicy()).toStrictEqual({
391 useDynamicWorker
: false
394 pool
= new DynamicThreadPool(
397 './tests/worker-files/thread/testWorker.js',
398 { workerChoiceStrategy
}
400 expect(pool
.workerChoiceStrategyContext
.getStrategyPolicy()).toStrictEqual({
401 useDynamicWorker
: false
403 // We need to clean up the resources after our test
407 it('Verify LEAST_USED strategy default tasks statistics requirements', async () => {
408 const workerChoiceStrategy
= WorkerChoiceStrategies
.LEAST_USED
409 let pool
= new FixedThreadPool(
411 './tests/worker-files/thread/testWorker.js',
412 { workerChoiceStrategy
}
415 pool
.workerChoiceStrategyContext
.getTaskStatisticsRequirements()
434 pool
= new DynamicThreadPool(
437 './tests/worker-files/thread/testWorker.js',
438 { workerChoiceStrategy
}
441 pool
.workerChoiceStrategyContext
.getTaskStatisticsRequirements()
459 // We need to clean up the resources after our test
463 it('Verify LEAST_USED strategy can be run in a fixed pool', async () => {
464 const pool
= new FixedThreadPool(
466 './tests/worker-files/thread/testWorker.js',
467 { workerChoiceStrategy
: WorkerChoiceStrategies
.LEAST_USED
}
469 // TODO: Create a better test to cover `LeastUsedWorkerChoiceStrategy#choose`
470 const promises
= new Set()
471 const maxMultiplier
= 2
472 for (let i
= 0; i
< max
* maxMultiplier
; i
++) {
473 promises
.add(pool
.execute())
475 await Promise
.all(promises
)
476 for (const workerNode
of pool
.workerNodes
) {
477 expect(workerNode
.workerUsage
).toStrictEqual({
479 executed
: maxMultiplier
,
488 history
: expect
.any(CircularArray
)
494 history
: expect
.any(CircularArray
)
501 history
: expect
.any(CircularArray
)
507 history
: expect
.any(CircularArray
)
513 // We need to clean up the resources after our test
517 it('Verify LEAST_USED strategy can be run in a dynamic pool', async () => {
518 const pool
= new DynamicThreadPool(
521 './tests/worker-files/thread/testWorker.js',
522 { workerChoiceStrategy
: WorkerChoiceStrategies
.LEAST_USED
}
524 // TODO: Create a better test to cover `LeastUsedWorkerChoiceStrategy#choose`
525 const promises
= new Set()
526 const maxMultiplier
= 2
527 for (let i
= 0; i
< max
* maxMultiplier
; i
++) {
528 promises
.add(pool
.execute())
530 await Promise
.all(promises
)
531 for (const workerNode
of pool
.workerNodes
) {
532 expect(workerNode
.workerUsage
).toStrictEqual({
534 executed
: maxMultiplier
,
543 history
: expect
.any(CircularArray
)
549 history
: expect
.any(CircularArray
)
556 history
: expect
.any(CircularArray
)
562 history
: expect
.any(CircularArray
)
568 // We need to clean up the resources after our test
572 it('Verify LEAST_BUSY strategy default policy', async () => {
573 const workerChoiceStrategy
= WorkerChoiceStrategies
.LEAST_BUSY
574 let pool
= new FixedThreadPool(
576 './tests/worker-files/thread/testWorker.js',
577 { workerChoiceStrategy
}
579 expect(pool
.workerChoiceStrategyContext
.getStrategyPolicy()).toStrictEqual({
580 useDynamicWorker
: false
583 pool
= new DynamicThreadPool(
586 './tests/worker-files/thread/testWorker.js',
587 { workerChoiceStrategy
}
589 expect(pool
.workerChoiceStrategyContext
.getStrategyPolicy()).toStrictEqual({
590 useDynamicWorker
: false
592 // We need to clean up the resources after our test
596 it('Verify LEAST_BUSY strategy default tasks statistics requirements', async () => {
597 const workerChoiceStrategy
= WorkerChoiceStrategies
.LEAST_BUSY
598 let pool
= new FixedThreadPool(
600 './tests/worker-files/thread/testWorker.js',
601 { workerChoiceStrategy
}
604 pool
.workerChoiceStrategyContext
.getTaskStatisticsRequirements()
623 pool
= new DynamicThreadPool(
626 './tests/worker-files/thread/testWorker.js',
627 { workerChoiceStrategy
}
630 pool
.workerChoiceStrategyContext
.getTaskStatisticsRequirements()
648 // We need to clean up the resources after our test
652 it('Verify LEAST_BUSY strategy can be run in a fixed pool', async () => {
653 const pool
= new FixedThreadPool(
655 './tests/worker-files/thread/testWorker.js',
656 { workerChoiceStrategy
: WorkerChoiceStrategies
.LEAST_BUSY
}
658 // TODO: Create a better test to cover `LeastBusyWorkerChoiceStrategy#choose`
659 const promises
= new Set()
660 const maxMultiplier
= 2
661 for (let i
= 0; i
< max
* maxMultiplier
; i
++) {
662 promises
.add(pool
.execute())
664 await Promise
.all(promises
)
665 for (const workerNode
of pool
.workerNodes
) {
666 expect(workerNode
.workerUsage
).toStrictEqual({
668 executed
: expect
.any(Number
),
674 aggregate
: expect
.any(Number
),
677 history
: expect
.any(CircularArray
)
680 aggregate
: expect
.any(Number
),
683 history
: expect
.any(CircularArray
)
690 history
: expect
.any(CircularArray
)
696 history
: expect
.any(CircularArray
)
701 expect(workerNode
.workerUsage
.tasks
.executed
).toBeGreaterThan(0)
702 expect(workerNode
.workerUsage
.tasks
.executed
).toBeLessThanOrEqual(
705 expect(workerNode
.workerUsage
.runTime
.aggregate
).toBeGreaterThanOrEqual(0)
706 expect(workerNode
.workerUsage
.waitTime
.aggregate
).toBeGreaterThanOrEqual(
710 // We need to clean up the resources after our test
714 it('Verify LEAST_BUSY strategy can be run in a dynamic pool', async () => {
715 const pool
= new DynamicThreadPool(
718 './tests/worker-files/thread/testWorker.js',
719 { workerChoiceStrategy
: WorkerChoiceStrategies
.LEAST_BUSY
}
721 // TODO: Create a better test to cover `LeastBusyWorkerChoiceStrategy#choose`
722 const promises
= new Set()
723 const maxMultiplier
= 2
724 for (let i
= 0; i
< max
* maxMultiplier
; i
++) {
725 promises
.add(pool
.execute())
727 await Promise
.all(promises
)
728 for (const workerNode
of pool
.workerNodes
) {
729 expect(workerNode
.workerUsage
).toStrictEqual({
731 executed
: expect
.any(Number
),
737 aggregate
: expect
.any(Number
),
740 history
: expect
.any(CircularArray
)
743 aggregate
: expect
.any(Number
),
746 history
: expect
.any(CircularArray
)
753 history
: expect
.any(CircularArray
)
759 history
: expect
.any(CircularArray
)
764 expect(workerNode
.workerUsage
.tasks
.executed
).toBeGreaterThan(0)
765 expect(workerNode
.workerUsage
.tasks
.executed
).toBeLessThanOrEqual(
768 expect(workerNode
.workerUsage
.runTime
.aggregate
).toBeGreaterThan(0)
769 expect(workerNode
.workerUsage
.waitTime
.aggregate
).toBeGreaterThan(0)
771 // We need to clean up the resources after our test
775 it('Verify LEAST_ELU strategy default policy', async () => {
776 const workerChoiceStrategy
= WorkerChoiceStrategies
.LEAST_ELU
777 let pool
= new FixedThreadPool(
779 './tests/worker-files/thread/testWorker.js',
780 { workerChoiceStrategy
}
782 expect(pool
.workerChoiceStrategyContext
.getStrategyPolicy()).toStrictEqual({
783 useDynamicWorker
: false
786 pool
= new DynamicThreadPool(
789 './tests/worker-files/thread/testWorker.js',
790 { workerChoiceStrategy
}
792 expect(pool
.workerChoiceStrategyContext
.getStrategyPolicy()).toStrictEqual({
793 useDynamicWorker
: false
795 // We need to clean up the resources after our test
799 it('Verify LEAST_ELU strategy default tasks statistics requirements', async () => {
800 const workerChoiceStrategy
= WorkerChoiceStrategies
.LEAST_ELU
801 let pool
= new FixedThreadPool(
803 './tests/worker-files/thread/testWorker.js',
804 { workerChoiceStrategy
}
807 pool
.workerChoiceStrategyContext
.getTaskStatisticsRequirements()
826 pool
= new DynamicThreadPool(
829 './tests/worker-files/thread/testWorker.js',
830 { workerChoiceStrategy
}
833 pool
.workerChoiceStrategyContext
.getTaskStatisticsRequirements()
851 // We need to clean up the resources after our test
855 it('Verify LEAST_ELU strategy can be run in a fixed pool', async () => {
856 const pool
= new FixedThreadPool(
858 './tests/worker-files/thread/testWorker.js',
859 { workerChoiceStrategy
: WorkerChoiceStrategies
.LEAST_ELU
}
861 // TODO: Create a better test to cover `LeastEluWorkerChoiceStrategy#choose`
862 const promises
= new Set()
863 const maxMultiplier
= 2
864 for (let i
= 0; i
< max
* maxMultiplier
; i
++) {
865 promises
.add(pool
.execute())
867 await Promise
.all(promises
)
868 for (const workerNode
of pool
.workerNodes
) {
869 expect(workerNode
.workerUsage
).toStrictEqual({
871 executed
: expect
.any(Number
),
880 history
: expect
.any(CircularArray
)
886 history
: expect
.any(CircularArray
)
893 history
: expect
.any(CircularArray
)
896 aggregate
: expect
.any(Number
),
899 history
: expect
.any(CircularArray
)
901 utilization
: expect
.any(Number
)
904 expect(workerNode
.workerUsage
.tasks
.executed
).toBeGreaterThanOrEqual(0)
905 expect(workerNode
.workerUsage
.tasks
.executed
).toBeLessThanOrEqual(
908 expect(workerNode
.workerUsage
.elu
.utilization
).toBeGreaterThanOrEqual(0)
909 expect(workerNode
.workerUsage
.elu
.utilization
).toBeLessThanOrEqual(1)
911 // We need to clean up the resources after our test
915 it('Verify LEAST_ELU strategy can be run in a dynamic pool', async () => {
916 const pool
= new DynamicThreadPool(
919 './tests/worker-files/thread/testWorker.js',
920 { workerChoiceStrategy
: WorkerChoiceStrategies
.LEAST_ELU
}
922 // TODO: Create a better test to cover `LeastEluWorkerChoiceStrategy#choose`
923 const promises
= new Set()
924 const maxMultiplier
= 2
925 for (let i
= 0; i
< max
* maxMultiplier
; i
++) {
926 promises
.add(pool
.execute())
928 await Promise
.all(promises
)
929 for (const workerNode
of pool
.workerNodes
) {
930 expect(workerNode
.workerUsage
).toStrictEqual({
932 executed
: expect
.any(Number
),
941 history
: expect
.any(CircularArray
)
947 history
: expect
.any(CircularArray
)
954 history
: expect
.any(CircularArray
)
957 aggregate
: expect
.any(Number
),
960 history
: expect
.any(CircularArray
)
962 utilization
: expect
.any(Number
)
965 expect(workerNode
.workerUsage
.tasks
.executed
).toBeGreaterThanOrEqual(0)
966 expect(workerNode
.workerUsage
.tasks
.executed
).toBeLessThanOrEqual(
969 expect(workerNode
.workerUsage
.elu
.utilization
).toBeGreaterThanOrEqual(0)
970 expect(workerNode
.workerUsage
.elu
.utilization
).toBeLessThanOrEqual(1)
972 // We need to clean up the resources after our test
976 it('Verify FAIR_SHARE strategy default policy', async () => {
977 const workerChoiceStrategy
= WorkerChoiceStrategies
.FAIR_SHARE
978 let pool
= new FixedThreadPool(
980 './tests/worker-files/thread/testWorker.js',
981 { workerChoiceStrategy
}
983 expect(pool
.workerChoiceStrategyContext
.getStrategyPolicy()).toStrictEqual({
984 useDynamicWorker
: false
987 pool
= new DynamicThreadPool(
990 './tests/worker-files/thread/testWorker.js',
991 { workerChoiceStrategy
}
993 expect(pool
.workerChoiceStrategyContext
.getStrategyPolicy()).toStrictEqual({
994 useDynamicWorker
: false
996 // We need to clean up the resources after our test
1000 it('Verify FAIR_SHARE strategy default tasks statistics requirements', async () => {
1001 const workerChoiceStrategy
= WorkerChoiceStrategies
.FAIR_SHARE
1002 let pool
= new FixedThreadPool(
1004 './tests/worker-files/thread/testWorker.js',
1005 { workerChoiceStrategy
}
1008 pool
.workerChoiceStrategyContext
.getTaskStatisticsRequirements()
1026 await pool
.destroy()
1027 pool
= new DynamicThreadPool(
1030 './tests/worker-files/thread/testWorker.js',
1031 { workerChoiceStrategy
}
1034 pool
.workerChoiceStrategyContext
.getTaskStatisticsRequirements()
1052 // We need to clean up the resources after our test
1053 await pool
.destroy()
1056 it('Verify FAIR_SHARE strategy can be run in a fixed pool', async () => {
1057 const pool
= new FixedThreadPool(
1059 './tests/worker-files/thread/testWorker.js',
1060 { workerChoiceStrategy
: WorkerChoiceStrategies
.FAIR_SHARE
}
1062 // TODO: Create a better test to cover `FairShareChoiceStrategy#choose`
1063 const promises
= new Set()
1064 const maxMultiplier
= 2
1065 for (let i
= 0; i
< max
* maxMultiplier
; i
++) {
1066 promises
.add(pool
.execute())
1068 await Promise
.all(promises
)
1069 for (const workerNode
of pool
.workerNodes
) {
1070 expect(workerNode
.workerUsage
).toStrictEqual({
1072 executed
: maxMultiplier
,
1078 aggregate
: expect
.any(Number
),
1079 average
: expect
.any(Number
),
1081 history
: expect
.any(CircularArray
)
1087 history
: expect
.any(CircularArray
)
1094 history
: expect
.any(CircularArray
)
1097 aggregate
: expect
.any(Number
),
1098 average
: expect
.any(Number
),
1100 history
: expect
.any(CircularArray
)
1102 utilization
: expect
.any(Number
)
1105 expect(workerNode
.workerUsage
.runTime
.aggregate
).toBeGreaterThan(0)
1106 expect(workerNode
.workerUsage
.runTime
.average
).toBeGreaterThan(0)
1107 expect(workerNode
.workerUsage
.elu
.utilization
).toBeGreaterThanOrEqual(0)
1108 expect(workerNode
.workerUsage
.elu
.utilization
).toBeLessThanOrEqual(1)
1111 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
1112 pool
.workerChoiceStrategyContext
.workerChoiceStrategy
1113 ).workersVirtualTaskEndTimestamp
.length
1114 ).toBe(pool
.workerNodes
.length
)
1115 // We need to clean up the resources after our test
1116 await pool
.destroy()
1119 it('Verify FAIR_SHARE strategy can be run in a dynamic pool', async () => {
1120 const pool
= new DynamicThreadPool(
1123 './tests/worker-files/thread/testWorker.js',
1124 { workerChoiceStrategy
: WorkerChoiceStrategies
.FAIR_SHARE
}
1126 // TODO: Create a better test to cover `FairShareChoiceStrategy#choose`
1127 const promises
= new Set()
1128 const maxMultiplier
= 2
1129 for (let i
= 0; i
< max
* maxMultiplier
; i
++) {
1130 promises
.add(pool
.execute())
1132 await Promise
.all(promises
)
1133 for (const workerNode
of pool
.workerNodes
) {
1134 expect(workerNode
.workerUsage
).toStrictEqual({
1136 executed
: expect
.any(Number
),
1142 aggregate
: expect
.any(Number
),
1143 average
: expect
.any(Number
),
1145 history
: expect
.any(CircularArray
)
1151 history
: expect
.any(CircularArray
)
1158 history
: expect
.any(CircularArray
)
1161 aggregate
: expect
.any(Number
),
1162 average
: expect
.any(Number
),
1164 history
: expect
.any(CircularArray
)
1166 utilization
: expect
.any(Number
)
1169 expect(workerNode
.workerUsage
.tasks
.executed
).toBeGreaterThan(0)
1170 expect(workerNode
.workerUsage
.tasks
.executed
).toBeLessThanOrEqual(
1173 expect(workerNode
.workerUsage
.runTime
.aggregate
).toBeGreaterThan(0)
1174 expect(workerNode
.workerUsage
.runTime
.average
).toBeGreaterThan(0)
1175 expect(workerNode
.workerUsage
.elu
.utilization
).toBeGreaterThanOrEqual(0)
1176 expect(workerNode
.workerUsage
.elu
.utilization
).toBeLessThanOrEqual(1)
1179 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
1180 pool
.workerChoiceStrategyContext
.workerChoiceStrategy
1181 ).workersVirtualTaskEndTimestamp
.length
1182 ).toBe(pool
.workerNodes
.length
)
1183 // We need to clean up the resources after our test
1184 await pool
.destroy()
1187 it('Verify FAIR_SHARE strategy can be run in a dynamic pool with median runtime statistic', async () => {
1188 const pool
= new DynamicThreadPool(
1191 './tests/worker-files/thread/testWorker.js',
1193 workerChoiceStrategy
: WorkerChoiceStrategies
.FAIR_SHARE
,
1194 workerChoiceStrategyOptions
: {
1195 runTime
: { median
: true }
1199 // TODO: Create a better test to cover `FairShareChoiceStrategy#choose`
1200 const promises
= new Set()
1201 const maxMultiplier
= 2
1202 for (let i
= 0; i
< max
* maxMultiplier
; i
++) {
1203 promises
.add(pool
.execute())
1205 await Promise
.all(promises
)
1206 for (const workerNode
of pool
.workerNodes
) {
1207 expect(workerNode
.workerUsage
).toStrictEqual({
1209 executed
: expect
.any(Number
),
1215 aggregate
: expect
.any(Number
),
1217 median
: expect
.any(Number
),
1218 history
: expect
.any(CircularArray
)
1224 history
: expect
.any(CircularArray
)
1231 history
: expect
.any(CircularArray
)
1234 aggregate
: expect
.any(Number
),
1235 average
: expect
.any(Number
),
1237 history
: expect
.any(CircularArray
)
1239 utilization
: expect
.any(Number
)
1242 expect(workerNode
.workerUsage
.tasks
.executed
).toBeGreaterThan(0)
1243 expect(workerNode
.workerUsage
.tasks
.executed
).toBeLessThanOrEqual(
1246 expect(workerNode
.workerUsage
.runTime
.aggregate
).toBeGreaterThan(0)
1247 expect(workerNode
.workerUsage
.runTime
.median
).toBeGreaterThan(0)
1248 expect(workerNode
.workerUsage
.elu
.utilization
).toBeGreaterThanOrEqual(0)
1249 expect(workerNode
.workerUsage
.elu
.utilization
).toBeLessThanOrEqual(1)
1252 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
1253 pool
.workerChoiceStrategyContext
.workerChoiceStrategy
1254 ).workersVirtualTaskEndTimestamp
.length
1255 ).toBe(pool
.workerNodes
.length
)
1256 // We need to clean up the resources after our test
1257 await pool
.destroy()
1260 it('Verify FAIR_SHARE strategy internals are resets after setting it', async () => {
1261 const workerChoiceStrategy
= WorkerChoiceStrategies
.FAIR_SHARE
1262 let pool
= new FixedThreadPool(
1264 './tests/worker-files/thread/testWorker.js'
1267 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
1268 workerChoiceStrategy
1269 ).workersVirtualTaskEndTimestamp
1270 ).toBeInstanceOf(Array
)
1272 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
1273 workerChoiceStrategy
1274 ).workersVirtualTaskEndTimestamp
.length
1276 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
1277 workerChoiceStrategy
1278 ).workersVirtualTaskEndTimestamp
[0] = performance
.now()
1280 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
1281 workerChoiceStrategy
1282 ).workersVirtualTaskEndTimestamp
.length
1284 pool
.setWorkerChoiceStrategy(workerChoiceStrategy
)
1286 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
1287 workerChoiceStrategy
1288 ).workersVirtualTaskEndTimestamp
1289 ).toBeInstanceOf(Array
)
1291 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
1292 workerChoiceStrategy
1293 ).workersVirtualTaskEndTimestamp
.length
1295 await pool
.destroy()
1296 pool
= new DynamicThreadPool(
1299 './tests/worker-files/thread/testWorker.js'
1302 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
1303 workerChoiceStrategy
1304 ).workersVirtualTaskEndTimestamp
1305 ).toBeInstanceOf(Array
)
1307 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
1308 workerChoiceStrategy
1309 ).workersVirtualTaskEndTimestamp
.length
1311 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
1312 workerChoiceStrategy
1313 ).workersVirtualTaskEndTimestamp
[0] = performance
.now()
1315 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
1316 workerChoiceStrategy
1317 ).workersVirtualTaskEndTimestamp
.length
1319 pool
.setWorkerChoiceStrategy(workerChoiceStrategy
)
1321 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
1322 workerChoiceStrategy
1323 ).workersVirtualTaskEndTimestamp
1324 ).toBeInstanceOf(Array
)
1326 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
1327 workerChoiceStrategy
1328 ).workersVirtualTaskEndTimestamp
.length
1330 // We need to clean up the resources after our test
1331 await pool
.destroy()
1334 it('Verify WEIGHTED_ROUND_ROBIN strategy default policy', async () => {
1335 const workerChoiceStrategy
= WorkerChoiceStrategies
.WEIGHTED_ROUND_ROBIN
1336 let pool
= new FixedThreadPool(
1338 './tests/worker-files/thread/testWorker.js',
1339 { workerChoiceStrategy
}
1341 expect(pool
.workerChoiceStrategyContext
.getStrategyPolicy()).toStrictEqual({
1342 useDynamicWorker
: true
1344 await pool
.destroy()
1345 pool
= new DynamicThreadPool(
1348 './tests/worker-files/thread/testWorker.js',
1349 { workerChoiceStrategy
}
1351 expect(pool
.workerChoiceStrategyContext
.getStrategyPolicy()).toStrictEqual({
1352 useDynamicWorker
: true
1354 // We need to clean up the resources after our test
1355 await pool
.destroy()
1358 it('Verify WEIGHTED_ROUND_ROBIN strategy default tasks statistics requirements', async () => {
1359 const workerChoiceStrategy
= WorkerChoiceStrategies
.WEIGHTED_ROUND_ROBIN
1360 let pool
= new FixedThreadPool(
1362 './tests/worker-files/thread/testWorker.js',
1363 { workerChoiceStrategy
}
1366 pool
.workerChoiceStrategyContext
.getTaskStatisticsRequirements()
1384 await pool
.destroy()
1385 pool
= new DynamicThreadPool(
1388 './tests/worker-files/thread/testWorker.js',
1389 { workerChoiceStrategy
}
1392 pool
.workerChoiceStrategyContext
.getTaskStatisticsRequirements()
1410 // We need to clean up the resources after our test
1411 await pool
.destroy()
1414 it('Verify WEIGHTED_ROUND_ROBIN strategy can be run in a fixed pool', async () => {
1415 const pool
= new FixedThreadPool(
1417 './tests/worker-files/thread/testWorker.js',
1418 { workerChoiceStrategy
: WorkerChoiceStrategies
.WEIGHTED_ROUND_ROBIN
}
1420 // TODO: Create a better test to cover `WeightedRoundRobinWorkerChoiceStrategy#choose`
1421 const promises
= new Set()
1422 const maxMultiplier
= 2
1423 for (let i
= 0; i
< max
* maxMultiplier
; i
++) {
1424 promises
.add(pool
.execute())
1426 await Promise
.all(promises
)
1427 for (const workerNode
of pool
.workerNodes
) {
1428 expect(workerNode
.workerUsage
).toStrictEqual({
1430 executed
: expect
.any(Number
),
1436 aggregate
: expect
.any(Number
),
1437 average
: expect
.any(Number
),
1439 history
: expect
.any(CircularArray
)
1445 history
: expect
.any(CircularArray
)
1452 history
: expect
.any(CircularArray
)
1458 history
: expect
.any(CircularArray
)
1463 expect(workerNode
.workerUsage
.tasks
.executed
).toBeGreaterThanOrEqual(0)
1464 expect(workerNode
.workerUsage
.tasks
.executed
).toBeLessThanOrEqual(
1467 expect(workerNode
.workerUsage
.runTime
.aggregate
).toBeGreaterThanOrEqual(0)
1468 expect(workerNode
.workerUsage
.runTime
.average
).toBeGreaterThanOrEqual(0)
1471 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
1472 pool
.workerChoiceStrategyContext
.workerChoiceStrategy
1473 ).defaultWorkerWeight
1474 ).toBeGreaterThan(0)
1476 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
1477 pool
.workerChoiceStrategyContext
.workerChoiceStrategy
1478 ).workerVirtualTaskRunTime
1479 ).toBeGreaterThanOrEqual(0)
1480 // We need to clean up the resources after our test
1481 await pool
.destroy()
1484 it('Verify WEIGHTED_ROUND_ROBIN strategy can be run in a dynamic pool', async () => {
1485 const pool
= new DynamicThreadPool(
1488 './tests/worker-files/thread/testWorker.js',
1489 { workerChoiceStrategy
: WorkerChoiceStrategies
.WEIGHTED_ROUND_ROBIN
}
1491 // TODO: Create a better test to cover `WeightedRoundRobinWorkerChoiceStrategy#choose`
1492 const promises
= new Set()
1493 const maxMultiplier
= 2
1494 for (let i
= 0; i
< max
* maxMultiplier
; i
++) {
1495 promises
.add(pool
.execute())
1497 await Promise
.all(promises
)
1498 for (const workerNode
of pool
.workerNodes
) {
1499 expect(workerNode
.workerUsage
).toStrictEqual({
1501 executed
: expect
.any(Number
),
1507 aggregate
: expect
.any(Number
),
1508 average
: expect
.any(Number
),
1510 history
: expect
.any(CircularArray
)
1516 history
: expect
.any(CircularArray
)
1523 history
: expect
.any(CircularArray
)
1529 history
: expect
.any(CircularArray
)
1534 expect(workerNode
.workerUsage
.tasks
.executed
).toBeGreaterThanOrEqual(0)
1535 expect(workerNode
.workerUsage
.tasks
.executed
).toBeLessThanOrEqual(
1538 expect(workerNode
.workerUsage
.runTime
.aggregate
).toBeGreaterThan(0)
1539 expect(workerNode
.workerUsage
.runTime
.average
).toBeGreaterThan(0)
1542 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
1543 pool
.workerChoiceStrategyContext
.workerChoiceStrategy
1544 ).defaultWorkerWeight
1545 ).toBeGreaterThan(0)
1547 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
1548 pool
.workerChoiceStrategyContext
.workerChoiceStrategy
1549 ).workerVirtualTaskRunTime
1550 ).toBeGreaterThanOrEqual(0)
1551 // We need to clean up the resources after our test
1552 await pool
.destroy()
1555 it('Verify WEIGHTED_ROUND_ROBIN strategy can be run in a dynamic pool with median runtime statistic', async () => {
1556 const pool
= new DynamicThreadPool(
1559 './tests/worker-files/thread/testWorker.js',
1561 workerChoiceStrategy
: WorkerChoiceStrategies
.WEIGHTED_ROUND_ROBIN
,
1562 workerChoiceStrategyOptions
: {
1563 runTime
: { median
: true }
1567 // TODO: Create a better test to cover `WeightedRoundRobinWorkerChoiceStrategy#choose`
1568 const promises
= new Set()
1569 const maxMultiplier
= 2
1570 for (let i
= 0; i
< max
* maxMultiplier
; i
++) {
1571 promises
.add(pool
.execute())
1573 await Promise
.all(promises
)
1574 for (const workerNode
of pool
.workerNodes
) {
1575 expect(workerNode
.workerUsage
).toStrictEqual({
1577 executed
: expect
.any(Number
),
1583 aggregate
: expect
.any(Number
),
1585 median
: expect
.any(Number
),
1586 history
: expect
.any(CircularArray
)
1592 history
: expect
.any(CircularArray
)
1599 history
: expect
.any(CircularArray
)
1605 history
: expect
.any(CircularArray
)
1610 expect(workerNode
.workerUsage
.tasks
.executed
).toBeGreaterThanOrEqual(0)
1611 expect(workerNode
.workerUsage
.tasks
.executed
).toBeLessThanOrEqual(
1614 expect(workerNode
.workerUsage
.runTime
.aggregate
).toBeGreaterThan(0)
1615 expect(workerNode
.workerUsage
.runTime
.median
).toBeGreaterThan(0)
1618 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
1619 pool
.workerChoiceStrategyContext
.workerChoiceStrategy
1620 ).defaultWorkerWeight
1621 ).toBeGreaterThan(0)
1623 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
1624 pool
.workerChoiceStrategyContext
.workerChoiceStrategy
1625 ).workerVirtualTaskRunTime
1626 ).toBeGreaterThanOrEqual(0)
1627 // We need to clean up the resources after our test
1628 await pool
.destroy()
1631 it('Verify WEIGHTED_ROUND_ROBIN strategy internals are resets after setting it', async () => {
1632 const workerChoiceStrategy
= WorkerChoiceStrategies
.WEIGHTED_ROUND_ROBIN
1633 let pool
= new FixedThreadPool(
1635 './tests/worker-files/thread/testWorker.js'
1638 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
1639 workerChoiceStrategy
1640 ).currentWorkerNodeId
1643 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
1644 workerChoiceStrategy
1645 ).defaultWorkerWeight
1648 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
1649 workerChoiceStrategy
1650 ).workerVirtualTaskRunTime
1652 pool
.setWorkerChoiceStrategy(workerChoiceStrategy
)
1654 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
1655 pool
.workerChoiceStrategyContext
.workerChoiceStrategy
1656 ).currentWorkerNodeId
1659 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
1660 pool
.workerChoiceStrategyContext
.workerChoiceStrategy
1661 ).defaultWorkerWeight
1662 ).toBeGreaterThan(0)
1664 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
1665 workerChoiceStrategy
1666 ).workerVirtualTaskRunTime
1668 await pool
.destroy()
1669 pool
= new DynamicThreadPool(
1672 './tests/worker-files/thread/testWorker.js'
1675 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
1676 workerChoiceStrategy
1677 ).currentWorkerNodeId
1680 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
1681 workerChoiceStrategy
1682 ).defaultWorkerWeight
1685 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
1686 workerChoiceStrategy
1687 ).workerVirtualTaskRunTime
1689 pool
.setWorkerChoiceStrategy(workerChoiceStrategy
)
1691 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
1692 pool
.workerChoiceStrategyContext
.workerChoiceStrategy
1693 ).currentWorkerNodeId
1696 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
1697 pool
.workerChoiceStrategyContext
.workerChoiceStrategy
1698 ).defaultWorkerWeight
1699 ).toBeGreaterThan(0)
1701 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
1702 workerChoiceStrategy
1703 ).workerVirtualTaskRunTime
1705 // We need to clean up the resources after our test
1706 await pool
.destroy()
1709 it('Verify INTERLEAVED_WEIGHTED_ROUND_ROBIN strategy default policy', async () => {
1710 const workerChoiceStrategy
=
1711 WorkerChoiceStrategies
.INTERLEAVED_WEIGHTED_ROUND_ROBIN
1712 let pool
= new FixedThreadPool(
1714 './tests/worker-files/thread/testWorker.js',
1715 { workerChoiceStrategy
}
1717 expect(pool
.workerChoiceStrategyContext
.getStrategyPolicy()).toStrictEqual({
1718 useDynamicWorker
: true
1720 await pool
.destroy()
1721 pool
= new DynamicThreadPool(
1724 './tests/worker-files/thread/testWorker.js',
1725 { workerChoiceStrategy
}
1727 expect(pool
.workerChoiceStrategyContext
.getStrategyPolicy()).toStrictEqual({
1728 useDynamicWorker
: true
1730 // We need to clean up the resources after our test
1731 await pool
.destroy()
1734 it('Verify INTERLEAVED_WEIGHTED_ROUND_ROBIN strategy default tasks statistics requirements', async () => {
1735 const workerChoiceStrategy
=
1736 WorkerChoiceStrategies
.INTERLEAVED_WEIGHTED_ROUND_ROBIN
1737 let pool
= new FixedThreadPool(
1739 './tests/worker-files/thread/testWorker.js',
1740 { workerChoiceStrategy
}
1743 pool
.workerChoiceStrategyContext
.getTaskStatisticsRequirements()
1761 await pool
.destroy()
1762 pool
= new DynamicThreadPool(
1765 './tests/worker-files/thread/testWorker.js',
1766 { workerChoiceStrategy
}
1769 pool
.workerChoiceStrategyContext
.getTaskStatisticsRequirements()
1787 // We need to clean up the resources after our test
1788 await pool
.destroy()
1791 it('Verify INTERLEAVED_WEIGHTED_ROUND_ROBIN strategy can be run in a fixed pool', async () => {
1792 const pool
= new FixedThreadPool(
1794 './tests/worker-files/thread/testWorker.js',
1796 workerChoiceStrategy
:
1797 WorkerChoiceStrategies
.INTERLEAVED_WEIGHTED_ROUND_ROBIN
1800 // TODO: Create a better test to cover `InterleavedWeightedRoundRobinWorkerChoiceStrategy#choose`
1801 const promises
= new Set()
1802 const maxMultiplier
= 2
1803 for (let i
= 0; i
< max
* maxMultiplier
; i
++) {
1804 promises
.add(pool
.execute())
1806 await Promise
.all(promises
)
1807 for (const workerNode
of pool
.workerNodes
) {
1808 expect(workerNode
.workerUsage
).toStrictEqual({
1810 executed
: maxMultiplier
,
1819 history
: expect
.any(CircularArray
)
1825 history
: expect
.any(CircularArray
)
1832 history
: expect
.any(CircularArray
)
1838 history
: expect
.any(CircularArray
)
1845 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
1846 pool
.workerChoiceStrategyContext
.workerChoiceStrategy
1847 ).defaultWorkerWeight
1848 ).toBeGreaterThan(0)
1850 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
1851 pool
.workerChoiceStrategyContext
.workerChoiceStrategy
1855 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
1856 pool
.workerChoiceStrategyContext
.workerChoiceStrategy
1857 ).currentWorkerNodeId
1860 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
1861 pool
.workerChoiceStrategyContext
.workerChoiceStrategy
1864 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
1865 pool
.workerChoiceStrategyContext
.workerChoiceStrategy
1866 ).defaultWorkerWeight
1868 // We need to clean up the resources after our test
1869 await pool
.destroy()
1872 it('Verify INTERLEAVED_WEIGHTED_ROUND_ROBIN strategy can be run in a dynamic pool', async () => {
1873 const pool
= new DynamicThreadPool(
1876 './tests/worker-files/thread/testWorker.js',
1878 workerChoiceStrategy
:
1879 WorkerChoiceStrategies
.INTERLEAVED_WEIGHTED_ROUND_ROBIN
1882 // TODO: Create a better test to cover `InterleavedWeightedRoundRobinWorkerChoiceStrategy#choose`
1883 const promises
= new Set()
1884 const maxMultiplier
= 2
1885 for (let i
= 0; i
< max
* maxMultiplier
; i
++) {
1886 promises
.add(pool
.execute())
1888 await Promise
.all(promises
)
1889 for (const workerNode
of pool
.workerNodes
) {
1890 expect(workerNode
.workerUsage
).toStrictEqual({
1892 executed
: maxMultiplier
,
1901 history
: expect
.any(CircularArray
)
1907 history
: expect
.any(CircularArray
)
1914 history
: expect
.any(CircularArray
)
1920 history
: expect
.any(CircularArray
)
1927 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
1928 pool
.workerChoiceStrategyContext
.workerChoiceStrategy
1929 ).defaultWorkerWeight
1930 ).toBeGreaterThan(0)
1932 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
1933 pool
.workerChoiceStrategyContext
.workerChoiceStrategy
1937 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
1938 pool
.workerChoiceStrategyContext
.workerChoiceStrategy
1939 ).currentWorkerNodeId
1942 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
1943 pool
.workerChoiceStrategyContext
.workerChoiceStrategy
1946 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
1947 pool
.workerChoiceStrategyContext
.workerChoiceStrategy
1948 ).defaultWorkerWeight
1950 // We need to clean up the resources after our test
1951 await pool
.destroy()
1954 it('Verify INTERLEAVED_WEIGHTED_ROUND_ROBIN strategy internals are resets after setting it', async () => {
1955 const workerChoiceStrategy
=
1956 WorkerChoiceStrategies
.INTERLEAVED_WEIGHTED_ROUND_ROBIN
1957 let pool
= new FixedThreadPool(
1959 './tests/worker-files/thread/testWorker.js'
1962 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
1963 workerChoiceStrategy
1967 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
1968 workerChoiceStrategy
1969 ).currentWorkerNodeId
1972 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
1973 workerChoiceStrategy
1974 ).defaultWorkerWeight
1977 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
1978 workerChoiceStrategy
1981 pool
.setWorkerChoiceStrategy(workerChoiceStrategy
)
1983 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
1984 workerChoiceStrategy
1988 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
1989 pool
.workerChoiceStrategyContext
.workerChoiceStrategy
1990 ).currentWorkerNodeId
1993 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
1994 pool
.workerChoiceStrategyContext
.workerChoiceStrategy
1995 ).defaultWorkerWeight
1996 ).toBeGreaterThan(0)
1998 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
1999 workerChoiceStrategy
2002 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
2003 pool
.workerChoiceStrategyContext
.workerChoiceStrategy
2004 ).defaultWorkerWeight
2006 await pool
.destroy()
2007 pool
= new DynamicThreadPool(
2010 './tests/worker-files/thread/testWorker.js'
2013 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
2014 workerChoiceStrategy
2018 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
2019 workerChoiceStrategy
2020 ).currentWorkerNodeId
2023 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
2024 workerChoiceStrategy
2025 ).defaultWorkerWeight
2028 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
2029 workerChoiceStrategy
2032 pool
.setWorkerChoiceStrategy(workerChoiceStrategy
)
2034 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
2035 pool
.workerChoiceStrategyContext
.workerChoiceStrategy
2036 ).currentWorkerNodeId
2039 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
2040 pool
.workerChoiceStrategyContext
.workerChoiceStrategy
2041 ).defaultWorkerWeight
2042 ).toBeGreaterThan(0)
2044 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
2045 workerChoiceStrategy
2048 pool
.workerChoiceStrategyContext
.workerChoiceStrategies
.get(
2049 pool
.workerChoiceStrategyContext
.workerChoiceStrategy
2050 ).defaultWorkerWeight
2052 // We need to clean up the resources after our test
2053 await pool
.destroy()
2056 it('Verify unknown strategy throw error', () => {
2059 new DynamicThreadPool(
2062 './tests/worker-files/thread/testWorker.js',
2063 { workerChoiceStrategy
: 'UNKNOWN_STRATEGY' }
2065 ).toThrowError("Invalid worker choice strategy 'UNKNOWN_STRATEGY'")