Skip to content

Commit de12812

Browse files
committed
add some tests
1 parent b74f6d4 commit de12812

File tree

2 files changed

+73
-0
lines changed

2 files changed

+73
-0
lines changed

packages/client/lib/client/index.spec.ts

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -802,6 +802,68 @@ describe('Client', () => {
802802

803803
assert.equal(client.isOpen, false);
804804
}, GLOBAL.SERVERS.OPEN);
805+
806+
testUtils.testWithClient('shareded PubSub', async publisher => {
807+
const subscriber = publisher.duplicate();
808+
809+
await subscriber.connect();
810+
811+
try {
812+
const listener = spy();
813+
await subscriber.sSubscribe('channel', listener);
814+
815+
await Promise.all([
816+
waitTillBeenCalled(listener),
817+
publisher.sPublish('channel', 'message')
818+
]);
819+
820+
assert.ok(listener.calledOnceWithExactly('message', 'channel'));
821+
822+
await subscriber.sUnsubscribe();
823+
824+
// should be able to send commands
825+
await assert.doesNotReject(subscriber.ping());
826+
} finally {
827+
await subscriber.disconnect();
828+
}
829+
}, GLOBAL.SERVERS.OPEN);
830+
831+
testUtils.testWithClient('should be able to handle errors in SUBSCRIBE', async publisher => {
832+
const subscriber = publisher.duplicate();
833+
834+
await subscriber.connect();
835+
836+
try {
837+
const listener1 = spy();
838+
await subscriber.subscribe('1', listener1);
839+
840+
await publisher.aclSetUser('default', 'resetchannels');
841+
842+
843+
const listener2 = spy();
844+
await assert.rejects(subscriber.subscribe('2', listener2));
845+
846+
await Promise.all([
847+
waitTillBeenCalled(listener1),
848+
publisher.aclSetUser('default', 'allchannels'),
849+
publisher.publish('1', 'message'),
850+
]);
851+
assert.ok(listener1.calledOnceWithExactly('message', '1'));
852+
853+
await subscriber.subscribe('2', listener2);
854+
855+
await Promise.all([
856+
waitTillBeenCalled(listener2),
857+
publisher.publish('2', 'message'),
858+
]);
859+
assert.ok(listener2.calledOnceWithExactly('message', '2'));
860+
} finally {
861+
await subscriber.disconnect();
862+
}
863+
}, {
864+
// this test change ACL rules, running in isolated server
865+
...GLOBAL.SERVERS.OPEN
866+
});
805867
});
806868

807869
testUtils.testWithClient('ConnectionTimeoutError', async client => {

packages/client/lib/cluster/index.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { attachExtensions, transformCommandReply, attachCommands, transformComma
66
import { EventEmitter } from 'events';
77
import RedisClusterMultiCommand, { InstantiableRedisClusterMultiCommandType, RedisClusterMultiCommandType } from './multi-command';
88
import { RedisMultiQueuedCommand } from '../multi-command';
9+
import { PubSubListener } from '../client/pub-sub';
910

1011
export type RedisClusterClientOptions = Omit<
1112
RedisClientOptions,
@@ -239,6 +240,16 @@ export default class RedisCluster<
239240

240241
multi = this.MULTI;
241242

243+
SSUBSCRIBE<T extends boolean>(
244+
channels: string | Array<string>,
245+
listener: PubSubListener<T>,
246+
bufferMode?: T
247+
): Promise<void> {
248+
249+
}
250+
251+
sSubscribe = this.SSUBSCRIBE;
252+
242253
getMasters(): Array<ClusterNode<M, F, S>> {
243254
return this.#slots.getMasters();
244255
}

0 commit comments

Comments
 (0)