build(deps-dev): apply updates
[poolifier.git] / tests / pools / utils.test.mjs
CommitLineData
e9ed6eee 1import cluster, { Worker as ClusterWorker } from 'node:cluster'
ded253e2
JB
2import { Worker as ThreadWorker } from 'node:worker_threads'
3
a074ffee 4import { expect } from 'expect'
ded253e2 5
f12182ad 6import { CircularBuffer } from '../../lib/circular-buffer.cjs'
bcfb06ce 7import { WorkerTypes } from '../../lib/index.cjs'
c3719753
JB
8import {
9 createWorker,
ded253e2 10 DEFAULT_MEASUREMENT_STATISTICS_REQUIREMENTS,
32b141fd 11 getDefaultTasksQueueOptions,
e9ed6eee
JB
12 getWorkerId,
13 getWorkerType,
3a502712 14 updateMeasurementStatistics,
d35e5717 15} from '../../lib/pools/utils.cjs'
f12182ad 16import { MeasurementHistorySize } from '../../lib/pools/worker.cjs'
bfc75cca
JB
17
18describe('Pool utils test suite', () => {
e9ed6eee
JB
19 it('Verify DEFAULT_MEASUREMENT_STATISTICS_REQUIREMENTS values', () => {
20 expect(DEFAULT_MEASUREMENT_STATISTICS_REQUIREMENTS).toStrictEqual({
21 aggregate: false,
22 average: false,
3a502712 23 median: false,
e9ed6eee
JB
24 })
25 })
26
32b141fd
JB
27 it('Verify getDefaultTasksQueueOptions() behavior', () => {
28 const poolMaxSize = 4
29 expect(getDefaultTasksQueueOptions(poolMaxSize)).toStrictEqual({
30 concurrency: 1,
31 size: Math.pow(poolMaxSize, 2),
32 taskStealing: true,
2eee7220 33 tasksStealingOnBackPressure: false,
3a502712 34 tasksFinishedTimeout: 2000,
32b141fd
JB
35 })
36 })
37
bfc75cca
JB
38 it('Verify updateMeasurementStatistics() behavior', () => {
39 const measurementStatistics = {
3a502712 40 history: new CircularBuffer(MeasurementHistorySize),
bfc75cca
JB
41 }
42 updateMeasurementStatistics(
43 measurementStatistics,
44 { aggregate: true, average: false, median: false },
45 0.01
46 )
0cd1f28c 47 expect(measurementStatistics).toMatchObject({
bfc75cca
JB
48 aggregate: 0.01,
49 maximum: 0.01,
3a502712 50 minimum: 0.01,
bfc75cca
JB
51 })
52 updateMeasurementStatistics(
53 measurementStatistics,
54 { aggregate: true, average: false, median: false },
55 0.02
56 )
0cd1f28c 57 expect(measurementStatistics).toMatchObject({
bfc75cca
JB
58 aggregate: 0.03,
59 maximum: 0.02,
3a502712 60 minimum: 0.01,
bfc75cca
JB
61 })
62 updateMeasurementStatistics(
63 measurementStatistics,
64 { aggregate: true, average: true, median: false },
65 0.001
66 )
0cd1f28c 67 expect(measurementStatistics).toMatchObject({
bfc75cca
JB
68 aggregate: 0.031,
69 maximum: 0.02,
70 minimum: 0.001,
3a502712 71 average: 0.0010000000474974513,
bfc75cca
JB
72 })
73 updateMeasurementStatistics(
74 measurementStatistics,
75 { aggregate: true, average: true, median: false },
76 0.003
77 )
0cd1f28c 78 expect(measurementStatistics).toMatchObject({
bfc75cca
JB
79 aggregate: 0.034,
80 maximum: 0.02,
81 minimum: 0.001,
3a502712 82 average: 0.0020000000367872417,
bfc75cca
JB
83 })
84 updateMeasurementStatistics(
85 measurementStatistics,
86 { aggregate: true, average: false, median: true },
87 0.006
88 )
0cd1f28c 89 expect(measurementStatistics).toMatchObject({
bfc75cca
JB
90 aggregate: 0.04,
91 maximum: 0.02,
92 minimum: 0.001,
3a502712 93 median: 0.003000000026077032,
bfc75cca
JB
94 })
95 updateMeasurementStatistics(
96 measurementStatistics,
97 { aggregate: true, average: true, median: false },
98 0.01
99 )
0cd1f28c 100 expect(measurementStatistics).toMatchObject({
bfc75cca
JB
101 aggregate: 0.05,
102 maximum: 0.02,
103 minimum: 0.001,
3a502712 104 average: 0.004999999975552782,
bfc75cca
JB
105 })
106 })
c3719753
JB
107
108 it('Verify createWorker() behavior', () => {
109 expect(
110 createWorker(
111 WorkerTypes.thread,
c63a35a0
JB
112 './tests/worker-files/thread/testWorker.mjs',
113 {}
c3719753
JB
114 )
115 ).toBeInstanceOf(ThreadWorker)
116 expect(
117 createWorker(
118 WorkerTypes.cluster,
c63a35a0
JB
119 './tests/worker-files/cluster/testWorker.mjs',
120 {}
c3719753
JB
121 )
122 ).toBeInstanceOf(ClusterWorker)
123 })
e9ed6eee
JB
124
125 it('Verify getWorkerType() behavior', () => {
126 expect(
127 getWorkerType(
128 new ThreadWorker('./tests/worker-files/thread/testWorker.mjs')
129 )
130 ).toBe(WorkerTypes.thread)
131 expect(getWorkerType(cluster.fork())).toBe(WorkerTypes.cluster)
132 })
133
134 it('Verify getWorkerId() behavior', () => {
135 const threadWorker = new ThreadWorker(
136 './tests/worker-files/thread/testWorker.mjs'
137 )
138 const clusterWorker = cluster.fork()
139 expect(getWorkerId(threadWorker)).toBe(threadWorker.threadId)
140 expect(getWorkerId(clusterWorker)).toBe(clusterWorker.id)
141 })
bfc75cca 142})