From e2cb181f8486925105981d448a1a4c1e7d310965 Mon Sep 17 00:00:00 2001 From: Gautam Jethwani Date: Tue, 12 Sep 2023 02:02:17 -0700 Subject: [PATCH] feat: add semicolon --- lib/status.js | 4 +++- test/enable-disable-test.js | 35 ++++++++++++++++++++++++++++++++++- 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/lib/status.js b/lib/status.js index 8ebb982a..684f0b16 100644 --- a/lib/status.js +++ b/lib/status.js @@ -186,6 +186,8 @@ class Status extends EventEmitter { // interval is not set if rotateBucketController is provided if (this.rotateBucketController === undefined) { clearInterval(this[BUCKET_INTERVAL]); + } else { + this.removeRotateBucketControllerListener(); } if (this.enableSnapshots) { clearInterval(this[SNAPSHOT_INTERVAL]); @@ -200,7 +202,7 @@ class Status extends EventEmitter { } startListeneningForRotateEvent () { - if (this.rotateBucketController) { + if (this.rotateBucketController && this.rotateBucketController.listenerCount('rotate', this.rotateBucket) === 0) { this.rotateBucketController.on(this[ROTATE_EVENT_NAME], this.rotateBucket); } diff --git a/test/enable-disable-test.js b/test/enable-disable-test.js index 654cc447..55aabd38 100644 --- a/test/enable-disable-test.js +++ b/test/enable-disable-test.js @@ -78,12 +78,14 @@ test('Event listener should be removed only for the breaker that is disabled', t const breakerToBeDisabled = new CircuitBreaker(passFail, { rotateBucketController: emitter }); - const _breakerNotToBeDisabled = new CircuitBreaker(passFail, { + const breakerNotToBeDisabled = new CircuitBreaker(passFail, { rotateBucketController: emitter }); t.equals(emitter.listeners('rotate').length, 2, '1 listener attached for each breaker'); breakerToBeDisabled.disable(); t.equals(emitter.listeners('rotate').length, 1, '1 listener should be disabled and 1 should remain'); + breakerToBeDisabled.shutdown(); + breakerNotToBeDisabled.shutdown(); t.end(); }); @@ -98,5 +100,36 @@ test('Event listener should be re-added when circuit is re-enabled', t => { t.equals(emitter.listeners('rotate').length, 0, 'listener removed when breaker disabled'); breaker.enable(); t.equals(emitter.listeners('rotate').length, 1, 'listener re-attached when breaker re-enabled'); + breaker.shutdown(); + t.end(); +}); + +test('Listener should not be attached with a call to enable if there is already a listener', t => { + t.plan(2); + const emitter = new EventEmitter(); + const breaker = new CircuitBreaker(passFail, { + rotateBucketController: emitter + }); + t.equals(emitter.listeners('rotate').length, 1, 'listener attached automatically'); + breaker.enable(); + t.equals(emitter.listeners('rotate').length, 1, 'listener should not be added again'); + breaker.shutdown(); + t.end(); +}); + +test('Listener should not be attached with a call to enable if there is already a listener and there is another breaker in the mix', t => { + t.plan(2); + const emitter = new EventEmitter(); + const breaker = new CircuitBreaker(passFail, { + rotateBucketController: emitter + }); + const anotherBreaker = new CircuitBreaker(passFail, { + rotateBucketController: emitter + }); + t.equals(emitter.listeners('rotate').length, 2, 'listener attached automatically'); + breaker.enable(); + t.equals(emitter.listeners('rotate').length, 2, 'listener should not be added again'); + breaker.shutdown(); + anotherBreaker.shutdown(); t.end(); });