Merge pull request #65 from pioardi/dependabot/npm_and_yarn/standard-16.0.2
[poolifier.git] / tests / dynamic.test.js
index 7b0865bb9f951c9c038f2c0c80f6bf6440e81656..15195012be80f25db7750f80de1fbebdf5614765 100644 (file)
@@ -1,9 +1,9 @@
 const expect = require('expect')
 const DynamicThreadPool = require('../lib/dynamic')
 const min = 1
-const max = 10
+const max = 3
 const pool = new DynamicThreadPool(min, max,
-  './tests/testWorker.js',
+  './tests/workers/testWorker.js',
   { errorHandler: (e) => console.error(e), onlineHandler: () => console.log('worker is online') })
 
 describe('Dynamic thread pool test suite ', () => {
@@ -16,7 +16,9 @@ describe('Dynamic thread pool test suite ', () => {
   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 closedThreads = 0
-    for (let i = 0; i < (max * 3); i++) {
+    let fullPool = 0
+    pool.emitter.on('FullPool', () => fullPool++)
+    for (let i = 0; i < (max * 2); i++) {
       promises.push(pool.execute({ test: 'test' }))
     }
     expect(pool.workers.length).toBe(max)
@@ -25,10 +27,26 @@ describe('Dynamic thread pool test suite ', () => {
         closedThreads++
       })
     })
-    await new Promise(resolve => setTimeout(resolve, 1000 * 2))
+    expect(fullPool > 1).toBeTruthy()
+    await new Promise(resolve => setTimeout(resolve, 2000))
     expect(closedThreads).toBe(max - min)
   })
 
+  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' })
+    }
+    expect(pool.workers.length).toBe(max)
+    await new Promise(resolve => setTimeout(resolve, 1000))
+    expect(pool.workers.length).toBe(min)
+    for (let i = 0; i < max * 10; i++) {
+      pool.execute({ test: 'test' })
+    }
+    expect(pool.workers.length).toBe(max)
+    await new Promise(resolve => setTimeout(resolve, 1000))
+    expect(pool.workers.length).toBe(min)
+  })
   it('Shutdown test', async () => {
     let closedThreads = 0
     pool.workers.forEach(w => {
@@ -36,8 +54,7 @@ describe('Dynamic thread pool test suite ', () => {
         closedThreads++
       })
     })
-    pool.destroy()
-    await new Promise(resolve => setTimeout(resolve, 1000))
+    await pool.destroy()
     expect(closedThreads).toBe(min)
   })
 
@@ -54,7 +71,7 @@ describe('Dynamic thread pool test suite ', () => {
   })
 
   it('Should work even without opts in input', async () => {
-    const pool1 = new DynamicThreadPool(1, 1, './tests/testWorker.js')
+    const pool1 = new DynamicThreadPool(1, 1, './tests/workers/testWorker.js')
     const res = await pool1.execute({ test: 'test' })
     expect(res).toBeFalsy()
   })