Redis.mockImplementation(() => { let onCallbacks = {}; return { on: jest.fn((event, cb) => onCallbacks[event] = cb), disconnect: jest.fn(), subscribe: jest.fn(), publish: jest.fn(), onCallbacks }; });
it("init without opts", () => { const discoverer = new RedisDiscoverer(); Redis.mockClear(); Serializers.JSON.prototype.init.mockClear(); jest.spyOn(BaseDiscoverer.prototype, "init"); // ---- ^ SETUP ^ --- discoverer.init(broker.registry); // ---- ˇ ASSERTS ˇ --- expect(discoverer.instanceHash).toBe("12345678"); expect(discoverer.PREFIX).toBe("MOL-DSCVR"); expect(discoverer.BEAT_KEY).toBe("MOL-DSCVR-BEAT:node-99|12345678"); expect(discoverer.INFO_KEY).toBe("MOL-DSCVR-INFO:node-99"); expect(discoverer.client).toBeInstanceOf(Redis); expect(discoverer.serializer).toBeInstanceOf(Serializers.JSON); expect(Redis).toHaveBeenCalledTimes(1); expect(Redis).toHaveBeenCalledWith(null); expect(Serializers.JSON.prototype.init).toHaveBeenCalledTimes(1); expect(Serializers.JSON.prototype.init).toHaveBeenCalledWith(broker); expect(BaseDiscoverer.prototype.init).toHaveBeenCalledTimes(1); expect(BaseDiscoverer.prototype.init).toHaveBeenCalledWith(broker.registry); });
expect(cacher.opts).toEqual(opts); cacher.init(broker); expect(cacher.client).toBeInstanceOf(Redis.Cluster); });
it("init Redis cluster client", () => { broker.namespace = "TESTING"; const discoverer = new RedisDiscoverer({ cluster: { nodes: ["redis-server"], options: { db: 3 } } }); Redis.Cluster.mockClear(); Serializers.JSON.prototype.init.mockClear(); // ---- ^ SETUP ^ --- discoverer.init(broker.registry); // ---- ˇ ASSERTS ˇ --- expect(discoverer.instanceHash).toBe("12345678"); expect(discoverer.PREFIX).toBe("MOL-TESTING-DSCVR"); expect(discoverer.BEAT_KEY).toBe("MOL-TESTING-DSCVR-BEAT:node-99|12345678"); expect(discoverer.INFO_KEY).toBe("MOL-TESTING-DSCVR-INFO:node-99"); expect(discoverer.client).toBeInstanceOf(Redis.Cluster); expect(discoverer.serializer).toBeInstanceOf(Serializers.JSON); expect(Redis.Cluster).toHaveBeenCalledTimes(1); expect(Redis.Cluster).toHaveBeenCalledWith(["redis-server"], { db: 3 }); expect(Serializers.JSON.prototype.init).toHaveBeenCalledTimes(1); expect(Serializers.JSON.prototype.init).toHaveBeenCalledWith(broker); });
describe("check Redis client events", () => { const discoverer = new RedisDiscoverer(); Redis.mockClear(); const redisCallbacks = {}; Redis.prototype.on = jest.fn((name, cb) => redisCallbacks[name] = cb); Redis.prototype.on.mockClear(); expect(Redis.prototype.on).toHaveBeenCalledTimes(3); expect(Redis.prototype.on).toHaveBeenCalledWith("connect", expect.any(Function)); expect(Redis.prototype.on).toHaveBeenCalledWith("reconnecting", expect.any(Function)); expect(Redis.prototype.on).toHaveBeenCalledWith("error", expect.any(Function)); }); Redis.prototype.on.mockClear(); discoverer.sendLocalNodeInfo = jest.fn(); discoverer.init(broker.registry); Redis.prototype.on.mockClear(); discoverer.sendLocalNodeInfo = jest.fn(); discoverer.init(broker.registry); Redis.prototype.on.mockClear(); discoverer.sendLocalNodeInfo = jest.fn(); discoverer.init(broker.registry);
Redis.Cluster.mockImplementation(() => { let onCallbacks = {}; return { on: jest.fn((event, cb) => onCallbacks[event] = cb), disconnect: jest.fn(), subscribe: jest.fn(), publish: jest.fn(), onCallbacks }; });
constructor (server, options) { this.server = server this.options = options this.closed = false if (this.options.useCluster) { this.redis = new Redis.Cluster(...this.options.redisOptions) } else { const redisOptions = _.castArray(this.options.redisOptions) this.redis = new Redis(...redisOptions) } this.RoomState = RoomStateRedis this.UserState = UserStateRedis this.DirectMessagingState = DirectMessagingStateRedis this.lockTTL = this.options.lockTTL || 10000 this.instanceUID = this.server.instanceUID this.server.redis = this.redis for (const [cmd, def] of _.toPairs(luaCommands)) { this.redis.defineCommand(cmd, { numberOfKeys: def.numberOfKeys, lua: def.lua }) } }