const { expect } = require('expect')
-const { DynamicClusterPool } = require('../../../lib/index')
+const { DynamicClusterPool, PoolEvents } = require('../../../lib/index')
+const { WorkerFunctions } = require('../../test-types')
const TestUtils = require('../../test-utils')
-const min = 1
-const max = 3
-const pool = new DynamicClusterPool(
- min,
- max,
- './tests/worker-files/cluster/testWorker.js',
- {
- errorHandler: e => console.error(e)
- }
-)
describe('Dynamic cluster pool test suite', () => {
+ const min = 1
+ const max = 3
+ const pool = new DynamicClusterPool(
+ min,
+ max,
+ './tests/worker-files/cluster/testWorker.js',
+ {
+ errorHandler: e => console.error(e)
+ }
+ )
+
it('Verify that the function is executed in a worker cluster', 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(PoolEvents.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 worker 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).toBeGreaterThan(min)
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).toBeGreaterThan(min)
await TestUtils.waitExits(pool, max - min)
it('Should work even without opts in input', async () => {
const pool1 = new DynamicClusterPool(
- 1,
- 1,
+ min,
+ max,
'./tests/worker-files/cluster/testWorker.js'
)
- const result = await pool1.execute({ test: 'test' })
- expect(result).toBeDefined()
- expect(result).toBeFalsy()
+ const result = await pool1.execute()
+ expect(result).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)
- // Here we expect the workers to be at the max size since that the task is still running
expect(longRunningPool.workers.length).toBe(min)
// We need to clean up the resources after our test
await longRunningPool.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.sleep(1500)
- // Here we expect the workers to be at the max size since that the task is still running
+ // Here we expect the workers to be at the max size since the task is still running
expect(longRunningPool.workers.length).toBe(max)
// We need to clean up the resources after our test
await longRunningPool.destroy()