refactor: remove duplicate import in examples
[poolifier.git] / tests / worker / abstract-worker.test.js
index 944acbece738f49c21977049098aa3008fe694c9..6582961febd4fe699dc1b1a4977604f5023edf68 100644 (file)
@@ -1,5 +1,7 @@
 const { expect } = require('expect')
+const sinon = require('sinon')
 const { ClusterWorker, KillBehaviors, ThreadWorker } = require('../../lib')
+const { EMPTY_FUNCTION } = require('../../lib/utils')
 
 describe('Abstract worker test suite', () => {
   class StubWorkerWithMainWorker extends ThreadWorker {
@@ -13,17 +15,23 @@ describe('Abstract worker test suite', () => {
     const worker = new ThreadWorker(() => {})
     expect(worker.opts.maxInactiveTime).toStrictEqual(60000)
     expect(worker.opts.killBehavior).toBe(KillBehaviors.SOFT)
+    expect(worker.opts.killHandler).toStrictEqual(EMPTY_FUNCTION)
     expect(worker.opts.async).toBe(undefined)
   })
 
   it('Verify that worker options are set at worker creation', () => {
+    const killHandler = () => {
+      console.info('Worker received kill message')
+    }
     const worker = new ClusterWorker(() => {}, {
       maxInactiveTime: 6000,
-      async: true,
-      killBehavior: KillBehaviors.HARD
+      killBehavior: KillBehaviors.HARD,
+      killHandler,
+      async: true
     })
     expect(worker.opts.maxInactiveTime).toStrictEqual(6000)
     expect(worker.opts.killBehavior).toBe(KillBehaviors.HARD)
+    expect(worker.opts.killHandler).toStrictEqual(killHandler)
     expect(worker.opts.async).toBe(undefined)
   })
 
@@ -119,6 +127,24 @@ describe('Abstract worker test suite', () => {
     )
   })
 
+  it('Verify that sync kill handler is called when worker is killed', () => {
+    const worker = new ClusterWorker(() => {}, {
+      killHandler: sinon.stub().returns()
+    })
+    worker.isMain = false
+    worker.handleKillMessage()
+    expect(worker.opts.killHandler.calledOnce).toBe(true)
+  })
+
+  // it('Verify that async kill handler is called when worker is killed', () => {
+  //   const worker = new ClusterWorker(() => {}, {
+  //     killHandler: sinon.stub().resolves()
+  //   })
+  //   worker.isMain = false
+  //   worker.handleKillMessage()
+  //   expect(worker.opts.killHandler.calledOnce).toBe(true)
+  // })
+
   it('Verify that handleError() method works properly', () => {
     const error = new Error('Error as an error')
     const worker = new ClusterWorker(() => {})
@@ -218,6 +244,17 @@ describe('Abstract worker test suite', () => {
     expect(worker.taskFunctions.size).toBe(2)
   })
 
+  it('Verify that listTaskFunctions() works', () => {
+    const fn1 = () => {
+      return 1
+    }
+    const fn2 = () => {
+      return 2
+    }
+    const worker = new ClusterWorker({ fn1, fn2 })
+    expect(worker.listTaskFunctions()).toStrictEqual(['default', 'fn1', 'fn2'])
+  })
+
   it('Verify that setDefaultTaskFunction() works', () => {
     const fn1 = () => {
       return 1