diff --git a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/data/redis/RedisHealth.java b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/data/redis/RedisHealth.java index 836d9d7b402..70efe2ce28c 100644 --- a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/data/redis/RedisHealth.java +++ b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/data/redis/RedisHealth.java @@ -34,7 +34,7 @@ final class RedisHealth { } static Builder up(Health.Builder builder, Properties info) { - builder.withDetail("version", info.getProperty("redis_version")); + builder.withDetail("version", info.getProperty("redis_version", "unknown")); return builder.up(); } diff --git a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/redis/RedisHealthIndicatorTests.java b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/redis/RedisHealthIndicatorTests.java index b18dc8bb46b..0a778439579 100644 --- a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/redis/RedisHealthIndicatorTests.java +++ b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/redis/RedisHealthIndicatorTests.java @@ -62,6 +62,19 @@ class RedisHealthIndicatorTests { assertThat(health.getDetails()).containsEntry("version", "2.8.9"); } + @Test + void redisIsUpWithMissingVersion() { + Properties info = new Properties(); + RedisConnection redisConnection = mock(RedisConnection.class); + RedisServerCommands serverCommands = mock(RedisServerCommands.class); + given(redisConnection.serverCommands()).willReturn(serverCommands); + given(serverCommands.info()).willReturn(info); + RedisHealthIndicator healthIndicator = createHealthIndicator(redisConnection); + Health health = healthIndicator.health(); + assertThat(health.getStatus()).isEqualTo(Status.UP); + assertThat(health.getDetails()).containsEntry("version", "unknown"); + } + @Test void redisIsDown() { RedisConnection redisConnection = mock(RedisConnection.class); diff --git a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/redis/RedisReactiveHealthIndicatorTests.java b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/redis/RedisReactiveHealthIndicatorTests.java index e9a1ed744e2..9e2247cc993 100644 --- a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/redis/RedisReactiveHealthIndicatorTests.java +++ b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/redis/RedisReactiveHealthIndicatorTests.java @@ -68,6 +68,23 @@ class RedisReactiveHealthIndicatorTests { then(redisConnection).should().closeLater(); } + @Test + void redisIsUpWithMissingVersion() { + Properties info = new Properties(); + ReactiveRedisConnection redisConnection = mock(ReactiveRedisConnection.class); + given(redisConnection.closeLater()).willReturn(Mono.empty()); + ReactiveServerCommands commands = mock(ReactiveServerCommands.class); + given(commands.info("server")).willReturn(Mono.just(info)); + RedisReactiveHealthIndicator healthIndicator = createHealthIndicator(redisConnection, commands); + Mono health = healthIndicator.health(); + StepVerifier.create(health).consumeNextWith((h) -> { + assertThat(h.getStatus()).isEqualTo(Status.UP); + assertThat(h.getDetails()).containsOnlyKeys("version"); + assertThat(h.getDetails()).containsEntry("version", "unknown"); + }).expectComplete().verify(Duration.ofSeconds(30)); + then(redisConnection).should().closeLater(); + } + @Test void healthWhenClusterStateIsAbsentShouldBeUp() { ReactiveRedisConnectionFactory redisConnectionFactory = createClusterConnectionFactory(null);