X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=tests%2Fpools%2Fthread%2Fdynamic.test.js;h=241a1b60ce312a77dd265e3d1390ae6e25ab5786;hb=26a2bc6177aeeb0c40fcc792f988bbfa1f7ae1a3;hp=3a162267189d066c1beeae0aae6773ccc9b39106;hpb=a35560bac09e829e1e19f88f8fd1d71a64c9d50b;p=poolifier.git diff --git a/tests/pools/thread/dynamic.test.js b/tests/pools/thread/dynamic.test.js index 3a162267..241a1b60 100644 --- a/tests/pools/thread/dynamic.test.js +++ b/tests/pools/thread/dynamic.test.js @@ -21,13 +21,15 @@ describe('Dynamic thread pool test suite', () => { it('Verify that new workers are created when required, max size is not exceeded and that after a while new workers will die', async () => { const promises = [] - let fullPool = 0 - pool.emitter.on('FullPool', () => fullPool++) + let poolBusy = 0 + pool.emitter.on('busy', () => poolBusy++) for (let i = 0; i < max * 2; i++) { promises.push(pool.execute({ test: 'test' })) } expect(pool.workers.length).toBe(max) - expect(fullPool > 1).toBeTruthy() + // The `busy` event is triggered when the number of submitted tasks at once reach the max number of workers in the dynamic pool. + // So in total numberOfWorkers + 1 times for a loop submitting up to numberOfWorkers * 2 tasks to the dynamic pool. + expect(poolBusy).toBe(max + 1) const res = await TestUtils.waitExits(pool, max - min) expect(res).toBe(max - min) }) @@ -59,10 +61,8 @@ describe('Dynamic thread pool test suite', () => { expect(closedThreads).toBe(min) }) - it('Validations test', () => { - expect(() => { - const pool1 = new DynamicThreadPool() - }).toThrowError( + it('Validation of inputs test', () => { + expect(() => new DynamicThreadPool(min)).toThrowError( new Error('Please specify a file with a worker implementation') ) }) @@ -74,7 +74,10 @@ describe('Dynamic thread pool test suite', () => { './tests/worker-files/thread/testWorker.js' ) const res = await pool1.execute({ test: 'test' }) + expect(res).toBeDefined() expect(res).toBeFalsy() + // We need to clean up the resources after our test + await pool1.destroy() }) it('Verify scale thread up and down is working when long running task is used:hard', async () => { @@ -84,7 +87,8 @@ describe('Dynamic thread pool test suite', () => { './tests/worker-files/thread/longRunningWorkerHardBehavior.js', { errorHandler: e => console.error(e), - onlineHandler: () => console.log('worker is online') + onlineHandler: () => console.log('long running worker is online'), + exitHandler: () => console.log('long running worker exited') } ) expect(longRunningPool.workers.length).toBe(min) @@ -94,6 +98,8 @@ describe('Dynamic thread pool test suite', () => { expect(longRunningPool.workers.length).toBe(max) await TestUtils.waitExits(longRunningPool, max - min) expect(longRunningPool.workers.length).toBe(min) + // We need to clean up the resources after our test + await longRunningPool.destroy() }) it('Verify scale thread up and down is working when long running task is used:soft', async () => { @@ -103,7 +109,8 @@ describe('Dynamic thread pool test suite', () => { './tests/worker-files/thread/longRunningWorkerSoftBehavior.js', { errorHandler: e => console.error(e), - onlineHandler: () => console.log('worker is online') + onlineHandler: () => console.log('long running worker is online'), + exitHandler: () => console.log('long running worker exited') } ) expect(longRunningPool.workers.length).toBe(min) @@ -114,5 +121,18 @@ describe('Dynamic thread pool test suite', () => { await TestUtils.sleep(1500) // Here we expect the workers to be at the max size since that the task is still running expect(longRunningPool.workers.length).toBe(max) + // We need to clean up the resources after our test + await longRunningPool.destroy() + }) + + it('Verify that a pool with zero worker can be instantiated', async () => { + const pool = new DynamicThreadPool( + 0, + max, + './tests/worker-files/thread/testWorker.js' + ) + expect(pool).toBeInstanceOf(DynamicThreadPool) + // We need to clean up the resources after our test + await pool.destroy() }) })