From f767cb1c8ddeb038fe282da7cf8bddc648ead14e Mon Sep 17 00:00:00 2001 From: allanmckenzie Date: Thu, 16 Jun 2022 13:17:09 +0100 Subject: [PATCH] Move healthcheck database table checker into microservices-framework --- CHANGELOG.md | 4 + healthchecks/pom.xml | 11 --- .../database/DatabaseTableLister.java | 40 ---------- .../healthcheck/database/TableChecker.java | 30 ------- .../healthchecks/EventStoreHealthcheck.java | 2 +- .../healthchecks/FileStoreHealthcheck.java | 2 +- .../healthchecks/JobStoreHealthcheck.java | 2 +- .../SystemDatabaseHealthcheck.java | 2 +- .../healthchecks/ViewStoreHealthcheck.java | 2 +- .../database/DatabaseTableListerIT.java | 59 -------------- .../database/TableCheckerTest.java | 80 ------------------- .../EventStoreHealthcheckTest.java | 2 +- .../FileStoreHealthcheckTest.java | 2 +- .../healthchecks/JobStoreHealthcheckTest.java | 2 +- .../SystemDatabaseHealthcheckTest.java | 2 +- .../ViewStoreHealthcheckTest.java | 2 +- pom.xml | 2 +- 17 files changed, 15 insertions(+), 231 deletions(-) delete mode 100644 healthchecks/src/main/java/uk/gov/justice/services/healthcheck/database/DatabaseTableLister.java delete mode 100644 healthchecks/src/main/java/uk/gov/justice/services/healthcheck/database/TableChecker.java delete mode 100644 healthchecks/src/test/java/uk/gov/justice/services/healthcheck/database/DatabaseTableListerIT.java delete mode 100644 healthchecks/src/test/java/uk/gov/justice/services/healthcheck/database/TableCheckerTest.java diff --git a/CHANGELOG.md b/CHANGELOG.md index c26d5aeb9..c49d98732 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,10 @@ on [Keep a CHANGELOG](http://keepachangelog.com/). This project adheres to ## [Unreleased] +## [11.0.0-M19] - 2022-06-16 +### Changed +- Moved healthcheck database table checker into microservices-framework + ## [11.0.0-M18] - 2022-06-08 ### Changed - Update framework.version to 11.0.0-M16 diff --git a/healthchecks/pom.xml b/healthchecks/pom.xml index 20569e3d4..0e788f179 100644 --- a/healthchecks/pom.xml +++ b/healthchecks/pom.xml @@ -58,16 +58,5 @@ hamcrest-library test - - uk.gov.justice.services - test-utils-framework-persistence - test - - - uk.gov.justice.event-store - event-repository-liquibase - ${project.version} - test - \ No newline at end of file diff --git a/healthchecks/src/main/java/uk/gov/justice/services/healthcheck/database/DatabaseTableLister.java b/healthchecks/src/main/java/uk/gov/justice/services/healthcheck/database/DatabaseTableLister.java deleted file mode 100644 index 6850cc629..000000000 --- a/healthchecks/src/main/java/uk/gov/justice/services/healthcheck/database/DatabaseTableLister.java +++ /dev/null @@ -1,40 +0,0 @@ -package uk.gov.justice.services.healthcheck.database; - -import static java.util.Collections.unmodifiableList; - -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.ArrayList; -import java.util.List; - -import javax.sql.DataSource; - -public class DatabaseTableLister { - - private final String SQL = "SELECT tablename " + - "FROM " + - "pg_catalog.pg_tables " + - "WHERE " + - " schemaname != 'pg_catalog' " + - "AND schemaname != 'information_schema' " + - "AND tablename != 'databasechangelog' " + - "AND tablename != 'databasechangeloglock';"; - - public List listTables(final DataSource dataSource) throws SQLException { - - try (final Connection connection = dataSource.getConnection(); - final PreparedStatement preparedStatement = connection.prepareStatement(SQL); - final ResultSet resultSet = preparedStatement.executeQuery()) { - - final List tableNames = new ArrayList<>(); - while (resultSet.next()) { - final String tableName = resultSet.getString(1); - tableNames.add(tableName); - } - - return unmodifiableList(tableNames); - } - } -} diff --git a/healthchecks/src/main/java/uk/gov/justice/services/healthcheck/database/TableChecker.java b/healthchecks/src/main/java/uk/gov/justice/services/healthcheck/database/TableChecker.java deleted file mode 100644 index 9e7e95306..000000000 --- a/healthchecks/src/main/java/uk/gov/justice/services/healthcheck/database/TableChecker.java +++ /dev/null @@ -1,30 +0,0 @@ -package uk.gov.justice.services.healthcheck.database; - -import static java.lang.String.format; -import static uk.gov.justice.services.healthcheck.api.HealthcheckResult.failure; -import static uk.gov.justice.services.healthcheck.api.HealthcheckResult.success; - -import uk.gov.justice.services.healthcheck.api.HealthcheckResult; - -import java.sql.SQLException; -import java.util.List; - -import javax.inject.Inject; -import javax.sql.DataSource; - -public class TableChecker { - - @Inject - private DatabaseTableLister databaseTableLister; - - public HealthcheckResult checkTables(final List expectedTableNames, final DataSource dataSource) throws SQLException { - - final List existingTables = databaseTableLister.listTables(dataSource); - - if(existingTables.containsAll(expectedTableNames)) { - return success(); - } - - return failure(format("Tables missing from database. Expected '%s' found '%s'", expectedTableNames, existingTables)); - } -} diff --git a/healthchecks/src/main/java/uk/gov/justice/services/healthcheck/healthchecks/EventStoreHealthcheck.java b/healthchecks/src/main/java/uk/gov/justice/services/healthcheck/healthchecks/EventStoreHealthcheck.java index f4f1a713c..bf2d120b8 100644 --- a/healthchecks/src/main/java/uk/gov/justice/services/healthcheck/healthchecks/EventStoreHealthcheck.java +++ b/healthchecks/src/main/java/uk/gov/justice/services/healthcheck/healthchecks/EventStoreHealthcheck.java @@ -7,7 +7,7 @@ import uk.gov.justice.services.eventsourcing.source.core.EventStoreDataSourceProvider; import uk.gov.justice.services.healthcheck.api.Healthcheck; import uk.gov.justice.services.healthcheck.api.HealthcheckResult; -import uk.gov.justice.services.healthcheck.database.TableChecker; +import uk.gov.justice.services.healthcheck.utils.database.TableChecker; import java.sql.SQLException; import java.util.List; diff --git a/healthchecks/src/main/java/uk/gov/justice/services/healthcheck/healthchecks/FileStoreHealthcheck.java b/healthchecks/src/main/java/uk/gov/justice/services/healthcheck/healthchecks/FileStoreHealthcheck.java index f46b914da..98940dec4 100644 --- a/healthchecks/src/main/java/uk/gov/justice/services/healthcheck/healthchecks/FileStoreHealthcheck.java +++ b/healthchecks/src/main/java/uk/gov/justice/services/healthcheck/healthchecks/FileStoreHealthcheck.java @@ -8,7 +8,7 @@ import uk.gov.justice.services.fileservice.repository.DataSourceProvider; import uk.gov.justice.services.healthcheck.api.Healthcheck; import uk.gov.justice.services.healthcheck.api.HealthcheckResult; -import uk.gov.justice.services.healthcheck.database.TableChecker; +import uk.gov.justice.services.healthcheck.utils.database.TableChecker; import java.sql.SQLException; import java.util.List; diff --git a/healthchecks/src/main/java/uk/gov/justice/services/healthcheck/healthchecks/JobStoreHealthcheck.java b/healthchecks/src/main/java/uk/gov/justice/services/healthcheck/healthchecks/JobStoreHealthcheck.java index 2c28696ee..d94646fe6 100644 --- a/healthchecks/src/main/java/uk/gov/justice/services/healthcheck/healthchecks/JobStoreHealthcheck.java +++ b/healthchecks/src/main/java/uk/gov/justice/services/healthcheck/healthchecks/JobStoreHealthcheck.java @@ -6,7 +6,7 @@ import uk.gov.justice.services.healthcheck.api.Healthcheck; import uk.gov.justice.services.healthcheck.api.HealthcheckResult; -import uk.gov.justice.services.healthcheck.database.TableChecker; +import uk.gov.justice.services.healthcheck.utils.database.TableChecker; import uk.gov.moj.cpp.jobstore.persistence.JdbcJobStoreDataSourceProvider; import java.sql.SQLException; diff --git a/healthchecks/src/main/java/uk/gov/justice/services/healthcheck/healthchecks/SystemDatabaseHealthcheck.java b/healthchecks/src/main/java/uk/gov/justice/services/healthcheck/healthchecks/SystemDatabaseHealthcheck.java index 734556c6f..d5711c910 100644 --- a/healthchecks/src/main/java/uk/gov/justice/services/healthcheck/healthchecks/SystemDatabaseHealthcheck.java +++ b/healthchecks/src/main/java/uk/gov/justice/services/healthcheck/healthchecks/SystemDatabaseHealthcheck.java @@ -6,7 +6,7 @@ import uk.gov.justice.services.healthcheck.api.Healthcheck; import uk.gov.justice.services.healthcheck.api.HealthcheckResult; -import uk.gov.justice.services.healthcheck.database.TableChecker; +import uk.gov.justice.services.healthcheck.utils.database.TableChecker; import uk.gov.justice.services.jdbc.persistence.SystemJdbcDataSourceProvider; import java.sql.SQLException; diff --git a/healthchecks/src/main/java/uk/gov/justice/services/healthcheck/healthchecks/ViewStoreHealthcheck.java b/healthchecks/src/main/java/uk/gov/justice/services/healthcheck/healthchecks/ViewStoreHealthcheck.java index aec2dcf4f..cc2697e2a 100644 --- a/healthchecks/src/main/java/uk/gov/justice/services/healthcheck/healthchecks/ViewStoreHealthcheck.java +++ b/healthchecks/src/main/java/uk/gov/justice/services/healthcheck/healthchecks/ViewStoreHealthcheck.java @@ -6,7 +6,7 @@ import uk.gov.justice.services.healthcheck.api.Healthcheck; import uk.gov.justice.services.healthcheck.api.HealthcheckResult; -import uk.gov.justice.services.healthcheck.database.TableChecker; +import uk.gov.justice.services.healthcheck.utils.database.TableChecker; import uk.gov.justice.services.jdbc.persistence.ViewStoreJdbcDataSourceProvider; import java.sql.SQLException; diff --git a/healthchecks/src/test/java/uk/gov/justice/services/healthcheck/database/DatabaseTableListerIT.java b/healthchecks/src/test/java/uk/gov/justice/services/healthcheck/database/DatabaseTableListerIT.java deleted file mode 100644 index 67cf24007..000000000 --- a/healthchecks/src/test/java/uk/gov/justice/services/healthcheck/database/DatabaseTableListerIT.java +++ /dev/null @@ -1,59 +0,0 @@ -package uk.gov.justice.services.healthcheck.database; - -import static org.hamcrest.CoreMatchers.hasItem; -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.MatcherAssert.assertThat; - -import uk.gov.justice.services.test.utils.core.jdbc.LiquibaseDatabaseBootstrapper; -import uk.gov.justice.services.test.utils.persistence.TestJdbcDataSourceProvider; - -import java.sql.Connection; -import java.util.List; - -import javax.sql.DataSource; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.runners.MockitoJUnitRunner; - - -@RunWith(MockitoJUnitRunner.class) -public class DatabaseTableListerIT { - - private static final String LIQUIBASE_EVENT_STORE_DB_CHANGELOG_XML = "liquibase/event-store-db-changelog.xml"; - - private final TestJdbcDataSourceProvider testJdbcDataSourceProvider = new TestJdbcDataSourceProvider(); - - private DatabaseTableLister databaseTableLister = new DatabaseTableLister(); - - - private final LiquibaseDatabaseBootstrapper liquibaseDatabaseBootstrapper = new LiquibaseDatabaseBootstrapper(); - - - @Before - public void setupEventstoreDatabase() throws Exception { - - try (final Connection connection = testJdbcDataSourceProvider.getEventStoreDataSource("framework").getConnection()) { - liquibaseDatabaseBootstrapper.bootstrap( - LIQUIBASE_EVENT_STORE_DB_CHANGELOG_XML, - connection); - } - } - - - @Test - public void shouldListAllTablesForGivenDatasourceExcludingLiquibaseTables() throws Exception { - - final DataSource eventStoreDataSource = testJdbcDataSourceProvider.getEventStoreDataSource("framework"); - final List tableNames = databaseTableLister.listTables(eventStoreDataSource); - - assertThat(tableNames.size(), is(5)); - - assertThat(tableNames, hasItem("event_stream")); - assertThat(tableNames, hasItem("event_log")); - assertThat(tableNames, hasItem("published_event")); - assertThat(tableNames, hasItem("publish_queue")); - assertThat(tableNames, hasItem("pre_publish_queue")); - } -} \ No newline at end of file diff --git a/healthchecks/src/test/java/uk/gov/justice/services/healthcheck/database/TableCheckerTest.java b/healthchecks/src/test/java/uk/gov/justice/services/healthcheck/database/TableCheckerTest.java deleted file mode 100644 index 6a0d2fd49..000000000 --- a/healthchecks/src/test/java/uk/gov/justice/services/healthcheck/database/TableCheckerTest.java +++ /dev/null @@ -1,80 +0,0 @@ -package uk.gov.justice.services.healthcheck.database; - -import static java.util.Optional.empty; -import static java.util.Optional.of; -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -import uk.gov.justice.services.healthcheck.api.HealthcheckResult; - -import java.util.List; - -import javax.sql.DataSource; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.runners.MockitoJUnitRunner; - - -@RunWith(MockitoJUnitRunner.class) -public class TableCheckerTest { - - @Mock - private DatabaseTableLister databaseTableLister; - - @InjectMocks - private TableChecker tableChecker; - - @Test - public void shouldPassHealthcheckIfAllExpectedTablesAreFound() throws Exception { - - final List expectedTableNames = List.of( - "table_1", - "table_2", - "table_3" - ); - - final List actualTableNames = List.of( - "table_1", - "table_2", - "table_3" - ); - - final DataSource dataSource = mock(DataSource.class); - - when(databaseTableLister.listTables(dataSource)).thenReturn(actualTableNames); - - final HealthcheckResult healthcheckResult = tableChecker.checkTables(expectedTableNames, dataSource); - - assertThat(healthcheckResult.isPassed(), is(true)); - assertThat(healthcheckResult.getErrorMessage(), is(empty())); - } - - @Test - public void shouldFailHealthcheckIfAllExpectedTablesAreFound() throws Exception { - - final List expectedTableNames = List.of( - "table_1", - "table_2", - "table_3" - ); - - final List actualTableNames = List.of( - "table_1", - "table_3" - ); - - final DataSource dataSource = mock(DataSource.class); - - when(databaseTableLister.listTables(dataSource)).thenReturn(actualTableNames); - - final HealthcheckResult healthcheckResult = tableChecker.checkTables(expectedTableNames, dataSource); - - assertThat(healthcheckResult.isPassed(), is(false)); - assertThat(healthcheckResult.getErrorMessage(), is(of("Tables missing from database. Expected '[table_1, table_2, table_3]' found '[table_1, table_3]'"))); - } -} \ No newline at end of file diff --git a/healthchecks/src/test/java/uk/gov/justice/services/healthcheck/healthchecks/EventStoreHealthcheckTest.java b/healthchecks/src/test/java/uk/gov/justice/services/healthcheck/healthchecks/EventStoreHealthcheckTest.java index b418fbb8d..a2e3edeec 100644 --- a/healthchecks/src/test/java/uk/gov/justice/services/healthcheck/healthchecks/EventStoreHealthcheckTest.java +++ b/healthchecks/src/test/java/uk/gov/justice/services/healthcheck/healthchecks/EventStoreHealthcheckTest.java @@ -10,7 +10,7 @@ import uk.gov.justice.services.eventsourcing.source.core.EventStoreDataSourceProvider; import uk.gov.justice.services.healthcheck.api.HealthcheckResult; -import uk.gov.justice.services.healthcheck.database.TableChecker; +import uk.gov.justice.services.healthcheck.utils.database.TableChecker; import java.sql.SQLException; diff --git a/healthchecks/src/test/java/uk/gov/justice/services/healthcheck/healthchecks/FileStoreHealthcheckTest.java b/healthchecks/src/test/java/uk/gov/justice/services/healthcheck/healthchecks/FileStoreHealthcheckTest.java index 691fc58ae..00bf269ae 100644 --- a/healthchecks/src/test/java/uk/gov/justice/services/healthcheck/healthchecks/FileStoreHealthcheckTest.java +++ b/healthchecks/src/test/java/uk/gov/justice/services/healthcheck/healthchecks/FileStoreHealthcheckTest.java @@ -11,7 +11,7 @@ import uk.gov.justice.services.fileservice.api.FileServiceException; import uk.gov.justice.services.fileservice.repository.DataSourceProvider; import uk.gov.justice.services.healthcheck.api.HealthcheckResult; -import uk.gov.justice.services.healthcheck.database.TableChecker; +import uk.gov.justice.services.healthcheck.utils.database.TableChecker; import javax.sql.DataSource; diff --git a/healthchecks/src/test/java/uk/gov/justice/services/healthcheck/healthchecks/JobStoreHealthcheckTest.java b/healthchecks/src/test/java/uk/gov/justice/services/healthcheck/healthchecks/JobStoreHealthcheckTest.java index 4fb563b72..af75149e8 100644 --- a/healthchecks/src/test/java/uk/gov/justice/services/healthcheck/healthchecks/JobStoreHealthcheckTest.java +++ b/healthchecks/src/test/java/uk/gov/justice/services/healthcheck/healthchecks/JobStoreHealthcheckTest.java @@ -9,7 +9,7 @@ import static uk.gov.justice.services.healthcheck.healthchecks.JobStoreHealthcheck.JOB_STORE_TABLE_NAMES; import uk.gov.justice.services.healthcheck.api.HealthcheckResult; -import uk.gov.justice.services.healthcheck.database.TableChecker; +import uk.gov.justice.services.healthcheck.utils.database.TableChecker; import uk.gov.moj.cpp.jobstore.persistence.JdbcJobStoreDataSourceProvider; import java.sql.SQLException; diff --git a/healthchecks/src/test/java/uk/gov/justice/services/healthcheck/healthchecks/SystemDatabaseHealthcheckTest.java b/healthchecks/src/test/java/uk/gov/justice/services/healthcheck/healthchecks/SystemDatabaseHealthcheckTest.java index e1b34185f..e2dc86ed4 100644 --- a/healthchecks/src/test/java/uk/gov/justice/services/healthcheck/healthchecks/SystemDatabaseHealthcheckTest.java +++ b/healthchecks/src/test/java/uk/gov/justice/services/healthcheck/healthchecks/SystemDatabaseHealthcheckTest.java @@ -9,7 +9,7 @@ import static uk.gov.justice.services.healthcheck.healthchecks.SystemDatabaseHealthcheck.SYSTEM_DATABASE_TABLE_NAMES; import uk.gov.justice.services.healthcheck.api.HealthcheckResult; -import uk.gov.justice.services.healthcheck.database.TableChecker; +import uk.gov.justice.services.healthcheck.utils.database.TableChecker; import uk.gov.justice.services.jdbc.persistence.SystemJdbcDataSourceProvider; import java.sql.SQLException; diff --git a/healthchecks/src/test/java/uk/gov/justice/services/healthcheck/healthchecks/ViewStoreHealthcheckTest.java b/healthchecks/src/test/java/uk/gov/justice/services/healthcheck/healthchecks/ViewStoreHealthcheckTest.java index 1a70143e2..3337757d6 100644 --- a/healthchecks/src/test/java/uk/gov/justice/services/healthcheck/healthchecks/ViewStoreHealthcheckTest.java +++ b/healthchecks/src/test/java/uk/gov/justice/services/healthcheck/healthchecks/ViewStoreHealthcheckTest.java @@ -9,7 +9,7 @@ import static uk.gov.justice.services.healthcheck.healthchecks.ViewStoreHealthcheck.VIEW_STORE_TABLE_NAMES; import uk.gov.justice.services.healthcheck.api.HealthcheckResult; -import uk.gov.justice.services.healthcheck.database.TableChecker; +import uk.gov.justice.services.healthcheck.utils.database.TableChecker; import uk.gov.justice.services.jdbc.persistence.ViewStoreJdbcDataSourceProvider; import java.sql.SQLException; diff --git a/pom.xml b/pom.xml index 42cf0cdd5..bcbc19134 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ event-store - 11.0.0-M16 + 11.0.0-M17