X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=tests%2Fpools%2Fselection-strategies%2Fselection-strategies.test.js;h=5a7394a57aa5fe5abdf643a43d6bfcf48d35f67a;hb=15e5141f463661f3dd0f17e8a9402703fddd4050;hp=ac3e27204697e10663542ab3701e67fa47340269;hpb=168c526f6e6913506e56f7d5107335c3d3d42938;p=poolifier.git diff --git a/tests/pools/selection-strategies/selection-strategies.test.js b/tests/pools/selection-strategies/selection-strategies.test.js index ac3e2720..5a7394a5 100644 --- a/tests/pools/selection-strategies/selection-strategies.test.js +++ b/tests/pools/selection-strategies/selection-strategies.test.js @@ -43,7 +43,9 @@ describe('Selection strategies test suite', () => { WorkerChoiceStrategies.ROUND_ROBIN ) expect( - pool.workerChoiceStrategyContext.getWorkerChoiceStrategy().nextWorkerId + pool.workerChoiceStrategyContext.workerChoiceStrategies.get( + WorkerChoiceStrategies.ROUND_ROBIN + ).nextWorkerId ).toBe(0) // We need to clean up the resources after our test await pool.destroy() @@ -70,8 +72,13 @@ describe('Selection strategies test suite', () => { ) pool.setWorkerChoiceStrategy(WorkerChoiceStrategies.ROUND_ROBIN) expect( - pool.workerChoiceStrategyContext.getWorkerChoiceStrategy() - .requiredStatistics.runTime + pool.workerChoiceStrategyContext.getRequiredStatistics().runTime + ).toBe(false) + expect( + pool.workerChoiceStrategyContext.getRequiredStatistics().avgRunTime + ).toBe(false) + expect( + pool.workerChoiceStrategyContext.getRequiredStatistics().medRunTime ).toBe(false) await pool.destroy() pool = new DynamicThreadPool( @@ -81,8 +88,13 @@ describe('Selection strategies test suite', () => { ) pool.setWorkerChoiceStrategy(WorkerChoiceStrategies.ROUND_ROBIN) expect( - pool.workerChoiceStrategyContext.getWorkerChoiceStrategy() - .requiredStatistics.runTime + pool.workerChoiceStrategyContext.getRequiredStatistics().runTime + ).toBe(false) + expect( + pool.workerChoiceStrategyContext.getRequiredStatistics().avgRunTime + ).toBe(false) + expect( + pool.workerChoiceStrategyContext.getRequiredStatistics().medRunTime ).toBe(false) // We need to clean up the resources after our test await pool.destroy() @@ -134,14 +146,14 @@ describe('Selection strategies test suite', () => { ) let results = new Set() for (let i = 0; i < max; i++) { - results.add(pool.chooseWorker().id) + results.add(pool.chooseWorker()[1].id) } expect(results.size).toBe(max) await pool.destroy() pool = new FixedThreadPool(max, './tests/worker-files/thread/testWorker.js') results = new Set() for (let i = 0; i < max; i++) { - results.add(pool.chooseWorker().threadId) + results.add(pool.chooseWorker()[1].threadId) } expect(results.size).toBe(max) await pool.destroy() @@ -154,11 +166,15 @@ describe('Selection strategies test suite', () => { { workerChoiceStrategy: WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN } ) expect( - pool.workerChoiceStrategyContext.getWorkerChoiceStrategy().nextWorkerId - ).toBeUndefined() + pool.workerChoiceStrategyContext.workerChoiceStrategies.get( + WorkerChoiceStrategies.ROUND_ROBIN + ).nextWorkerId + ).toBeDefined() pool.setWorkerChoiceStrategy(WorkerChoiceStrategies.ROUND_ROBIN) expect( - pool.workerChoiceStrategyContext.getWorkerChoiceStrategy().nextWorkerId + pool.workerChoiceStrategyContext.workerChoiceStrategies.get( + WorkerChoiceStrategies.ROUND_ROBIN + ).nextWorkerId ).toBe(0) await pool.destroy() pool = new DynamicThreadPool( @@ -168,13 +184,15 @@ describe('Selection strategies test suite', () => { { workerChoiceStrategy: WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN } ) expect( - pool.workerChoiceStrategyContext.getWorkerChoiceStrategy() - .workerChoiceStrategy.nextWorkerId - ).toBeUndefined() + pool.workerChoiceStrategyContext.workerChoiceStrategies.get( + WorkerChoiceStrategies.ROUND_ROBIN + ).nextWorkerId + ).toBeDefined() pool.setWorkerChoiceStrategy(WorkerChoiceStrategies.ROUND_ROBIN) expect( - pool.workerChoiceStrategyContext.getWorkerChoiceStrategy() - .workerChoiceStrategy.nextWorkerId + pool.workerChoiceStrategyContext.workerChoiceStrategies.get( + WorkerChoiceStrategies.ROUND_ROBIN + ).nextWorkerId ).toBe(0) // We need to clean up the resources after our test await pool.destroy() @@ -213,8 +231,13 @@ describe('Selection strategies test suite', () => { ) pool.setWorkerChoiceStrategy(WorkerChoiceStrategies.LESS_USED) expect( - pool.workerChoiceStrategyContext.getWorkerChoiceStrategy() - .requiredStatistics.runTime + pool.workerChoiceStrategyContext.getRequiredStatistics().runTime + ).toBe(false) + expect( + pool.workerChoiceStrategyContext.getRequiredStatistics().avgRunTime + ).toBe(false) + expect( + pool.workerChoiceStrategyContext.getRequiredStatistics().medRunTime ).toBe(false) await pool.destroy() pool = new DynamicThreadPool( @@ -224,8 +247,13 @@ describe('Selection strategies test suite', () => { ) pool.setWorkerChoiceStrategy(WorkerChoiceStrategies.LESS_USED) expect( - pool.workerChoiceStrategyContext.getWorkerChoiceStrategy() - .requiredStatistics.runTime + pool.workerChoiceStrategyContext.getRequiredStatistics().runTime + ).toBe(false) + expect( + pool.workerChoiceStrategyContext.getRequiredStatistics().avgRunTime + ).toBe(false) + expect( + pool.workerChoiceStrategyContext.getRequiredStatistics().medRunTime ).toBe(false) // We need to clean up the resources after our test await pool.destroy() @@ -297,9 +325,14 @@ describe('Selection strategies test suite', () => { ) pool.setWorkerChoiceStrategy(WorkerChoiceStrategies.LESS_BUSY) expect( - pool.workerChoiceStrategyContext.getWorkerChoiceStrategy() - .requiredStatistics.runTime + pool.workerChoiceStrategyContext.getRequiredStatistics().runTime ).toBe(true) + expect( + pool.workerChoiceStrategyContext.getRequiredStatistics().avgRunTime + ).toBe(false) + expect( + pool.workerChoiceStrategyContext.getRequiredStatistics().medRunTime + ).toBe(false) await pool.destroy() pool = new DynamicThreadPool( min, @@ -308,9 +341,14 @@ describe('Selection strategies test suite', () => { ) pool.setWorkerChoiceStrategy(WorkerChoiceStrategies.LESS_BUSY) expect( - pool.workerChoiceStrategyContext.getWorkerChoiceStrategy() - .requiredStatistics.runTime + pool.workerChoiceStrategyContext.getRequiredStatistics().runTime ).toBe(true) + expect( + pool.workerChoiceStrategyContext.getRequiredStatistics().avgRunTime + ).toBe(false) + expect( + pool.workerChoiceStrategyContext.getRequiredStatistics().medRunTime + ).toBe(false) // We need to clean up the resources after our test await pool.destroy() }) @@ -357,18 +395,18 @@ describe('Selection strategies test suite', () => { expect(pool.opts.workerChoiceStrategy).toBe( WorkerChoiceStrategies.FAIR_SHARE ) - for (const worker of pool.workerChoiceStrategyContext - .getWorkerChoiceStrategy() + for (const workerKey of pool.workerChoiceStrategyContext.workerChoiceStrategies + .get(WorkerChoiceStrategies.FAIR_SHARE) .workerLastVirtualTaskTimestamp.keys()) { expect( - pool.workerChoiceStrategyContext - .getWorkerChoiceStrategy() - .workerLastVirtualTaskTimestamp.get(worker).start + pool.workerChoiceStrategyContext.workerChoiceStrategies + .get(WorkerChoiceStrategies.FAIR_SHARE) + .workerLastVirtualTaskTimestamp.get(workerKey).start ).toBe(0) expect( - pool.workerChoiceStrategyContext - .getWorkerChoiceStrategy() - .workerLastVirtualTaskTimestamp.get(worker).end + pool.workerChoiceStrategyContext.workerChoiceStrategies + .get(WorkerChoiceStrategies.FAIR_SHARE) + .workerLastVirtualTaskTimestamp.get(workerKey).end ).toBe(0) } // We need to clean up the resources after our test @@ -395,9 +433,14 @@ describe('Selection strategies test suite', () => { ) pool.setWorkerChoiceStrategy(WorkerChoiceStrategies.FAIR_SHARE) expect( - pool.workerChoiceStrategyContext.getWorkerChoiceStrategy() - .requiredStatistics.runTime + pool.workerChoiceStrategyContext.getRequiredStatistics().runTime ).toBe(true) + expect( + pool.workerChoiceStrategyContext.getRequiredStatistics().avgRunTime + ).toBe(true) + expect( + pool.workerChoiceStrategyContext.getRequiredStatistics().medRunTime + ).toBe(false) await pool.destroy() pool = new DynamicThreadPool( min, @@ -406,9 +449,14 @@ describe('Selection strategies test suite', () => { ) pool.setWorkerChoiceStrategy(WorkerChoiceStrategies.FAIR_SHARE) expect( - pool.workerChoiceStrategyContext.getWorkerChoiceStrategy() - .requiredStatistics.runTime + pool.workerChoiceStrategyContext.getRequiredStatistics().runTime + ).toBe(true) + expect( + pool.workerChoiceStrategyContext.getRequiredStatistics().avgRunTime ).toBe(true) + expect( + pool.workerChoiceStrategyContext.getRequiredStatistics().medRunTime + ).toBe(false) // We need to clean up the resources after our test await pool.destroy() }) @@ -425,6 +473,11 @@ describe('Selection strategies test suite', () => { promises.push(pool.execute()) } await Promise.all(promises) + expect( + pool.workerChoiceStrategyContext.workerChoiceStrategies.get( + WorkerChoiceStrategies.FAIR_SHARE + ).workerLastVirtualTaskTimestamp.size + ).toBe(pool.workers.length) // We need to clean up the resources after our test await pool.destroy() }) @@ -438,10 +491,18 @@ describe('Selection strategies test suite', () => { ) // TODO: Create a better test to cover `FairShareChoiceStrategy#choose` const promises = [] - for (let i = 0; i < max * 2; i++) { + const maxMultiplier = 2 + for (let i = 0; i < max * maxMultiplier; i++) { promises.push(pool.execute()) } await Promise.all(promises) + // if (process.platform !== 'win32') { + // expect( + // pool.workerChoiceStrategyContext.workerChoiceStrategies.get( + // WorkerChoiceStrategies.FAIR_SHARE + // ).workerLastVirtualTaskTimestamp.size + // ).toBe(pool.workers.length) + // } // We need to clean up the resources after our test await pool.destroy() }) @@ -452,22 +513,23 @@ describe('Selection strategies test suite', () => { './tests/worker-files/thread/testWorker.js' ) expect( - pool.workerChoiceStrategyContext.getWorkerChoiceStrategy() - .workerLastVirtualTaskTimestamp - ).toBeUndefined() + pool.workerChoiceStrategyContext.workerChoiceStrategies.get( + WorkerChoiceStrategies.FAIR_SHARE + ).workerLastVirtualTaskTimestamp + ).toBeDefined() pool.setWorkerChoiceStrategy(WorkerChoiceStrategies.FAIR_SHARE) - for (const worker of pool.workerChoiceStrategyContext - .getWorkerChoiceStrategy() + for (const workerKey of pool.workerChoiceStrategyContext.workerChoiceStrategies + .get(WorkerChoiceStrategies.FAIR_SHARE) .workerLastVirtualTaskTimestamp.keys()) { expect( - pool.workerChoiceStrategyContext - .getWorkerChoiceStrategy() - .workerLastVirtualTaskTimestamp.get(worker).start + pool.workerChoiceStrategyContext.workerChoiceStrategies + .get(WorkerChoiceStrategies.FAIR_SHARE) + .workerLastVirtualTaskTimestamp.get(workerKey).start ).toBe(0) expect( - pool.workerChoiceStrategyContext - .getWorkerChoiceStrategy() - .workerLastVirtualTaskTimestamp.get(worker).end + pool.workerChoiceStrategyContext.workerChoiceStrategies + .get(WorkerChoiceStrategies.FAIR_SHARE) + .workerLastVirtualTaskTimestamp.get(workerKey).end ).toBe(0) } await pool.destroy() @@ -477,22 +539,23 @@ describe('Selection strategies test suite', () => { './tests/worker-files/thread/testWorker.js' ) expect( - pool.workerChoiceStrategyContext.getWorkerChoiceStrategy() - .workerChoiceStrategy.workerLastVirtualTaskTimestamp - ).toBeUndefined() + pool.workerChoiceStrategyContext.workerChoiceStrategies.get( + WorkerChoiceStrategies.FAIR_SHARE + ).workerLastVirtualTaskTimestamp + ).toBeDefined() pool.setWorkerChoiceStrategy(WorkerChoiceStrategies.FAIR_SHARE) - for (const worker of pool.workerChoiceStrategyContext - .getWorkerChoiceStrategy() - .workerChoiceStrategy.workerLastVirtualTaskTimestamp.keys()) { + for (const workerKey of pool.workerChoiceStrategyContext.workerChoiceStrategies + .get(WorkerChoiceStrategies.FAIR_SHARE) + .workerLastVirtualTaskTimestamp.keys()) { expect( - pool.workerChoiceStrategyContext - .getWorkerChoiceStrategy() - .workerChoiceStrategy.workerLastVirtualTaskTimestamp.get(worker).start + pool.workerChoiceStrategyContext.workerChoiceStrategies + .get(WorkerChoiceStrategies.FAIR_SHARE) + .workerLastVirtualTaskTimestamp.get(workerKey).start ).toBe(0) expect( - pool.workerChoiceStrategyContext - .getWorkerChoiceStrategy() - .workerChoiceStrategy.workerLastVirtualTaskTimestamp.get(worker).end + pool.workerChoiceStrategyContext.workerChoiceStrategies + .get(WorkerChoiceStrategies.FAIR_SHARE) + .workerLastVirtualTaskTimestamp.get(workerKey).end ).toBe(0) } // We need to clean up the resources after our test @@ -509,24 +572,27 @@ describe('Selection strategies test suite', () => { WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN ) expect( - pool.workerChoiceStrategyContext.getWorkerChoiceStrategy().currentWorkerId + pool.workerChoiceStrategyContext.workerChoiceStrategies.get( + WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN + ).currentWorkerId ).toBe(0) expect( - pool.workerChoiceStrategyContext.getWorkerChoiceStrategy() - .defaultWorkerWeight + pool.workerChoiceStrategyContext.workerChoiceStrategies.get( + WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN + ).defaultWorkerWeight ).toBeGreaterThan(0) - for (const worker of pool.workerChoiceStrategyContext - .getWorkerChoiceStrategy() + for (const workerKey of pool.workerChoiceStrategyContext.workerChoiceStrategies + .get(WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN) .workersTaskRunTime.keys()) { expect( - pool.workerChoiceStrategyContext - .getWorkerChoiceStrategy() - .workersTaskRunTime.get(worker).weight + pool.workerChoiceStrategyContext.workerChoiceStrategies + .get(WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN) + .workersTaskRunTime.get(workerKey).weight ).toBeGreaterThan(0) expect( - pool.workerChoiceStrategyContext - .getWorkerChoiceStrategy() - .workersTaskRunTime.get(worker).runTime + pool.workerChoiceStrategyContext.workerChoiceStrategies + .get(WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN) + .workersTaskRunTime.get(workerKey).runTime ).toBe(0) } // We need to clean up the resources after our test @@ -553,9 +619,14 @@ describe('Selection strategies test suite', () => { ) pool.setWorkerChoiceStrategy(WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN) expect( - pool.workerChoiceStrategyContext.getWorkerChoiceStrategy() - .requiredStatistics.runTime + pool.workerChoiceStrategyContext.getRequiredStatistics().runTime + ).toBe(true) + expect( + pool.workerChoiceStrategyContext.getRequiredStatistics().avgRunTime ).toBe(true) + expect( + pool.workerChoiceStrategyContext.getRequiredStatistics().medRunTime + ).toBe(false) await pool.destroy() pool = new DynamicThreadPool( min, @@ -564,9 +635,14 @@ describe('Selection strategies test suite', () => { ) pool.setWorkerChoiceStrategy(WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN) expect( - pool.workerChoiceStrategyContext.getWorkerChoiceStrategy() - .requiredStatistics.runTime + pool.workerChoiceStrategyContext.getRequiredStatistics().runTime ).toBe(true) + expect( + pool.workerChoiceStrategyContext.getRequiredStatistics().avgRunTime + ).toBe(true) + expect( + pool.workerChoiceStrategyContext.getRequiredStatistics().medRunTime + ).toBe(false) // We need to clean up the resources after our test await pool.destroy() }) @@ -583,6 +659,11 @@ describe('Selection strategies test suite', () => { promises.push(pool.execute()) } await Promise.all(promises) + expect( + pool.workerChoiceStrategyContext.workerChoiceStrategies.get( + WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN + ).workersTaskRunTime.size + ).toBe(pool.workers.length) // We need to clean up the resources after our test await pool.destroy() }) @@ -596,10 +677,21 @@ describe('Selection strategies test suite', () => { ) // TODO: Create a better test to cover `WeightedRoundRobinWorkerChoiceStrategy#choose` const promises = [] - for (let i = 0; i < max * 2; i++) { + const maxMultiplier = + pool.workerChoiceStrategyContext.workerChoiceStrategies.get( + WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN + ).defaultWorkerWeight * 50 + for (let i = 0; i < max * maxMultiplier; i++) { promises.push(pool.execute()) } await Promise.all(promises) + if (process.platform !== 'win32') { + expect( + pool.workerChoiceStrategyContext.workerChoiceStrategies.get( + WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN + ).workersTaskRunTime.size + ).toBe(pool.workers.length) + } // We need to clean up the resources after our test await pool.destroy() }) @@ -610,31 +702,38 @@ describe('Selection strategies test suite', () => { './tests/worker-files/thread/testWorker.js' ) expect( - pool.workerChoiceStrategyContext.getWorkerChoiceStrategy().currentWorkerId - ).toBeUndefined() + pool.workerChoiceStrategyContext.workerChoiceStrategies.get( + WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN + ).currentWorkerId + ).toBeDefined() expect( - pool.workerChoiceStrategyContext.getWorkerChoiceStrategy() - .defaultWorkerWeight - ).toBeUndefined() + pool.workerChoiceStrategyContext.workerChoiceStrategies.get( + WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN + ).defaultWorkerWeight + ).toBeDefined() expect( - pool.workerChoiceStrategyContext.getWorkerChoiceStrategy() - .workersTaskRunTime - ).toBeUndefined() + pool.workerChoiceStrategyContext.workerChoiceStrategies.get( + WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN + ).workersTaskRunTime + ).toBeDefined() pool.setWorkerChoiceStrategy(WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN) expect( - pool.workerChoiceStrategyContext.getWorkerChoiceStrategy().currentWorkerId + pool.workerChoiceStrategyContext.workerChoiceStrategies.get( + WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN + ).currentWorkerId ).toBe(0) expect( - pool.workerChoiceStrategyContext.getWorkerChoiceStrategy() - .defaultWorkerWeight + pool.workerChoiceStrategyContext.workerChoiceStrategies.get( + WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN + ).defaultWorkerWeight ).toBeGreaterThan(0) - for (const worker of pool.workerChoiceStrategyContext - .getWorkerChoiceStrategy() + for (const workerKey of pool.workerChoiceStrategyContext.workerChoiceStrategies + .get(WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN) .workersTaskRunTime.keys()) { expect( - pool.workerChoiceStrategyContext - .getWorkerChoiceStrategy() - .workersTaskRunTime.get(worker).runTime + pool.workerChoiceStrategyContext.workerChoiceStrategies + .get(WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN) + .workersTaskRunTime.get(workerKey).runTime ).toBe(0) } await pool.destroy() @@ -644,33 +743,38 @@ describe('Selection strategies test suite', () => { './tests/worker-files/thread/testWorker.js' ) expect( - pool.workerChoiceStrategyContext.getWorkerChoiceStrategy() - .workerChoiceStrategy.currentWorkerId - ).toBeUndefined() + pool.workerChoiceStrategyContext.workerChoiceStrategies.get( + WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN + ).currentWorkerId + ).toBeDefined() expect( - pool.workerChoiceStrategyContext.getWorkerChoiceStrategy() - .workerChoiceStrategy.defaultWorkerWeight - ).toBeUndefined() + pool.workerChoiceStrategyContext.workerChoiceStrategies.get( + WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN + ).defaultWorkerWeight + ).toBeDefined() expect( - pool.workerChoiceStrategyContext.getWorkerChoiceStrategy() - .workerChoiceStrategy.workersTaskRunTime - ).toBeUndefined() + pool.workerChoiceStrategyContext.workerChoiceStrategies.get( + WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN + ).workersTaskRunTime + ).toBeDefined() pool.setWorkerChoiceStrategy(WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN) expect( - pool.workerChoiceStrategyContext.getWorkerChoiceStrategy() - .workerChoiceStrategy.currentWorkerId + pool.workerChoiceStrategyContext.workerChoiceStrategies.get( + WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN + ).currentWorkerId ).toBe(0) expect( - pool.workerChoiceStrategyContext.getWorkerChoiceStrategy() - .workerChoiceStrategy.defaultWorkerWeight + pool.workerChoiceStrategyContext.workerChoiceStrategies.get( + WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN + ).defaultWorkerWeight ).toBeGreaterThan(0) - for (const worker of pool.workerChoiceStrategyContext - .getWorkerChoiceStrategy() - .workerChoiceStrategy.workersTaskRunTime.keys()) { + for (const workerKey of pool.workerChoiceStrategyContext.workerChoiceStrategies + .get(WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN) + .workersTaskRunTime.keys()) { expect( - pool.workerChoiceStrategyContext - .getWorkerChoiceStrategy() - .workerChoiceStrategy.workersTaskRunTime.get(worker).runTime + pool.workerChoiceStrategyContext.workerChoiceStrategies + .get(WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN) + .workersTaskRunTime.get(workerKey).runTime ).toBe(0) } // We need to clean up the resources after our test @@ -687,7 +791,7 @@ describe('Selection strategies test suite', () => { { workerChoiceStrategy: 'UNKNOWN_STRATEGY' } ) ).toThrowError( - new Error("Worker choice strategy 'UNKNOWN_STRATEGY' not found") + new Error("Invalid worker choice strategy 'UNKNOWN_STRATEGY'") ) }) })