Fix handling of Redis nodes with IPv6 addresses

See gh-39819
This commit is contained in:
Tobias Laatsch
2024-03-01 19:20:34 +01:00
committed by Andy Wilkinson
parent ca4d64ed16
commit 9b326d59fe
5 changed files with 37 additions and 15 deletions

View File

@@ -119,12 +119,23 @@ class PropertiesRedisConnectionDetailsTests {
@Test
void clusterIsConfigured() {
RedisProperties.Cluster cluster = new RedisProperties.Cluster();
cluster.setNodes(List.of("first:1111", "second:2222", "third:3333"));
cluster.setNodes(List.of("localhost:1111", "127.0.0.1:2222", "[::1]:3333"));
this.properties.setCluster(cluster);
PropertiesRedisConnectionDetails connectionDetails = new PropertiesRedisConnectionDetails(this.properties);
assertThat(connectionDetails.getCluster().getNodes()).containsExactly(
new RedisConnectionDetails.Node("first", 1111), new RedisConnectionDetails.Node("second", 2222),
new RedisConnectionDetails.Node("third", 3333));
new RedisConnectionDetails.Node("localhost", 1111), new RedisConnectionDetails.Node("127.0.0.1", 2222),
new RedisConnectionDetails.Node("[::1]", 3333));
}
@Test
void sentinelIsConfigured() {
RedisProperties.Sentinel sentinel = new RedisProperties.Sentinel();
sentinel.setNodes(List.of("localhost:1111", "127.0.0.1:2222", "[::1]:3333"));
this.properties.setSentinel(sentinel);
PropertiesRedisConnectionDetails connectionDetails = new PropertiesRedisConnectionDetails(this.properties);
assertThat(connectionDetails.getSentinel().getNodes()).containsExactly(
new RedisConnectionDetails.Node("localhost", 1111), new RedisConnectionDetails.Node("127.0.0.1", 2222),
new RedisConnectionDetails.Node("[::1]", 3333));
}
}

View File

@@ -308,8 +308,14 @@ class RedisAutoConfigurationTests {
this.contextRunner
.withPropertyValues("spring.data.redis.sentinel.master:mymaster",
"spring.data.redis.sentinel.nodes:" + StringUtils.collectionToCommaDelimitedString(sentinels))
.run((context) -> assertThat(context.getBean(LettuceConnectionFactory.class).isRedisSentinelAware())
.isTrue());
.run((context) -> {
assertThat(context.getBean(LettuceConnectionFactory.class).isRedisSentinelAware()).isTrue();
assertThat(context.getBean(LettuceConnectionFactory.class).getSentinelConfiguration()).isNotNull();
assertThat(context.getBean(LettuceConnectionFactory.class).getSentinelConfiguration().getSentinels())
.isNotNull()
.extracting(RedisNode::toString)
.containsExactlyInAnyOrder("[0:0:0:0:0:0:0:1]:26379", "[0:0:0:0:0:0:0:1]:26380");
});
}
@Test
@@ -394,17 +400,17 @@ class RedisAutoConfigurationTests {
@Test
void testRedisConfigurationWithCluster() {
List<String> clusterNodes = Arrays.asList("127.0.0.1:27379", "127.0.0.1:27380");
List<String> clusterNodes = Arrays.asList("127.0.0.1:27379", "127.0.0.1:27380", "[::1]:27381");
this.contextRunner
.withPropertyValues("spring.data.redis.cluster.nodes[0]:" + clusterNodes.get(0),
"spring.data.redis.cluster.nodes[1]:" + clusterNodes.get(1))
"spring.data.redis.cluster.nodes[1]:" + clusterNodes.get(1),
"spring.data.redis.cluster.nodes[2]:" + clusterNodes.get(2))
.run((context) -> {
RedisClusterConfiguration clusterConfiguration = context.getBean(LettuceConnectionFactory.class)
.getClusterConfiguration();
assertThat(clusterConfiguration.getClusterNodes()).hasSize(2);
assertThat(clusterConfiguration.getClusterNodes())
.extracting((node) -> node.getHost() + ":" + node.getPort())
.containsExactlyInAnyOrder("127.0.0.1:27379", "127.0.0.1:27380");
assertThat(clusterConfiguration.getClusterNodes()).hasSize(3);
assertThat(clusterConfiguration.getClusterNodes()).extracting(RedisNode::asString)
.containsExactlyInAnyOrder("127.0.0.1:27379", "127.0.0.1:27380", "[::1]:27381");
});
}