RedisVersionUtil.java

package redis.clients.jedis.util;

import io.redis.test.utils.RedisInfo;
import io.redis.test.utils.RedisVersion;
import redis.clients.jedis.*;

public class RedisVersionUtil {

  static final String FORCE_REDIS_SERVER_VERSION_ENV = "forceRedisServerVersion";

  static final RedisVersion forcedVersion = System.getenv(FORCE_REDIS_SERVER_VERSION_ENV) != null
          ? RedisVersion.of(System.getenv(FORCE_REDIS_SERVER_VERSION_ENV))
          : null;

  public static RedisVersion getRedisVersion(Connection conn) {
    if (forcedVersion != null) {
      return forcedVersion;
    }

    try (Jedis jedis = new Jedis(conn)) {
      return getRedisVersion(jedis);
    }
  }

  public static RedisVersion getRedisVersion(UnifiedJedis jedis) {
    if (forcedVersion != null) {
      return forcedVersion;
    }

    Object response = SafeEncoder.encodeObject(jedis.sendCommand(Protocol.Command.INFO, "server"));
    RedisInfo info = RedisInfo.parseInfoServer(response.toString());
    return RedisVersion.of(info.getRedisVersion());
  }

  public static RedisVersion getRedisVersion(Jedis jedis) {
    if (forcedVersion != null) {
      return forcedVersion;
    }

    RedisInfo info = RedisInfo.parseInfoServer(jedis.info("server"));
    return RedisVersion.of(info.getRedisVersion());
  }

  public static RedisVersion getRedisVersion(EndpointConfig endpoint) {
    if (forcedVersion != null) {
      return forcedVersion;
    }

    try (Jedis jedis = new Jedis(endpoint.getHostAndPort(),
        endpoint.getClientConfigBuilder().build())) {
      return getRedisVersion(jedis);
    }
  }
}