|
16 | 16 |
|
17 | 17 | package org.springframework.boot.actuate.redis;
|
18 | 18 |
|
| 19 | +import static org.assertj.core.api.Assertions.assertThat; |
| 20 | +import static org.mockito.BDDMockito.given; |
| 21 | +import static org.mockito.Mockito.mock; |
| 22 | +import static org.mockito.Mockito.verify; |
| 23 | + |
19 | 24 | import java.util.Properties;
|
20 | 25 |
|
21 |
| -import io.lettuce.core.RedisConnectionException; |
22 | 26 | import org.junit.jupiter.api.Test;
|
23 |
| -import reactor.core.publisher.Mono; |
24 |
| -import reactor.test.StepVerifier; |
25 |
| - |
26 | 27 | import org.springframework.boot.actuate.health.Health;
|
27 | 28 | import org.springframework.boot.actuate.health.Status;
|
28 | 29 | import org.springframework.data.redis.RedisConnectionFailureException;
|
|
32 | 33 | import org.springframework.data.redis.connection.ReactiveRedisConnectionFactory;
|
33 | 34 | import org.springframework.data.redis.connection.ReactiveServerCommands;
|
34 | 35 |
|
35 |
| -import static org.assertj.core.api.Assertions.assertThat; |
36 |
| -import static org.mockito.BDDMockito.given; |
37 |
| -import static org.mockito.Mockito.mock; |
38 |
| -import static org.mockito.Mockito.verify; |
| 36 | +import io.lettuce.core.RedisConnectionException; |
| 37 | +import reactor.core.publisher.Mono; |
| 38 | +import reactor.test.StepVerifier; |
39 | 39 |
|
40 | 40 | /**
|
41 | 41 | * Tests for {@link RedisReactiveHealthIndicator}.
|
@@ -67,25 +67,54 @@ void redisIsUp() {
|
67 | 67 | }
|
68 | 68 |
|
69 | 69 | @Test
|
70 |
| - void redisClusterIsUp() { |
71 |
| - Properties clusterProperties = new Properties(); |
| 70 | + void redisClusterIsUpWithoutState() { |
| 71 | + final Properties clusterProperties = new Properties(); |
72 | 72 | clusterProperties.setProperty("cluster_size", "4");
|
73 | 73 | clusterProperties.setProperty("cluster_slots_ok", "4");
|
74 | 74 | clusterProperties.setProperty("cluster_slots_fail", "0");
|
75 |
| - ReactiveRedisClusterConnection redisConnection = mock(ReactiveRedisClusterConnection.class); |
76 |
| - given(redisConnection.closeLater()).willReturn(Mono.empty()); |
77 |
| - given(redisConnection.clusterGetClusterInfo()).willReturn(Mono.just(new ClusterInfo(clusterProperties))); |
78 |
| - ReactiveRedisConnectionFactory redisConnectionFactory = mock(ReactiveRedisConnectionFactory.class); |
79 |
| - given(redisConnectionFactory.getReactiveConnection()).willReturn(redisConnection); |
80 |
| - RedisReactiveHealthIndicator healthIndicator = new RedisReactiveHealthIndicator(redisConnectionFactory); |
81 |
| - Mono<Health> health = healthIndicator.health(); |
82 |
| - StepVerifier.create(health).consumeNextWith((h) -> { |
| 75 | + final ReactiveRedisConnectionFactory redisConnectionFactory = mockRedisClusterConnectionFactory(clusterProperties); |
| 76 | + |
| 77 | + final RedisReactiveHealthIndicator healthIndicator = new RedisReactiveHealthIndicator(redisConnectionFactory); |
| 78 | + final Mono<Health> health = healthIndicator.health(); |
| 79 | + StepVerifier.create(health).consumeNextWith(h -> { |
83 | 80 | assertThat(h.getStatus()).isEqualTo(Status.UP);
|
84 | 81 | assertThat(h.getDetails().get("cluster_size")).isEqualTo(4L);
|
85 | 82 | assertThat(h.getDetails().get("slots_up")).isEqualTo(4L);
|
86 | 83 | assertThat(h.getDetails().get("slots_fail")).isEqualTo(0L);
|
87 | 84 | }).verifyComplete();
|
88 |
| - verify(redisConnection).closeLater(); |
| 85 | + verify(redisConnectionFactory.getReactiveConnection()).closeLater(); |
| 86 | + } |
| 87 | + |
| 88 | + @Test |
| 89 | + void redisClusterIsUpWithState() { |
| 90 | + final Properties clusterProperties = new Properties(); |
| 91 | + clusterProperties.setProperty("cluster_state", "ok"); |
| 92 | + clusterProperties.setProperty("cluster_size", "4"); |
| 93 | + clusterProperties.setProperty("cluster_slots_ok", "4"); |
| 94 | + clusterProperties.setProperty("cluster_slots_fail", "0"); |
| 95 | + final ReactiveRedisConnectionFactory redisConnectionFactory = mockRedisClusterConnectionFactory(clusterProperties); |
| 96 | + |
| 97 | + final RedisReactiveHealthIndicator healthIndicator = new RedisReactiveHealthIndicator(redisConnectionFactory); |
| 98 | + final Mono<Health> health = healthIndicator.health(); |
| 99 | + StepVerifier.create(health).consumeNextWith(h -> { |
| 100 | + assertThat(h.getStatus()).isEqualTo(Status.UP); |
| 101 | + }).verifyComplete(); |
| 102 | + } |
| 103 | + |
| 104 | + @Test |
| 105 | + void redisClusterIsDown() { |
| 106 | + final Properties clusterProperties = new Properties(); |
| 107 | + clusterProperties.setProperty("cluster_state", "fail"); |
| 108 | + clusterProperties.setProperty("cluster_size", "3"); |
| 109 | + clusterProperties.setProperty("cluster_slots_ok", "4"); |
| 110 | + clusterProperties.setProperty("cluster_slots_fail", "0"); |
| 111 | + final ReactiveRedisConnectionFactory redisConnectionFactory = mockRedisClusterConnectionFactory(clusterProperties); |
| 112 | + |
| 113 | + final RedisReactiveHealthIndicator healthIndicator = new RedisReactiveHealthIndicator(redisConnectionFactory); |
| 114 | + final Mono<Health> health = healthIndicator.health(); |
| 115 | + StepVerifier.create(health).consumeNextWith(h -> { |
| 116 | + assertThat(h.getStatus()).isEqualTo(Status.DOWN); |
| 117 | + }).verifyComplete(); |
89 | 118 | }
|
90 | 119 |
|
91 | 120 | @Test
|
@@ -121,4 +150,12 @@ private RedisReactiveHealthIndicator createHealthIndicator(ReactiveRedisConnecti
|
121 | 150 | return new RedisReactiveHealthIndicator(redisConnectionFactory);
|
122 | 151 | }
|
123 | 152 |
|
| 153 | + private static ReactiveRedisConnectionFactory mockRedisClusterConnectionFactory(Properties clusterProperties) { |
| 154 | + final ReactiveRedisClusterConnection redisConnection = mock(ReactiveRedisClusterConnection.class); |
| 155 | + given(redisConnection.closeLater()).willReturn(Mono.empty()); |
| 156 | + given(redisConnection.clusterGetClusterInfo()).willReturn(Mono.just(new ClusterInfo(clusterProperties))); |
| 157 | + final ReactiveRedisConnectionFactory redisConnectionFactory = mock(ReactiveRedisConnectionFactory.class); |
| 158 | + given(redisConnectionFactory.getReactiveConnection()).willReturn(redisConnection); |
| 159 | + return redisConnectionFactory; |
| 160 | + } |
124 | 161 | }
|
0 commit comments