c69b72d8370666f0b1f907e2c26e1e784e784c93
1 const expect
= require('expect')
2 const { FixedClusterPool
} = require('../../../lib/index')
3 const TestUtils
= require('../../test-utils')
4 const numberOfWorkers
= 10
5 const pool
= new FixedClusterPool(
7 './tests/worker-files/cluster/testWorker.js',
9 errorHandler
: e
=> console
.error(e
)
12 const emptyPool
= new FixedClusterPool(
14 './tests/worker-files/cluster/emptyWorker.js',
15 { exitHandler
: () => console
.log('empty pool worker exited') }
17 const echoPool
= new FixedClusterPool(
19 './tests/worker-files/cluster/echoWorker.js'
21 const errorPool
= new FixedClusterPool(
23 './tests/worker-files/cluster/errorWorker.js',
25 errorHandler
: e
=> console
.error(e
)
28 const asyncErrorPool
= new FixedClusterPool(
30 './tests/worker-files/cluster/asyncErrorWorker.js',
32 onlineHandler
: () => console
.log('worker is online')
35 const asyncPool
= new FixedClusterPool(
37 './tests/worker-files/cluster/asyncWorker.js'
40 describe('Fixed cluster pool test suite', () => {
41 after('Destroy all pools', async () => {
42 // We need to clean up the resources after our test
43 await echoPool
.destroy()
44 await asyncPool
.destroy()
45 await errorPool
.destroy()
46 await asyncErrorPool
.destroy()
47 await emptyPool
.destroy()
50 it('Choose worker round robin test', async () => {
51 const results
= new Set()
52 for (let i
= 0; i
< numberOfWorkers
; i
++) {
53 results
.add(pool
.chooseWorker().id
)
55 expect(results
.size
).toBe(numberOfWorkers
)
58 it('Verify that the function is executed in a worker cluster', async () => {
59 const result
= await pool
.execute({ test
: 'test' })
60 expect(result
).toBeDefined()
61 expect(result
).toBeFalsy()
64 it('Verify that is possible to invoke the execute method without input', async () => {
65 const result
= await pool
.execute()
66 expect(result
).toBeDefined()
67 expect(result
).toBeFalsy()
70 it('Verify that busy event is emitted', async () => {
73 pool
.emitter
.on('busy', () => poolBusy
++)
74 for (let i
= 0; i
< numberOfWorkers
* 2; i
++) {
75 promises
.push(pool
.execute({ test
: 'test' }))
77 expect(poolBusy
).toEqual(numberOfWorkers
)
80 it('Verify that is possible to have a worker that return undefined', async () => {
81 const result
= await emptyPool
.execute()
82 expect(result
).toBeFalsy()
85 it('Verify that data are sent to the worker correctly', async () => {
86 const data
= { f
: 10 }
87 const result
= await echoPool
.execute(data
)
88 expect(result
).toBeTruthy()
89 expect(result
.f
).toBe(data
.f
)
92 it('Verify that error handling is working properly:sync', async () => {
93 const data
= { f
: 10 }
96 await errorPool
.execute(data
)
100 expect(inError
).toBeDefined()
101 expect(typeof inError
=== 'string').toEqual(true)
102 expect(inError
).toBe('Error Message from ClusterWorker')
105 it('Verify that error handling is working properly:async', async () => {
106 const data
= { f
: 10 }
109 await asyncErrorPool
.execute(data
)
113 expect(inError
).toBeDefined()
114 expect(typeof inError
=== 'string').toEqual(true)
115 expect(inError
).toBe('Error Message from ClusterWorker:async')
118 it('Verify that async function is working properly', async () => {
119 const data
= { f
: 10 }
120 const startTime
= new Date().getTime()
121 const result
= await asyncPool
.execute(data
)
122 const usedTime
= new Date().getTime() - startTime
123 expect(result
).toBeTruthy()
124 expect(result
.f
).toBe(data
.f
)
125 expect(usedTime
).toBeGreaterThanOrEqual(2000)
128 it('Shutdown test', async () => {
129 const exitPromise
= TestUtils
.waitExits(pool
, numberOfWorkers
)
131 const res
= await exitPromise
132 expect(res
).toBe(numberOfWorkers
)
135 it('Should work even without opts in input', async () => {
136 const pool1
= new FixedClusterPool(
138 './tests/worker-files/cluster/testWorker.js'
140 const res
= await pool1
.execute({ test
: 'test' })
141 expect(res
).toBeFalsy()
142 // We need to clean up the resources after our test
143 await pool1
.destroy()
146 it('Verify that a pool with zero worker fails', async () => {
149 new FixedClusterPool(0, './tests/worker-files/cluster/testWorker.js')
150 ).toThrowError(new Error('Cannot instantiate a fixed pool with no worker'))