X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=tests%2Fpools%2Fselection-strategies%2Fselection-strategies.test.mjs;h=d4ea1df3b7978c76455427b31e72681ab93d855e;hb=02349feb6ad7c0389e93f30a51b8c8d6e631dfa0;hp=342d2fa6c997c0bfe1f696cfcecfefcce91931c2;hpb=a074ffee1b46f43d0dcfba58128748c7492104dd;p=poolifier.git diff --git a/tests/pools/selection-strategies/selection-strategies.test.mjs b/tests/pools/selection-strategies/selection-strategies.test.mjs index 342d2fa6..d4ea1df3 100644 --- a/tests/pools/selection-strategies/selection-strategies.test.mjs +++ b/tests/pools/selection-strategies/selection-strategies.test.mjs @@ -30,7 +30,7 @@ describe('Selection strategies test suite', () => { const pool = new DynamicThreadPool( min, max, - './tests/worker-files/thread/testWorker.js' + './tests/worker-files/thread/testWorker.mjs' ) expect(pool.opts.workerChoiceStrategy).toBe( WorkerChoiceStrategies.ROUND_ROBIN @@ -43,7 +43,7 @@ describe('Selection strategies test suite', () => { for (const workerChoiceStrategy of Object.values(WorkerChoiceStrategies)) { const pool = new FixedThreadPool( max, - './tests/worker-files/thread/testWorker.js', + './tests/worker-files/thread/testWorker.mjs', { workerChoiceStrategy } ) expect(pool.opts.workerChoiceStrategy).toBe(workerChoiceStrategy) @@ -59,24 +59,25 @@ describe('Selection strategies test suite', () => { const pool = new DynamicThreadPool( min, max, - './tests/worker-files/thread/testWorker.js' + './tests/worker-files/thread/testWorker.mjs' ) 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.opts.workerChoiceStrategyOptions).toBeUndefined() expect(pool.workerChoiceStrategyContext.opts).toStrictEqual({ - retries: 6, + retries: + pool.info.maxSize + + Object.keys(pool.workerChoiceStrategyContext.opts.weights).length, runTime: { median: false }, waitTime: { median: false }, - elu: { median: false } + elu: { median: false }, + weights: expect.objectContaining({ + 0: expect.any(Number), + [pool.info.maxSize - 1]: expect.any(Number) + }) }) await pool.destroy() } @@ -86,22 +87,23 @@ describe('Selection strategies test suite', () => { max, './tests/worker-files/cluster/testWorker.js' ) - 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.opts.workerChoiceStrategyOptions).toBeUndefined() expect(pool.workerChoiceStrategyContext.opts).toStrictEqual({ - retries: 3, + retries: + pool.info.maxSize + + Object.keys(pool.workerChoiceStrategyContext.opts.weights).length, runTime: { median: false }, waitTime: { median: false }, - elu: { median: false } + elu: { median: false }, + weights: expect.objectContaining({ + 0: expect.any(Number), + [pool.info.maxSize - 1]: expect.any(Number) + }) }) await pool.destroy() } @@ -110,7 +112,7 @@ describe('Selection strategies test suite', () => { it('Verify available strategies default internals at pool creation', async () => { const pool = new FixedThreadPool( max, - './tests/worker-files/thread/testWorker.js' + './tests/worker-files/thread/testWorker.mjs' ) for (const workerChoiceStrategy of Object.values(WorkerChoiceStrategies)) { expect( @@ -126,11 +128,6 @@ describe('Selection strategies test suite', () => { if ( workerChoiceStrategy === WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN ) { - expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - workerChoiceStrategy - ).defaultWorkerWeight - ).toBeGreaterThan(0) expect( pool.workerChoiceStrategyContext.workerChoiceStrategies.get( workerChoiceStrategy @@ -140,11 +137,6 @@ describe('Selection strategies test suite', () => { workerChoiceStrategy === WorkerChoiceStrategies.INTERLEAVED_WEIGHTED_ROUND_ROBIN ) { - expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - workerChoiceStrategy - ).defaultWorkerWeight - ).toBeGreaterThan(0) expect( pool.workerChoiceStrategyContext.workerChoiceStrategies.get( workerChoiceStrategy @@ -163,22 +155,37 @@ describe('Selection strategies test suite', () => { expect( pool.workerChoiceStrategyContext.workerChoiceStrategies.get( workerChoiceStrategy - ).roundWeights - ).toStrictEqual([ - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - workerChoiceStrategy - ).defaultWorkerWeight - ]) + ).roundWeights.length + ).toBe(1) } } await pool.destroy() }) + it('Verify strategies wait for worker node readiness in dynamic pool', async () => { + const pool = new DynamicThreadPool( + min, + max, + './tests/worker-files/thread/testWorker.mjs' + ) + expect(pool.starting).toBe(false) + expect(pool.workerNodes.length).toBe(min) + const maxMultiplier = 10000 + const promises = new Set() + for (let i = 0; i < max * maxMultiplier; i++) { + promises.add(pool.execute()) + } + await Promise.all(promises) + expect(pool.workerNodes.length).toBe(max) + // We need to clean up the resources after our test + await pool.destroy() + }) + it('Verify ROUND_ROBIN strategy default policy', async () => { const workerChoiceStrategy = WorkerChoiceStrategies.ROUND_ROBIN let pool = new FixedThreadPool( max, - './tests/worker-files/thread/testWorker.js', + './tests/worker-files/thread/testWorker.mjs', { workerChoiceStrategy } ) expect(pool.workerChoiceStrategyContext.getStrategyPolicy()).toStrictEqual({ @@ -189,7 +196,7 @@ describe('Selection strategies test suite', () => { pool = new DynamicThreadPool( min, max, - './tests/worker-files/thread/testWorker.js', + './tests/worker-files/thread/testWorker.mjs', { workerChoiceStrategy } ) expect(pool.workerChoiceStrategyContext.getStrategyPolicy()).toStrictEqual({ @@ -204,7 +211,7 @@ describe('Selection strategies test suite', () => { const workerChoiceStrategy = WorkerChoiceStrategies.ROUND_ROBIN let pool = new FixedThreadPool( max, - './tests/worker-files/thread/testWorker.js', + './tests/worker-files/thread/testWorker.mjs', { workerChoiceStrategy } ) expect( @@ -230,7 +237,7 @@ describe('Selection strategies test suite', () => { pool = new DynamicThreadPool( min, max, - './tests/worker-files/thread/testWorker.js', + './tests/worker-files/thread/testWorker.mjs', { workerChoiceStrategy } ) expect( @@ -260,7 +267,7 @@ describe('Selection strategies test suite', () => { const workerChoiceStrategy = WorkerChoiceStrategies.ROUND_ROBIN const pool = new FixedThreadPool( max, - './tests/worker-files/thread/testWorker.js', + './tests/worker-files/thread/testWorker.mjs', { workerChoiceStrategy } ) // TODO: Create a better test to cover `RoundRobinWorkerChoiceStrategy#choose` @@ -277,6 +284,7 @@ describe('Selection strategies test suite', () => { executing: 0, queued: 0, maxQueued: 0, + sequentiallyStolen: 0, stolen: 0, failed: 0 }, @@ -315,7 +323,7 @@ describe('Selection strategies test suite', () => { const pool = new DynamicThreadPool( min, max, - './tests/worker-files/thread/testWorker.js', + './tests/worker-files/thread/testWorker.mjs', { workerChoiceStrategy } ) // TODO: Create a better test to cover `RoundRobinWorkerChoiceStrategy#choose` @@ -332,6 +340,7 @@ describe('Selection strategies test suite', () => { executing: 0, queued: 0, maxQueued: 0, + sequentiallyStolen: 0, stolen: 0, failed: 0 }, @@ -378,18 +387,18 @@ describe('Selection strategies test suite', () => { ) let results = new Set() for (let i = 0; i < max; i++) { - results.add(pool.workerNodes[pool.chooseWorkerNode()].worker.id) + results.add(pool.workerNodes[pool.chooseWorkerNode()].info.id) } expect(results.size).toBe(max) await pool.destroy() pool = new FixedThreadPool( max, - './tests/worker-files/thread/testWorker.js', + './tests/worker-files/thread/testWorker.mjs', { workerChoiceStrategy } ) results = new Set() for (let i = 0; i < max; i++) { - results.add(pool.workerNodes[pool.chooseWorkerNode()].worker.threadId) + results.add(pool.workerNodes[pool.chooseWorkerNode()].info.id) } expect(results.size).toBe(max) await pool.destroy() @@ -399,7 +408,7 @@ describe('Selection strategies test suite', () => { const workerChoiceStrategy = WorkerChoiceStrategies.ROUND_ROBIN let pool = new FixedThreadPool( max, - './tests/worker-files/thread/testWorker.js', + './tests/worker-files/thread/testWorker.mjs', { workerChoiceStrategy: WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN } ) expect( @@ -427,7 +436,7 @@ describe('Selection strategies test suite', () => { pool = new DynamicThreadPool( min, max, - './tests/worker-files/thread/testWorker.js', + './tests/worker-files/thread/testWorker.mjs', { workerChoiceStrategy: WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN } ) expect( @@ -459,7 +468,7 @@ describe('Selection strategies test suite', () => { const workerChoiceStrategy = WorkerChoiceStrategies.LEAST_USED let pool = new FixedThreadPool( max, - './tests/worker-files/thread/testWorker.js', + './tests/worker-files/thread/testWorker.mjs', { workerChoiceStrategy } ) expect(pool.workerChoiceStrategyContext.getStrategyPolicy()).toStrictEqual({ @@ -470,7 +479,7 @@ describe('Selection strategies test suite', () => { pool = new DynamicThreadPool( min, max, - './tests/worker-files/thread/testWorker.js', + './tests/worker-files/thread/testWorker.mjs', { workerChoiceStrategy } ) expect(pool.workerChoiceStrategyContext.getStrategyPolicy()).toStrictEqual({ @@ -485,7 +494,7 @@ describe('Selection strategies test suite', () => { const workerChoiceStrategy = WorkerChoiceStrategies.LEAST_USED let pool = new FixedThreadPool( max, - './tests/worker-files/thread/testWorker.js', + './tests/worker-files/thread/testWorker.mjs', { workerChoiceStrategy } ) expect( @@ -511,7 +520,7 @@ describe('Selection strategies test suite', () => { pool = new DynamicThreadPool( min, max, - './tests/worker-files/thread/testWorker.js', + './tests/worker-files/thread/testWorker.mjs', { workerChoiceStrategy } ) expect( @@ -540,7 +549,7 @@ describe('Selection strategies test suite', () => { it('Verify LEAST_USED strategy can be run in a fixed pool', async () => { const pool = new FixedThreadPool( max, - './tests/worker-files/thread/testWorker.js', + './tests/worker-files/thread/testWorker.mjs', { workerChoiceStrategy: WorkerChoiceStrategies.LEAST_USED } ) // TODO: Create a better test to cover `LeastUsedWorkerChoiceStrategy#choose` @@ -557,6 +566,7 @@ describe('Selection strategies test suite', () => { executing: 0, queued: 0, maxQueued: 0, + sequentiallyStolen: 0, stolen: 0, failed: 0 }, @@ -598,7 +608,7 @@ describe('Selection strategies test suite', () => { const pool = new DynamicThreadPool( min, max, - './tests/worker-files/thread/testWorker.js', + './tests/worker-files/thread/testWorker.mjs', { workerChoiceStrategy: WorkerChoiceStrategies.LEAST_USED } ) // TODO: Create a better test to cover `LeastUsedWorkerChoiceStrategy#choose` @@ -615,6 +625,7 @@ describe('Selection strategies test suite', () => { executing: 0, queued: 0, maxQueued: 0, + sequentiallyStolen: 0, stolen: 0, failed: 0 }, @@ -656,7 +667,7 @@ describe('Selection strategies test suite', () => { const workerChoiceStrategy = WorkerChoiceStrategies.LEAST_BUSY let pool = new FixedThreadPool( max, - './tests/worker-files/thread/testWorker.js', + './tests/worker-files/thread/testWorker.mjs', { workerChoiceStrategy } ) expect(pool.workerChoiceStrategyContext.getStrategyPolicy()).toStrictEqual({ @@ -667,7 +678,7 @@ describe('Selection strategies test suite', () => { pool = new DynamicThreadPool( min, max, - './tests/worker-files/thread/testWorker.js', + './tests/worker-files/thread/testWorker.mjs', { workerChoiceStrategy } ) expect(pool.workerChoiceStrategyContext.getStrategyPolicy()).toStrictEqual({ @@ -682,7 +693,7 @@ describe('Selection strategies test suite', () => { const workerChoiceStrategy = WorkerChoiceStrategies.LEAST_BUSY let pool = new FixedThreadPool( max, - './tests/worker-files/thread/testWorker.js', + './tests/worker-files/thread/testWorker.mjs', { workerChoiceStrategy } ) expect( @@ -708,7 +719,7 @@ describe('Selection strategies test suite', () => { pool = new DynamicThreadPool( min, max, - './tests/worker-files/thread/testWorker.js', + './tests/worker-files/thread/testWorker.mjs', { workerChoiceStrategy } ) expect( @@ -737,7 +748,7 @@ describe('Selection strategies test suite', () => { it('Verify LEAST_BUSY strategy can be run in a fixed pool', async () => { const pool = new FixedThreadPool( max, - './tests/worker-files/thread/testWorker.js', + './tests/worker-files/thread/testWorker.mjs', { workerChoiceStrategy: WorkerChoiceStrategies.LEAST_BUSY } ) // TODO: Create a better test to cover `LeastBusyWorkerChoiceStrategy#choose` @@ -754,6 +765,7 @@ describe('Selection strategies test suite', () => { executing: 0, queued: 0, maxQueued: 0, + sequentiallyStolen: 0, stolen: 0, failed: 0 }, @@ -805,7 +817,7 @@ describe('Selection strategies test suite', () => { const pool = new DynamicThreadPool( min, max, - './tests/worker-files/thread/testWorker.js', + './tests/worker-files/thread/testWorker.mjs', { workerChoiceStrategy: WorkerChoiceStrategies.LEAST_BUSY } ) // TODO: Create a better test to cover `LeastBusyWorkerChoiceStrategy#choose` @@ -822,6 +834,7 @@ describe('Selection strategies test suite', () => { executing: 0, queued: 0, maxQueued: 0, + sequentiallyStolen: 0, stolen: 0, failed: 0 }, @@ -873,7 +886,7 @@ describe('Selection strategies test suite', () => { const workerChoiceStrategy = WorkerChoiceStrategies.LEAST_ELU let pool = new FixedThreadPool( max, - './tests/worker-files/thread/testWorker.js', + './tests/worker-files/thread/testWorker.mjs', { workerChoiceStrategy } ) expect(pool.workerChoiceStrategyContext.getStrategyPolicy()).toStrictEqual({ @@ -884,7 +897,7 @@ describe('Selection strategies test suite', () => { pool = new DynamicThreadPool( min, max, - './tests/worker-files/thread/testWorker.js', + './tests/worker-files/thread/testWorker.mjs', { workerChoiceStrategy } ) expect(pool.workerChoiceStrategyContext.getStrategyPolicy()).toStrictEqual({ @@ -899,7 +912,7 @@ describe('Selection strategies test suite', () => { const workerChoiceStrategy = WorkerChoiceStrategies.LEAST_ELU let pool = new FixedThreadPool( max, - './tests/worker-files/thread/testWorker.js', + './tests/worker-files/thread/testWorker.mjs', { workerChoiceStrategy } ) expect( @@ -925,7 +938,7 @@ describe('Selection strategies test suite', () => { pool = new DynamicThreadPool( min, max, - './tests/worker-files/thread/testWorker.js', + './tests/worker-files/thread/testWorker.mjs', { workerChoiceStrategy } ) expect( @@ -954,7 +967,7 @@ describe('Selection strategies test suite', () => { it('Verify LEAST_ELU strategy can be run in a fixed pool', async () => { const pool = new FixedThreadPool( max, - './tests/worker-files/thread/testWorker.js', + './tests/worker-files/thread/testWorker.mjs', { workerChoiceStrategy: WorkerChoiceStrategies.LEAST_ELU } ) // TODO: Create a better test to cover `LeastEluWorkerChoiceStrategy#choose` @@ -971,6 +984,7 @@ describe('Selection strategies test suite', () => { executing: 0, queued: 0, maxQueued: 0, + sequentiallyStolen: 0, stolen: 0, failed: 0 }, @@ -1028,7 +1042,7 @@ describe('Selection strategies test suite', () => { const pool = new DynamicThreadPool( min, max, - './tests/worker-files/thread/testWorker.js', + './tests/worker-files/thread/testWorker.mjs', { workerChoiceStrategy: WorkerChoiceStrategies.LEAST_ELU } ) // TODO: Create a better test to cover `LeastEluWorkerChoiceStrategy#choose` @@ -1045,6 +1059,7 @@ describe('Selection strategies test suite', () => { executing: 0, queued: 0, maxQueued: 0, + sequentiallyStolen: 0, stolen: 0, failed: 0 }, @@ -1102,7 +1117,7 @@ describe('Selection strategies test suite', () => { const workerChoiceStrategy = WorkerChoiceStrategies.FAIR_SHARE let pool = new FixedThreadPool( max, - './tests/worker-files/thread/testWorker.js', + './tests/worker-files/thread/testWorker.mjs', { workerChoiceStrategy } ) expect(pool.workerChoiceStrategyContext.getStrategyPolicy()).toStrictEqual({ @@ -1113,7 +1128,7 @@ describe('Selection strategies test suite', () => { pool = new DynamicThreadPool( min, max, - './tests/worker-files/thread/testWorker.js', + './tests/worker-files/thread/testWorker.mjs', { workerChoiceStrategy } ) expect(pool.workerChoiceStrategyContext.getStrategyPolicy()).toStrictEqual({ @@ -1128,7 +1143,7 @@ describe('Selection strategies test suite', () => { const workerChoiceStrategy = WorkerChoiceStrategies.FAIR_SHARE let pool = new FixedThreadPool( max, - './tests/worker-files/thread/testWorker.js', + './tests/worker-files/thread/testWorker.mjs', { workerChoiceStrategy } ) expect( @@ -1154,7 +1169,7 @@ describe('Selection strategies test suite', () => { pool = new DynamicThreadPool( min, max, - './tests/worker-files/thread/testWorker.js', + './tests/worker-files/thread/testWorker.mjs', { workerChoiceStrategy } ) expect( @@ -1183,7 +1198,7 @@ describe('Selection strategies test suite', () => { it('Verify FAIR_SHARE strategy can be run in a fixed pool', async () => { const pool = new FixedThreadPool( max, - './tests/worker-files/thread/testWorker.js', + './tests/worker-files/thread/testWorker.mjs', { workerChoiceStrategy: WorkerChoiceStrategies.FAIR_SHARE } ) // TODO: Create a better test to cover `FairShareChoiceStrategy#choose` @@ -1200,6 +1215,7 @@ describe('Selection strategies test suite', () => { executing: 0, queued: 0, maxQueued: 0, + sequentiallyStolen: 0, stolen: 0, failed: 0 }, @@ -1268,7 +1284,7 @@ describe('Selection strategies test suite', () => { const pool = new DynamicThreadPool( min, max, - './tests/worker-files/thread/testWorker.js', + './tests/worker-files/thread/testWorker.mjs', { workerChoiceStrategy: WorkerChoiceStrategies.FAIR_SHARE } ) // TODO: Create a better test to cover `FairShareChoiceStrategy#choose` @@ -1285,6 +1301,7 @@ describe('Selection strategies test suite', () => { executing: 0, queued: 0, maxQueued: 0, + sequentiallyStolen: 0, stolen: 0, failed: 0 }, @@ -1353,7 +1370,7 @@ describe('Selection strategies test suite', () => { const pool = new DynamicThreadPool( min, max, - './tests/worker-files/thread/testWorker.js', + './tests/worker-files/thread/testWorker.mjs', { workerChoiceStrategy: WorkerChoiceStrategies.FAIR_SHARE, workerChoiceStrategyOptions: { @@ -1375,6 +1392,7 @@ describe('Selection strategies test suite', () => { executing: 0, queued: 0, maxQueued: 0, + sequentiallyStolen: 0, stolen: 0, failed: 0 }, @@ -1443,7 +1461,7 @@ describe('Selection strategies test suite', () => { const workerChoiceStrategy = WorkerChoiceStrategies.FAIR_SHARE let pool = new FixedThreadPool( max, - './tests/worker-files/thread/testWorker.js' + './tests/worker-files/thread/testWorker.mjs' ) for (const workerNode of pool.workerNodes) { workerNode.strategyData = { @@ -1458,7 +1476,7 @@ describe('Selection strategies test suite', () => { pool = new DynamicThreadPool( min, max, - './tests/worker-files/thread/testWorker.js' + './tests/worker-files/thread/testWorker.mjs' ) for (const workerNode of pool.workerNodes) { workerNode.strategyData = { @@ -1477,7 +1495,7 @@ describe('Selection strategies test suite', () => { const workerChoiceStrategy = WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN let pool = new FixedThreadPool( max, - './tests/worker-files/thread/testWorker.js', + './tests/worker-files/thread/testWorker.mjs', { workerChoiceStrategy } ) expect(pool.workerChoiceStrategyContext.getStrategyPolicy()).toStrictEqual({ @@ -1488,7 +1506,7 @@ describe('Selection strategies test suite', () => { pool = new DynamicThreadPool( min, max, - './tests/worker-files/thread/testWorker.js', + './tests/worker-files/thread/testWorker.mjs', { workerChoiceStrategy } ) expect(pool.workerChoiceStrategyContext.getStrategyPolicy()).toStrictEqual({ @@ -1503,7 +1521,7 @@ describe('Selection strategies test suite', () => { const workerChoiceStrategy = WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN let pool = new FixedThreadPool( max, - './tests/worker-files/thread/testWorker.js', + './tests/worker-files/thread/testWorker.mjs', { workerChoiceStrategy } ) expect( @@ -1529,7 +1547,7 @@ describe('Selection strategies test suite', () => { pool = new DynamicThreadPool( min, max, - './tests/worker-files/thread/testWorker.js', + './tests/worker-files/thread/testWorker.mjs', { workerChoiceStrategy } ) expect( @@ -1558,7 +1576,7 @@ describe('Selection strategies test suite', () => { it('Verify WEIGHTED_ROUND_ROBIN strategy can be run in a fixed pool', async () => { const pool = new FixedThreadPool( max, - './tests/worker-files/thread/testWorker.js', + './tests/worker-files/thread/testWorker.mjs', { workerChoiceStrategy: WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN } ) // TODO: Create a better test to cover `WeightedRoundRobinWorkerChoiceStrategy#choose` @@ -1575,6 +1593,7 @@ describe('Selection strategies test suite', () => { executing: 0, queued: 0, maxQueued: 0, + sequentiallyStolen: 0, stolen: 0, failed: 0 }, @@ -1617,12 +1636,7 @@ describe('Selection strategies test suite', () => { pool.workerChoiceStrategyContext.workerChoiceStrategies.get( pool.workerChoiceStrategyContext.workerChoiceStrategy ).previousWorkerNodeKey - ).toBe(0) - expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy - ).defaultWorkerWeight - ).toBeGreaterThan(0) + ).toStrictEqual(expect.any(Number)) expect( pool.workerChoiceStrategyContext.workerChoiceStrategies.get( pool.workerChoiceStrategyContext.workerChoiceStrategy @@ -1636,7 +1650,7 @@ describe('Selection strategies test suite', () => { const pool = new DynamicThreadPool( min, max, - './tests/worker-files/thread/testWorker.js', + './tests/worker-files/thread/testWorker.mjs', { workerChoiceStrategy: WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN } ) // TODO: Create a better test to cover `WeightedRoundRobinWorkerChoiceStrategy#choose` @@ -1653,6 +1667,7 @@ describe('Selection strategies test suite', () => { executing: 0, queued: 0, maxQueued: 0, + sequentiallyStolen: 0, stolen: 0, failed: 0 }, @@ -1695,12 +1710,7 @@ describe('Selection strategies test suite', () => { pool.workerChoiceStrategyContext.workerChoiceStrategies.get( pool.workerChoiceStrategyContext.workerChoiceStrategy ).previousWorkerNodeKey - ).toBe(0) - expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy - ).defaultWorkerWeight - ).toBeGreaterThan(0) + ).toStrictEqual(expect.any(Number)) expect( pool.workerChoiceStrategyContext.workerChoiceStrategies.get( pool.workerChoiceStrategyContext.workerChoiceStrategy @@ -1714,7 +1724,7 @@ describe('Selection strategies test suite', () => { const pool = new DynamicThreadPool( min, max, - './tests/worker-files/thread/testWorker.js', + './tests/worker-files/thread/testWorker.mjs', { workerChoiceStrategy: WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN, workerChoiceStrategyOptions: { @@ -1736,6 +1746,7 @@ describe('Selection strategies test suite', () => { executing: 0, queued: 0, maxQueued: 0, + sequentiallyStolen: 0, stolen: 0, failed: 0 }, @@ -1779,11 +1790,6 @@ describe('Selection strategies test suite', () => { pool.workerChoiceStrategyContext.workerChoiceStrategy ).previousWorkerNodeKey ).toBe(0) - expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy - ).defaultWorkerWeight - ).toBeGreaterThan(0) expect( pool.workerChoiceStrategyContext.workerChoiceStrategies.get( pool.workerChoiceStrategyContext.workerChoiceStrategy @@ -1797,7 +1803,7 @@ describe('Selection strategies test suite', () => { const workerChoiceStrategy = WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN let pool = new FixedThreadPool( max, - './tests/worker-files/thread/testWorker.js' + './tests/worker-files/thread/testWorker.mjs' ) expect( pool.workerChoiceStrategyContext.workerChoiceStrategies.get( @@ -1809,11 +1815,6 @@ describe('Selection strategies test suite', () => { workerChoiceStrategy ).previousWorkerNodeKey ).toBeDefined() - expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - workerChoiceStrategy - ).defaultWorkerWeight - ).toBeDefined() expect( pool.workerChoiceStrategyContext.workerChoiceStrategies.get( workerChoiceStrategy @@ -1830,11 +1831,6 @@ describe('Selection strategies test suite', () => { pool.workerChoiceStrategyContext.workerChoiceStrategy ).previousWorkerNodeKey ).toBe(0) - expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy - ).defaultWorkerWeight - ).toBeGreaterThan(0) expect( pool.workerChoiceStrategyContext.workerChoiceStrategies.get( pool.workerChoiceStrategyContext.workerChoiceStrategy @@ -1844,7 +1840,7 @@ describe('Selection strategies test suite', () => { pool = new DynamicThreadPool( min, max, - './tests/worker-files/thread/testWorker.js' + './tests/worker-files/thread/testWorker.mjs' ) expect( pool.workerChoiceStrategyContext.workerChoiceStrategies.get( @@ -1856,11 +1852,6 @@ describe('Selection strategies test suite', () => { workerChoiceStrategy ).previousWorkerNodeKey ).toBeDefined() - expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - workerChoiceStrategy - ).defaultWorkerWeight - ).toBeDefined() expect( pool.workerChoiceStrategyContext.workerChoiceStrategies.get( workerChoiceStrategy @@ -1877,11 +1868,6 @@ describe('Selection strategies test suite', () => { pool.workerChoiceStrategyContext.workerChoiceStrategy ).previousWorkerNodeKey ).toBe(0) - expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy - ).defaultWorkerWeight - ).toBeGreaterThan(0) expect( pool.workerChoiceStrategyContext.workerChoiceStrategies.get( pool.workerChoiceStrategyContext.workerChoiceStrategy @@ -1896,7 +1882,7 @@ describe('Selection strategies test suite', () => { WorkerChoiceStrategies.INTERLEAVED_WEIGHTED_ROUND_ROBIN let pool = new FixedThreadPool( max, - './tests/worker-files/thread/testWorker.js', + './tests/worker-files/thread/testWorker.mjs', { workerChoiceStrategy } ) expect(pool.workerChoiceStrategyContext.getStrategyPolicy()).toStrictEqual({ @@ -1907,7 +1893,7 @@ describe('Selection strategies test suite', () => { pool = new DynamicThreadPool( min, max, - './tests/worker-files/thread/testWorker.js', + './tests/worker-files/thread/testWorker.mjs', { workerChoiceStrategy } ) expect(pool.workerChoiceStrategyContext.getStrategyPolicy()).toStrictEqual({ @@ -1923,7 +1909,7 @@ describe('Selection strategies test suite', () => { WorkerChoiceStrategies.INTERLEAVED_WEIGHTED_ROUND_ROBIN let pool = new FixedThreadPool( max, - './tests/worker-files/thread/testWorker.js', + './tests/worker-files/thread/testWorker.mjs', { workerChoiceStrategy } ) expect( @@ -1949,7 +1935,7 @@ describe('Selection strategies test suite', () => { pool = new DynamicThreadPool( min, max, - './tests/worker-files/thread/testWorker.js', + './tests/worker-files/thread/testWorker.mjs', { workerChoiceStrategy } ) expect( @@ -1978,7 +1964,7 @@ describe('Selection strategies test suite', () => { it('Verify INTERLEAVED_WEIGHTED_ROUND_ROBIN strategy can be run in a fixed pool', async () => { const pool = new FixedThreadPool( max, - './tests/worker-files/thread/testWorker.js', + './tests/worker-files/thread/testWorker.mjs', { workerChoiceStrategy: WorkerChoiceStrategies.INTERLEAVED_WEIGHTED_ROUND_ROBIN @@ -1998,6 +1984,7 @@ describe('Selection strategies test suite', () => { executing: 0, queued: 0, maxQueued: 0, + sequentiallyStolen: 0, stolen: 0, failed: 0 }, @@ -2021,11 +2008,6 @@ describe('Selection strategies test suite', () => { max * maxMultiplier ) } - expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy - ).defaultWorkerWeight - ).toBeGreaterThan(0) expect( pool.workerChoiceStrategyContext.workerChoiceStrategies.get( pool.workerChoiceStrategyContext.workerChoiceStrategy @@ -2049,12 +2031,8 @@ describe('Selection strategies test suite', () => { expect( pool.workerChoiceStrategyContext.workerChoiceStrategies.get( pool.workerChoiceStrategyContext.workerChoiceStrategy - ).roundWeights - ).toStrictEqual([ - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy - ).defaultWorkerWeight - ]) + ).roundWeights.length + ).toBe(1) // We need to clean up the resources after our test await pool.destroy() }) @@ -2063,7 +2041,7 @@ describe('Selection strategies test suite', () => { const pool = new DynamicThreadPool( min, max, - './tests/worker-files/thread/testWorker.js', + './tests/worker-files/thread/testWorker.mjs', { workerChoiceStrategy: WorkerChoiceStrategies.INTERLEAVED_WEIGHTED_ROUND_ROBIN @@ -2083,6 +2061,7 @@ describe('Selection strategies test suite', () => { executing: 0, queued: 0, maxQueued: 0, + sequentiallyStolen: 0, stolen: 0, failed: 0 }, @@ -2106,11 +2085,6 @@ describe('Selection strategies test suite', () => { max * maxMultiplier ) } - expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy - ).defaultWorkerWeight - ).toBeGreaterThan(0) expect( pool.workerChoiceStrategyContext.workerChoiceStrategies.get( pool.workerChoiceStrategyContext.workerChoiceStrategy @@ -2134,12 +2108,8 @@ describe('Selection strategies test suite', () => { expect( pool.workerChoiceStrategyContext.workerChoiceStrategies.get( pool.workerChoiceStrategyContext.workerChoiceStrategy - ).roundWeights - ).toStrictEqual([ - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - pool.workerChoiceStrategyContext.workerChoiceStrategy - ).defaultWorkerWeight - ]) + ).roundWeights.length + ).toBe(1) // We need to clean up the resources after our test await pool.destroy() }) @@ -2149,7 +2119,7 @@ describe('Selection strategies test suite', () => { WorkerChoiceStrategies.INTERLEAVED_WEIGHTED_ROUND_ROBIN let pool = new FixedThreadPool( max, - './tests/worker-files/thread/testWorker.js' + './tests/worker-files/thread/testWorker.mjs' ) expect( pool.workerChoiceStrategyContext.workerChoiceStrategies.get( @@ -2171,11 +2141,6 @@ describe('Selection strategies test suite', () => { workerChoiceStrategy ).previousWorkerNodeKey ).toBeDefined() - expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - workerChoiceStrategy - ).defaultWorkerWeight - ).toBeDefined() expect( pool.workerChoiceStrategyContext.workerChoiceStrategies.get( workerChoiceStrategy @@ -2205,22 +2170,13 @@ describe('Selection strategies test suite', () => { 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 - ]) + ).roundWeights.length + ).toBe(1) await pool.destroy() pool = new DynamicThreadPool( min, max, - './tests/worker-files/thread/testWorker.js' + './tests/worker-files/thread/testWorker.mjs' ) expect( pool.workerChoiceStrategyContext.workerChoiceStrategies.get( @@ -2242,11 +2198,6 @@ describe('Selection strategies test suite', () => { workerChoiceStrategy ).previousWorkerNodeKey ).toBeDefined() - expect( - pool.workerChoiceStrategyContext.workerChoiceStrategies.get( - workerChoiceStrategy - ).defaultWorkerWeight - ).toBeDefined() expect( pool.workerChoiceStrategyContext.workerChoiceStrategies.get( workerChoiceStrategy @@ -2276,17 +2227,8 @@ describe('Selection strategies test suite', () => { 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 - ]) + ).roundWeights.length + ).toBe(1) // We need to clean up the resources after our test await pool.destroy() }) @@ -2297,9 +2239,9 @@ describe('Selection strategies test suite', () => { new DynamicThreadPool( min, max, - './tests/worker-files/thread/testWorker.js', + './tests/worker-files/thread/testWorker.mjs', { workerChoiceStrategy: 'UNKNOWN_STRATEGY' } ) - ).toThrowError("Invalid worker choice strategy 'UNKNOWN_STRATEGY'") + ).toThrow("Invalid worker choice strategy 'UNKNOWN_STRATEGY'") }) })