Fix sonar code smells (#184)
authorAlessandro Pio Ardizio <alessandroardizio94@gmail.com>
Thu, 18 Feb 2021 10:00:39 +0000 (11:00 +0100)
committerGitHub <noreply@github.com>
Thu, 18 Feb 2021 10:00:39 +0000 (11:00 +0100)
* Fix sonar code smells

* Add coverage thresholds

* Coverage thresholds

* Update src/pools/abstract-pool.ts

Co-authored-by: Shinigami <chrissi92@hotmail.de>
* Update src/pools/abstract-pool.ts

Co-authored-by: Shinigami <chrissi92@hotmail.de>
* Update src/worker/abstract-worker.ts

Co-authored-by: Shinigami <chrissi92@hotmail.de>
* Update src/worker/abstract-worker.ts

Co-authored-by: Shinigami <chrissi92@hotmail.de>
Co-authored-by: Shinigami <chrissi92@hotmail.de>
.nycrc.json
src/pools/abstract-pool.ts
src/worker/abstract-worker.ts
tests/pools/abstract/abstract-pool.test.js
tests/worker/abstract-worker.test.js [new file with mode: 0644]

index 0d2fa013f13802b440b829ab857f254b920eace5..b6bd046a0ccb796db36cc1c983725c1e9ca96c96 100644 (file)
@@ -2,6 +2,6 @@
   "check-coverage": true,
   "lines": 90,
   "statements": 90,
-  "functions": 89,
+  "functions": 90,
   "branches": 85
 }
index 4f467bf4ebe869ac8215d8c5cc6aa1842edb7aad..c951c6f23792ea631b8804e11c7ff25719ce5fa5 100644 (file)
@@ -2,6 +2,13 @@ import EventEmitter from 'events'
 import type { MessageValue } from '../utility-types'
 import type { IPool } from './pool'
 
+/**
+ * An intentional empty function.
+ */
+function emptyFunction () {
+  // intentionally left blank
+}
+
 /**
  * Callback invoked if the worker raised an error.
  */
@@ -142,10 +149,7 @@ export abstract class AbstractPool<
     if (!this.isMain()) {
       throw new Error('Cannot start a pool from a worker!')
     }
-    // TODO christopher 2021-02-07: Improve this check e.g. with a pattern or blank check
-    if (!this.filePath) {
-      throw new Error('Please specify a file with a worker implementation')
-    }
+    this.checkFilePath(this.filePath)
     this.setupHook()
 
     for (let i = 1; i <= this.numberOfWorkers; i++) {
@@ -155,6 +159,12 @@ export abstract class AbstractPool<
     this.emitter = new PoolEmitter()
   }
 
+  private checkFilePath (filePath: string) {
+    if (!filePath) {
+      throw new Error('Please specify a file with a worker implementation')
+    }
+  }
+
   /**
    * Perform the task specified in the constructor with the data parameter.
    *
@@ -317,9 +327,9 @@ export abstract class AbstractPool<
   protected createAndSetupWorker (): Worker {
     const worker: Worker = this.createWorker()
 
-    worker.on('error', this.opts.errorHandler ?? (() => {}))
-    worker.on('online', this.opts.onlineHandler ?? (() => {}))
-    worker.on('exit', this.opts.exitHandler ?? (() => {}))
+    worker.on('error', this.opts.errorHandler ?? emptyFunction)
+    worker.on('online', this.opts.onlineHandler ?? emptyFunction)
+    worker.on('exit', this.opts.exitHandler ?? emptyFunction)
     worker.once('exit', () => this.removeWorker(worker))
 
     this.workers.push(worker)
index 6aa34e8e899fda868bf0c1935b656a21d8b67629..03d954fe62f1933594e4f556511e9762b7093fb5 100644 (file)
@@ -66,7 +66,7 @@ export abstract class AbstractWorker<
       this.opts.maxInactiveTime ?? DEFAULT_MAX_INACTIVE_TIME
     this.async = !!this.opts.async
     this.lastTask = Date.now()
-    if (!fn) throw new Error('fn parameter is mandatory')
+    this.checkFunctionInput(fn)
     // Keep the worker active
     if (!isMain) {
       this.interval = setInterval(
@@ -96,6 +96,15 @@ export abstract class AbstractWorker<
     })
   }
 
+  /**
+   * Check if the `fn` parameter is passed to the constructor.
+   *
+   * @param fn The function that should be defined.
+   */
+  private checkFunctionInput (fn: (data: Data) => Response) {
+    if (!fn) throw new Error('fn parameter is mandatory')
+  }
+
   /**
    * Returns the main worker.
    *
index 65d667f141a7cefccaf64e5de6525c77a0d37d2b..bc2385f416c6c23b38d88fcccc6110cd70deaa5b 100644 (file)
@@ -52,4 +52,13 @@ describe('Abstract pool test suite ', () => {
       )
     }).toThrowError()
   })
+
+  it('Verify that filePath is checked', () => {
+    expect(() => {
+      const pool = new StubPoolWithIsMainMethod(1).toThrowError()
+    })
+    expect(() => {
+      const pool = new StubPoolWithIsMainMethod(1, '').toThrowError()
+    })
+  })
 })
diff --git a/tests/worker/abstract-worker.test.js b/tests/worker/abstract-worker.test.js
new file mode 100644 (file)
index 0000000..ddb8427
--- /dev/null
@@ -0,0 +1,10 @@
+const expect = require('expect')
+const { ThreadWorker } = require('../../lib')
+
+describe('Abstract worker test suite', () => {
+  it('Verify that fn function is mandatory', () => {
+    expect(() => {
+      const worker = new ThreadWorker()
+    }).toThrowError()
+  })
+})