refactor: factor out inputs type check
[poolifier.git] / tests / worker / abstract-worker.test.js
CommitLineData
a61a0724 1const { expect } = require('expect')
8620fb25 2const { ClusterWorker, KillBehaviors, ThreadWorker } = require('../../lib')
7fc5cce6 3
e1ffb94f
JB
4describe('Abstract worker test suite', () => {
5 class StubPoolWithIsMainWorker extends ThreadWorker {
6 constructor (fn, opts) {
7 super(fn, opts)
78cea37e 8 this.mainWorker = undefined
e1ffb94f 9 }
7fc5cce6 10 }
c510fea7 11
e088a00c 12 it('Verify worker options default values', () => {
8620fb25 13 const worker = new ThreadWorker(() => {})
978aad6f 14 expect(worker.opts.maxInactiveTime).toStrictEqual(60000)
e088a00c
JB
15 expect(worker.opts.killBehavior).toBe(KillBehaviors.SOFT)
16 expect(worker.opts.async).toBe(false)
8620fb25
JB
17 })
18
19 it('Verify that worker options are set at worker creation', () => {
20 const worker = new ClusterWorker(() => {}, {
21 maxInactiveTime: 6000,
22 async: true,
23 killBehavior: KillBehaviors.HARD
24 })
978aad6f 25 expect(worker.opts.maxInactiveTime).toStrictEqual(6000)
e088a00c
JB
26 expect(worker.opts.killBehavior).toBe(KillBehaviors.HARD)
27 expect(worker.opts.async).toBe(true)
8620fb25
JB
28 })
29
a86b6df1
JB
30 it('Verify that taskFunctions parameter is mandatory', () => {
31 expect(() => new ClusterWorker()).toThrowError(
32 'taskFunctions parameter is mandatory'
33 )
d4aeae5a
JB
34 })
35
a86b6df1
JB
36 it('Verify that taskFunctions parameter is a function or an object', () => {
37 expect(() => new ClusterWorker(0)).toThrowError(
38 new TypeError('taskFunctions parameter is not a function or an object')
d4aeae5a
JB
39 )
40 expect(() => new ClusterWorker('')).toThrowError(
a86b6df1
JB
41 new TypeError('taskFunctions parameter is not a function or an object')
42 )
43 expect(() => new ClusterWorker(true)).toThrowError(
44 new TypeError('taskFunctions parameter is not a function or an object')
d4aeae5a
JB
45 )
46 })
47
630f0acf 48 it('Verify that taskFunctions parameter is not an empty object literal', () => {
a86b6df1
JB
49 expect(() => new ClusterWorker([])).toThrowError(
50 new TypeError('taskFunctions parameter is not an object literal')
51 )
52 expect(() => new ClusterWorker(new Map())).toThrowError(
53 new TypeError('taskFunctions parameter is not an object literal')
54 )
55 expect(() => new ClusterWorker(new Set())).toThrowError(
56 new TypeError('taskFunctions parameter is not an object literal')
57 )
58 expect(() => new ClusterWorker(new WeakMap())).toThrowError(
59 new TypeError('taskFunctions parameter is not an object literal')
d4aeae5a 60 )
a86b6df1
JB
61 expect(() => new ClusterWorker(new WeakSet())).toThrowError(
62 new TypeError('taskFunctions parameter is not an object literal')
63 )
630f0acf 64 expect(() => new ClusterWorker({})).toThrowError(
0d80593b 65 new Error('taskFunctions parameter object is empty')
630f0acf 66 )
a86b6df1
JB
67 })
68
69 it('Verify that taskFunctions parameter with multiple task functions is taken', () => {
70 const fn1 = () => {
71 return 1
72 }
73 const fn2 = () => {
74 return 2
75 }
76 const worker = new ClusterWorker({ fn1, fn2 })
82888165 77 expect(typeof worker.taskFunctions.get('default') === 'function').toBe(true)
a86b6df1
JB
78 expect(typeof worker.taskFunctions.get('fn1') === 'function').toBe(true)
79 expect(typeof worker.taskFunctions.get('fn2') === 'function').toBe(true)
d4aeae5a
JB
80 })
81
318d4156 82 it('Verify that handleError() method is working properly', () => {
7fc5cce6
APA
83 const error = new Error('My error')
84 const worker = new ThreadWorker(() => {})
78cea37e 85 expect(worker.handleError(error)).toStrictEqual(error)
7fc5cce6
APA
86 })
87
318d4156 88 it('Verify that getMainWorker() throw error if main worker is not set', () => {
7fc5cce6
APA
89 expect(() =>
90 new StubPoolWithIsMainWorker(() => {}).getMainWorker()
d4aeae5a 91 ).toThrowError('Main worker was not set')
7fc5cce6 92 })
c510fea7 93})