const expect = require('expect')
const { DynamicThreadPool } = require('../../../lib/index')
+const TestUtils = require('../../test-utils')
const min = 1
const max = 3
const pool = new DynamicThreadPool(
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 closedThreads = 0
let fullPool = 0
pool.emitter.on('FullPool', () => fullPool++)
for (let i = 0; i < max * 2; i++) {
promises.push(pool.execute({ test: 'test' }))
}
expect(pool.workers.length).toBe(max)
- pool.workers.forEach(w => {
- w.on('exit', () => {
- closedThreads++
- })
- })
expect(fullPool > 1).toBeTruthy()
- await new Promise(resolve => setTimeout(resolve, 2000))
- expect(closedThreads).toBe(max - min)
+ const res = await TestUtils.waitExits(pool, max - min)
+ expect(res).toBe(max - min)
})
it('Verify scale thread up and down is working', async () => {
pool.execute({ test: 'test' })
}
expect(pool.workers.length).toBe(max)
- await new Promise(resolve => setTimeout(resolve, 1000))
+ await TestUtils.waitExits(pool, max - min)
expect(pool.workers.length).toBe(min)
for (let i = 0; i < max * 10; i++) {
pool.execute({ test: 'test' })
}
expect(pool.workers.length).toBe(max)
- await new Promise(resolve => setTimeout(resolve, 1500))
+ await TestUtils.waitExits(pool, max - min)
expect(pool.workers.length).toBe(min)
})
})
it('Validations test', () => {
- let error
- try {
+ expect(() => {
const pool1 = new DynamicThreadPool()
- console.log(pool1)
- } catch (e) {
- error = e
- }
- expect(error).toBeTruthy()
- expect(error.message).toBeTruthy()
+ }).toThrowError(
+ new Error('Please specify a file with a worker implementation')
+ )
})
it('Should work even without opts in input', async () => {
const longRunningPool = new DynamicThreadPool(
min,
max,
- './tests/worker/thread/longRunningWorkerHardBehavior.js',
+ './tests/worker-files/thread/longRunningWorkerHardBehavior.js',
{
errorHandler: e => console.error(e),
onlineHandler: () => console.log('worker is online')
longRunningPool.execute({ test: 'test' })
}
expect(longRunningPool.workers.length).toBe(max)
- await new Promise(resolve => setTimeout(resolve, 1500))
+ await TestUtils.waitExits(longRunningPool, max - min)
expect(longRunningPool.workers.length).toBe(min)
})
const longRunningPool = new DynamicThreadPool(
min,
max,
- './tests/worker/thread/longRunningWorkerSoftBehavior.js',
+ './tests/worker-files/thread/longRunningWorkerSoftBehavior.js',
{
errorHandler: e => console.error(e),
onlineHandler: () => console.log('worker is online')
longRunningPool.execute({ test: 'test' })
}
expect(longRunningPool.workers.length).toBe(max)
- await new Promise(resolve => setTimeout(resolve, 1500))
+ 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)
})