const { expect } = require('expect')
const { DynamicThreadPool } = require('../../../lib/index')
+const { WorkerFunctions } = require('../../test-types')
const TestUtils = require('../../test-utils')
-const min = 1
-const max = 3
-const pool = new DynamicThreadPool(
- min,
- max,
- './tests/worker-files/thread/testWorker.js',
- {
- errorHandler: e => console.error(e)
- }
-)
describe('Dynamic thread pool test suite', () => {
+ const min = 1
+ const max = 3
+ const pool = new DynamicThreadPool(
+ min,
+ max,
+ './tests/worker-files/thread/testWorker.js',
+ {
+ errorHandler: e => console.error(e)
+ }
+ )
+
it('Verify that the function is executed in a worker thread', async () => {
- const result = await pool.execute({ test: 'test' })
- expect(result).toBeDefined()
- expect(result).toBeFalsy()
+ let result = await pool.execute({
+ function: WorkerFunctions.fibonacci
+ })
+ expect(result).toBe(false)
+ result = await pool.execute({
+ function: WorkerFunctions.factorial
+ })
+ expect(result).toBe(false)
})
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 poolBusy = 0
- pool.emitter.on('busy', () => poolBusy++)
+ pool.emitter.on('busy', () => ++poolBusy)
for (let i = 0; i < max * 2; i++) {
- promises.push(pool.execute({ test: 'test' }))
+ pool.execute()
}
- // await Promise.all(promises)
expect(pool.workers.length).toBeLessThanOrEqual(max)
expect(pool.workers.length).toBeGreaterThan(min)
// The `busy` event is triggered when the number of submitted tasks at once reach the max number of workers in the dynamic pool.
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' })
+ pool.execute()
}
expect(pool.workers.length).toBe(max)
await TestUtils.waitExits(pool, max - min)
expect(pool.workers.length).toBe(min)
for (let i = 0; i < max * 10; i++) {
- pool.execute({ test: 'test' })
+ pool.execute()
}
expect(pool.workers.length).toBe(max)
await TestUtils.waitExits(pool, max - min)
it('Should work even without opts in input', async () => {
const pool1 = new DynamicThreadPool(
- 1,
- 1,
+ min,
+ max,
'./tests/worker-files/thread/testWorker.js'
)
- const res = await pool1.execute({ test: 'test' })
- expect(res).toBeDefined()
- expect(res).toBeFalsy()
+ const res = await pool1.execute()
+ expect(res).toBe(false)
// We need to clean up the resources after our test
await pool1.destroy()
})
)
expect(longRunningPool.workers.length).toBe(min)
for (let i = 0; i < max * 10; i++) {
- longRunningPool.execute({ test: 'test' })
+ longRunningPool.execute()
}
expect(longRunningPool.workers.length).toBe(max)
await TestUtils.waitExits(longRunningPool, max - min)
)
expect(longRunningPool.workers.length).toBe(min)
for (let i = 0; i < max * 10; i++) {
- longRunningPool.execute({ test: 'test' })
+ longRunningPool.execute()
}
expect(longRunningPool.workers.length).toBe(max)
await TestUtils.sleep(1500)