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