package io.dropwizard.metrics.health; import org.junit.Test; import io.dropwizard.metrics.health.HealthCheck; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; public class HealthCheckTest { private static class ExampleHealthCheck extends HealthCheck { private final HealthCheck underlying; private ExampleHealthCheck(HealthCheck underlying) { this.underlying = underlying; } @Override protected Result check() throws Exception { return underlying.execute(); } } private final HealthCheck underlying = mock(HealthCheck.class); private final HealthCheck healthCheck = new ExampleHealthCheck(underlying); @Test public void canHaveHealthyResults() throws Exception { final HealthCheck.Result result = HealthCheck.Result.healthy(); assertThat(result.isHealthy()) .isTrue(); assertThat(result.getMessage()) .isNull(); assertThat(result.getError()) .isNull(); } @Test public void canHaveHealthyResultsWithMessages() throws Exception { final HealthCheck.Result result = HealthCheck.Result.healthy("woo"); assertThat(result.isHealthy()) .isTrue(); assertThat(result.getMessage()) .isEqualTo("woo"); assertThat(result.getError()) .isNull(); } @Test public void canHaveHealthyResultsWithFormattedMessages() throws Exception { final HealthCheck.Result result = HealthCheck.Result.healthy("foo %s", "bar"); assertThat(result.isHealthy()) .isTrue(); assertThat(result.getMessage()) .isEqualTo("foo bar"); assertThat(result.getError()) .isNull(); } @Test public void canHaveUnhealthyResults() throws Exception { final HealthCheck.Result result = HealthCheck.Result.unhealthy("bad"); assertThat(result.isHealthy()) .isFalse(); assertThat(result.getMessage()) .isEqualTo("bad"); assertThat(result.getError()) .isNull(); } @Test public void canHaveUnhealthyResultsWithFormattedMessages() throws Exception { final HealthCheck.Result result = HealthCheck.Result.unhealthy("foo %s %d", "bar", 123); assertThat(result.isHealthy()) .isFalse(); assertThat(result.getMessage()) .isEqualTo("foo bar 123"); assertThat(result.getError()) .isNull(); } @Test public void canHaveUnhealthyResultsWithExceptions() throws Exception { final RuntimeException e = mock(RuntimeException.class); when(e.getMessage()).thenReturn("oh noes"); final HealthCheck.Result result = HealthCheck.Result.unhealthy(e); assertThat(result.isHealthy()) .isFalse(); assertThat(result.getMessage()) .isEqualTo("oh noes"); assertThat(result.getError()) .isEqualTo(e); } @Test public void returnsResultsWhenExecuted() throws Exception { final HealthCheck.Result result = mock(HealthCheck.Result.class); when(underlying.execute()).thenReturn(result); assertThat(healthCheck.execute()) .isEqualTo(result); } @Test public void wrapsExceptionsWhenExecuted() throws Exception { final RuntimeException e = mock(RuntimeException.class); when(e.getMessage()).thenReturn("oh noes"); when(underlying.execute()).thenThrow(e); assertThat(healthCheck.execute()) .isEqualTo(HealthCheck.Result.unhealthy(e)); } }