Merge pull request #118 from pioardi/dependabot/npm_and_yarn/eslint-plugin-promise...
[poolifier.git] / tests / dynamic.test.js
CommitLineData
506c2a14 1const expect = require('expect')
60fbd6d6 2const { DynamicThreadPool } = require('../lib/dynamic')
506c2a14 3const min = 1
c719859c 4const max = 3
cf9aa6c3 5const pool = new DynamicThreadPool(min, max, './tests/workers/testWorker.js', {
6 errorHandler: e => console.error(e),
7 onlineHandler: () => console.log('worker is online')
8})
506c2a14 9
10describe('Dynamic thread pool test suite ', () => {
11 it('Verify that the function is executed in a worker thread', async () => {
12 const result = await pool.execute({ test: 'test' })
13 expect(result).toBeDefined()
14 expect(result).toBeFalsy()
15 })
16
17 it('Verify that new workers are created when required, max size is not exceeded and that after a while new workers will die', async () => {
18 const promises = []
19 let closedThreads = 0
b755d5be 20 let fullPool = 0
21 pool.emitter.on('FullPool', () => fullPool++)
cf9aa6c3 22 for (let i = 0; i < max * 2; i++) {
506c2a14 23 promises.push(pool.execute({ test: 'test' }))
24 }
25 expect(pool.workers.length).toBe(max)
26 pool.workers.forEach(w => {
27 w.on('exit', () => {
28 closedThreads++
29 })
30 })
b755d5be 31 expect(fullPool > 1).toBeTruthy()
c719859c 32 await new Promise(resolve => setTimeout(resolve, 2000))
506c2a14 33 expect(closedThreads).toBe(max - min)
34 })
35
bcf04003 36 it('Verify scale thread up and down is working', async () => {
37 expect(pool.workers.length).toBe(min)
38 for (let i = 0; i < max * 10; i++) {
39 pool.execute({ test: 'test' })
40 }
41 expect(pool.workers.length).toBe(max)
42 await new Promise(resolve => setTimeout(resolve, 1000))
43 expect(pool.workers.length).toBe(min)
44 for (let i = 0; i < max * 10; i++) {
45 pool.execute({ test: 'test' })
46 }
47 expect(pool.workers.length).toBe(max)
48 await new Promise(resolve => setTimeout(resolve, 1000))
49 expect(pool.workers.length).toBe(min)
50 })
506c2a14 51 it('Shutdown test', async () => {
52 let closedThreads = 0
53 pool.workers.forEach(w => {
54 w.on('exit', () => {
55 closedThreads++
56 })
57 })
1f9a5a44 58 await pool.destroy()
506c2a14 59 expect(closedThreads).toBe(min)
60 })
61
62 it('Validations test', () => {
63 let error
64 try {
65 const pool1 = new DynamicThreadPool()
66 console.log(pool1)
67 } catch (e) {
68 error = e
69 }
70 expect(error).toBeTruthy()
71 expect(error.message).toBeTruthy()
72 })
73
74 it('Should work even without opts in input', async () => {
106744f7 75 const pool1 = new DynamicThreadPool(1, 1, './tests/workers/testWorker.js')
506c2a14 76 const res = await pool1.execute({ test: 'test' })
77 expect(res).toBeFalsy()
78 })
79})