Skip to content

Commit b2332d4

Browse files
authored
adds configuration endpoints.health.discovery-client-health.enabled (#11728)
Every other health indicator had a toggle. It adds test for health indicators configuration toggles
1 parent f9e87c9 commit b2332d4

File tree

7 files changed

+252
-4
lines changed

7 files changed

+252
-4
lines changed

management/src/main/java/io/micronaut/management/health/indicator/discovery/DiscoveryClientHealthIndicator.java

+3
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,11 @@
1616
package io.micronaut.management.health.indicator.discovery;
1717

1818
import io.micronaut.context.annotation.Requires;
19+
import io.micronaut.core.util.StringUtils;
1920
import io.micronaut.discovery.DiscoveryClient;
2021
import io.micronaut.discovery.ServiceInstance;
2122
import io.micronaut.health.HealthStatus;
23+
import io.micronaut.management.endpoint.health.HealthEndpoint;
2224
import io.micronaut.management.health.indicator.HealthIndicator;
2325
import io.micronaut.management.health.indicator.HealthResult;
2426
import jakarta.inject.Singleton;
@@ -41,6 +43,7 @@
4143
*/
4244
@Requires(beans = {DiscoveryClient.class, DiscoveryClientHealthIndicatorConfiguration.class})
4345
@Singleton
46+
@Requires(property = HealthEndpoint.PREFIX + ".discovery-client-health.enabled", defaultValue = StringUtils.TRUE, notEquals = StringUtils.FALSE)
4447
public class DiscoveryClientHealthIndicator implements HealthIndicator {
4548

4649
private final DiscoveryClient discoveryClient;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package io.micronaut.management.health.indicator.client;
2+
3+
import io.micronaut.context.ApplicationContext;
4+
import io.micronaut.core.util.StringUtils;
5+
import io.micronaut.management.endpoint.health.HealthEndpoint;
6+
import io.micronaut.management.health.aggregator.DefaultHealthAggregator;
7+
import io.micronaut.management.health.indicator.discovery.DiscoveryClientHealthIndicator;
8+
import io.micronaut.management.health.indicator.diskspace.DiskSpaceIndicator;
9+
import org.junit.jupiter.api.Test;
10+
11+
import java.util.Map;
12+
import java.util.function.Consumer;
13+
14+
import static org.junit.jupiter.api.Assertions.assertFalse;
15+
import static org.junit.jupiter.api.Assertions.assertTrue;
16+
17+
class ServiceHttpClientHealthIndicatorTest {
18+
19+
@Test
20+
void serviceHttpClientHealthIndicatorViaConfiguration() {
21+
Consumer<ApplicationContext> healthBeansConsumer = context -> {
22+
assertTrue(context.containsBean(HealthEndpoint.class));
23+
assertTrue(context.containsBean(DefaultHealthAggregator.class));
24+
};
25+
Map<String, Object> configuration = Map.of("endpoints.health.service-http-client.enabled", StringUtils.FALSE);
26+
try (ApplicationContext context = ApplicationContext.run(configuration)) {
27+
healthBeansConsumer.accept(context);
28+
assertFalse(context.containsBean(ServiceHttpClientHealthIndicator.class));
29+
}
30+
// service http client health indicator is disabled by default
31+
try (ApplicationContext context = ApplicationContext.run()) {
32+
healthBeansConsumer.accept(context);
33+
assertFalse(context.containsBean(ServiceHttpClientHealthIndicator.class));
34+
}
35+
}
36+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package io.micronaut.management.health.indicator.discovery;
2+
3+
import io.micronaut.context.ApplicationContext;
4+
import io.micronaut.core.util.StringUtils;
5+
import io.micronaut.management.endpoint.health.HealthEndpoint;
6+
import io.micronaut.management.health.aggregator.DefaultHealthAggregator;
7+
import io.micronaut.management.health.indicator.diskspace.DiskSpaceIndicator;
8+
import org.junit.jupiter.api.Test;
9+
10+
import java.util.Map;
11+
import java.util.function.Consumer;
12+
13+
import static org.junit.jupiter.api.Assertions.assertFalse;
14+
import static org.junit.jupiter.api.Assertions.assertTrue;
15+
16+
class DiscoveryClientHealthIndicatorTest {
17+
18+
@Test
19+
void disableDiscoveryClientHealthIndicatorViaConfiguration() {
20+
Consumer<ApplicationContext> healthBeansConsumer = context -> {
21+
assertTrue(context.containsBean(HealthEndpoint.class));
22+
assertTrue(context.containsBean(DefaultHealthAggregator.class));
23+
};
24+
Map<String, Object> configuration = Map.of("endpoints.health.discovery-client-health.enabled", StringUtils.FALSE);
25+
try (ApplicationContext context = ApplicationContext.run(configuration)) {
26+
healthBeansConsumer.accept(context);
27+
assertFalse(context.containsBean(DiscoveryClientHealthIndicator.class));
28+
}
29+
configuration = Map.of("endpoints.health.discovery-client-health.enabled", StringUtils.TRUE);
30+
try (ApplicationContext context = ApplicationContext.run(configuration)) {
31+
healthBeansConsumer.accept(context);
32+
assertTrue(context.containsBean(DiscoveryClientHealthIndicator.class));
33+
}
34+
// enabled by default
35+
try (ApplicationContext context = ApplicationContext.run()) {
36+
healthBeansConsumer.accept(context);
37+
assertTrue(context.containsBean(DiscoveryClientHealthIndicator.class));
38+
}
39+
}
40+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package io.micronaut.management.health.indicator.diskspace;
2+
3+
import io.micronaut.context.ApplicationContext;
4+
import io.micronaut.core.util.StringUtils;
5+
import io.micronaut.management.endpoint.health.HealthEndpoint;
6+
import io.micronaut.management.health.aggregator.DefaultHealthAggregator;
7+
import io.micronaut.management.health.indicator.discovery.DiscoveryClientHealthIndicator;
8+
import org.junit.jupiter.api.Test;
9+
10+
import java.util.Map;
11+
import java.util.function.Consumer;
12+
13+
import static org.junit.jupiter.api.Assertions.assertFalse;
14+
import static org.junit.jupiter.api.Assertions.assertTrue;
15+
16+
class DiskSpaceIndicatorTest {
17+
18+
@Test
19+
void diskSpaceHealthIndicatorViaConfiguration() {
20+
Consumer<ApplicationContext> healthBeansConsumer = context -> {
21+
assertTrue(context.containsBean(HealthEndpoint.class));
22+
assertTrue(context.containsBean(DefaultHealthAggregator.class));
23+
};
24+
Map<String, Object> configuration = Map.of("endpoints.health.disk-space.enabled", StringUtils.FALSE);
25+
try (ApplicationContext context = ApplicationContext.run(configuration)) {
26+
healthBeansConsumer.accept(context);
27+
assertFalse(context.containsBean(DiskSpaceIndicator.class));
28+
}
29+
// enabled by default
30+
try (ApplicationContext context = ApplicationContext.run()) {
31+
healthBeansConsumer.accept(context);
32+
assertTrue(context.containsBean(DiskSpaceIndicator.class));
33+
}
34+
}
35+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
package io.micronaut.management.health.indicator.jdbc;
2+
3+
import io.micronaut.context.ApplicationContext;
4+
import io.micronaut.context.annotation.Property;
5+
import io.micronaut.context.annotation.Requires;
6+
import io.micronaut.core.util.StringUtils;
7+
import jakarta.inject.Singleton;
8+
import org.junit.jupiter.api.Test;
9+
10+
import javax.sql.DataSource;
11+
import java.io.PrintWriter;
12+
import java.sql.Connection;
13+
import java.sql.SQLException;
14+
import java.sql.SQLFeatureNotSupportedException;
15+
import java.util.Map;
16+
import java.util.logging.Logger;
17+
18+
import static org.junit.jupiter.api.Assertions.assertFalse;
19+
import static org.junit.jupiter.api.Assertions.assertTrue;
20+
21+
class JdbcIndicatorTest {
22+
23+
@Test
24+
void jdbcHealthIndicatorViaConfiguration() {
25+
Map<String, Object> configuration = Map.of(
26+
"endpoints.health.jdbc.enabled", StringUtils.FALSE,
27+
"spec.name", "JdbcIndicatorTest");
28+
try (ApplicationContext context = ApplicationContext.run(configuration)) {
29+
assertFalse(context.containsBean(JdbcIndicator.class));
30+
}
31+
// enabled by default
32+
configuration = Map.of("spec.name", "JdbcIndicatorTest");
33+
try (ApplicationContext context = ApplicationContext.run(configuration)) {
34+
assertTrue(context.containsBean(JdbcIndicator.class));
35+
}
36+
}
37+
38+
@Requires(property = "spec.name", value = "JdbcIndicatorTest")
39+
@Singleton
40+
static class DataSourceMock implements DataSource {
41+
42+
@Override
43+
public Connection getConnection() throws SQLException {
44+
return null;
45+
}
46+
47+
@Override
48+
public Connection getConnection(String username, String password) throws SQLException {
49+
return null;
50+
}
51+
52+
@Override
53+
public PrintWriter getLogWriter() throws SQLException {
54+
return null;
55+
}
56+
57+
@Override
58+
public void setLogWriter(PrintWriter out) throws SQLException {
59+
60+
}
61+
62+
@Override
63+
public void setLoginTimeout(int seconds) throws SQLException {
64+
65+
}
66+
67+
@Override
68+
public int getLoginTimeout() throws SQLException {
69+
return 0;
70+
}
71+
72+
@Override
73+
public Logger getParentLogger() throws SQLFeatureNotSupportedException {
74+
return null;
75+
}
76+
77+
@Override
78+
public <T> T unwrap(Class<T> iface) throws SQLException {
79+
return null;
80+
}
81+
82+
@Override
83+
public boolean isWrapperFor(Class<?> iface) throws SQLException {
84+
return false;
85+
}
86+
}
87+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package io.micronaut.management.health.indicator.service;
2+
3+
import io.micronaut.context.ApplicationContext;
4+
import io.micronaut.core.util.StringUtils;
5+
import io.micronaut.management.endpoint.health.HealthEndpoint;
6+
import io.micronaut.management.health.aggregator.DefaultHealthAggregator;
7+
import io.micronaut.management.health.indicator.jdbc.JdbcIndicator;
8+
import org.junit.jupiter.api.Test;
9+
10+
import java.util.Map;
11+
import java.util.function.Consumer;
12+
13+
import static org.junit.jupiter.api.Assertions.assertFalse;
14+
import static org.junit.jupiter.api.Assertions.assertTrue;
15+
16+
class ServiceReadyIndicatorTest {
17+
18+
@Test
19+
void serviceReadyHealthIndicatorViaConfiguration() {
20+
Consumer<ApplicationContext> healthBeansConsumer = context -> {
21+
assertTrue(context.containsBean(HealthEndpoint.class));
22+
assertTrue(context.containsBean(DefaultHealthAggregator.class));
23+
};
24+
Map<String, Object> configuration = Map.of("endpoints.health.service-ready-indicator-enabled", StringUtils.FALSE);
25+
try (ApplicationContext context = ApplicationContext.run(configuration)) {
26+
healthBeansConsumer.accept(context);
27+
assertFalse(context.containsBean(ServiceReadyHealthIndicator.class));
28+
}
29+
// enabled by default
30+
try (ApplicationContext context = ApplicationContext.run()) {
31+
healthBeansConsumer.accept(context);
32+
assertTrue(context.containsBean(ServiceReadyHealthIndicator.class));
33+
}
34+
}
35+
}

management/src/test/java/io/micronaut/management/health/indicator/threads/DeadlockedThreadsHealthIndicatorTest.java

+16-4
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
package io.micronaut.management.health.indicator.threads;
22

33
import io.micronaut.context.ApplicationContext;
4-
import io.micronaut.context.annotation.Context;
54
import io.micronaut.context.annotation.Requires;
65
import io.micronaut.context.event.StartupEvent;
76
import io.micronaut.core.type.Argument;
8-
import io.micronaut.health.HealthStatus;
7+
import io.micronaut.core.util.StringUtils;
98
import io.micronaut.http.HttpRequest;
109
import io.micronaut.http.HttpStatus;
1110
import io.micronaut.http.client.BlockingHttpClient;
1211
import io.micronaut.http.client.HttpClient;
1312
import io.micronaut.http.client.exceptions.HttpClientResponseException;
1413
import io.micronaut.management.endpoint.health.DetailsVisibility;
15-
import io.micronaut.management.endpoint.health.HealthLevelOfDetail;
14+
import io.micronaut.management.endpoint.health.HealthEndpoint;
15+
import io.micronaut.management.health.aggregator.DefaultHealthAggregator;
1616
import io.micronaut.runtime.server.EmbeddedServer;
1717
import jakarta.inject.Singleton;
1818
import org.junit.jupiter.api.Test;
@@ -22,11 +22,23 @@
2222
import java.util.List;
2323
import java.util.Map;
2424
import java.util.Optional;
25+
import java.util.function.Consumer;
2526

2627
import static org.awaitility.Awaitility.await;
2728
import static org.junit.jupiter.api.Assertions.*;
2829

2930
class DeadlockedThreadsHealthIndicatorTest {
31+
@Test
32+
void diskSpaceHealthIndicatorViaConfiguration() {
33+
Map<String, Object> configuration = Map.of("endpoints.health.deadlocked-threads.enabled", StringUtils.FALSE);
34+
try (ApplicationContext context = ApplicationContext.run(configuration)) {
35+
assertFalse(context.containsBean(DeadlockedThreadsHealthIndicator.class));
36+
}
37+
// enabled by default
38+
try (ApplicationContext context = ApplicationContext.run()) {
39+
assertTrue(context.containsBean(DeadlockedThreadsHealthIndicator.class));
40+
}
41+
}
3042

3143
@Test
3244
void testDeadlockedThreadsHealthIndicator() {
@@ -122,4 +134,4 @@ public void onApplicationEvent(StartupEvent event) {
122134
thread2.start();
123135
}
124136
}
125-
}
137+
}

0 commit comments

Comments
 (0)