diff --git a/src/server/app.ts b/src/server/app.ts index 3d27299..b1d9787 100644 --- a/src/server/app.ts +++ b/src/server/app.ts @@ -5,7 +5,7 @@ import express from 'express' import path from 'path' import SocketIO from 'socket.io' import { config } from './config' -import { configureStores } from './redis' +import { configureStores } from './configureStores' import call from './routes/call' import index from './routes/index' import { createServer } from './server' diff --git a/src/server/configureStores.test.ts b/src/server/configureStores.test.ts new file mode 100644 index 0000000..bff4796 --- /dev/null +++ b/src/server/configureStores.test.ts @@ -0,0 +1,42 @@ +jest.mock('ioredis') + +import Redis from 'ioredis' +import SocketIO from 'socket.io' +import { configureStores } from './configureStores' +import { MemoryStore, RedisStore } from './store' + +describe('configureStores', () => { + + describe('memory', () => { + it('should be in memory when no params specified', () => { + const io = SocketIO() + const stores = configureStores(io) + expect(stores.socketIdByUserId).toEqual(jasmine.any(MemoryStore)) + expect(stores.userIdBySocketId).toEqual(jasmine.any(MemoryStore)) + }) + + it('should be in memory when type="memory"', () => { + const io = SocketIO() + const stores = configureStores(io) + expect(stores.socketIdByUserId).toEqual(jasmine.any(MemoryStore)) + expect(stores.userIdBySocketId).toEqual(jasmine.any(MemoryStore)) + }) + }) + + describe('redis', () => { + it('should be redis when type="redis"', () => { + const io = SocketIO() + const stores = configureStores(io, { + type: 'redis', + host: 'localhost', + port: 6379, + prefix: 'peercalls', + }) + expect(io.adapter().pubClient).toEqual(jasmine.any(Redis)) + expect(io.adapter().subClient).toEqual(jasmine.any(Redis)) + expect(stores.socketIdByUserId).toEqual(jasmine.any(RedisStore)) + expect(stores.userIdBySocketId).toEqual(jasmine.any(RedisStore)) + }) + }) + +}) diff --git a/src/server/redis.ts b/src/server/configureStores.ts similarity index 100% rename from src/server/redis.ts rename to src/server/configureStores.ts diff --git a/src/server/store/store.test.ts b/src/server/store/store.test.ts new file mode 100644 index 0000000..d4305a6 --- /dev/null +++ b/src/server/store/store.test.ts @@ -0,0 +1,47 @@ +import { MemoryStore, RedisStore } from './' +import Redis from 'ioredis' +import { Store } from './store' + +describe('store', () => { + + const redis = new Redis({ + host: process.env.TEST_REDIS_HOST || 'localhost', + port: parseInt(process.env.TEST_REDIS_PORT!) || 6379, + enableOfflineQueue: true, + }) + + const testCases: Array<{name: string, store: Store}> = [{ + name: MemoryStore.name, + store: new MemoryStore(), + }, { + name: RedisStore.name, + store: new RedisStore(redis, 'peercallstest'), + }] + + afterAll(() => { + redis.disconnect() + }) + + testCases.forEach(({name, store}) => { + describe(name, () => { + afterEach(async () => { + await Promise.all([ + store.remove('a'), + store.remove('b'), + ]) + }) + describe('set, get, getMany', () => { + it('sets and retreives value(s)', async () => { + await store.set('a', 'A') + await store.set('b', 'B') + expect(await store.get('a')).toBe('A') + expect(await store.get('b')).toBe('B') + expect(await store.remove('b')) + expect(await store.get('c')).toBe(undefined) + expect(await store.getMany(['a', 'b', 'c'])) + .toEqual(['A', undefined, undefined]) + }) + }) + }) + }) +})