From 0214bef7fdea20790c0b827ee578bcf3a77f68ba Mon Sep 17 00:00:00 2001 From: rishigupta1599 Date: Wed, 22 May 2024 17:25:28 +0530 Subject: [PATCH] Only executing when customRequests available --- lib/core/CustomRequestHandler.js | 15 +++++++++ lib/core/OutgoingWebSocket.js | 8 ++--- test/core/customRequestHandler.test.js | 36 +++++++++++++++++++++ test/core/outgoingWebSocket.test.js | 45 ++++++++++++++++++++++++++ 4 files changed, 100 insertions(+), 4 deletions(-) diff --git a/lib/core/CustomRequestHandler.js b/lib/core/CustomRequestHandler.js index a003af4..32aa47e 100644 --- a/lib/core/CustomRequestHandler.js +++ b/lib/core/CustomRequestHandler.js @@ -28,6 +28,21 @@ class CustomRequestHandler { // Return the existing instance return CustomRequestHandler.instance; } + + isCustomRequestListEmpty() { + for (const prop in this.customRequestList) { + if (this.customRequestList.hasOwnProperty(prop)) { + return false; + } + } + + return true; + } + + // only for specs purpose, don't use it in code. + static resetInstance() { + CustomRequestHandler.instance = null; + } // Method to add an item to the list addCustomRequest(request_id) { let resolveFunc; diff --git a/lib/core/OutgoingWebSocket.js b/lib/core/OutgoingWebSocket.js index 55f4b54..21eeb8c 100644 --- a/lib/core/OutgoingWebSocket.js +++ b/lib/core/OutgoingWebSocket.js @@ -110,8 +110,8 @@ class OutgoingWebSocket extends EventEmitter { return; } - if (customRequestEnabled) { - const customReqInstance = CustomRequestHandler.getInstance(); + const customReqInstance = CustomRequestHandler.getInstance(); + if (customRequestEnabled && !customReqInstance.isCustomRequestListEmpty()) { let resp; try { resp = JSON.parse(msg); @@ -152,8 +152,8 @@ class OutgoingWebSocket extends EventEmitter { * Triggers when error occured on socket. */ errorHandler(error) { - if (customRequestEnabled) { - const customReqInstance = CustomRequestHandler.getInstance(); + const customReqInstance = CustomRequestHandler.getInstance(); + if (customRequestEnabled && !customReqInstance.isCustomRequestListEmpty()) { let resp; try { resp = JSON.parse(error); diff --git a/test/core/customRequestHandler.test.js b/test/core/customRequestHandler.test.js index 0633dde..1f52768 100644 --- a/test/core/customRequestHandler.test.js +++ b/test/core/customRequestHandler.test.js @@ -55,10 +55,46 @@ describe('CustomRequestHandler', () => { describe('getList method', () => { it('should return the customRequestList', () => { + CustomRequestHandler.resetInstance(); const customRequestHandler = new CustomRequestHandler(); const list = customRequestHandler.getList(); assert.isObject(list); assert.isEmpty(list); }); }); + + describe('#isCustomRequestListEmpty', () => { + beforeEach(() => { + CustomRequestHandler.resetInstance(); + }); + it('should return true if the custom request list is empty', () => { + const customRequestHandler = new CustomRequestHandler(); + const result = customRequestHandler.isCustomRequestListEmpty(); + assert.isTrue(result); + }); + + it('should return false if the custom request list is not empty', () => { + const customRequestHandler = new CustomRequestHandler(); + customRequestHandler.addCustomRequest('request_1'); + const result = customRequestHandler.isCustomRequestListEmpty(); + assert.isFalse(result); + }); + + it('should handle multiple items in the custom request list', () => { + const customRequestHandler = new CustomRequestHandler(); + customRequestHandler.addCustomRequest('request_1'); + customRequestHandler.addCustomRequest('request_2'); + const result = customRequestHandler.isCustomRequestListEmpty(); + assert.isFalse(result); + }); + + it('should return true if some properties are directly defined on the object', () => { + const customRequestHandler = new CustomRequestHandler(); + customRequestHandler.customRequestList = Object.create({ + name: 'inherited', + }); + const result = customRequestHandler.isCustomRequestListEmpty(); + assert.isTrue(result); + }); + }); }); diff --git a/test/core/outgoingWebSocket.test.js b/test/core/outgoingWebSocket.test.js index 9f6685a..b3ff5b8 100644 --- a/test/core/outgoingWebSocket.test.js +++ b/test/core/outgoingWebSocket.test.js @@ -211,6 +211,7 @@ describe('OutgoingWebSocket', () => { const mockCustomRequestHandler = { getList: stub().returns({ customRequestId: {} }), customRequestList: { customRequestId: { resolve: spy() } }, + isCustomRequestListEmpty: stub().returns(false), }; customRequestHandler = stub( CustomRequestHandler, @@ -233,6 +234,7 @@ describe('OutgoingWebSocket', () => { const mockCustomRequestHandler = { getList: stub().returns({ customRequestId: {} }), customRequestList: { customRequestId: { resolve: spy() } }, + isCustomRequestListEmpty: stub().returns(false), }; customRequestHandler = stub( CustomRequestHandler, @@ -256,6 +258,7 @@ describe('OutgoingWebSocket', () => { const mockCustomRequestHandler = { getList: stub().returns({ customRequestId: {} }), customRequestList: { customRequestId: { resolve: spy() } }, + isCustomRequestListEmpty: stub().returns(false), }; customRequestHandler = stub( CustomRequestHandler, @@ -297,6 +300,25 @@ describe('OutgoingWebSocket', () => { assert(msgSpy.calledOnce); assert(msgSpy.calledWith(kMessageReceived, msg)); }); + + it('should not handle custom requests when no custom requests are pending', () => { + const mockCustomRequestHandler = { + getList: stub().returns({ customRequestId: {} }), + customRequestList: { customRequestId: { resolve: spy() } }, + isCustomRequestListEmpty: stub().returns(true), + }; + customRequestHandler = stub( + CustomRequestHandler, + 'getInstance' + ).returns(mockCustomRequestHandler); + outgoingWsCustom = new OutgoingWebSocketWithMock(upstreamUrl, headers); + msgSpy = spy(); + outgoingWsCustom.emit = msgSpy; + const msg = '{"id": "customRequestId"}'; + outgoingWsCustom.messageHandler(msg); + assert(msgSpy.calledOnce); + assert(msgSpy.calledWith(kMessageReceived, msg)); + }); }); }); @@ -385,6 +407,7 @@ describe('OutgoingWebSocket', () => { const mockCustomRequestHandler = { getList: stub().returns({ customRequestId: {} }), customRequestList: { customRequestId: { reject: spy() } }, + isCustomRequestListEmpty: stub().returns(false), }; customRequestHandler = stub( CustomRequestHandler, @@ -407,6 +430,7 @@ describe('OutgoingWebSocket', () => { const mockCustomRequestHandler = { getList: stub().returns({ customRequestId: {} }), customRequestList: { customRequestId: { reject: spy() } }, + isCustomRequestListEmpty: stub().returns(false), }; customRequestHandler = stub( CustomRequestHandler, @@ -430,6 +454,7 @@ describe('OutgoingWebSocket', () => { const mockCustomRequestHandler = { getList: stub().returns({ customRequestId: {} }), customRequestList: { customRequestId: { reject: spy() } }, + isCustomRequestListEmpty: stub().returns(false), }; customRequestHandler = stub( CustomRequestHandler, @@ -471,6 +496,26 @@ describe('OutgoingWebSocket', () => { assert(msgSpy.calledOnce); assert(msgSpy.calledWith(kError, msg)); }); + + it('should not handle custom requests when no custom requests are pending', () => { + // Mock CustomRequestHandler + const mockCustomRequestHandler = { + getList: stub().returns({ customRequestId: {} }), + customRequestList: { customRequestId: { resolve: spy() } }, + isCustomRequestListEmpty: stub().returns(true), + }; + customRequestHandler = stub( + CustomRequestHandler, + 'getInstance' + ).returns(mockCustomRequestHandler); + outgoingWsCustom = new OutgoingWebSocketWithMock(upstreamUrl, headers); + msgSpy = spy(); + outgoingWsCustom.emit = msgSpy; + const msg = '{"id": "customRequestId"}'; + outgoingWsCustom.errorHandler(msg); + assert(msgSpy.calledOnce); + assert(msgSpy.calledWith(kError, msg)); + }); }); });