From f79e14c8c3ed672fa2a4a42cbbf6e9e8db29829d Mon Sep 17 00:00:00 2001 From: John Hiesey Date: Mon, 7 Mar 2022 04:27:04 -0800 Subject: [PATCH] Fix #1870: TypeError in PubSub (#2016) * Fix #1870: TypeError in PubSub * Add test This test is for a race condition; it should reliably pass now, but is not guaranteed to fail with the previous version. --- packages/client/lib/client/commands-queue.ts | 3 ++- packages/client/lib/client/index.spec.ts | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/packages/client/lib/client/commands-queue.ts b/packages/client/lib/client/commands-queue.ts index df2c25dbc2..8af200314b 100644 --- a/packages/client/lib/client/commands-queue.ts +++ b/packages/client/lib/client/commands-queue.ts @@ -369,7 +369,8 @@ export default class RedisCommandsQueue { #setReturnBuffers() { this.#parser.setReturnBuffers( !!this.#waitingForReply.head?.value.returnBuffers || - !!this.#pubSubState?.subscribed + !!this.#pubSubState?.subscribed || + !!this.#pubSubState?.subscribing ); } diff --git a/packages/client/lib/client/index.spec.ts b/packages/client/lib/client/index.spec.ts index 1d627756c6..d52086da41 100644 --- a/packages/client/lib/client/index.spec.ts +++ b/packages/client/lib/client/index.spec.ts @@ -683,6 +683,21 @@ describe('Client', () => { } }, GLOBAL.SERVERS.OPEN); + testUtils.testWithClient('should not fail when message arrives right after subscribe', async publisher => { + const subscriber = publisher.duplicate(); + + await subscriber.connect(); + + try { + await assert.doesNotReject(Promise.all([ + subscriber.subscribe('channel', () => {}), + publisher.publish('channel', 'message') + ])); + } finally { + await subscriber.disconnect(); + } + }, GLOBAL.SERVERS.OPEN); + testUtils.testWithClient('should be able to quit in PubSub mode', async client => { await client.subscribe('channel', () => { // noop