From 317e8d7c68bc6258ab0e507b64ed886ae6a7057f Mon Sep 17 00:00:00 2001 From: Spencer Gibb Date: Tue, 4 Dec 2018 12:34:44 -0500 Subject: [PATCH] Don't fail redis rule if redis is already running. --- .../gateway/test/support/redis/RedisRule.java | 41 ++++++++++++++----- 1 file changed, 31 insertions(+), 10 deletions(-) diff --git a/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/test/support/redis/RedisRule.java b/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/test/support/redis/RedisRule.java index 3d0fcbb9..b2e29e2a 100644 --- a/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/test/support/redis/RedisRule.java +++ b/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/test/support/redis/RedisRule.java @@ -1,20 +1,31 @@ package org.springframework.cloud.gateway.test.support.redis; +import java.io.IOException; +import java.net.ServerSocket; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.junit.rules.ExternalResource; +import redis.embedded.RedisServer; + import static java.lang.String.format; import static java.util.stream.IntStream.range; -import java.io.IOException; -import java.net.ServerSocket; -import org.junit.rules.ExternalResource; -import redis.embedded.RedisServer; - public class RedisRule extends ExternalResource { - public static RedisRule bindToPort(final int port) { + private Log log = LogFactory.getLog(getClass()); + + public static final int DEFAULT_REDIS_PORT = 6379; + + public static RedisRule bindToDefaultPort() { + return new RedisRule(DEFAULT_REDIS_PORT, true); + } + + public static RedisRule bindToDefaultPort(int port) { return new RedisRule(port); } - public static RedisRule bindToFirstOpenPort(final int startInclusive, final int endExclusive) { + public static RedisRule bindToFirstOpenPort(int startInclusive, int endExclusive) { return new RedisRule(findOpenPort(startInclusive, endExclusive)); } @@ -36,11 +47,17 @@ public class RedisRule extends ExternalResource { } private final int port; + private final boolean ignoreDefaultPortFailure; private RedisServer redisServer; - private RedisRule(final int port) { + private RedisRule(int port) { + this(port, false); + } + + private RedisRule(int port, boolean ignoreDefaultPortFailure) { this.port = port; + this.ignoreDefaultPortFailure = ignoreDefaultPortFailure; } @Override @@ -49,8 +66,12 @@ public class RedisRule extends ExternalResource { redisServer = RedisServer.builder().port(port).setting("maxmemory 16MB").build(); redisServer.start(); } catch (final Exception e) { - throw new RuntimeException(format("Error while initializing the Redis server" - + " on port %d", port), e); + if (port == DEFAULT_REDIS_PORT && ignoreDefaultPortFailure) { + log.info("Unable to start embedded Redis on default port. Ignoring error. Assuming redis is already running."); + } else { + throw new RuntimeException(format("Error while initializing the Redis server" + + " on port %d", port), e); + } } }