test: test for wait node readiness in dynamic pool
[poolifier.git] / tests / pools / selection-strategies / selection-strategies.test.mjs
index 4a2ace0469d1da108fe49e3c5f776ab3ad8a5825..127377a26118c5d5be57cf98661eb9139fe5d81f 100644 (file)
@@ -7,6 +7,7 @@ import {
   WorkerChoiceStrategies
 } from '../../../lib/index.js'
 import { CircularArray } from '../../../lib/circular-array.js'
+import { sleep } from '../../test-utils.js'
 
 describe('Selection strategies test suite', () => {
   const min = 0
@@ -174,6 +175,26 @@ describe('Selection strategies test suite', () => {
     await pool.destroy()
   })
 
+  it('Verify strategies wait for worker node readiness in dynamic pool', async () => {
+    const pool = new DynamicThreadPool(
+      min,
+      max,
+      './tests/worker-files/thread/testWorker.mjs'
+    )
+    await sleep(600)
+    expect(pool.starting).toBe(false)
+    expect(pool.workerNodes.length).toBe(min)
+    const maxMultiplier = 10000
+    const promises = new Set()
+    for (let i = 0; i < max * maxMultiplier; i++) {
+      promises.add(pool.execute())
+    }
+    await Promise.all(promises)
+    expect(pool.workerNodes.length).toBe(max)
+    // We need to clean up the resources after our test
+    await pool.destroy()
+  })
+
   it('Verify ROUND_ROBIN strategy default policy', async () => {
     const workerChoiceStrategy = WorkerChoiceStrategies.ROUND_ROBIN
     let pool = new FixedThreadPool(
@@ -277,8 +298,8 @@ describe('Selection strategies test suite', () => {
           executing: 0,
           queued: 0,
           maxQueued: 0,
-          stolen: 0,
           sequentiallyStolen: 0,
+          stolen: 0,
           failed: 0
         },
         runTime: {
@@ -333,8 +354,8 @@ describe('Selection strategies test suite', () => {
           executing: 0,
           queued: 0,
           maxQueued: 0,
-          stolen: 0,
           sequentiallyStolen: 0,
+          stolen: 0,
           failed: 0
         },
         runTime: {
@@ -559,8 +580,8 @@ describe('Selection strategies test suite', () => {
           executing: 0,
           queued: 0,
           maxQueued: 0,
-          stolen: 0,
           sequentiallyStolen: 0,
+          stolen: 0,
           failed: 0
         },
         runTime: {
@@ -618,8 +639,8 @@ describe('Selection strategies test suite', () => {
           executing: 0,
           queued: 0,
           maxQueued: 0,
-          stolen: 0,
           sequentiallyStolen: 0,
+          stolen: 0,
           failed: 0
         },
         runTime: {
@@ -758,8 +779,8 @@ describe('Selection strategies test suite', () => {
           executing: 0,
           queued: 0,
           maxQueued: 0,
-          stolen: 0,
           sequentiallyStolen: 0,
+          stolen: 0,
           failed: 0
         },
         runTime: expect.objectContaining({
@@ -827,8 +848,8 @@ describe('Selection strategies test suite', () => {
           executing: 0,
           queued: 0,
           maxQueued: 0,
-          stolen: 0,
           sequentiallyStolen: 0,
+          stolen: 0,
           failed: 0
         },
         runTime: expect.objectContaining({
@@ -977,8 +998,8 @@ describe('Selection strategies test suite', () => {
           executing: 0,
           queued: 0,
           maxQueued: 0,
-          stolen: 0,
           sequentiallyStolen: 0,
+          stolen: 0,
           failed: 0
         },
         runTime: {
@@ -1052,8 +1073,8 @@ describe('Selection strategies test suite', () => {
           executing: 0,
           queued: 0,
           maxQueued: 0,
-          stolen: 0,
           sequentiallyStolen: 0,
+          stolen: 0,
           failed: 0
         },
         runTime: {
@@ -1208,8 +1229,8 @@ describe('Selection strategies test suite', () => {
           executing: 0,
           queued: 0,
           maxQueued: 0,
-          stolen: 0,
           sequentiallyStolen: 0,
+          stolen: 0,
           failed: 0
         },
         runTime: expect.objectContaining({
@@ -1294,8 +1315,8 @@ describe('Selection strategies test suite', () => {
           executing: 0,
           queued: 0,
           maxQueued: 0,
-          stolen: 0,
           sequentiallyStolen: 0,
+          stolen: 0,
           failed: 0
         },
         runTime: expect.objectContaining({
@@ -1385,8 +1406,8 @@ describe('Selection strategies test suite', () => {
           executing: 0,
           queued: 0,
           maxQueued: 0,
-          stolen: 0,
           sequentiallyStolen: 0,
+          stolen: 0,
           failed: 0
         },
         runTime: expect.objectContaining({
@@ -1586,8 +1607,8 @@ describe('Selection strategies test suite', () => {
           executing: 0,
           queued: 0,
           maxQueued: 0,
-          stolen: 0,
           sequentiallyStolen: 0,
+          stolen: 0,
           failed: 0
         },
         runTime: expect.objectContaining({
@@ -1665,8 +1686,8 @@ describe('Selection strategies test suite', () => {
           executing: 0,
           queued: 0,
           maxQueued: 0,
-          stolen: 0,
           sequentiallyStolen: 0,
+          stolen: 0,
           failed: 0
         },
         runTime: expect.objectContaining({
@@ -1749,8 +1770,8 @@ describe('Selection strategies test suite', () => {
           executing: 0,
           queued: 0,
           maxQueued: 0,
-          stolen: 0,
           sequentiallyStolen: 0,
+          stolen: 0,
           failed: 0
         },
         runTime: expect.objectContaining({
@@ -2012,8 +2033,8 @@ describe('Selection strategies test suite', () => {
           executing: 0,
           queued: 0,
           maxQueued: 0,
-          stolen: 0,
           sequentiallyStolen: 0,
+          stolen: 0,
           failed: 0
         },
         runTime: expect.objectContaining({
@@ -2098,8 +2119,8 @@ describe('Selection strategies test suite', () => {
           executing: 0,
           queued: 0,
           maxQueued: 0,
-          stolen: 0,
           sequentiallyStolen: 0,
+          stolen: 0,
           failed: 0
         },
         runTime: expect.objectContaining({