X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=tests%2Fpools%2Fworker-node.test.mjs;h=3b87a8485d39e0547707197c8667238ec35a0265;hb=c61772e59671ed89bbce316a8f46004fe7283000;hp=834c3cb6b642844babf0f2a232edfd1d618caa9d;hpb=6349b7551b1060472ed8c97dd01ef0c827d62278;p=poolifier.git diff --git a/tests/pools/worker-node.test.mjs b/tests/pools/worker-node.test.mjs index 834c3cb6..3b87a848 100644 --- a/tests/pools/worker-node.test.mjs +++ b/tests/pools/worker-node.test.mjs @@ -1,5 +1,5 @@ -import { MessageChannel, Worker } from 'node:worker_threads' -import cluster from 'node:cluster' +import { MessageChannel, Worker as ThreadWorker } from 'node:worker_threads' +import { Worker as ClusterWorker } from 'node:cluster' import { expect } from 'expect' import { WorkerNode } from '../../lib/pools/worker-node.js' import { WorkerTypes } from '../../lib/index.js' @@ -8,46 +8,120 @@ import { Deque } from '../../lib/deque.js' import { DEFAULT_TASK_NAME } from '../../lib/utils.js' describe('Worker node test suite', () => { - const threadWorker = new Worker('./tests/worker-files/thread/testWorker.mjs') - const clusterWorker = cluster.fork() - const threadWorkerNode = new WorkerNode(threadWorker, 12) - const clusterWorkerNode = new WorkerNode(clusterWorker, 12) + const threadWorkerNode = new WorkerNode( + WorkerTypes.thread, + './tests/worker-files/thread/testWorker.mjs', + { tasksQueueBackPressureSize: 12 } + ) + const clusterWorkerNode = new WorkerNode( + WorkerTypes.cluster, + './tests/worker-files/cluster/testWorker.js', + { tasksQueueBackPressureSize: 12 } + ) it('Worker node instantiation', () => { expect(() => new WorkerNode()).toThrow( - new TypeError('Cannot construct a worker node without a worker') + new TypeError('Cannot construct a worker node without a worker type') ) - expect(() => new WorkerNode(threadWorker)).toThrow( + expect( + () => + new WorkerNode( + 'invalidWorkerType', + './tests/worker-files/thread/testWorker.mjs', + { tasksQueueBackPressureSize: 12 } + ) + ).toThrow( new TypeError( - 'Cannot construct a worker node without a tasks queue back pressure size' + "Cannot construct a worker node with an invalid worker type 'invalidWorkerType'" ) ) expect( - () => new WorkerNode(threadWorker, 'invalidTasksQueueBackPressureSize') + () => + new WorkerNode( + WorkerTypes.thread, + './tests/worker-files/thread/testWorker.mjs' + ) ).toThrow( new TypeError( - 'Cannot construct a worker node with a tasks queue back pressure size that is not an integer' + 'Cannot construct a worker node without worker node options' ) ) - expect(() => new WorkerNode(threadWorker, 0.2)).toThrow( + expect( + () => + new WorkerNode( + WorkerTypes.thread, + './tests/worker-files/thread/testWorker.mjs', + '' + ) + ).toThrow( new TypeError( - 'Cannot construct a worker node with a tasks queue back pressure size that is not an integer' + 'Cannot construct a worker node with invalid options: must be a plain object' ) ) - expect(() => new WorkerNode(threadWorker, 0)).toThrow( + expect( + () => + new WorkerNode( + WorkerTypes.thread, + './tests/worker-files/thread/testWorker.mjs', + {} + ) + ).toThrow( + new TypeError( + 'Cannot construct a worker node without a tasks queue back pressure size option' + ) + ) + expect( + () => + new WorkerNode( + WorkerTypes.thread, + './tests/worker-files/thread/testWorker.mjs', + { tasksQueueBackPressureSize: 'invalidTasksQueueBackPressureSize' } + ) + ).toThrow( + new TypeError( + 'Cannot construct a worker node with a tasks queue back pressure size option that is not an integer' + ) + ) + expect( + () => + new WorkerNode( + WorkerTypes.thread, + './tests/worker-files/thread/testWorker.mjs', + { tasksQueueBackPressureSize: 0.2 } + ) + ).toThrow( + new TypeError( + 'Cannot construct a worker node with a tasks queue back pressure size option that is not an integer' + ) + ) + expect( + () => + new WorkerNode( + WorkerTypes.thread, + './tests/worker-files/thread/testWorker.mjs', + { tasksQueueBackPressureSize: 0 } + ) + ).toThrow( new RangeError( - 'Cannot construct a worker node with a tasks queue back pressure size that is not a positive integer' + 'Cannot construct a worker node with a tasks queue back pressure size option that is not a positive integer' ) ) - expect(() => new WorkerNode(threadWorker, -1)).toThrow( + expect( + () => + new WorkerNode( + WorkerTypes.thread, + './tests/worker-files/thread/testWorker.mjs', + { tasksQueueBackPressureSize: -1 } + ) + ).toThrow( new RangeError( - 'Cannot construct a worker node with a tasks queue back pressure size that is not a positive integer' + 'Cannot construct a worker node with a tasks queue back pressure size option that is not a positive integer' ) ) expect(threadWorkerNode).toBeInstanceOf(WorkerNode) - expect(threadWorkerNode.worker).toBe(threadWorker) + expect(threadWorkerNode.worker).toBeInstanceOf(ThreadWorker) expect(threadWorkerNode.info).toStrictEqual({ - id: threadWorker.threadId, + id: threadWorkerNode.worker.threadId, type: WorkerTypes.thread, dynamic: false, ready: false @@ -88,9 +162,9 @@ describe('Worker node test suite', () => { expect(threadWorkerNode.taskFunctionsUsage).toBeInstanceOf(Map) expect(clusterWorkerNode).toBeInstanceOf(WorkerNode) - expect(clusterWorkerNode.worker).toBe(clusterWorker) + expect(clusterWorkerNode.worker).toBeInstanceOf(ClusterWorker) expect(clusterWorkerNode.info).toStrictEqual({ - id: clusterWorker.id, + id: clusterWorkerNode.worker.id, type: WorkerTypes.cluster, dynamic: false, ready: false @@ -155,8 +229,8 @@ describe('Worker node test suite', () => { executed: 0, executing: 0, queued: 0, - stolen: 0, sequentiallyStolen: 0, + stolen: 0, failed: 0 }, runTime: { @@ -179,8 +253,8 @@ describe('Worker node test suite', () => { executed: 0, executing: 0, queued: 0, - stolen: 0, sequentiallyStolen: 0, + stolen: 0, failed: 0 }, runTime: { @@ -203,8 +277,8 @@ describe('Worker node test suite', () => { executed: 0, executing: 0, queued: 0, - stolen: 0, sequentiallyStolen: 0, + stolen: 0, failed: 0 }, runTime: {