X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=tests%2Futils.test.mjs;h=5e089e291f07877506ff12a3373ca407ee2b5c51;hb=e44639e9af74427b71f1556ff7ec9f7606373e0d;hp=74c53a1629b7f3ef7738bdbc50e3f908216457dd;hpb=a074ffee1b46f43d0dcfba58128748c7492104dd;p=poolifier.git diff --git a/tests/utils.test.mjs b/tests/utils.test.mjs index 74c53a16..5e089e29 100644 --- a/tests/utils.test.mjs +++ b/tests/utils.test.mjs @@ -6,11 +6,12 @@ import { expect } from 'expect' import { DEFAULT_MEASUREMENT_STATISTICS_REQUIREMENTS, DEFAULT_TASK_NAME, - DEFAULT_WORKER_CHOICE_STRATEGY_OPTIONS, EMPTY_FUNCTION, availableParallelism, average, + buildWorkerChoiceStrategyOptions, exponentialDelay, + getWorkerChoiceStrategyRetries, getWorkerId, getWorkerType, isAsyncFunction, @@ -19,11 +20,17 @@ import { max, median, min, + // once, round, secureRandom, sleep -} from '../lib/utils.js' -import { KillBehaviors, WorkerTypes } from '../lib/index.js' +} from '../lib/utils.cjs' +import { + FixedClusterPool, + FixedThreadPool, + KillBehaviors, + WorkerTypes +} from '../lib/index.cjs' describe('Utils test suite', () => { it('Verify DEFAULT_TASK_NAME value', () => { @@ -34,15 +41,6 @@ describe('Utils test suite', () => { expect(EMPTY_FUNCTION).toStrictEqual(expect.any(Function)) }) - it('Verify DEFAULT_WORKER_CHOICE_STRATEGY_OPTIONS values', () => { - expect(DEFAULT_WORKER_CHOICE_STRATEGY_OPTIONS).toStrictEqual({ - retries: 6, - runTime: { median: false }, - waitTime: { median: false }, - elu: { median: false } - }) - }) - it('Verify DEFAULT_MEASUREMENT_STATISTICS_REQUIREMENTS values', () => { expect(DEFAULT_MEASUREMENT_STATISTICS_REQUIREMENTS).toStrictEqual({ aggregate: false, @@ -66,13 +64,15 @@ describe('Utils test suite', () => { it('Verify getWorkerType() behavior', () => { expect( - getWorkerType(new Worker('./tests/worker-files/thread/testWorker.js')) + getWorkerType(new Worker('./tests/worker-files/thread/testWorker.mjs')) ).toBe(WorkerTypes.thread) expect(getWorkerType(cluster.fork())).toBe(WorkerTypes.cluster) }) it('Verify getWorkerId() behavior', () => { - const threadWorker = new Worker('./tests/worker-files/thread/testWorker.js') + const threadWorker = new Worker( + './tests/worker-files/thread/testWorker.mjs' + ) const clusterWorker = cluster.fork() expect(getWorkerId(threadWorker)).toBe(threadWorker.threadId) expect(getWorkerId(clusterWorker)).toBe(clusterWorker.id) @@ -80,9 +80,10 @@ describe('Utils test suite', () => { it('Verify sleep() behavior', async () => { const start = performance.now() - await sleep(1000) + const sleepMs = 1000 + await sleep(sleepMs) const elapsed = performance.now() - start - expect(elapsed).toBeGreaterThanOrEqual(999) + expect(elapsed).toBeGreaterThanOrEqual(sleepMs - 1) }) it('Verify exponentialDelay() behavior', () => { @@ -235,4 +236,47 @@ describe('Utils test suite', () => { expect(max(2, 1)).toBe(2) expect(max(1, 1)).toBe(1) }) + + it('Verify getWorkerChoiceStrategyRetries() behavior', async () => { + const numberOfThreads = 4 + const pool = new FixedThreadPool( + numberOfThreads, + './tests/worker-files/thread/testWorker.mjs' + ) + expect(getWorkerChoiceStrategyRetries(pool)).toBe(pool.info.maxSize * 2) + await pool.destroy() + }) + + it('Verify buildWorkerChoiceStrategyOptions() behavior', async () => { + const numberOfWorkers = 4 + const pool = new FixedClusterPool( + numberOfWorkers, + './tests/worker-files/cluster/testWorker.cjs' + ) + expect(buildWorkerChoiceStrategyOptions(pool)).toStrictEqual({ + runTime: { median: false }, + waitTime: { median: false }, + elu: { median: false }, + weights: expect.objectContaining({ + 0: expect.any(Number), + [pool.info.maxSize - 1]: expect.any(Number) + }) + }) + await pool.destroy() + }) + + // it('Verify once()', () => { + // let called = 0 + // const fn = () => ++called + // const onceFn = once(fn, this) + // const result1 = onceFn() + // expect(called).toBe(1) + // expect(result1).toBe(1) + // const result2 = onceFn() + // expect(called).toBe(1) + // expect(result2).toBe(1) + // const result3 = onceFn() + // expect(called).toBe(1) + // expect(result3).toBe(1) + // }) })