From 7196b907e512c521f06c3e064982d0389578d0d0 Mon Sep 17 00:00:00 2001 From: Leibale Eidelman Date: Thu, 12 May 2022 13:05:27 -0400 Subject: [PATCH] fix #1915 - CLIENT TRACKINGINFO (#2127) * fix #1915 - CLIENT TRACKINGINFO * remove .only --- packages/client/lib/client/commands.ts | 3 ++ .../lib/commands/CLIENT_TRACKINGINFO.spec.ts | 25 +++++++++++++++++ .../lib/commands/CLIENT_TRACKINGINFO.ts | 28 +++++++++++++++++++ 3 files changed, 56 insertions(+) create mode 100644 packages/client/lib/commands/CLIENT_TRACKINGINFO.spec.ts create mode 100644 packages/client/lib/commands/CLIENT_TRACKINGINFO.ts diff --git a/packages/client/lib/client/commands.ts b/packages/client/lib/client/commands.ts index 0ec33583bd..e164639ae9 100644 --- a/packages/client/lib/client/commands.ts +++ b/packages/client/lib/client/commands.ts @@ -25,6 +25,7 @@ import * as CLIENT_NO_EVICT from '../commands/CLIENT_NO-EVICT'; import * as CLIENT_PAUSE from '../commands/CLIENT_PAUSE'; import * as CLIENT_SETNAME from '../commands/CLIENT_SETNAME'; import * as CLIENT_TRACKING from '../commands/CLIENT_TRACKING'; +import * as CLIENT_TRACKINGINFO from '../commands/CLIENT_TRACKINGINFO'; import * as CLIENT_UNPAUSE from '../commands/CLIENT_UNPAUSE'; import * as CLIENT_INFO from '../commands/CLIENT_INFO'; import * as CLUSTER_ADDSLOTS from '../commands/CLUSTER_ADDSLOTS'; @@ -168,6 +169,8 @@ export default { clientSetName: CLIENT_SETNAME, CLIENT_TRACKING, clientTracking: CLIENT_TRACKING, + CLIENT_TRACKINGINFO, + clientTrackingInfo: CLIENT_TRACKINGINFO, CLIENT_UNPAUSE, clientUnpause: CLIENT_UNPAUSE, CLIENT_INFO, diff --git a/packages/client/lib/commands/CLIENT_TRACKINGINFO.spec.ts b/packages/client/lib/commands/CLIENT_TRACKINGINFO.spec.ts new file mode 100644 index 0000000000..49bffe7612 --- /dev/null +++ b/packages/client/lib/commands/CLIENT_TRACKINGINFO.spec.ts @@ -0,0 +1,25 @@ +import { strict as assert } from 'assert'; +import testUtils, { GLOBAL } from '../test-utils'; +import { transformArguments } from './CLIENT_TRACKINGINFO'; + +describe('CLIENT TRACKINGINFO', () => { + testUtils.isVersionGreaterThanHook([6, 2]); + + it('transformArguments', () => { + assert.deepEqual( + transformArguments(), + ['CLIENT', 'TRACKINGINFO'] + ); + }); + + testUtils.testWithClient('client.clientTrackingInfo', async client => { + assert.deepEqual( + await client.clientTrackingInfo(), + { + flags: new Set(['off']), + redirect: -1, + prefixes: [] + } + ); + }, GLOBAL.SERVERS.OPEN); +}); diff --git a/packages/client/lib/commands/CLIENT_TRACKINGINFO.ts b/packages/client/lib/commands/CLIENT_TRACKINGINFO.ts new file mode 100644 index 0000000000..7c883fc699 --- /dev/null +++ b/packages/client/lib/commands/CLIENT_TRACKINGINFO.ts @@ -0,0 +1,28 @@ +import { RedisCommandArguments } from '.'; + +export function transformArguments(): RedisCommandArguments { + return ['CLIENT', 'TRACKINGINFO']; +} + +type RawReply = [ + 'flags', + Array, + 'redirect', + number, + 'prefixes', + Array +]; + +interface Reply { + flags: Set; + redirect: number; + prefixes: Array; +} + +export function transformReply(reply: RawReply): Reply { + return { + flags: new Set(reply[1]), + redirect: reply[3], + prefixes: reply[5] + }; +}