# Redis Test Bench

Provide means to spin up & connect to:
* a redis instance,
* a redis cluster, composed of 3 shards, with 1 replica each,
* a set of monitors, that logs:
  * (almost all) redis commands,
  * expiring entries.

Note that the `npm` package only adds a simple function to create
an `IORedis` client, for either standalone Redis instance or for
the Redis Cluster.

## Installation

To be able to connect to the redis instance or cluster:
`npm install @o1s/redis-testbench`

You can use the exported function `buildClient`, which will return
an IORedis client (for standalone Redis instance or for a Redis
Cluster).

To boot the services, clone this repo and read the title
`Redis and Redis Cluster services` below.

## Connectivity

### Connecting to Redis services

* The single redis service is available:
  * outside docker-compose: as `localhost:6379`
  * inside docker-compose: as `redis:6379`
* The redis-cluster services are available:
  * outside docker-compose: `localhost:6380` to `localhost:6385`
    (requires nat support if ioredis is used).
  * inside docker-compose: as `redis-node-0:6379` to `redis-node-5:6379`.

### API Provided
* `buildClient` returns the required redis client (either for a
  single Redis instance or for the Redis Cluster).
* `buildOptionsFromEnv` builds the required options from env vars.

## Redis and Redis Cluster services

Docker and Docker Compose services should be started
from a git clone of this repo, not from the `npm install`ed.

To start all redis and redis cluster services:
```
. .setup.sh
docker-compose up --build
```

To start the redis instance alone:
```
docker-compose up --build redis redis-monitor redis-watch-expirations
```

To start only the redis cluster (6 nodes: 3 primaries + 1 replica
each):
```
. .setup.sh
docker-compose up --build \
  redis-node-0 \
  redis-node-1 \
  redis-node-2 \
  redis-node-3 \
  redis-node-4 \
  redis-node-5 \
  redis-monitor-0 \
  redis-monitor-1 \
  redis-monitor-2 \
  redis-monitor-3 \
  redis-monitor-4 \
  redis-monitor-5 \
  redis-watch-expirations-0 \
  redis-watch-expirations-1 \
  redis-watch-expirations-2 \
  redis-watch-expirations-3 \
  redis-watch-expirations-4 \
  redis-watch-expirations-5
```
* `redis-node-*`: these are the actual redis services
* `redis-monitor-*`: these will list (almost all) redis commands
* `redis-watch-expirations-*`: these will list entry expirations.

To do a clean start state:
``` 
. .setup.sh
docker-compose down;
docker-compose rm -f \
  redis-node-0 \
  redis-node-1 \
  redis-node-2 \
  redis-node-3 \
  redis-node-4 \
  redis-node-5;
docker-compose up --build;
```

The commands above can be run with:
```
bash -i start.sh 
```
