From 8ed34f24774961242e8eb37096b2c3f13563caeb Mon Sep 17 00:00:00 2001 From: jdevcs Date: Wed, 11 Oct 2023 12:50:32 +0200 Subject: [PATCH 1/6] fixed chunks processing bug --- packages/web3-utils/src/socket_provider.ts | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/packages/web3-utils/src/socket_provider.ts b/packages/web3-utils/src/socket_provider.ts index b8124b18ed6..380c230bd72 100644 --- a/packages/web3-utils/src/socket_provider.ts +++ b/packages/web3-utils/src/socket_provider.ts @@ -465,13 +465,10 @@ export abstract class SocketProvider< protected _onMessage(event: MessageEvent): void { const responses = this._parseResponses(event); - if (responses.length === 0) { - // no responses means lost connection, autoreconnect if possible - if (this._reconnectOptions.autoReconnect) { - this._reconnect(); - } + if (isNullish(responses) || responses.length === 0) { return; } + for (const response of responses) { if ( jsonRpc.isResponseWithNotification(response as JsonRpcNotification) && From 93f7d9ca431099e47f7fb258dad5a43bfe76cd39 Mon Sep 17 00:00:00 2001 From: jdevcs Date: Wed, 11 Oct 2023 12:51:30 +0200 Subject: [PATCH 2/6] changelog update --- packages/web3-utils/CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/web3-utils/CHANGELOG.md b/packages/web3-utils/CHANGELOG.md index 5db90f9426b..982b52fe65b 100644 --- a/packages/web3-utils/CHANGELOG.md +++ b/packages/web3-utils/CHANGELOG.md @@ -163,3 +163,7 @@ Documentation: ### Added - As a replacment of the node EventEmitter, a custom `EventEmitter` has been implemented and exported. (#6398) + +### Fixed + +- Fixed bug in chunks processing logic \ No newline at end of file From 438aa9f6f4e0fcc68e6015b2d712eae97e3ef848 Mon Sep 17 00:00:00 2001 From: jdevcs Date: Wed, 11 Oct 2023 14:19:43 +0200 Subject: [PATCH 3/6] test updated --- packages/web3-utils/test/unit/socket_provider.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/web3-utils/test/unit/socket_provider.test.ts b/packages/web3-utils/test/unit/socket_provider.test.ts index d50f9aaffac..9c20df7fdd3 100644 --- a/packages/web3-utils/test/unit/socket_provider.test.ts +++ b/packages/web3-utils/test/unit/socket_provider.test.ts @@ -85,14 +85,14 @@ describe('SocketProvider', () => { // @ts-expect-error run protected method expect(provider._reconnect).not.toHaveBeenCalled(); }); - it('should be called when { autoReconnect: true }', () => { + it('should not call _reconnect with empty response when { autoReconnect: true }', () => { const reconnectOptions = { autoReconnect: true }; const provider = new TestProvider(socketPath, socketOption, reconnectOptions); // @ts-expect-error run protected method jest.spyOn(provider, '_reconnect').mockReturnValue(''); provider.message(''); // @ts-expect-error run protected method - expect(provider._reconnect).toHaveBeenCalled(); + expect(provider._reconnect).not.toHaveBeenCalled(); }); }); From f595c4a4e578393256507c08b8d3541ec745c69e Mon Sep 17 00:00:00 2001 From: jdevcs Date: Wed, 11 Oct 2023 15:29:53 +0200 Subject: [PATCH 4/6] tests update --- .../ganache_fault_tolerance.test.ts | 34 ++++++++----------- 1 file changed, 15 insertions(+), 19 deletions(-) diff --git a/packages/web3-providers-ws/test/integration/ganache_fault_tolerance.test.ts b/packages/web3-providers-ws/test/integration/ganache_fault_tolerance.test.ts index bd584667800..2e3dcaf8428 100644 --- a/packages/web3-providers-ws/test/integration/ganache_fault_tolerance.test.ts +++ b/packages/web3-providers-ws/test/integration/ganache_fault_tolerance.test.ts @@ -25,11 +25,12 @@ import { waitForEvent, describeIf, getSystemTestBackend, + isWs, } from '../fixtures/system_test_utils'; import WebSocketProvider from '../../src/index'; // create helper functions to open server -describeIf(getSystemTestBackend() === 'ganache')('ganache tests', () => { +describeIf(getSystemTestBackend() === 'ganache' && isWs)('ganache tests', () => { describe('WebSocketProvider - ganache', () => { jest.setTimeout(17000); const port = 7547; @@ -232,26 +233,21 @@ describeIf(getSystemTestBackend() === 'ganache')('ganache tests', () => { const webSocketProvider = new WebSocketProvider(host, {}, reconnectionOptions); await waitForSocketConnect(webSocketProvider); + webSocketProvider.on('error', (err: any) => { + if (err.message === `Maximum number of reconnect attempts reached! (${1})`) { + mockCallBack(); + } + }); + await server.close(); - const errorPromise = new Promise(resolve => { - webSocketProvider.on('error', (err: any) => { - if (err.message === `Maximum number of reconnect attempts reached! (${1})`) { - mockCallBack(); - resolve(true); - } - }); - }); - // send an event to be parsed and fail - const event = { - data: 'abc|--|ded', - type: 'websocket', - // @ts-expect-error run protected method - target: webSocketProvider._socketConnection, - }; - // @ts-expect-error run protected method - webSocketProvider._onMessage(event); - await errorPromise; + //when server is not listening send request, and expect that lib will try to reconnect and at end will throw con not open error + await expect( + webSocketProvider.request( + {"method":"eth_getBlockByNumber","params":["0xc5043f",false],"id":1,"jsonrpc":"2.0"} + )) + .rejects.toThrow(ConnectionNotOpenError); + expect(mockCallBack).toHaveBeenCalled(); }); From cdab03c547a6b44f72a1edf7ee36ed3b285b0ca1 Mon Sep 17 00:00:00 2001 From: jdevcs Date: Wed, 11 Oct 2023 15:36:39 +0200 Subject: [PATCH 5/6] changelog updates --- packages/web3-providers-ipc/CHANGELOG.md | 6 +++++- packages/web3-providers-ws/CHANGELOG.md | 6 +++++- packages/web3-utils/CHANGELOG.md | 2 +- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/packages/web3-providers-ipc/CHANGELOG.md b/packages/web3-providers-ipc/CHANGELOG.md index 081feaee086..8fc671b4a20 100644 --- a/packages/web3-providers-ipc/CHANGELOG.md +++ b/packages/web3-providers-ipc/CHANGELOG.md @@ -129,4 +129,8 @@ Documentation: - Dependencies updated -## [Unreleased] \ No newline at end of file +## [Unreleased] + +### Fixed + +- Fixed bug in chunks processing logic (#6496) \ No newline at end of file diff --git a/packages/web3-providers-ws/CHANGELOG.md b/packages/web3-providers-ws/CHANGELOG.md index 8561e087f59..f3eaafc94ee 100644 --- a/packages/web3-providers-ws/CHANGELOG.md +++ b/packages/web3-providers-ws/CHANGELOG.md @@ -123,4 +123,8 @@ Documentation: - Dependencies updated -## [Unreleased] \ No newline at end of file +## [Unreleased] + +### Fixed + +- Fixed bug in chunks processing logic (#6496) \ No newline at end of file diff --git a/packages/web3-utils/CHANGELOG.md b/packages/web3-utils/CHANGELOG.md index 982b52fe65b..9f84ddcc906 100644 --- a/packages/web3-utils/CHANGELOG.md +++ b/packages/web3-utils/CHANGELOG.md @@ -166,4 +166,4 @@ Documentation: ### Fixed -- Fixed bug in chunks processing logic \ No newline at end of file +- Fixed bug in chunks processing logic (#6496) \ No newline at end of file From 9c0e947405f8219a25b5ef56ad25076eb5b186f0 Mon Sep 17 00:00:00 2001 From: jdevcs Date: Wed, 11 Oct 2023 15:37:56 +0200 Subject: [PATCH 6/6] comments --- .../test/integration/ganache_fault_tolerance.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/web3-providers-ws/test/integration/ganache_fault_tolerance.test.ts b/packages/web3-providers-ws/test/integration/ganache_fault_tolerance.test.ts index 2e3dcaf8428..4a0ba982996 100644 --- a/packages/web3-providers-ws/test/integration/ganache_fault_tolerance.test.ts +++ b/packages/web3-providers-ws/test/integration/ganache_fault_tolerance.test.ts @@ -241,7 +241,7 @@ describeIf(getSystemTestBackend() === 'ganache' && isWs)('ganache tests', () => await server.close(); - //when server is not listening send request, and expect that lib will try to reconnect and at end will throw con not open error + // when server is not listening send request, and expect that lib will try to reconnect and at end will throw con not open error await expect( webSocketProvider.request( {"method":"eth_getBlockByNumber","params":["0xc5043f",false],"id":1,"jsonrpc":"2.0"}