From 4fa92c869d08e094d13377d9023c5e6cfdf6dfec Mon Sep 17 00:00:00 2001 From: Juan C Galvis <8420868+juancgalvis@users.noreply.github.com> Date: Tue, 30 Dec 2025 11:20:28 -0500 Subject: [PATCH] fix(health): fix null exception when DOWN --- .../starter/config/health/RCHealthIndicator.java | 8 ++++++-- .../health/ReactiveCommonsHealthIndicator.java | 3 ++- .../health/ReactiveCommonsHealthIndicatorTest.java | 13 +++++++++++++ 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/starters/async-commons-starter/src/main/java/org/reactivecommons/async/starter/config/health/RCHealthIndicator.java b/starters/async-commons-starter/src/main/java/org/reactivecommons/async/starter/config/health/RCHealthIndicator.java index da158e66..309f73dd 100644 --- a/starters/async-commons-starter/src/main/java/org/reactivecommons/async/starter/config/health/RCHealthIndicator.java +++ b/starters/async-commons-starter/src/main/java/org/reactivecommons/async/starter/config/health/RCHealthIndicator.java @@ -5,9 +5,13 @@ public abstract class RCHealthIndicator { public Mono health() { - return doHealthCheck(RCHealth.builder()) + var builder = RCHealth.builder(); + return doHealthCheck(builder) .onErrorResume(e -> - Mono.just(RCHealth.builder().down().withDetail("error", e.getMessage()).build()) + Mono.just(builder + .down() + .withDetail("error", e.getMessage()) + .build()) ); } diff --git a/starters/async-commons-starter/src/main/java/org/reactivecommons/async/starter/config/health/ReactiveCommonsHealthIndicator.java b/starters/async-commons-starter/src/main/java/org/reactivecommons/async/starter/config/health/ReactiveCommonsHealthIndicator.java index 7e30eaaf..8f35b758 100644 --- a/starters/async-commons-starter/src/main/java/org/reactivecommons/async/starter/config/health/ReactiveCommonsHealthIndicator.java +++ b/starters/async-commons-starter/src/main/java/org/reactivecommons/async/starter/config/health/ReactiveCommonsHealthIndicator.java @@ -14,6 +14,7 @@ public class ReactiveCommonsHealthIndicator extends AbstractReactiveHealthIndicator { public static final String DOMAIN = "domain"; public static final String VERSION = "version"; + public static final String UNKNOWN = "unknown"; private final ConnectionManager manager; @Override @@ -29,7 +30,7 @@ protected Mono doHealthCheck(Health.Builder builder) { } private Health.Builder reduceHealth(Health.Builder builder, RCHealth health) { - String domain = health.details().get(DOMAIN).toString(); + String domain = health.details().getOrDefault(DOMAIN, UNKNOWN).toString(); if (health.status().equals(RCHealth.Status.DOWN)) { log.error("Broker of domain {} is down", domain); return builder.down().withDetail(domain, health.details()); diff --git a/starters/async-commons-starter/src/test/java/org/reactivecommons/async/starter/config/health/ReactiveCommonsHealthIndicatorTest.java b/starters/async-commons-starter/src/test/java/org/reactivecommons/async/starter/config/health/ReactiveCommonsHealthIndicatorTest.java index ead4eb1f..369fe2ed 100644 --- a/starters/async-commons-starter/src/test/java/org/reactivecommons/async/starter/config/health/ReactiveCommonsHealthIndicatorTest.java +++ b/starters/async-commons-starter/src/test/java/org/reactivecommons/async/starter/config/health/ReactiveCommonsHealthIndicatorTest.java @@ -71,4 +71,17 @@ void shouldBeDown() { .expectNextMatches(health -> health.getStatus().toString().equals("DOWN")) .verifyComplete(); } + + @Test + void shouldBeDownAndSetDomain() { + // Arrange + when(brokerProvider.healthCheck()).thenReturn(Mono.just(RCHealth.builder().down().build())); + when(brokerProvider2.healthCheck()).thenReturn(Mono.just(RCHealth.builder().up().build())); + // Act + Mono flow = healthIndicator.health(); + // Assert + StepVerifier.create(flow) + .expectNextMatches(health -> health.getStatus().toString().equals("DOWN")) + .verifyComplete(); + } }