X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;ds=sidebyside;f=tests%2Fpools%2Fselection-strategies%2Fselection-strategies.test.mjs;h=0e7f19fbdf0abe23685f31059328caa975ced2a3;hb=2717674c56c2caae531507e7d4e0068f4d4c8918;hp=4a2ace0469d1da108fe49e3c5f776ab3ad8a5825;hpb=6349b7551b1060472ed8c97dd01ef0c827d62278;p=poolifier.git diff --git a/tests/pools/selection-strategies/selection-strategies.test.mjs b/tests/pools/selection-strategies/selection-strategies.test.mjs index 4a2ace04..0e7f19fb 100644 --- a/tests/pools/selection-strategies/selection-strategies.test.mjs +++ b/tests/pools/selection-strategies/selection-strategies.test.mjs @@ -1,12 +1,15 @@ +import { randomInt } from 'node:crypto' + import { expect } from 'expect' + +import { CircularArray } from '../../../lib/circular-array.cjs' import { DynamicClusterPool, DynamicThreadPool, FixedClusterPool, FixedThreadPool, WorkerChoiceStrategies -} from '../../../lib/index.js' -import { CircularArray } from '../../../lib/circular-array.js' +} from '../../../lib/index.cjs' describe('Selection strategies test suite', () => { const min = 0 @@ -35,6 +38,9 @@ describe('Selection strategies test suite', () => { expect(pool.opts.workerChoiceStrategy).toBe( WorkerChoiceStrategies.ROUND_ROBIN ) + expect(pool.workerChoiceStrategiesContext.defaultWorkerChoiceStrategy).toBe( + WorkerChoiceStrategies.ROUND_ROBIN + ) // We need to clean up the resources after our test await pool.destroy() }) @@ -47,9 +53,9 @@ describe('Selection strategies test suite', () => { { workerChoiceStrategy } ) expect(pool.opts.workerChoiceStrategy).toBe(workerChoiceStrategy) - expect(pool.workerChoiceStrategyContext.workerChoiceStrategy).toBe( - workerChoiceStrategy - ) + expect( + pool.workerChoiceStrategiesContext.defaultWorkerChoiceStrategy + ).toBe(workerChoiceStrategy) await pool.destroy() } }) @@ -63,63 +69,40 @@ describe('Selection strategies test suite', () => { ) pool.setWorkerChoiceStrategy(workerChoiceStrategy) expect(pool.opts.workerChoiceStrategy).toBe(workerChoiceStrategy) - expect(pool.workerChoiceStrategyContext.workerChoiceStrategy).toBe( - workerChoiceStrategy - ) - expect(pool.opts.workerChoiceStrategyOptions).toStrictEqual({ - retries: 6, - runTime: { median: false }, - waitTime: { median: false }, - elu: { median: false } - }) - expect(pool.workerChoiceStrategyContext.opts).toStrictEqual({ - retries: 6, - runTime: { median: false }, - waitTime: { median: false }, - elu: { median: false } - }) + expect( + pool.workerChoiceStrategiesContext.defaultWorkerChoiceStrategy + ).toBe(workerChoiceStrategy) await pool.destroy() } for (const workerChoiceStrategy of Object.values(WorkerChoiceStrategies)) { const pool = new DynamicClusterPool( min, max, - './tests/worker-files/cluster/testWorker.js' + './tests/worker-files/cluster/testWorker.cjs' ) - pool.setWorkerChoiceStrategy(workerChoiceStrategy, { retries: 3 }) + pool.setWorkerChoiceStrategy(workerChoiceStrategy) expect(pool.opts.workerChoiceStrategy).toBe(workerChoiceStrategy) - expect(pool.workerChoiceStrategyContext.workerChoiceStrategy).toBe( - workerChoiceStrategy - ) - expect(pool.opts.workerChoiceStrategyOptions).toStrictEqual({ - retries: 3, - runTime: { median: false }, - waitTime: { median: false }, - elu: { median: false } - }) - expect(pool.workerChoiceStrategyContext.opts).toStrictEqual({ - retries: 3, - runTime: { median: false }, - waitTime: { median: false }, - elu: { median: false } - }) + expect( + pool.workerChoiceStrategiesContext.defaultWorkerChoiceStrategy + ).toBe(workerChoiceStrategy) await pool.destroy() } }) it('Verify available strategies default internals at pool creation', async () => { - const pool = new FixedThreadPool( - max, - './tests/worker-files/thread/testWorker.mjs' - ) for (const workerChoiceStrategy of Object.values(WorkerChoiceStrategies)) { + const pool = new FixedThreadPool( + max, + './tests/worker-files/thread/testWorker.mjs', + { workerChoiceStrategy } + ) expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( workerChoiceStrategy ).nextWorkerNodeKey ).toBe(0) expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( workerChoiceStrategy ).previousWorkerNodeKey ).toBe(0) @@ -127,12 +110,7 @@ describe('Selection strategies test suite', () => { workerChoiceStrategy === WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN ) { expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - workerChoiceStrategy - ).defaultWorkerWeight - ).toBeGreaterThan(0) - expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( workerChoiceStrategy ).workerNodeVirtualTaskRunTime ).toBe(0) @@ -141,37 +119,35 @@ describe('Selection strategies test suite', () => { WorkerChoiceStrategies.INTERLEAVED_WEIGHTED_ROUND_ROBIN ) { expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - workerChoiceStrategy - ).defaultWorkerWeight - ).toBeGreaterThan(0) - expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( workerChoiceStrategy ).workerNodeVirtualTaskRunTime ).toBe(0) expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( workerChoiceStrategy ).roundId ).toBe(0) expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( workerChoiceStrategy ).workerNodeId ).toBe(0) expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - workerChoiceStrategy - ).roundWeights - ).toStrictEqual([ - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( workerChoiceStrategy - ).defaultWorkerWeight - ]) + ).roundWeights.length + ).toBe(1) + expect( + Number.isSafeInteger( + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + workerChoiceStrategy + ).roundWeights[0] + ) + ).toBe(true) } + await pool.destroy() } - await pool.destroy() }) it('Verify ROUND_ROBIN strategy default policy', async () => { @@ -181,7 +157,7 @@ describe('Selection strategies test suite', () => { './tests/worker-files/thread/testWorker.mjs', { workerChoiceStrategy } ) - expect(pool.workerChoiceStrategyContext.getStrategyPolicy()).toStrictEqual({ + expect(pool.workerChoiceStrategiesContext.getPolicy()).toStrictEqual({ dynamicWorkerUsage: false, dynamicWorkerReady: true }) @@ -192,7 +168,7 @@ describe('Selection strategies test suite', () => { './tests/worker-files/thread/testWorker.mjs', { workerChoiceStrategy } ) - expect(pool.workerChoiceStrategyContext.getStrategyPolicy()).toStrictEqual({ + expect(pool.workerChoiceStrategiesContext.getPolicy()).toStrictEqual({ dynamicWorkerUsage: false, dynamicWorkerReady: true }) @@ -208,7 +184,7 @@ describe('Selection strategies test suite', () => { { workerChoiceStrategy } ) expect( - pool.workerChoiceStrategyContext.getTaskStatisticsRequirements() + pool.workerChoiceStrategiesContext.getTaskStatisticsRequirements() ).toStrictEqual({ runTime: { aggregate: false, @@ -234,7 +210,7 @@ describe('Selection strategies test suite', () => { { workerChoiceStrategy } ) expect( - pool.workerChoiceStrategyContext.getTaskStatisticsRequirements() + pool.workerChoiceStrategiesContext.getTaskStatisticsRequirements() ).toStrictEqual({ runTime: { aggregate: false, @@ -277,8 +253,8 @@ describe('Selection strategies test suite', () => { executing: 0, queued: 0, maxQueued: 0, - stolen: 0, sequentiallyStolen: 0, + stolen: 0, failed: 0 }, runTime: { @@ -298,13 +274,13 @@ describe('Selection strategies test suite', () => { }) } expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.defaultWorkerChoiceStrategy ).nextWorkerNodeKey ).toBe(0) expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.defaultWorkerChoiceStrategy ).previousWorkerNodeKey ).toBe(pool.workerNodes.length - 1) // We need to clean up the resources after our test @@ -333,8 +309,8 @@ describe('Selection strategies test suite', () => { executing: 0, queued: 0, maxQueued: 0, - stolen: 0, sequentiallyStolen: 0, + stolen: 0, failed: 0 }, runTime: { @@ -358,13 +334,13 @@ describe('Selection strategies test suite', () => { ) } expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.defaultWorkerChoiceStrategy ).nextWorkerNodeKey ).toBe(0) expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.defaultWorkerChoiceStrategy ).previousWorkerNodeKey ).toBe(pool.workerNodes.length - 1) // We need to clean up the resources after our test @@ -375,7 +351,7 @@ describe('Selection strategies test suite', () => { const workerChoiceStrategy = WorkerChoiceStrategies.ROUND_ROBIN let pool = new FixedClusterPool( max, - './tests/worker-files/cluster/testWorker.js', + './tests/worker-files/cluster/testWorker.cjs', { workerChoiceStrategy } ) let results = new Set() @@ -397,62 +373,54 @@ describe('Selection strategies test suite', () => { await pool.destroy() }) - it('Verify ROUND_ROBIN strategy internals are resets after setting it', async () => { + it("Verify ROUND_ROBIN strategy internals aren't reset after setting it", async () => { const workerChoiceStrategy = WorkerChoiceStrategies.ROUND_ROBIN let pool = new FixedThreadPool( max, './tests/worker-files/thread/testWorker.mjs', - { workerChoiceStrategy: WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN } + { workerChoiceStrategy } ) - expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy - ).nextWorkerNodeKey - ).toBeDefined() - expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy - ).previousWorkerNodeKey - ).toBeDefined() + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.defaultWorkerChoiceStrategy + ).nextWorkerNodeKey = randomInt(1, max - 1) + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.defaultWorkerChoiceStrategy + ).previousWorkerNodeKey = randomInt(1, max - 1) pool.setWorkerChoiceStrategy(workerChoiceStrategy) expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.defaultWorkerChoiceStrategy ).nextWorkerNodeKey - ).toBe(0) + ).toBeGreaterThan(0) expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.defaultWorkerChoiceStrategy ).previousWorkerNodeKey - ).toBe(0) + ).toBeGreaterThan(0) await pool.destroy() pool = new DynamicThreadPool( min, max, './tests/worker-files/thread/testWorker.mjs', - { workerChoiceStrategy: WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN } + { workerChoiceStrategy } ) - expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy - ).nextWorkerNodeKey - ).toBeDefined() - expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy - ).previousWorkerNodeKey - ).toBeDefined() + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.defaultWorkerChoiceStrategy + ).nextWorkerNodeKey = randomInt(1, max - 1) + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.defaultWorkerChoiceStrategy + ).previousWorkerNodeKey = randomInt(1, max - 1) pool.setWorkerChoiceStrategy(workerChoiceStrategy) expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.defaultWorkerChoiceStrategy ).nextWorkerNodeKey - ).toBe(0) + ).toBeGreaterThan(0) expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.defaultWorkerChoiceStrategy ).previousWorkerNodeKey - ).toBe(0) + ).toBeGreaterThan(0) // We need to clean up the resources after our test await pool.destroy() }) @@ -464,7 +432,7 @@ describe('Selection strategies test suite', () => { './tests/worker-files/thread/testWorker.mjs', { workerChoiceStrategy } ) - expect(pool.workerChoiceStrategyContext.getStrategyPolicy()).toStrictEqual({ + expect(pool.workerChoiceStrategiesContext.getPolicy()).toStrictEqual({ dynamicWorkerUsage: false, dynamicWorkerReady: true }) @@ -475,7 +443,7 @@ describe('Selection strategies test suite', () => { './tests/worker-files/thread/testWorker.mjs', { workerChoiceStrategy } ) - expect(pool.workerChoiceStrategyContext.getStrategyPolicy()).toStrictEqual({ + expect(pool.workerChoiceStrategiesContext.getPolicy()).toStrictEqual({ dynamicWorkerUsage: false, dynamicWorkerReady: true }) @@ -491,7 +459,7 @@ describe('Selection strategies test suite', () => { { workerChoiceStrategy } ) expect( - pool.workerChoiceStrategyContext.getTaskStatisticsRequirements() + pool.workerChoiceStrategiesContext.getTaskStatisticsRequirements() ).toStrictEqual({ runTime: { aggregate: false, @@ -517,7 +485,7 @@ describe('Selection strategies test suite', () => { { workerChoiceStrategy } ) expect( - pool.workerChoiceStrategyContext.getTaskStatisticsRequirements() + pool.workerChoiceStrategiesContext.getTaskStatisticsRequirements() ).toStrictEqual({ runTime: { aggregate: false, @@ -559,8 +527,8 @@ describe('Selection strategies test suite', () => { executing: 0, queued: 0, maxQueued: 0, - stolen: 0, sequentiallyStolen: 0, + stolen: 0, failed: 0 }, runTime: { @@ -584,13 +552,13 @@ describe('Selection strategies test suite', () => { ) } expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.defaultWorkerChoiceStrategy ).nextWorkerNodeKey ).toEqual(expect.any(Number)) expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.defaultWorkerChoiceStrategy ).previousWorkerNodeKey ).toEqual(expect.any(Number)) // We need to clean up the resources after our test @@ -618,8 +586,8 @@ describe('Selection strategies test suite', () => { executing: 0, queued: 0, maxQueued: 0, - stolen: 0, sequentiallyStolen: 0, + stolen: 0, failed: 0 }, runTime: { @@ -643,13 +611,13 @@ describe('Selection strategies test suite', () => { ) } expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.defaultWorkerChoiceStrategy ).nextWorkerNodeKey ).toEqual(expect.any(Number)) expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.defaultWorkerChoiceStrategy ).previousWorkerNodeKey ).toEqual(expect.any(Number)) // We need to clean up the resources after our test @@ -663,7 +631,7 @@ describe('Selection strategies test suite', () => { './tests/worker-files/thread/testWorker.mjs', { workerChoiceStrategy } ) - expect(pool.workerChoiceStrategyContext.getStrategyPolicy()).toStrictEqual({ + expect(pool.workerChoiceStrategiesContext.getPolicy()).toStrictEqual({ dynamicWorkerUsage: false, dynamicWorkerReady: true }) @@ -674,7 +642,7 @@ describe('Selection strategies test suite', () => { './tests/worker-files/thread/testWorker.mjs', { workerChoiceStrategy } ) - expect(pool.workerChoiceStrategyContext.getStrategyPolicy()).toStrictEqual({ + expect(pool.workerChoiceStrategiesContext.getPolicy()).toStrictEqual({ dynamicWorkerUsage: false, dynamicWorkerReady: true }) @@ -690,7 +658,7 @@ describe('Selection strategies test suite', () => { { workerChoiceStrategy } ) expect( - pool.workerChoiceStrategyContext.getTaskStatisticsRequirements() + pool.workerChoiceStrategiesContext.getTaskStatisticsRequirements() ).toStrictEqual({ runTime: { aggregate: true, @@ -716,7 +684,7 @@ describe('Selection strategies test suite', () => { { workerChoiceStrategy } ) expect( - pool.workerChoiceStrategyContext.getTaskStatisticsRequirements() + pool.workerChoiceStrategiesContext.getTaskStatisticsRequirements() ).toStrictEqual({ runTime: { aggregate: true, @@ -758,8 +726,8 @@ describe('Selection strategies test suite', () => { executing: 0, queued: 0, maxQueued: 0, - stolen: 0, sequentiallyStolen: 0, + stolen: 0, failed: 0 }, runTime: expect.objectContaining({ @@ -793,13 +761,13 @@ describe('Selection strategies test suite', () => { } } expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.defaultWorkerChoiceStrategy ).nextWorkerNodeKey ).toEqual(expect.any(Number)) expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.defaultWorkerChoiceStrategy ).previousWorkerNodeKey ).toEqual(expect.any(Number)) // We need to clean up the resources after our test @@ -827,8 +795,8 @@ describe('Selection strategies test suite', () => { executing: 0, queued: 0, maxQueued: 0, - stolen: 0, sequentiallyStolen: 0, + stolen: 0, failed: 0 }, runTime: expect.objectContaining({ @@ -862,13 +830,13 @@ describe('Selection strategies test suite', () => { } } expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.defaultWorkerChoiceStrategy ).nextWorkerNodeKey ).toEqual(expect.any(Number)) expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.defaultWorkerChoiceStrategy ).previousWorkerNodeKey ).toEqual(expect.any(Number)) // We need to clean up the resources after our test @@ -882,7 +850,7 @@ describe('Selection strategies test suite', () => { './tests/worker-files/thread/testWorker.mjs', { workerChoiceStrategy } ) - expect(pool.workerChoiceStrategyContext.getStrategyPolicy()).toStrictEqual({ + expect(pool.workerChoiceStrategiesContext.getPolicy()).toStrictEqual({ dynamicWorkerUsage: false, dynamicWorkerReady: true }) @@ -893,7 +861,7 @@ describe('Selection strategies test suite', () => { './tests/worker-files/thread/testWorker.mjs', { workerChoiceStrategy } ) - expect(pool.workerChoiceStrategyContext.getStrategyPolicy()).toStrictEqual({ + expect(pool.workerChoiceStrategiesContext.getPolicy()).toStrictEqual({ dynamicWorkerUsage: false, dynamicWorkerReady: true }) @@ -909,7 +877,7 @@ describe('Selection strategies test suite', () => { { workerChoiceStrategy } ) expect( - pool.workerChoiceStrategyContext.getTaskStatisticsRequirements() + pool.workerChoiceStrategiesContext.getTaskStatisticsRequirements() ).toStrictEqual({ runTime: { aggregate: false, @@ -935,7 +903,7 @@ describe('Selection strategies test suite', () => { { workerChoiceStrategy } ) expect( - pool.workerChoiceStrategyContext.getTaskStatisticsRequirements() + pool.workerChoiceStrategiesContext.getTaskStatisticsRequirements() ).toStrictEqual({ runTime: { aggregate: false, @@ -977,8 +945,8 @@ describe('Selection strategies test suite', () => { executing: 0, queued: 0, maxQueued: 0, - stolen: 0, sequentiallyStolen: 0, + stolen: 0, failed: 0 }, runTime: { @@ -1018,13 +986,13 @@ describe('Selection strategies test suite', () => { } } expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.defaultWorkerChoiceStrategy ).nextWorkerNodeKey ).toEqual(expect.any(Number)) expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.defaultWorkerChoiceStrategy ).previousWorkerNodeKey ).toEqual(expect.any(Number)) // We need to clean up the resources after our test @@ -1052,8 +1020,8 @@ describe('Selection strategies test suite', () => { executing: 0, queued: 0, maxQueued: 0, - stolen: 0, sequentiallyStolen: 0, + stolen: 0, failed: 0 }, runTime: { @@ -1093,13 +1061,13 @@ describe('Selection strategies test suite', () => { } } expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.defaultWorkerChoiceStrategy ).nextWorkerNodeKey ).toEqual(expect.any(Number)) expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.defaultWorkerChoiceStrategy ).previousWorkerNodeKey ).toEqual(expect.any(Number)) // We need to clean up the resources after our test @@ -1113,7 +1081,7 @@ describe('Selection strategies test suite', () => { './tests/worker-files/thread/testWorker.mjs', { workerChoiceStrategy } ) - expect(pool.workerChoiceStrategyContext.getStrategyPolicy()).toStrictEqual({ + expect(pool.workerChoiceStrategiesContext.getPolicy()).toStrictEqual({ dynamicWorkerUsage: false, dynamicWorkerReady: true }) @@ -1124,7 +1092,7 @@ describe('Selection strategies test suite', () => { './tests/worker-files/thread/testWorker.mjs', { workerChoiceStrategy } ) - expect(pool.workerChoiceStrategyContext.getStrategyPolicy()).toStrictEqual({ + expect(pool.workerChoiceStrategiesContext.getPolicy()).toStrictEqual({ dynamicWorkerUsage: false, dynamicWorkerReady: true }) @@ -1140,7 +1108,7 @@ describe('Selection strategies test suite', () => { { workerChoiceStrategy } ) expect( - pool.workerChoiceStrategyContext.getTaskStatisticsRequirements() + pool.workerChoiceStrategiesContext.getTaskStatisticsRequirements() ).toStrictEqual({ runTime: { aggregate: true, @@ -1166,7 +1134,7 @@ describe('Selection strategies test suite', () => { { workerChoiceStrategy } ) expect( - pool.workerChoiceStrategyContext.getTaskStatisticsRequirements() + pool.workerChoiceStrategiesContext.getTaskStatisticsRequirements() ).toStrictEqual({ runTime: { aggregate: true, @@ -1208,8 +1176,8 @@ describe('Selection strategies test suite', () => { executing: 0, queued: 0, maxQueued: 0, - stolen: 0, sequentiallyStolen: 0, + stolen: 0, failed: 0 }, runTime: expect.objectContaining({ @@ -1260,13 +1228,13 @@ describe('Selection strategies test suite', () => { expect(workerNode.strategyData.virtualTaskEndTimestamp).toBeGreaterThan(0) } expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.defaultWorkerChoiceStrategy ).nextWorkerNodeKey ).toEqual(expect.any(Number)) expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.defaultWorkerChoiceStrategy ).previousWorkerNodeKey ).toEqual(expect.any(Number)) // We need to clean up the resources after our test @@ -1294,8 +1262,8 @@ describe('Selection strategies test suite', () => { executing: 0, queued: 0, maxQueued: 0, - stolen: 0, sequentiallyStolen: 0, + stolen: 0, failed: 0 }, runTime: expect.objectContaining({ @@ -1346,13 +1314,13 @@ describe('Selection strategies test suite', () => { expect(workerNode.strategyData.virtualTaskEndTimestamp).toBeGreaterThan(0) } expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.defaultWorkerChoiceStrategy ).nextWorkerNodeKey ).toEqual(expect.any(Number)) expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.defaultWorkerChoiceStrategy ).previousWorkerNodeKey ).toEqual(expect.any(Number)) // We need to clean up the resources after our test @@ -1385,8 +1353,8 @@ describe('Selection strategies test suite', () => { executing: 0, queued: 0, maxQueued: 0, - stolen: 0, sequentiallyStolen: 0, + stolen: 0, failed: 0 }, runTime: expect.objectContaining({ @@ -1437,20 +1405,20 @@ describe('Selection strategies test suite', () => { expect(workerNode.strategyData.virtualTaskEndTimestamp).toBeGreaterThan(0) } expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.defaultWorkerChoiceStrategy ).nextWorkerNodeKey ).toEqual(expect.any(Number)) expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.defaultWorkerChoiceStrategy ).previousWorkerNodeKey ).toEqual(expect.any(Number)) // We need to clean up the resources after our test await pool.destroy() }) - it('Verify FAIR_SHARE strategy internals are resets after setting it', async () => { + it("Verify FAIR_SHARE strategy internals aren't reset after setting it", async () => { const workerChoiceStrategy = WorkerChoiceStrategies.FAIR_SHARE let pool = new FixedThreadPool( max, @@ -1463,7 +1431,7 @@ describe('Selection strategies test suite', () => { } pool.setWorkerChoiceStrategy(workerChoiceStrategy) for (const workerNode of pool.workerNodes) { - expect(workerNode.strategyData.virtualTaskEndTimestamp).toBeUndefined() + expect(workerNode.strategyData.virtualTaskEndTimestamp).toBeGreaterThan(0) } await pool.destroy() pool = new DynamicThreadPool( @@ -1478,7 +1446,7 @@ describe('Selection strategies test suite', () => { } pool.setWorkerChoiceStrategy(workerChoiceStrategy) for (const workerNode of pool.workerNodes) { - expect(workerNode.strategyData.virtualTaskEndTimestamp).toBeUndefined() + expect(workerNode.strategyData.virtualTaskEndTimestamp).toBeGreaterThan(0) } // We need to clean up the resources after our test await pool.destroy() @@ -1491,7 +1459,7 @@ describe('Selection strategies test suite', () => { './tests/worker-files/thread/testWorker.mjs', { workerChoiceStrategy } ) - expect(pool.workerChoiceStrategyContext.getStrategyPolicy()).toStrictEqual({ + expect(pool.workerChoiceStrategiesContext.getPolicy()).toStrictEqual({ dynamicWorkerUsage: false, dynamicWorkerReady: true }) @@ -1502,7 +1470,7 @@ describe('Selection strategies test suite', () => { './tests/worker-files/thread/testWorker.mjs', { workerChoiceStrategy } ) - expect(pool.workerChoiceStrategyContext.getStrategyPolicy()).toStrictEqual({ + expect(pool.workerChoiceStrategiesContext.getPolicy()).toStrictEqual({ dynamicWorkerUsage: false, dynamicWorkerReady: true }) @@ -1518,7 +1486,7 @@ describe('Selection strategies test suite', () => { { workerChoiceStrategy } ) expect( - pool.workerChoiceStrategyContext.getTaskStatisticsRequirements() + pool.workerChoiceStrategiesContext.getTaskStatisticsRequirements() ).toStrictEqual({ runTime: { aggregate: true, @@ -1544,7 +1512,7 @@ describe('Selection strategies test suite', () => { { workerChoiceStrategy } ) expect( - pool.workerChoiceStrategyContext.getTaskStatisticsRequirements() + pool.workerChoiceStrategiesContext.getTaskStatisticsRequirements() ).toStrictEqual({ runTime: { aggregate: true, @@ -1586,8 +1554,8 @@ describe('Selection strategies test suite', () => { executing: 0, queued: 0, maxQueued: 0, - stolen: 0, sequentiallyStolen: 0, + stolen: 0, failed: 0 }, runTime: expect.objectContaining({ @@ -1621,23 +1589,18 @@ describe('Selection strategies test suite', () => { } } expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.defaultWorkerChoiceStrategy ).nextWorkerNodeKey ).toBe(0) expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.defaultWorkerChoiceStrategy ).previousWorkerNodeKey - ).toBe(0) - expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy - ).defaultWorkerWeight - ).toBeGreaterThan(0) + ).toEqual(0) expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.defaultWorkerChoiceStrategy ).workerNodeVirtualTaskRunTime ).toBeGreaterThanOrEqual(0) // We need to clean up the resources after our test @@ -1665,8 +1628,8 @@ describe('Selection strategies test suite', () => { executing: 0, queued: 0, maxQueued: 0, - stolen: 0, sequentiallyStolen: 0, + stolen: 0, failed: 0 }, runTime: expect.objectContaining({ @@ -1700,23 +1663,18 @@ describe('Selection strategies test suite', () => { } } expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.defaultWorkerChoiceStrategy ).nextWorkerNodeKey - ).toBe(0) + ).toEqual(0) expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.defaultWorkerChoiceStrategy ).previousWorkerNodeKey - ).toBe(0) - expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy - ).defaultWorkerWeight - ).toBeGreaterThan(0) + ).toEqual(0) expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.defaultWorkerChoiceStrategy ).workerNodeVirtualTaskRunTime ).toBeGreaterThanOrEqual(0) // We need to clean up the resources after our test @@ -1749,8 +1707,8 @@ describe('Selection strategies test suite', () => { executing: 0, queued: 0, maxQueued: 0, - stolen: 0, sequentiallyStolen: 0, + stolen: 0, failed: 0 }, runTime: expect.objectContaining({ @@ -1784,123 +1742,88 @@ describe('Selection strategies test suite', () => { } } expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.defaultWorkerChoiceStrategy ).nextWorkerNodeKey - ).toBe(0) + ).toEqual(0) expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.defaultWorkerChoiceStrategy ).previousWorkerNodeKey - ).toBe(0) + ).toEqual(0) expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy - ).defaultWorkerWeight - ).toBeGreaterThan(0) - expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.defaultWorkerChoiceStrategy ).workerNodeVirtualTaskRunTime ).toBeGreaterThanOrEqual(0) // We need to clean up the resources after our test await pool.destroy() }) - it('Verify WEIGHTED_ROUND_ROBIN strategy internals are resets after setting it', async () => { + it("Verify WEIGHTED_ROUND_ROBIN strategy internals aren't reset after setting it", async () => { const workerChoiceStrategy = WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN let pool = new FixedThreadPool( max, - './tests/worker-files/thread/testWorker.mjs' + './tests/worker-files/thread/testWorker.mjs', + { workerChoiceStrategy } ) - expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - workerChoiceStrategy - ).nextWorkerNodeKey - ).toBeDefined() - expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - workerChoiceStrategy - ).previousWorkerNodeKey - ).toBeDefined() - expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - workerChoiceStrategy - ).defaultWorkerWeight - ).toBeDefined() - expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - workerChoiceStrategy - ).workerNodeVirtualTaskRunTime - ).toBeDefined() + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + workerChoiceStrategy + ).nextWorkerNodeKey = randomInt(1, max - 1) + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + workerChoiceStrategy + ).previousWorkerNodeKey = randomInt(1, max - 1) + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + workerChoiceStrategy + ).workerNodeVirtualTaskRunTime = randomInt(100, 1000) pool.setWorkerChoiceStrategy(workerChoiceStrategy) expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.defaultWorkerChoiceStrategy ).nextWorkerNodeKey - ).toBe(0) + ).toBeGreaterThan(0) expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.defaultWorkerChoiceStrategy ).previousWorkerNodeKey - ).toBe(0) - expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy - ).defaultWorkerWeight ).toBeGreaterThan(0) expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.defaultWorkerChoiceStrategy ).workerNodeVirtualTaskRunTime - ).toBe(0) + ).toBeGreaterThan(99) await pool.destroy() pool = new DynamicThreadPool( min, max, - './tests/worker-files/thread/testWorker.mjs' + './tests/worker-files/thread/testWorker.mjs', + { workerChoiceStrategy } ) - expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - workerChoiceStrategy - ).nextWorkerNodeKey - ).toBeDefined() - expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - workerChoiceStrategy - ).previousWorkerNodeKey - ).toBeDefined() - expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - workerChoiceStrategy - ).defaultWorkerWeight - ).toBeDefined() - expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - workerChoiceStrategy - ).workerNodeVirtualTaskRunTime - ).toBeDefined() + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + workerChoiceStrategy + ).nextWorkerNodeKey = randomInt(1, max - 1) + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + workerChoiceStrategy + ).previousWorkerNodeKey = randomInt(1, max - 1) + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + workerChoiceStrategy + ).workerNodeVirtualTaskRunTime = randomInt(100, 1000) pool.setWorkerChoiceStrategy(workerChoiceStrategy) expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.defaultWorkerChoiceStrategy ).nextWorkerNodeKey - ).toBe(0) + ).toBeGreaterThan(0) expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.defaultWorkerChoiceStrategy ).previousWorkerNodeKey - ).toBe(0) - expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy - ).defaultWorkerWeight ).toBeGreaterThan(0) expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.defaultWorkerChoiceStrategy ).workerNodeVirtualTaskRunTime - ).toBe(0) + ).toBeGreaterThan(99) // We need to clean up the resources after our test await pool.destroy() }) @@ -1913,7 +1836,7 @@ describe('Selection strategies test suite', () => { './tests/worker-files/thread/testWorker.mjs', { workerChoiceStrategy } ) - expect(pool.workerChoiceStrategyContext.getStrategyPolicy()).toStrictEqual({ + expect(pool.workerChoiceStrategiesContext.getPolicy()).toStrictEqual({ dynamicWorkerUsage: false, dynamicWorkerReady: true }) @@ -1924,7 +1847,7 @@ describe('Selection strategies test suite', () => { './tests/worker-files/thread/testWorker.mjs', { workerChoiceStrategy } ) - expect(pool.workerChoiceStrategyContext.getStrategyPolicy()).toStrictEqual({ + expect(pool.workerChoiceStrategiesContext.getPolicy()).toStrictEqual({ dynamicWorkerUsage: false, dynamicWorkerReady: true }) @@ -1941,7 +1864,7 @@ describe('Selection strategies test suite', () => { { workerChoiceStrategy } ) expect( - pool.workerChoiceStrategyContext.getTaskStatisticsRequirements() + pool.workerChoiceStrategiesContext.getTaskStatisticsRequirements() ).toStrictEqual({ runTime: { aggregate: true, @@ -1967,7 +1890,7 @@ describe('Selection strategies test suite', () => { { workerChoiceStrategy } ) expect( - pool.workerChoiceStrategyContext.getTaskStatisticsRequirements() + pool.workerChoiceStrategiesContext.getTaskStatisticsRequirements() ).toStrictEqual({ runTime: { aggregate: true, @@ -2012,8 +1935,8 @@ describe('Selection strategies test suite', () => { executing: 0, queued: 0, maxQueued: 0, - stolen: 0, sequentiallyStolen: 0, + stolen: 0, failed: 0 }, runTime: expect.objectContaining({ @@ -2037,39 +1960,37 @@ describe('Selection strategies test suite', () => { ) } expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy - ).defaultWorkerWeight - ).toBeGreaterThan(0) - expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.defaultWorkerChoiceStrategy ).roundId ).toBe(0) expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.defaultWorkerChoiceStrategy ).workerNodeId ).toBe(0) expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.defaultWorkerChoiceStrategy ).nextWorkerNodeKey ).toBe(0) expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.defaultWorkerChoiceStrategy ).previousWorkerNodeKey - ).toEqual(expect.any(Number)) + ).toEqual(0) + expect( + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.defaultWorkerChoiceStrategy + ).roundWeights.length + ).toBe(1) expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy - ).roundWeights - ).toStrictEqual([ - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy - ).defaultWorkerWeight - ]) + Number.isSafeInteger( + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.defaultWorkerChoiceStrategy + ).roundWeights[0] + ) + ).toBe(true) // We need to clean up the resources after our test await pool.destroy() }) @@ -2098,8 +2019,8 @@ describe('Selection strategies test suite', () => { executing: 0, queued: 0, maxQueued: 0, - stolen: 0, sequentiallyStolen: 0, + stolen: 0, failed: 0 }, runTime: expect.objectContaining({ @@ -2123,186 +2044,152 @@ describe('Selection strategies test suite', () => { ) } expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy - ).defaultWorkerWeight - ).toBeGreaterThan(0) - expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.defaultWorkerChoiceStrategy ).roundId ).toBe(0) expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.defaultWorkerChoiceStrategy ).workerNodeId ).toBe(0) expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.defaultWorkerChoiceStrategy ).nextWorkerNodeKey ).toBe(0) expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.defaultWorkerChoiceStrategy ).previousWorkerNodeKey - ).toEqual(expect.any(Number)) + ).toEqual(0) + expect( + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.defaultWorkerChoiceStrategy + ).roundWeights.length + ).toBe(1) expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy - ).roundWeights - ).toStrictEqual([ - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy - ).defaultWorkerWeight - ]) + Number.isSafeInteger( + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.defaultWorkerChoiceStrategy + ).roundWeights[0] + ) + ).toBe(true) // We need to clean up the resources after our test await pool.destroy() }) - it('Verify INTERLEAVED_WEIGHTED_ROUND_ROBIN strategy internals are resets after setting it', async () => { + it("Verify INTERLEAVED_WEIGHTED_ROUND_ROBIN strategy internals aren't resets after setting it", async () => { const workerChoiceStrategy = WorkerChoiceStrategies.INTERLEAVED_WEIGHTED_ROUND_ROBIN let pool = new FixedThreadPool( max, - './tests/worker-files/thread/testWorker.mjs' + './tests/worker-files/thread/testWorker.mjs', + { workerChoiceStrategy } ) - expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - workerChoiceStrategy - ).roundId - ).toBeDefined() - expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - workerChoiceStrategy - ).workerNodeId - ).toBeDefined() - expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - workerChoiceStrategy - ).nextWorkerNodeKey - ).toBeDefined() - expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - workerChoiceStrategy - ).previousWorkerNodeKey - ).toBeDefined() - expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - workerChoiceStrategy - ).defaultWorkerWeight - ).toBeDefined() - expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - workerChoiceStrategy - ).roundWeights - ).toBeDefined() + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + workerChoiceStrategy + ).roundId = randomInt(1, max - 1) + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + workerChoiceStrategy + ).workerNodeId = randomInt(1, max - 1) + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + workerChoiceStrategy + ).nextWorkerNodeKey = randomInt(1, max - 1) + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + workerChoiceStrategy + ).previousWorkerNodeKey = randomInt(1, max - 1) + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + workerChoiceStrategy + ).roundWeights = [randomInt(1, max - 1), randomInt(1, max - 1)] pool.setWorkerChoiceStrategy(workerChoiceStrategy) expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.defaultWorkerChoiceStrategy ).roundId - ).toBe(0) + ).toBeGreaterThan(0) expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.defaultWorkerChoiceStrategy ).workerNodeId - ).toBe(0) + ).toBeGreaterThan(0) expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.defaultWorkerChoiceStrategy ).nextWorkerNodeKey - ).toBe(0) + ).toBeGreaterThan(0) expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.defaultWorkerChoiceStrategy ).previousWorkerNodeKey - ).toBe(0) - expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy - ).defaultWorkerWeight ).toBeGreaterThan(0) expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy - ).roundWeights - ).toStrictEqual([ - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy - ).defaultWorkerWeight - ]) + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.defaultWorkerChoiceStrategy + ).roundWeights.length + ).toBeGreaterThan(1) + expect( + Number.isSafeInteger( + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.defaultWorkerChoiceStrategy + ).roundWeights[0] + ) + ).toBe(true) await pool.destroy() pool = new DynamicThreadPool( min, max, - './tests/worker-files/thread/testWorker.mjs' + './tests/worker-files/thread/testWorker.mjs', + { workerChoiceStrategy } ) - expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - workerChoiceStrategy - ).roundId - ).toBeDefined() - expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - workerChoiceStrategy - ).workerNodeId - ).toBeDefined() - expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - workerChoiceStrategy - ).nextWorkerNodeKey - ).toBeDefined() - expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - workerChoiceStrategy - ).previousWorkerNodeKey - ).toBeDefined() - expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - workerChoiceStrategy - ).defaultWorkerWeight - ).toBeDefined() - expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - workerChoiceStrategy - ).roundWeights - ).toBeDefined() + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + workerChoiceStrategy + ).roundId = randomInt(1, max - 1) + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + workerChoiceStrategy + ).workerNodeId = randomInt(1, max - 1) + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + workerChoiceStrategy + ).nextWorkerNodeKey = randomInt(1, max - 1) + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + workerChoiceStrategy + ).previousWorkerNodeKey = randomInt(1, max - 1) + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + workerChoiceStrategy + ).roundWeights = [randomInt(1, max - 1), randomInt(1, max - 1)] pool.setWorkerChoiceStrategy(workerChoiceStrategy) expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.defaultWorkerChoiceStrategy ).roundId - ).toBe(0) + ).toBeGreaterThan(0) expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.defaultWorkerChoiceStrategy ).workerNodeId - ).toBe(0) + ).toBeGreaterThan(0) expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.defaultWorkerChoiceStrategy ).nextWorkerNodeKey - ).toBe(0) + ).toBeGreaterThan(0) expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.defaultWorkerChoiceStrategy ).previousWorkerNodeKey - ).toBe(0) - expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy - ).defaultWorkerWeight ).toBeGreaterThan(0) expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy - ).roundWeights - ).toStrictEqual([ - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy - ).defaultWorkerWeight - ]) + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.defaultWorkerChoiceStrategy + ).roundWeights.length + ).toBeGreaterThan(1) + expect( + Number.isSafeInteger( + pool.workerChoiceStrategiesContext.workerChoiceStrategies.get( + pool.workerChoiceStrategiesContext.defaultWorkerChoiceStrategy + ).roundWeights[0] + ) + ).toBe(true) // We need to clean up the resources after our test await pool.destroy() })