| | import type { Redis, Cluster } from 'ioredis'; |
| | import type { RedisClientType, RedisClusterType } from '@redis/client'; |
| |
|
| | type RedisClient = RedisClientType | RedisClusterType | Redis | Cluster; |
| |
|
| | describe('redisClients Integration Tests', () => { |
| | let originalEnv: NodeJS.ProcessEnv; |
| | let ioredisClient: Redis | Cluster | null = null; |
| | let keyvRedisClient: RedisClientType | RedisClusterType | null = null; |
| |
|
| | |
| | const testRedisOperations = async ( |
| | client: RedisClient, |
| | keyPrefix: string, |
| | readyPromise?: Promise<void>, |
| | ): Promise<void> => { |
| | |
| | if (readyPromise) await readyPromise; |
| |
|
| | const testKey = `${keyPrefix}-test-key`; |
| | const testValue = `${keyPrefix}-test-value`; |
| |
|
| | |
| | await client.set(testKey, testValue); |
| |
|
| | |
| | const result = await client.get(testKey); |
| | expect(result).toBe(testValue); |
| |
|
| | |
| | const deleteResult = await client.del(testKey); |
| | expect(deleteResult).toBe(1); |
| |
|
| | |
| | const deletedResult = await client.get(testKey); |
| | expect(deletedResult).toBeNull(); |
| | }; |
| |
|
| | beforeEach(() => { |
| | originalEnv = { ...process.env }; |
| |
|
| | |
| | process.env.REDIS_PING_INTERVAL = '1000'; |
| | process.env.REDIS_KEY_PREFIX = 'Redis-Integration-Test'; |
| | process.env.REDIS_RETRY_MAX_ATTEMPTS = '5'; |
| | process.env.USE_REDIS = process.env.USE_REDIS || 'true'; |
| | process.env.USE_REDIS_CLUSTER = process.env.USE_REDIS_CLUSTER || 'false'; |
| | process.env.REDIS_URI = process.env.REDIS_URI || 'redis://127.0.0.1:6379'; |
| |
|
| | |
| | jest.resetModules(); |
| | }); |
| |
|
| | afterEach(async () => { |
| | |
| | if (ioredisClient && ioredisClient.status === 'ready') { |
| | try { |
| | const keys = await ioredisClient.keys('Redis-Integration-Test::*'); |
| | if (keys.length > 0) { |
| | await ioredisClient.del(...keys); |
| | } |
| | } catch (error: any) { |
| | console.warn('Error cleaning up test keys:', error.message); |
| | } |
| | } |
| |
|
| | |
| | if (ioredisClient) { |
| | try { |
| | if (ioredisClient.status === 'ready') { |
| | ioredisClient.disconnect(); |
| | } |
| | } catch (error: any) { |
| | console.warn('Error disconnecting ioredis client:', error.message); |
| | } |
| | ioredisClient = null; |
| | } |
| |
|
| | if (keyvRedisClient) { |
| | try { |
| | |
| | await keyvRedisClient.disconnect(); |
| | } catch (error: any) { |
| | console.warn('Error disconnecting keyv redis client:', error.message); |
| | } |
| | keyvRedisClient = null; |
| | } |
| |
|
| | process.env = originalEnv; |
| | jest.resetModules(); |
| | }); |
| |
|
| | describe('ioredis Client Tests', () => { |
| | describe('when USE_REDIS is false', () => { |
| | test('should have null client', async () => { |
| | process.env.USE_REDIS = 'false'; |
| |
|
| | const clients = await import('../redisClients'); |
| | ioredisClient = clients.ioredisClient; |
| |
|
| | expect(ioredisClient).toBeNull(); |
| | }); |
| | }); |
| |
|
| | describe('when connecting to a Redis instance', () => { |
| | test('should connect and perform set/get/delete operations', async () => { |
| | const clients = await import('../redisClients'); |
| | ioredisClient = clients.ioredisClient; |
| | await testRedisOperations(ioredisClient!, 'ioredis-single'); |
| | }); |
| | }); |
| |
|
| | describe('when connecting to a Redis cluster', () => { |
| | test('should connect to cluster and perform set/get/delete operations', async () => { |
| | process.env.USE_REDIS_CLUSTER = 'true'; |
| | process.env.REDIS_URI = |
| | 'redis://127.0.0.1:7001,redis://127.0.0.1:7002,redis://127.0.0.1:7003'; |
| |
|
| | const clients = await import('../redisClients'); |
| | ioredisClient = clients.ioredisClient; |
| | await testRedisOperations(ioredisClient!, 'ioredis-cluster'); |
| | }); |
| | }); |
| | }); |
| |
|
| | describe('keyvRedisClient Tests', () => { |
| | describe('when USE_REDIS is false', () => { |
| | test('should have null client', async () => { |
| | process.env.USE_REDIS = 'false'; |
| |
|
| | const clients = await import('../redisClients'); |
| | keyvRedisClient = clients.keyvRedisClient; |
| | expect(keyvRedisClient).toBeNull(); |
| | }); |
| | }); |
| |
|
| | describe('when connecting to a Redis instance', () => { |
| | test('should connect and perform set/get/delete operations', async () => { |
| | const clients = await import('../redisClients'); |
| | keyvRedisClient = clients.keyvRedisClient; |
| | await testRedisOperations(keyvRedisClient!, 'keyv-single', clients.keyvRedisClientReady!); |
| | }); |
| | }); |
| |
|
| | describe('when connecting to a Redis cluster', () => { |
| | test('should connect to cluster and perform set/get/delete operations', async () => { |
| | process.env.USE_REDIS_CLUSTER = 'true'; |
| | process.env.REDIS_URI = |
| | 'redis://127.0.0.1:7001,redis://127.0.0.1:7002,redis://127.0.0.1:7003'; |
| |
|
| | const clients = await import('../redisClients'); |
| | keyvRedisClient = clients.keyvRedisClient; |
| | await testRedisOperations(keyvRedisClient!, 'keyv-cluster', clients.keyvRedisClientReady!); |
| | }); |
| | }); |
| | }); |
| | }); |
| |
|