test: add UTs
authorJérôme Benoit <jerome.benoit@piment-noir.org>
Fri, 25 Aug 2023 18:25:08 +0000 (20:25 +0200)
committerJérôme Benoit <jerome.benoit@piment-noir.org>
Fri, 25 Aug 2023 18:25:08 +0000 (20:25 +0200)
Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
.eslintrc.js
src/pools/selection-strategies/selection-strategies-types.ts
src/utils.ts
tests/utils.test.js

index a6ad5b1de281c8e671932bb02bb5542aef157684..9a058e827c6117531f41d87c8f182b9f87191aba 100644 (file)
@@ -96,6 +96,7 @@ module.exports = defineConfig({
           'unref',
           'unregister',
           'utf8',
+          'webcrypto',
           'workerpool',
           'ws',
           'wss',
index 855c7ad1eec89e0238d164ef01af68aa85f4567c..e7bf0e1e9ba94503d8dc302a84d3c5e058486d6e 100644 (file)
@@ -97,7 +97,7 @@ export interface WorkerChoiceStrategyOptions {
   readonly elu?: MeasurementOptions
   /**
    * Worker weights to use for weighted round robin worker selection strategies.
-   * A weight is the tasks maximum execution time in milliseconds for each worker node.
+   * A weight is tasks maximum execution time in milliseconds for a worker node.
    *
    * @defaultValue Weights computed automatically given the CPU performance.
    */
index 7a0ed2f6d0d877f25a57772540bd58083c51b726..b84c4c803efe974b1dde4d8e3988465bef6d94b7 100644 (file)
@@ -1,4 +1,5 @@
 import * as os from 'node:os'
+import { webcrypto } from 'node:crypto'
 import type {
   MeasurementStatisticsRequirements,
   WorkerChoiceStrategyOptions
@@ -253,5 +254,5 @@ export const once = (
  * @returns A number in the [0,1[ range
  */
 export const secureRandom = (): number => {
-  return crypto.getRandomValues(new Uint32Array(1))[0] / 0x100000000
+  return webcrypto.getRandomValues(new Uint32Array(1))[0] / 0x100000000
 }
index 76abf04645ef4fa6e70b7e88e97ea25a611dde89..c00f0307d45b257da730c3cb55f72ba96f15789c 100644 (file)
@@ -1,3 +1,4 @@
+const { randomInt } = require('crypto')
 const { expect } = require('expect')
 const {
   CircularArray,
@@ -6,12 +7,14 @@ const {
 const {
   availableParallelism,
   average,
+  exponentialDelay,
   isAsyncFunction,
   isKillBehavior,
   isPlainObject,
   median,
   round,
   secureRandom,
+  sleep,
   updateMeasurementStatistics
 } = require('../lib/utils')
 const { KillBehaviors } = require('../lib/worker/worker-options')
@@ -23,6 +26,23 @@ describe('Utils test suite', () => {
     expect(Number.isSafeInteger(availableParallelism())).toBe(true)
   })
 
+  it('Verify sleep() behavior', async () => {
+    const now = performance.now()
+    await sleep(1000)
+    const elapsed = performance.now() - now
+    expect(elapsed).toBeGreaterThanOrEqual(1000)
+  })
+
+  it('Verify exponentialDelay() behavior', () => {
+    expect(typeof exponentialDelay(randomInt(1000)) === 'number').toBe(true)
+    expect(exponentialDelay(randomInt(1000))).toBeGreaterThanOrEqual(
+      Number.MIN_VALUE
+    )
+    expect(exponentialDelay(randomInt(1000))).toBeLessThanOrEqual(
+      Number.MAX_VALUE
+    )
+  })
+
   it('Verify average() computation', () => {
     expect(average([])).toBe(0)
     expect(average([0.08])).toBe(0.08)