From c413657357663acba84be585e6ad937d72219c79 Mon Sep 17 00:00:00 2001 From: Matthijs Dabroek Date: Wed, 26 Oct 2022 22:40:14 +0200 Subject: [PATCH] Reject multi.exec() promise with `ClientClosedError` after client disconnect (#2293) * Add reject multi chain on client disconnect assertion to client test suite * Reject multi chain exec with client closed error after client disconnect --- packages/client/lib/client/index.spec.ts | 13 +++++++++++++ packages/client/lib/client/index.ts | 4 ++++ 2 files changed, 17 insertions(+) diff --git a/packages/client/lib/client/index.spec.ts b/packages/client/lib/client/index.spec.ts index d27bcc2b78..27cb86d657 100644 --- a/packages/client/lib/client/index.spec.ts +++ b/packages/client/lib/client/index.spec.ts @@ -425,6 +425,19 @@ describe('Client', () => { ); }, GLOBAL.SERVERS.OPEN); + testUtils.testWithClient('should reject the whole chain upon client disconnect', async client => { + await client.disconnect(); + + return assert.rejects( + client.multi() + .ping() + .set('key', 'value') + .get('key') + .exec(), + ClientClosedError + ); + }, GLOBAL.SERVERS.OPEN); + testUtils.testWithClient('with script', async client => { assert.deepEqual( await client.multi() diff --git a/packages/client/lib/client/index.ts b/packages/client/lib/client/index.ts index 2032c4fb71..52895c73c3 100644 --- a/packages/client/lib/client/index.ts +++ b/packages/client/lib/client/index.ts @@ -611,6 +611,10 @@ export default class RedisClient< selectedDB?: number, chainId?: symbol ): Promise> { + if (!this.#socket.isOpen) { + return Promise.reject(new ClientClosedError()); + } + const promise = Promise.all( commands.map(({ args }) => { return this.#queue.addCommand(args, { chainId });