From c7c9a8aab583c1f4eaa89593a5defcec0026de54 Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Wed, 20 Jul 2016 12:07:07 +0200 Subject: [PATCH] DATAREDIS-537 - Add support for Redis Cluster and SSL. Support SSL, StartTLS and VerifyPeer flags. Original Pull Request: #210 --- .../lettuce/LettuceConnectionFactory.java | 4 ++ .../LettuceConnectionFactoryUnitTests.java | 66 +++++++++++++++++++ 2 files changed, 70 insertions(+) diff --git a/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceConnectionFactory.java b/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceConnectionFactory.java index 1e8e30581..5d606d8a1 100644 --- a/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceConnectionFactory.java +++ b/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceConnectionFactory.java @@ -565,6 +565,10 @@ public class LettuceConnectionFactory implements InitializingBean, DisposableBea RedisURI redisURI = new RedisURI(node.getHost(), node.getPort(), timeout, TimeUnit.MILLISECONDS); + redisURI.setSsl(useSsl); + redisURI.setVerifyPeer(verifyPeer); + redisURI.setStartTls(startTls); + if (StringUtils.hasText(password)) { redisURI.setPassword(password); } diff --git a/src/test/java/org/springframework/data/redis/connection/lettuce/LettuceConnectionFactoryUnitTests.java b/src/test/java/org/springframework/data/redis/connection/lettuce/LettuceConnectionFactoryUnitTests.java index da2e5e4e4..f89c28a30 100644 --- a/src/test/java/org/springframework/data/redis/connection/lettuce/LettuceConnectionFactoryUnitTests.java +++ b/src/test/java/org/springframework/data/redis/connection/lettuce/LettuceConnectionFactoryUnitTests.java @@ -28,6 +28,7 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; import org.springframework.data.redis.ConnectionFactoryTracker; +import org.springframework.data.redis.connection.ClusterTestVariables; import org.springframework.data.redis.connection.RedisClusterConfiguration; import org.springframework.data.redis.connection.RedisSentinelConfiguration; @@ -243,4 +244,69 @@ public class LettuceConnectionFactoryUnitTests { assertThat(connectionFactory.isStartTls(), is(true)); } + /** + * @see DATAREDIS-537 + */ + @Test + public void sslShouldBeSetCorrectlyOnClusterClient() { + + LettuceConnectionFactory connectionFactory = new LettuceConnectionFactory(new RedisClusterConfiguration().clusterNode(ClusterTestVariables.CLUSTER_NODE_1)); + connectionFactory.setClientResources(LettuceTestClientResources.getSharedClientResources()); + connectionFactory.setUseSsl(true); + connectionFactory.afterPropertiesSet(); + ConnectionFactoryTracker.add(connectionFactory); + + AbstractRedisClient client = (AbstractRedisClient) getField(connectionFactory, "client"); + assertThat(client, instanceOf(RedisClusterClient.class)); + + Iterable initialUris = (Iterable) getField(client, "initialUris"); + + for (RedisURI uri : initialUris) { + assertThat(uri.isSsl(), is(true)); + } + } + + /** + * @see DATAREDIS-537 + */ + @Test + public void startTLSOptionShouldBeSetCorrectlyOnClusterClient() { + + LettuceConnectionFactory connectionFactory = new LettuceConnectionFactory(new RedisClusterConfiguration().clusterNode(ClusterTestVariables.CLUSTER_NODE_1)); + connectionFactory.setClientResources(LettuceTestClientResources.getSharedClientResources()); + connectionFactory.setStartTls(true); + connectionFactory.afterPropertiesSet(); + ConnectionFactoryTracker.add(connectionFactory); + + AbstractRedisClient client = (AbstractRedisClient) getField(connectionFactory, "client"); + assertThat(client, instanceOf(RedisClusterClient.class)); + + Iterable initialUris = (Iterable) getField(client, "initialUris"); + + for (RedisURI uri : initialUris) { + assertThat(uri.isStartTls(), is(true)); + } + } + + /** + * @see DATAREDIS-537 + */ + @Test + public void verifyPeerTLSOptionShouldBeSetCorrectlyOnClusterClient() { + + LettuceConnectionFactory connectionFactory = new LettuceConnectionFactory(new RedisClusterConfiguration().clusterNode(ClusterTestVariables.CLUSTER_NODE_1)); + connectionFactory.setClientResources(LettuceTestClientResources.getSharedClientResources()); + connectionFactory.setVerifyPeer(true); + connectionFactory.afterPropertiesSet(); + ConnectionFactoryTracker.add(connectionFactory); + + AbstractRedisClient client = (AbstractRedisClient) getField(connectionFactory, "client"); + assertThat(client, instanceOf(RedisClusterClient.class)); + + Iterable initialUris = (Iterable) getField(client, "initialUris"); + + for (RedisURI uri : initialUris) { + assertThat(uri.isVerifyPeer(), is(true)); + } + } }