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
*/