Embedded Redis as JUnit Rule

I am very happy with the EmbeddedRedis implementation of Krzysztof Styrc for integration testing. To add some convenience, I created a JUnit ExternalResource from it, so I can add it as a ClassRule to my test. JUnit will then start and stop the cluster before and after the test suite.

@ClassRule
public static final EmbeddedRedis REDIS = new EmbeddedRedis();

I use a cluster setup of Redis, so it chooses a random free network port itself. The implementation of the ExternalResource is straightforward:

import org.junit.rules.ExternalResource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import redis.embedded.RedisCluster;

public class EmbeddedRedis extends ExternalResource {
  private static final Logger logger = LoggerFactory.getLogger(EmbeddedRedis.class);

  private RedisCluster redisCluster;

  @Override
  protected void before() throws Throwable {
    redisCluster =  RedisCluster.builder().ephemeral().sentinelCount(1).quorumSize(1)
        .replicationGroup("master1", 1)
        .build();
    redisCluster.start();
  }

  @Override
  protected void after() {
   redisCluster.stop();
  }

  public String getHost() {
    return "localhost";
  }

  public int getPort() {
    return redisCluster.serverPorts().get(0);
  }
}