const expect = require('expect')
const DynamicThreadPool = require('../lib/dynamic')
const min = 1
-const max = 10
-const pool = new DynamicThreadPool(min, max,
- './tests/testWorker.js',
- { errorHandler: (e) => console.error(e), onlineHandler: () => console.log('worker is online') })
+const max = 3
+const pool = new DynamicThreadPool(min, max, './tests/workers/testWorker.js', {
+ errorHandler: e => console.error(e),
+ onlineHandler: () => console.log('worker is online')
+})
describe('Dynamic thread pool test suite ', () => {
it('Verify that the function is executed in a worker thread', async () => {
let closedThreads = 0
let fullPool = 0
pool.emitter.on('FullPool', () => fullPool++)
- for (let i = 0; i < (max * 3); i++) {
+ for (let i = 0; i < max * 2; i++) {
promises.push(pool.execute({ test: 'test' }))
}
expect(pool.workers.length).toBe(max)
})
})
expect(fullPool > 1).toBeTruthy()
- await new Promise(resolve => setTimeout(resolve, 1000 * 2))
+ await new Promise(resolve => setTimeout(resolve, 2000))
expect(closedThreads).toBe(max - min)
})
+ it('Verify scale thread up and down is working', async () => {
+ 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, 1000))
+ 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, 1000))
+ expect(pool.workers.length).toBe(min)
+ })
it('Shutdown test', async () => {
let closedThreads = 0
pool.workers.forEach(w => {
closedThreads++
})
})
- pool.destroy()
- await new Promise(resolve => setTimeout(resolve, 1000))
+ await pool.destroy()
expect(closedThreads).toBe(min)
})
})
it('Should work even without opts in input', async () => {
- const pool1 = new DynamicThreadPool(1, 1, './tests/testWorker.js')
+ const pool1 = new DynamicThreadPool(1, 1, './tests/workers/testWorker.js')
const res = await pool1.execute({ test: 'test' })
expect(res).toBeFalsy()
})