build: cleanup TS configuration
[poolifier.git] / tests / pools / cluster / fixed.test.js
index e563b0ba520c67f2f11b44221e61b88b098c6496..42e13a9a83348f8b4d8c425f4f71ae32c77d6a7e 100644 (file)
@@ -2,9 +2,10 @@ const { expect } = require('expect')
 const { FixedClusterPool, PoolEvents } = require('../../../lib')
 const { TaskFunctions } = require('../../test-types')
 const { waitPoolEvents, waitWorkerEvents } = require('../../test-utils')
+const { DEFAULT_TASK_NAME } = require('../../../lib/utils')
 
 describe('Fixed cluster pool test suite', () => {
-  const numberOfWorkers = 6
+  const numberOfWorkers = 8
   const tasksConcurrency = 2
   const pool = new FixedClusterPool(
     numberOfWorkers,
@@ -92,12 +93,14 @@ describe('Fixed cluster pool test suite', () => {
     expect(poolReady).toBe(1)
   })
 
-  it("Verify that 'busy' event is emitted", () => {
+  it("Verify that 'busy' event is emitted", async () => {
+    const promises = new Set()
     let poolBusy = 0
     pool.emitter.on(PoolEvents.busy, () => ++poolBusy)
     for (let i = 0; i < numberOfWorkers * 2; i++) {
-      pool.execute()
+      promises.add(pool.execute())
     }
+    await Promise.all(promises)
     // The `busy` event is triggered when the number of submitted tasks at once reach the number of fixed pool workers.
     // So in total numberOfWorkers + 1 times for a loop submitting up to numberOfWorkers * 2 tasks to the fixed pool.
     expect(poolBusy).toBe(numberOfWorkers + 1)
@@ -122,7 +125,9 @@ describe('Fixed cluster pool test suite', () => {
       expect(workerNode.usage.tasks.maxQueued).toBe(
         maxMultiplier - queuePool.opts.tasksQueueOptions.concurrency
       )
+      expect(workerNode.usage.tasks.stolen).toBe(0)
     }
+    expect(queuePool.info.executedTasks).toBe(0)
     expect(queuePool.info.executingTasks).toBe(
       numberOfWorkers * queuePool.opts.tasksQueueOptions.concurrency
     )
@@ -134,15 +139,30 @@ describe('Fixed cluster pool test suite', () => {
       numberOfWorkers *
         (maxMultiplier - queuePool.opts.tasksQueueOptions.concurrency)
     )
+    expect(queuePool.info.backPressure).toBe(false)
+    expect(queuePool.info.stolenTasks).toBe(0)
     await Promise.all(promises)
     for (const workerNode of queuePool.workerNodes) {
-      expect(workerNode.usage.tasks.executing).toBe(0)
+      expect(workerNode.usage.tasks.executing).toBeGreaterThanOrEqual(0)
+      expect(workerNode.usage.tasks.executing).toBeLessThanOrEqual(
+        numberOfWorkers * maxMultiplier
+      )
       expect(workerNode.usage.tasks.executed).toBe(maxMultiplier)
       expect(workerNode.usage.tasks.queued).toBe(0)
       expect(workerNode.usage.tasks.maxQueued).toBe(
         maxMultiplier - queuePool.opts.tasksQueueOptions.concurrency
       )
+      expect(workerNode.usage.tasks.stolen).toBeGreaterThanOrEqual(0)
+      expect(workerNode.usage.tasks.stolen).toBeLessThanOrEqual(
+        numberOfWorkers * maxMultiplier
+      )
     }
+    expect(queuePool.info.executedTasks).toBe(numberOfWorkers * maxMultiplier)
+    expect(queuePool.info.backPressure).toBe(false)
+    expect(queuePool.info.stolenTasks).toBeGreaterThanOrEqual(0)
+    expect(queuePool.info.stolenTasks).toBeLessThanOrEqual(
+      numberOfWorkers * maxMultiplier
+    )
   })
 
   it('Verify that is possible to have a worker that return undefined', async () => {
@@ -172,7 +192,7 @@ describe('Fixed cluster pool test suite', () => {
     expect(typeof inError === 'string').toBe(true)
     expect(inError).toBe('Error Message from ClusterWorker')
     expect(taskError).toStrictEqual({
-      name: 'default',
+      name: DEFAULT_TASK_NAME,
       message: 'Error Message from ClusterWorker',
       data
     })
@@ -199,7 +219,7 @@ describe('Fixed cluster pool test suite', () => {
     expect(typeof inError === 'string').toBe(true)
     expect(inError).toBe('Error Message from ClusterWorker:async')
     expect(taskError).toStrictEqual({
-      name: 'default',
+      name: DEFAULT_TASK_NAME,
       message: 'Error Message from ClusterWorker:async',
       data
     })