feat: add dynamic pool sizes type check
authorJérôme Benoit <jerome.benoit@sap.com>
Fri, 21 Jul 2023 14:39:54 +0000 (16:39 +0200)
committerJérôme Benoit <jerome.benoit@sap.com>
Fri, 21 Jul 2023 14:39:54 +0000 (16:39 +0200)
Signed-off-by: Jérôme Benoit <jerome.benoit@sap.com>
src/pools/abstract-pool.ts
src/worker/thread-worker.ts
tests/pools/abstract/abstract-pool.test.js

index 0b359d93b6006c124c692fda70f9fb21926691f4..1222d686b847df02f2f9f90adced68d3cebb6b8f 100644 (file)
@@ -173,7 +173,11 @@ export abstract class AbstractPool<
 
   protected checkDynamicPoolSize (min: number, max: number): void {
     if (this.type === PoolTypes.dynamic) {
-      if (min > max) {
+      if (!Number.isSafeInteger(max)) {
+        throw new TypeError(
+          'Cannot instantiate a dynamic pool with a non safe integer maximum pool size'
+        )
+      } else if (min > max) {
         throw new RangeError(
           'Cannot instantiate a dynamic pool with a maximum pool size inferior to the minimum pool size'
         )
index 4d4c1c3479f14970db523ff96d873f0b4cdac79f..ec5dea8ef74cc4a1dbac377f3f50eaad21c10b8f 100644 (file)
@@ -28,7 +28,7 @@ export class ThreadWorker<
   Response = unknown
 > extends AbstractWorker<MessagePort, Data, Response> {
   /**
-   * Message port used to communicate with the main thread.
+   * Message port used to communicate with the main worker.
    */
   private port!: MessagePort
   /**
index b26ca43d6ef0cc37354d598db8dd3851e686fdca..10736b6bcd1c49e4b7dbbd7d8231ca4c93f69599 100644 (file)
@@ -86,6 +86,30 @@ describe('Abstract pool test suite', () => {
   })
 
   it('Verify that dynamic pool sizing is checked', () => {
+    expect(
+      () =>
+        new DynamicThreadPool(
+          0.5,
+          1,
+          './tests/worker-files/thread/testWorker.js'
+        )
+    ).toThrowError(
+      new TypeError(
+        'Cannot instantiate a pool with a non safe integer number of workers'
+      )
+    )
+    expect(
+      () =>
+        new DynamicClusterPool(
+          0,
+          0.5,
+          './tests/worker-files/thread/testWorker.js'
+        )
+    ).toThrowError(
+      new TypeError(
+        'Cannot instantiate a dynamic pool with a non safe integer maximum pool size'
+      )
+    )
     expect(
       () =>
         new DynamicThreadPool(2, 1, './tests/worker-files/thread/testWorker.js')
@@ -96,7 +120,11 @@ describe('Abstract pool test suite', () => {
     )
     expect(
       () =>
-        new DynamicThreadPool(1, 1, './tests/worker-files/thread/testWorker.js')
+        new DynamicClusterPool(
+          1,
+          1,
+          './tests/worker-files/thread/testWorker.js'
+        )
     ).toThrowError(
       new RangeError(
         'Cannot instantiate a dynamic pool with a minimum pool size equal to the maximum pool size. Use a fixed pool instead'