1 import cluster, { Worker as ClusterWorker } from 'node:cluster'
2 import { Worker as ThreadWorker } from 'node:worker_threads'
4 import { expect } from 'expect'
6 import { CircularBuffer } from '../../lib/circular-buffer.cjs'
7 import { WorkerTypes } from '../../lib/index.cjs'
10 DEFAULT_MEASUREMENT_STATISTICS_REQUIREMENTS,
11 getDefaultTasksQueueOptions,
14 updateMeasurementStatistics,
15 } from '../../lib/pools/utils.cjs'
16 import { MeasurementHistorySize } from '../../lib/pools/worker.cjs'
18 describe('Pool utils test suite', () => {
19 it('Verify DEFAULT_MEASUREMENT_STATISTICS_REQUIREMENTS values', () => {
20 expect(DEFAULT_MEASUREMENT_STATISTICS_REQUIREMENTS).toStrictEqual({
27 it('Verify getDefaultTasksQueueOptions() behavior', () => {
29 expect(getDefaultTasksQueueOptions(poolMaxSize)).toStrictEqual({
31 size: Math.pow(poolMaxSize, 2),
33 tasksStealingOnBackPressure: false,
34 tasksFinishedTimeout: 2000,
38 it('Verify updateMeasurementStatistics() behavior', () => {
39 const measurementStatistics = {
40 history: new CircularBuffer(MeasurementHistorySize),
42 updateMeasurementStatistics(
43 measurementStatistics,
44 { aggregate: true, average: false, median: false },
47 expect(measurementStatistics).toMatchObject({
52 updateMeasurementStatistics(
53 measurementStatistics,
54 { aggregate: true, average: false, median: false },
57 expect(measurementStatistics).toMatchObject({
62 updateMeasurementStatistics(
63 measurementStatistics,
64 { aggregate: true, average: true, median: false },
67 expect(measurementStatistics).toMatchObject({
71 average: 0.0010000000474974513,
73 updateMeasurementStatistics(
74 measurementStatistics,
75 { aggregate: true, average: true, median: false },
78 expect(measurementStatistics).toMatchObject({
82 average: 0.0020000000367872417,
84 updateMeasurementStatistics(
85 measurementStatistics,
86 { aggregate: true, average: false, median: true },
89 expect(measurementStatistics).toMatchObject({
93 median: 0.003000000026077032,
95 updateMeasurementStatistics(
96 measurementStatistics,
97 { aggregate: true, average: true, median: false },
100 expect(measurementStatistics).toMatchObject({
104 average: 0.004999999975552782,
108 it('Verify createWorker() behavior', () => {
112 './tests/worker-files/thread/testWorker.mjs',
115 ).toBeInstanceOf(ThreadWorker)
119 './tests/worker-files/cluster/testWorker.mjs',
122 ).toBeInstanceOf(ClusterWorker)
125 it('Verify getWorkerType() behavior', () => {
128 new ThreadWorker('./tests/worker-files/thread/testWorker.mjs')
130 ).toBe(WorkerTypes.thread)
131 expect(getWorkerType(cluster.fork())).toBe(WorkerTypes.cluster)
134 it('Verify getWorkerId() behavior', () => {
135 const threadWorker = new ThreadWorker(
136 './tests/worker-files/thread/testWorker.mjs'
138 const clusterWorker = cluster.fork()
139 expect(getWorkerId(threadWorker)).toBe(threadWorker.threadId)
140 expect(getWorkerId(clusterWorker)).toBe(clusterWorker.id)