Merge branch 'master' into task-functions-properties
[poolifier.git] / tests / pools / selection-strategies / weighted-round-robin-worker-choice-strategy.test.mjs
index c659b31e7bcc2dec1db31a0a7554b1b82cb6c549..80c5ec7c65b7f808e230870060bd6270da111100 100644 (file)
@@ -1,8 +1,10 @@
+import { randomInt } from 'node:crypto'
+
 import { expect } from 'expect'
-import { restore } from 'sinon'
-import { FixedThreadPool } from '../../../lib/index.js'
-import { WeightedRoundRobinWorkerChoiceStrategy } from '../../../lib/pools/selection-strategies/weighted-round-robin-worker-choice-strategy.js'
-import { generateRandomInteger } from '../../test-utils.js'
+
+import { FixedThreadPool } from '../../../lib/index.cjs'
+import { InterleavedWeightedRoundRobinWorkerChoiceStrategy } from '../../../lib/pools/selection-strategies/interleaved-weighted-round-robin-worker-choice-strategy.cjs'
+import { WeightedRoundRobinWorkerChoiceStrategy } from '../../../lib/pools/selection-strategies/weighted-round-robin-worker-choice-strategy.cjs'
 
 describe('Weighted round robin strategy worker choice strategy test suite', () => {
   // const min = 1
@@ -10,27 +12,47 @@ describe('Weighted round robin strategy worker choice strategy test suite', () =
   let pool
 
   before(() => {
-    pool = new FixedThreadPool(max, './tests/worker-files/thread/testWorker.js')
-  })
-
-  afterEach(() => {
-    restore()
+    pool = new FixedThreadPool(
+      max,
+      './tests/worker-files/thread/testWorker.mjs'
+    )
   })
 
   after(async () => {
     await pool.destroy()
   })
 
-  it('Verify that reset() resets internals', () => {
+  it('Verify that WRR reset() resets internals', () => {
     const strategy = new WeightedRoundRobinWorkerChoiceStrategy(pool)
-    strategy.currentWorkerId = generateRandomInteger(Number.MAX_SAFE_INTEGER, 1)
-    strategy.workerVirtualTaskRunTime = generateRandomInteger(
-      Number.MAX_SAFE_INTEGER,
-      1
-    )
+    strategy.nextWorkerNodeKey = randomInt(1, 281474976710656)
+    strategy.previousWorkerNodeKey = randomInt(1, 281474976710656)
+    strategy.workerNodeVirtualTaskRunTime = randomInt(1, 281474976710656)
+    expect(strategy.nextWorkerNodeKey).toBeGreaterThan(0)
+    expect(strategy.previousWorkerNodeKey).toBeGreaterThan(0)
+    expect(strategy.workerNodeVirtualTaskRunTime).toBeGreaterThan(0)
+    expect(strategy.reset()).toBe(true)
+    expect(strategy.nextWorkerNodeKey).toBe(0)
+    expect(strategy.previousWorkerNodeKey).toBe(0)
+    expect(strategy.workerNodeVirtualTaskRunTime).toBe(0)
+  })
+
+  it('Verify that IWRR reset() resets internals', () => {
+    const strategy = new InterleavedWeightedRoundRobinWorkerChoiceStrategy(pool)
+    strategy.nextWorkerNodeKey = randomInt(1, 281474976710656)
+    strategy.previousWorkerNodeKey = randomInt(1, 281474976710656)
+    strategy.roundId = randomInt(1, 281474976710656)
+    strategy.workerNodeId = randomInt(1, 281474976710656)
+    strategy.workerNodeVirtualTaskRunTime = randomInt(1, 281474976710656)
+    expect(strategy.nextWorkerNodeKey).toBeGreaterThan(0)
+    expect(strategy.previousWorkerNodeKey).toBeGreaterThan(0)
+    expect(strategy.roundId).toBeGreaterThan(0)
+    expect(strategy.workerNodeId).toBeGreaterThan(0)
+    expect(strategy.workerNodeVirtualTaskRunTime).toBeGreaterThan(0)
     expect(strategy.reset()).toBe(true)
     expect(strategy.nextWorkerNodeKey).toBe(0)
     expect(strategy.previousWorkerNodeKey).toBe(0)
+    expect(strategy.roundId).toBe(0)
+    expect(strategy.workerNodeId).toBe(0)
     expect(strategy.workerNodeVirtualTaskRunTime).toBe(0)
   })
 })