Skip to content

Commit ad54341

Browse files
mp911dechristophstrobl
authored andcommitted
DATAREDIS-990 - Propagate SSL configuration to Lettuce driver when using Redis Sentinel.
We now appropriately set SSL configuration when using the Lettuce driver with Redis Sentinel to enable Sentinel usage with SSL. Using Sentinel with SSL requires Lettuce 5.2 or newer. Original Pull Request: #462
1 parent 64b8913 commit ad54341

File tree

2 files changed

+66
-0
lines changed

2 files changed

+66
-0
lines changed

src/main/java/org/springframework/data/redis/connection/lettuce/LettuceConnectionFactory.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1031,6 +1031,10 @@ private RedisURI getSentinelRedisURI() {
10311031

10321032
getRedisPassword().toOptional().ifPresent(redisUri::setPassword);
10331033
clientConfiguration.getClientName().ifPresent(redisUri::setClientName);
1034+
1035+
redisUri.setSsl(clientConfiguration.isUseSsl());
1036+
redisUri.setVerifyPeer(clientConfiguration.isVerifyPeer());
1037+
redisUri.setStartTls(clientConfiguration.isStartTls());
10341038
redisUri.setTimeout(clientConfiguration.getCommandTimeout());
10351039
redisUri.setDatabase(getDatabase());
10361040

src/test/java/org/springframework/data/redis/connection/lettuce/LettuceConnectionFactoryUnitTests.java

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -285,6 +285,68 @@ public void startTLSOptionShouldBeSetCorrectlyOnClient() {
285285
assertThat(connectionFactory.isStartTls()).isTrue();
286286
}
287287

288+
@Test // DATAREDIS-990
289+
public void sslShouldBeSetCorrectlyOnSentinelClient() {
290+
291+
RedisSentinelConfiguration sentinelConfiguration = new RedisSentinelConfiguration("myMaster",
292+
Collections.singleton("localhost:1234"));
293+
LettuceConnectionFactory connectionFactory = new LettuceConnectionFactory(sentinelConfiguration);
294+
connectionFactory.setClientResources(getSharedClientResources());
295+
connectionFactory.setUseSsl(true);
296+
connectionFactory.afterPropertiesSet();
297+
ConnectionFactoryTracker.add(connectionFactory);
298+
299+
AbstractRedisClient client = (AbstractRedisClient) getField(connectionFactory, "client");
300+
assertThat(client).isInstanceOf(RedisClient.class);
301+
302+
RedisURI redisUri = (RedisURI) getField(client, "redisURI");
303+
304+
assertThat(redisUri.isSsl()).isTrue();
305+
assertThat(connectionFactory.isUseSsl()).isTrue();
306+
assertThat(redisUri.isVerifyPeer()).isTrue();
307+
assertThat(connectionFactory.isVerifyPeer()).isTrue();
308+
}
309+
310+
@Test // DATAREDIS-990
311+
public void verifyPeerOptionShouldBeSetCorrectlyOnSentinelClient() {
312+
313+
RedisSentinelConfiguration sentinelConfiguration = new RedisSentinelConfiguration("myMaster",
314+
Collections.singleton("localhost:1234"));
315+
LettuceConnectionFactory connectionFactory = new LettuceConnectionFactory(sentinelConfiguration);
316+
connectionFactory.setClientResources(getSharedClientResources());
317+
connectionFactory.setVerifyPeer(false);
318+
connectionFactory.afterPropertiesSet();
319+
ConnectionFactoryTracker.add(connectionFactory);
320+
321+
AbstractRedisClient client = (AbstractRedisClient) getField(connectionFactory, "client");
322+
assertThat(client).isInstanceOf(RedisClient.class);
323+
324+
RedisURI redisUri = (RedisURI) getField(client, "redisURI");
325+
326+
assertThat(redisUri.isVerifyPeer()).isFalse();
327+
assertThat(connectionFactory.isVerifyPeer()).isFalse();
328+
}
329+
330+
@Test // DATAREDIS-990
331+
public void startTLSOptionShouldBeSetCorrectlyOnSentinelClient() {
332+
333+
RedisSentinelConfiguration sentinelConfiguration = new RedisSentinelConfiguration("myMaster",
334+
Collections.singleton("localhost:1234"));
335+
LettuceConnectionFactory connectionFactory = new LettuceConnectionFactory(sentinelConfiguration);
336+
connectionFactory.setClientResources(getSharedClientResources());
337+
connectionFactory.setStartTls(true);
338+
connectionFactory.afterPropertiesSet();
339+
ConnectionFactoryTracker.add(connectionFactory);
340+
341+
AbstractRedisClient client = (AbstractRedisClient) getField(connectionFactory, "client");
342+
assertThat(client).isInstanceOf(RedisClient.class);
343+
344+
RedisURI redisUri = (RedisURI) getField(client, "redisURI");
345+
346+
assertThat(redisUri.isStartTls()).isTrue();
347+
assertThat(connectionFactory.isStartTls()).isTrue();
348+
}
349+
288350
@Test // DATAREDIS-537
289351
public void sslShouldBeSetCorrectlyOnClusterClient() {
290352

0 commit comments

Comments
 (0)