From c277ba35c4bd61d3dd1431350b21e7e393f3dc84 Mon Sep 17 00:00:00 2001 From: Asher Date: Tue, 20 Jun 2023 01:20:10 +0900 Subject: [PATCH 1/5] Add support for command 'PUBSUB SHARDNUMSUB' --- packages/client/lib/client/commands.ts | 3 ++ .../lib/commands/PUBSUB_SHARDNUMSUB.spec.ts | 35 +++++++++++++++++++ .../client/lib/commands/PUBSUB_SHARDNUMSUB.ts | 24 +++++++++++++ 3 files changed, 62 insertions(+) create mode 100644 packages/client/lib/commands/PUBSUB_SHARDNUMSUB.spec.ts create mode 100644 packages/client/lib/commands/PUBSUB_SHARDNUMSUB.ts diff --git a/packages/client/lib/client/commands.ts b/packages/client/lib/client/commands.ts index 1e2e5274c0a..1884814ef85 100644 --- a/packages/client/lib/client/commands.ts +++ b/packages/client/lib/client/commands.ts @@ -100,6 +100,7 @@ import * as PUBSUB_CHANNELS from '../commands/PUBSUB_CHANNELS'; import * as PUBSUB_NUMPAT from '../commands/PUBSUB_NUMPAT'; import * as PUBSUB_NUMSUB from '../commands/PUBSUB_NUMSUB'; import * as PUBSUB_SHARDCHANNELS from '../commands/PUBSUB_SHARDCHANNELS'; +import * as PUBSUB_SHARDNUMSUB from '../commands/PUBSUB_SHARDNUMSUB'; import * as RANDOMKEY from '../commands/RANDOMKEY'; import * as READONLY from '../commands/READONLY'; import * as READWRITE from '../commands/READWRITE'; @@ -323,6 +324,8 @@ export default { pubSubNumSub: PUBSUB_NUMSUB, PUBSUB_SHARDCHANNELS, pubSubShardChannels: PUBSUB_SHARDCHANNELS, + PUBSUB_SHARDNUMSUB, + pubSubShardNumSub: PUBSUB_SHARDNUMSUB, RANDOMKEY, randomKey: RANDOMKEY, READONLY, diff --git a/packages/client/lib/commands/PUBSUB_SHARDNUMSUB.spec.ts b/packages/client/lib/commands/PUBSUB_SHARDNUMSUB.spec.ts new file mode 100644 index 00000000000..be789161598 --- /dev/null +++ b/packages/client/lib/commands/PUBSUB_SHARDNUMSUB.spec.ts @@ -0,0 +1,35 @@ +import { strict as assert } from 'assert'; +import testUtils, { GLOBAL } from '../test-utils'; +import { transformArguments } from './PUBSUB_NUMSUB'; + +describe('PUBSUB SHARDNUMSUB', () => { + describe('transformArguments', () => { + it('simple', () => { + assert.deepEqual( + transformArguments(), + ['PUBSUB', 'SHARDNUMSUB'] + ); + }); + + it('string', () => { + assert.deepEqual( + transformArguments('channel'), + ['PUBSUB', 'SHARDNUMSUB', 'channel'] + ); + }); + + it('array', () => { + assert.deepEqual( + transformArguments(['1', '2']), + ['PUBSUB', 'SHARDNUMSUB', '1', '2'] + ); + }); + }); + + testUtils.testWithClient('client.pubSubShardNumSub', async client => { + assert.deepEqual( + await client.pubSubShardNumSub(), + Object.create(null) + ); + }, GLOBAL.SERVERS.OPEN); +}); diff --git a/packages/client/lib/commands/PUBSUB_SHARDNUMSUB.ts b/packages/client/lib/commands/PUBSUB_SHARDNUMSUB.ts new file mode 100644 index 00000000000..a47b0daaaa3 --- /dev/null +++ b/packages/client/lib/commands/PUBSUB_SHARDNUMSUB.ts @@ -0,0 +1,24 @@ +import { pushVerdictArguments } from './generic-transformers'; +import { RedisCommandArgument, RedisCommandArguments } from '.'; + +export const IS_READ_ONLY = true; + +export function transformArguments( + channels?: Array | RedisCommandArgument +): RedisCommandArguments { + const args = ['PUBSUB', 'SHARDNUMSUB']; + + if (channels) return pushVerdictArguments(args, channels); + + return args; +} + +export function transformReply(rawReply: Array): Record { + const transformedReply = Object.create(null); + + for (let i = 0; i < rawReply.length; i +=2) { + transformedReply[rawReply[i]] = rawReply[i + 1]; + } + + return transformedReply; +} From 6460d65645cc1493a34ae1c807783761f5d1b6a8 Mon Sep 17 00:00:00 2001 From: Asher Date: Tue, 20 Jun 2023 01:35:47 +0900 Subject: [PATCH 2/5] Use import from PUBSUB_SHARDNUMSUB --- packages/client/lib/commands/PUBSUB_SHARDNUMSUB.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/client/lib/commands/PUBSUB_SHARDNUMSUB.spec.ts b/packages/client/lib/commands/PUBSUB_SHARDNUMSUB.spec.ts index be789161598..2920145387a 100644 --- a/packages/client/lib/commands/PUBSUB_SHARDNUMSUB.spec.ts +++ b/packages/client/lib/commands/PUBSUB_SHARDNUMSUB.spec.ts @@ -1,6 +1,6 @@ import { strict as assert } from 'assert'; import testUtils, { GLOBAL } from '../test-utils'; -import { transformArguments } from './PUBSUB_NUMSUB'; +import { transformArguments } from './PUBSUB_SHARDNUMSUB'; describe('PUBSUB SHARDNUMSUB', () => { describe('transformArguments', () => { From 6ac8a41a5dda410a7ba7e5b4e80abaac744230a9 Mon Sep 17 00:00:00 2001 From: Asher Date: Thu, 29 Jun 2023 15:17:55 +0900 Subject: [PATCH 3/5] Add test case for non-empty reply --- .../client/lib/commands/PUBSUB_SHARDNUMSUB.spec.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/packages/client/lib/commands/PUBSUB_SHARDNUMSUB.spec.ts b/packages/client/lib/commands/PUBSUB_SHARDNUMSUB.spec.ts index 2920145387a..f12b069e69d 100644 --- a/packages/client/lib/commands/PUBSUB_SHARDNUMSUB.spec.ts +++ b/packages/client/lib/commands/PUBSUB_SHARDNUMSUB.spec.ts @@ -31,5 +31,15 @@ describe('PUBSUB SHARDNUMSUB', () => { await client.pubSubShardNumSub(), Object.create(null) ); + + assert.deepEqual( + await client.pubSubShardNumSub('channel'), + { 'channel': 0 } + ); + + assert.deepEqual( + await client.pubSubShardNumSub(['foo', 'bar']), + { 'foo': 0, 'bar': 0 } + ); }, GLOBAL.SERVERS.OPEN); }); From 44fad50ebbdc943708fa9bbb29bafe936cd0f244 Mon Sep 17 00:00:00 2001 From: Leibale Eidelman Date: Mon, 18 Sep 2023 18:35:46 -0400 Subject: [PATCH 4/5] clean tests --- .../lib/commands/PUBSUB_SHARDNUMSUB.spec.ts | 15 ++++----------- .../client/lib/commands/PUBSUB_SHARDNUMSUB.ts | 2 +- 2 files changed, 5 insertions(+), 12 deletions(-) diff --git a/packages/client/lib/commands/PUBSUB_SHARDNUMSUB.spec.ts b/packages/client/lib/commands/PUBSUB_SHARDNUMSUB.spec.ts index f12b069e69d..2c4e8a8e657 100644 --- a/packages/client/lib/commands/PUBSUB_SHARDNUMSUB.spec.ts +++ b/packages/client/lib/commands/PUBSUB_SHARDNUMSUB.spec.ts @@ -27,19 +27,12 @@ describe('PUBSUB SHARDNUMSUB', () => { }); testUtils.testWithClient('client.pubSubShardNumSub', async client => { - assert.deepEqual( - await client.pubSubShardNumSub(), - Object.create(null) - ); - - assert.deepEqual( - await client.pubSubShardNumSub('channel'), - { 'channel': 0 } - ); - assert.deepEqual( await client.pubSubShardNumSub(['foo', 'bar']), - { 'foo': 0, 'bar': 0 } + { + foo: 0, + bar: 0 + } ); }, GLOBAL.SERVERS.OPEN); }); diff --git a/packages/client/lib/commands/PUBSUB_SHARDNUMSUB.ts b/packages/client/lib/commands/PUBSUB_SHARDNUMSUB.ts index a47b0daaaa3..4d7f4d8a71e 100644 --- a/packages/client/lib/commands/PUBSUB_SHARDNUMSUB.ts +++ b/packages/client/lib/commands/PUBSUB_SHARDNUMSUB.ts @@ -16,7 +16,7 @@ export function transformArguments( export function transformReply(rawReply: Array): Record { const transformedReply = Object.create(null); - for (let i = 0; i < rawReply.length; i +=2) { + for (let i = 0; i < rawReply.length; i += 2) { transformedReply[rawReply[i]] = rawReply[i + 1]; } From 1618630fe2f576b29f89c06238aa6c1f65708ef3 Mon Sep 17 00:00:00 2001 From: Leibale Eidelman Date: Mon, 18 Sep 2023 19:25:17 -0400 Subject: [PATCH 5/5] run tests in redis >= 7, fix integration test --- .../lib/commands/PUBSUB_SHARDNUMSUB.spec.ts | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/packages/client/lib/commands/PUBSUB_SHARDNUMSUB.spec.ts b/packages/client/lib/commands/PUBSUB_SHARDNUMSUB.spec.ts index 2c4e8a8e657..fea1373b55d 100644 --- a/packages/client/lib/commands/PUBSUB_SHARDNUMSUB.spec.ts +++ b/packages/client/lib/commands/PUBSUB_SHARDNUMSUB.spec.ts @@ -3,6 +3,8 @@ import testUtils, { GLOBAL } from '../test-utils'; import { transformArguments } from './PUBSUB_SHARDNUMSUB'; describe('PUBSUB SHARDNUMSUB', () => { + testUtils.isVersionGreaterThanHook([7]); + describe('transformArguments', () => { it('simple', () => { assert.deepEqual( @@ -29,10 +31,18 @@ describe('PUBSUB SHARDNUMSUB', () => { testUtils.testWithClient('client.pubSubShardNumSub', async client => { assert.deepEqual( await client.pubSubShardNumSub(['foo', 'bar']), - { - foo: 0, - bar: 0 - } + Object.create(null, { + foo: { + value: 0, + configurable: true, + enumerable: true + }, + bar: { + value: 0, + configurable: true, + enumerable: true + } + }) ); }, GLOBAL.SERVERS.OPEN); });