From 88b7b7834497fbef5d1cca80f0be1ef2f2543400 Mon Sep 17 00:00:00 2001 From: Stephane Nicoll Date: Mon, 30 Mar 2020 12:58:41 +0200 Subject: [PATCH] Make sure that cassandra health check reports version Closes gh-20719 --- .../cassandra/CassandraHealthIndicator.java | 8 +---- .../CassandraHealthIndicatorTests.java | 29 +++++++------------ 2 files changed, 12 insertions(+), 25 deletions(-) diff --git a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/cassandra/CassandraHealthIndicator.java b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/cassandra/CassandraHealthIndicator.java index 4c89c8e266..175a467b6f 100644 --- a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/cassandra/CassandraHealthIndicator.java +++ b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/cassandra/CassandraHealthIndicator.java @@ -17,7 +17,6 @@ package org.springframework.boot.actuate.cassandra; import com.datastax.driver.core.ConsistencyLevel; -import com.datastax.driver.core.ResultSet; import com.datastax.driver.core.SimpleStatement; import com.datastax.driver.core.Statement; @@ -58,12 +57,7 @@ public class CassandraHealthIndicator extends AbstractHealthIndicator { @Override protected void doHealthCheck(Health.Builder builder) throws Exception { - ResultSet results = this.cassandraOperations.getCqlOperations().queryForResultSet(SELECT); - if (results.isFullyFetched()) { - builder.up(); - return; - } - String version = results.one().getString(0); + String version = this.cassandraOperations.getCqlOperations().queryForObject(SELECT, String.class); builder.up().withDetail("version", version); } diff --git a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/cassandra/CassandraHealthIndicatorTests.java b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/cassandra/CassandraHealthIndicatorTests.java index 468a2339da..3abddcc2d5 100644 --- a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/cassandra/CassandraHealthIndicatorTests.java +++ b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/cassandra/CassandraHealthIndicatorTests.java @@ -16,19 +16,19 @@ package org.springframework.boot.actuate.cassandra; -import com.datastax.driver.core.ResultSet; -import com.datastax.driver.core.Row; import com.datastax.driver.core.Statement; import org.junit.Test; import org.springframework.boot.actuate.health.Health; import org.springframework.boot.actuate.health.Status; +import org.springframework.data.cassandra.CassandraInternalException; import org.springframework.data.cassandra.core.CassandraOperations; import org.springframework.data.cassandra.core.cql.CqlOperations; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.mock; @@ -36,6 +36,7 @@ import static org.mockito.Mockito.mock; * Tests for {@link CassandraHealthIndicator}. * * @author Oleksii Bondar + * @author Stephane Nicoll */ public class CassandraHealthIndicatorTests { @@ -45,34 +46,26 @@ public class CassandraHealthIndicatorTests { } @Test - public void verifyHealthStatusWhenExhausted() { + public void healthWithCassandraUp() { CassandraOperations cassandraOperations = mock(CassandraOperations.class); CqlOperations cqlOperations = mock(CqlOperations.class); - ResultSet resultSet = mock(ResultSet.class); CassandraHealthIndicator healthIndicator = new CassandraHealthIndicator(cassandraOperations); given(cassandraOperations.getCqlOperations()).willReturn(cqlOperations); - given(cqlOperations.queryForResultSet(any(Statement.class))).willReturn(resultSet); - given(resultSet.isFullyFetched()).willReturn(true); + given(cqlOperations.queryForObject(any(Statement.class), eq(String.class))).willReturn("1.0.0"); Health health = healthIndicator.health(); assertThat(health.getStatus()).isEqualTo(Status.UP); + assertThat(health.getDetails().get("version")).isEqualTo("1.0.0"); } @Test - public void verifyHealthStatusWithVersion() { + public void healthWithCassandraDown() { CassandraOperations cassandraOperations = mock(CassandraOperations.class); - CqlOperations cqlOperations = mock(CqlOperations.class); - ResultSet resultSet = mock(ResultSet.class); - Row row = mock(Row.class); + given(cassandraOperations.getCqlOperations()).willThrow(new CassandraInternalException("Connection failed")); CassandraHealthIndicator healthIndicator = new CassandraHealthIndicator(cassandraOperations); - given(cassandraOperations.getCqlOperations()).willReturn(cqlOperations); - given(cqlOperations.queryForResultSet(any(Statement.class))).willReturn(resultSet); - given(resultSet.isFullyFetched()).willReturn(false); - given(resultSet.one()).willReturn(row); - String expectedVersion = "1.0.0"; - given(row.getString(0)).willReturn(expectedVersion); Health health = healthIndicator.health(); - assertThat(health.getStatus()).isEqualTo(Status.UP); - assertThat(health.getDetails().get("version")).isEqualTo(expectedVersion); + assertThat(health.getStatus()).isEqualTo(Status.DOWN); + assertThat(health.getDetails().get("error")) + .isEqualTo(CassandraInternalException.class.getName() + ": Connection failed"); } }