diff --git a/pom.xml b/pom.xml index e6d868411f..b1e5b7e696 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ org.springframework.data spring-data-redis - 1.8.0.BUILD-SNAPSHOT + 1.8.0.DATAREDIS-524-SNAPSHOT Spring Data Redis diff --git a/src/main/java/org/springframework/data/redis/connection/lettuce/DefaultLettucePool.java b/src/main/java/org/springframework/data/redis/connection/lettuce/DefaultLettucePool.java index 2ba6b3c7ba..9939195b8f 100644 --- a/src/main/java/org/springframework/data/redis/connection/lettuce/DefaultLettucePool.java +++ b/src/main/java/org/springframework/data/redis/connection/lettuce/DefaultLettucePool.java @@ -26,6 +26,7 @@ import org.springframework.data.redis.connection.PoolException; import org.springframework.data.redis.connection.RedisSentinelConfiguration; import org.springframework.util.Assert; +import org.springframework.util.StringUtils; import com.lambdaworks.redis.RedisAsyncConnection; import com.lambdaworks.redis.RedisClient; @@ -120,7 +121,13 @@ public void afterPropertiesSet() { private RedisURI getRedisURI() { if (isRedisSentinelAware()) { - return LettuceConverters.sentinelConfigurationToRedisURI(sentinelConfiguration); + RedisURI redisURI = LettuceConverters.sentinelConfigurationToRedisURI(sentinelConfiguration); + + if (StringUtils.hasText(password)) { + redisURI.setPassword(password); + } + + return redisURI; } return createSimpleHostRedisURI(); 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 39cfd11476..f403508b5a 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 @@ -607,7 +607,14 @@ private AbstractRedisClient createRedisClient() { } private RedisURI getSentinelRedisURI() { - return LettuceConverters.sentinelConfigurationToRedisURI(sentinelConfiguration); + + RedisURI redisURI = LettuceConverters.sentinelConfigurationToRedisURI(sentinelConfiguration); + + if (StringUtils.hasText(password)) { + redisURI.setPassword(password); + } + + return redisURI; } /** diff --git a/src/test/java/org/springframework/data/redis/connection/lettuce/DefaultLettucePoolTests.java b/src/test/java/org/springframework/data/redis/connection/lettuce/DefaultLettucePoolTests.java index 59c7094dff..4eb1d32d13 100644 --- a/src/test/java/org/springframework/data/redis/connection/lettuce/DefaultLettucePoolTests.java +++ b/src/test/java/org/springframework/data/redis/connection/lettuce/DefaultLettucePoolTests.java @@ -15,8 +15,11 @@ */ package org.springframework.data.redis.connection.lettuce; +import static org.hamcrest.Matchers.*; import static org.junit.Assert.*; +import static org.springframework.test.util.ReflectionTestUtils.*; +import java.util.Collections; import java.util.concurrent.TimeUnit; import org.apache.commons.pool2.impl.GenericObjectPoolConfig; @@ -26,9 +29,11 @@ import org.springframework.data.redis.SettingsUtils; import org.springframework.data.redis.connection.PoolConfig; import org.springframework.data.redis.connection.PoolException; +import org.springframework.data.redis.connection.RedisSentinelConfiguration; import com.lambdaworks.redis.RedisAsyncConnection; import com.lambdaworks.redis.RedisException; +import com.lambdaworks.redis.RedisURI; /** * Unit test of {@link DefaultLettucePool} @@ -189,6 +194,22 @@ public void testCreateInvalidPassword() { pool.getResource(); } + /** + * @see DATAREDIS-524 + */ + @Test + public void testCreateSentinelWithPassword() { + + pool = new DefaultLettucePool(new RedisSentinelConfiguration("mymaster", Collections.singleton("host:1234"))); + pool.setClientResources(LettuceTestClientResources.getSharedClientResources()); + pool.setPassword("foo"); + pool.afterPropertiesSet(); + + RedisURI redisURI = (RedisURI) getField(pool.getClient(), "redisURI"); + + assertThat(redisURI.getPassword(), is(equalTo(pool.getPassword().toCharArray()))); + } + /** * @see DATAREDIS-462 */ 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 8740bc1b79..f6856c7401 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 @@ -21,6 +21,7 @@ import static org.junit.Assert.*; import static org.springframework.test.util.ReflectionTestUtils.*; +import java.util.Collections; import java.util.concurrent.TimeUnit; import org.junit.After; @@ -28,6 +29,7 @@ import org.junit.Test; import org.springframework.data.redis.ConnectionFactoryTracker; import org.springframework.data.redis.connection.RedisClusterConfiguration; +import org.springframework.data.redis.connection.RedisSentinelConfiguration; import com.lambdaworks.redis.AbstractRedisClient; import com.lambdaworks.redis.RedisClient; @@ -114,6 +116,28 @@ public void passwordShouldBeSetCorrectlyOnClusterClient() { } } + /** + * @see DATAREDIS-524 + */ + @Test + @SuppressWarnings("unchecked") + public void passwordShouldBeSetCorrectlyOnSentinelClient() { + + LettuceConnectionFactory connectionFactory = new LettuceConnectionFactory( + new RedisSentinelConfiguration("mymaster", Collections.singleton("host:1234"))); + connectionFactory.setClientResources(LettuceTestClientResources.getSharedClientResources()); + connectionFactory.setPassword("o_O"); + connectionFactory.afterPropertiesSet(); + ConnectionFactoryTracker.add(connectionFactory); + + AbstractRedisClient client = (AbstractRedisClient) getField(connectionFactory, "client"); + assertThat(client, instanceOf(RedisClient.class)); + + RedisURI redisURI = (RedisURI) getField(client, "redisURI"); + + assertThat(redisURI.getPassword(), is(equalTo(connectionFactory.getPassword().toCharArray()))); + } + /** * @see DATAREDIS-462 */