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 circularBuffer = new CircularBuffer(MeasurementHistorySize)
40 const measurementStatistics = {
41 history: circularBuffer
43 updateMeasurementStatistics(
44 measurementStatistics,
45 { aggregate: true, average: false, median: false },
48 expect(measurementStatistics).toStrictEqual({
52 history: circularBuffer
54 updateMeasurementStatistics(
55 measurementStatistics,
56 { aggregate: true, average: false, median: false },
59 expect(measurementStatistics).toStrictEqual({
63 history: circularBuffer
65 updateMeasurementStatistics(
66 measurementStatistics,
67 { aggregate: true, average: true, median: false },
70 expect(measurementStatistics).toStrictEqual({
75 history: circularBuffer
77 updateMeasurementStatistics(
78 measurementStatistics,
79 { aggregate: true, average: true, median: false },
82 expect(measurementStatistics).toStrictEqual({
87 history: circularBuffer
89 updateMeasurementStatistics(
90 measurementStatistics,
91 { aggregate: true, average: false, median: true },
94 expect(measurementStatistics).toStrictEqual({
99 history: circularBuffer
101 updateMeasurementStatistics(
102 measurementStatistics,
103 { aggregate: true, average: true, median: false },
106 expect(measurementStatistics).toStrictEqual({
111 history: circularBuffer
115 it('Verify createWorker() behavior', () => {
119 './tests/worker-files/thread/testWorker.mjs',
122 ).toBeInstanceOf(ThreadWorker)
126 './tests/worker-files/cluster/testWorker.mjs',
129 ).toBeInstanceOf(ClusterWorker)
132 it('Verify getWorkerType() behavior', () => {
135 new ThreadWorker('./tests/worker-files/thread/testWorker.mjs')
137 ).toBe(WorkerTypes.thread)
138 expect(getWorkerType(cluster.fork())).toBe(WorkerTypes.cluster)
141 it('Verify getWorkerId() behavior', () => {
142 const threadWorker = new ThreadWorker(
143 './tests/worker-files/thread/testWorker.mjs'
145 const clusterWorker = cluster.fork()
146 expect(getWorkerId(threadWorker)).toBe(threadWorker.threadId)
147 expect(getWorkerId(clusterWorker)).toBe(clusterWorker.id)