Skip to content

Commit

Permalink
Merge pull request #274 from CJSCommonPlatform/update-framework
Browse files Browse the repository at this point in the history
Update framework to 11.0.0-M11
  • Loading branch information
allanmckenzie committed Mar 25, 2022
2 parents befc443 + 94b4e35 commit e0e64ff
Show file tree
Hide file tree
Showing 7 changed files with 148 additions and 8 deletions.
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,12 @@ on [Keep a CHANGELOG](http://keepachangelog.com/). This project adheres to

## [Unreleased]

## [11.0.0-M13] - 2022-03-25
### Added
- Added new healthcheck for the system database.
### Changed
- Update framework to 11.0.0-M11

## [11.0.0-M12] - 2022-03-24
### Added
- Added healthcheck modules into the event store bom
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
package uk.gov.justice.services.healthcheck.healthchecks;

import static java.lang.String.format;
import static java.util.List.of;
import static uk.gov.justice.services.healthcheck.api.HealthcheckResult.failure;

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.jdbc.persistence.SystemJdbcDataSourceProvider;

import java.sql.SQLException;
import java.util.List;

import javax.inject.Inject;
import javax.sql.DataSource;

import org.slf4j.Logger;

public class SystemDatabaseHealthcheck implements Healthcheck {

public static final String SYSTEM_DATABASE_HEALTHCHECK_NAME = "system-database-healthcheck";

public static final List<String> SYSTEM_DATABASE_TABLE_NAMES = of(
"system_command_status",
"stored_command");

@Inject
private SystemJdbcDataSourceProvider systemJdbcDataSourceProvider;

@Inject
private TableChecker tableChecker;

@Inject
private Logger logger;

@Override
public String getHealthcheckName() {
return SYSTEM_DATABASE_HEALTHCHECK_NAME;
}

@Override
public String healthcheckDescription() {
return "Checks connectivity to the system database and that all tables are available";
}

@Override
public HealthcheckResult runHealthcheck() {

final DataSource jobStoreDataSource = systemJdbcDataSourceProvider.getDataSource();

try {
return tableChecker.checkTables(SYSTEM_DATABASE_TABLE_NAMES, jobStoreDataSource);

} catch (final SQLException e) {
logger.error("Healthcheck for system database failed.", e);
return failure(format("Exception thrown accessing system database. %s: %s", e.getClass().getName(), e.getMessage()));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,12 @@
import static java.util.Optional.of;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.mockito.Matchers.isA;
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 java.util.Optional;

import javax.sql.DataSource;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,7 @@
import uk.gov.justice.services.healthcheck.database.TableChecker;

import java.sql.SQLException;
import java.util.Optional;

import javax.inject.Inject;
import javax.sql.DataSource;

import org.junit.Test;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,13 @@
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import static uk.gov.justice.services.healthcheck.healthchecks.EventStoreHealthcheck.EVENT_STORE_TABLE_NAMES;
import static uk.gov.justice.services.healthcheck.healthchecks.FileStoreHealthcheck.FILE_STORE_TABLE_NAMES;

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 java.sql.SQLException;

import javax.sql.DataSource;

import org.junit.Test;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
package uk.gov.justice.services.healthcheck.healthchecks;

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.verify;
import static org.mockito.Mockito.when;
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.jdbc.persistence.SystemJdbcDataSourceProvider;

import java.sql.SQLException;

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;
import org.slf4j.Logger;
@RunWith(MockitoJUnitRunner.class)
public class SystemDatabaseHealthcheckTest {

@Mock
private SystemJdbcDataSourceProvider systemJdbcDataSourceProvider;

@Mock
private TableChecker tableChecker;

@Mock
private Logger logger;

@InjectMocks
private SystemDatabaseHealthcheck systemDatabaseHealthcheck;

@Test
public void shouldReturnCorrectHealthcheckName() throws Exception {

assertThat(systemDatabaseHealthcheck.getHealthcheckName(), is("system-database-healthcheck"));
}

@Test
public void shouldReturnCorrectHealthcheckDescription() throws Exception {

assertThat(systemDatabaseHealthcheck.healthcheckDescription(), is("Checks connectivity to the system database and that all tables are available"));
}

@Test
public void shouldGetListOfExpectedTablesFromEventStoreAsHealthcheck() throws Exception {

final DataSource systemDataSource = mock(DataSource.class);
final HealthcheckResult healthcheckResult = mock(HealthcheckResult.class);

when(systemJdbcDataSourceProvider.getDataSource()).thenReturn(systemDataSource);
when(tableChecker.checkTables(SYSTEM_DATABASE_TABLE_NAMES, systemDataSource)).thenReturn(healthcheckResult);

assertThat(systemDatabaseHealthcheck.runHealthcheck(), is(healthcheckResult));
}

@Test
public void shouldReturnHealthcheckFailureIfAccessingTheEventStoreThrowsSqlException() throws Exception {

final SQLException sqlException = new SQLException("Oops");
final DataSource systemDataSource = mock(DataSource.class);

when(systemJdbcDataSourceProvider.getDataSource()).thenReturn(systemDataSource);
when(tableChecker.checkTables(SYSTEM_DATABASE_TABLE_NAMES, systemDataSource)).thenThrow(sqlException);

final HealthcheckResult healthcheckResult = systemDatabaseHealthcheck.runHealthcheck();

assertThat(healthcheckResult.isPassed(), is(false));
assertThat(healthcheckResult.getErrorMessage().isPresent(), is(true));
assertThat(healthcheckResult.getErrorMessage(), is(of("Exception thrown accessing system database. java.sql.SQLException: Oops")));

verify(logger).error("Healthcheck for system database failed.", sqlException);
}
}
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@

<properties>
<cpp.repo.name>event-store</cpp.repo.name>
<framework.version>11.0.0-M10</framework.version>
<framework.version>11.0.0-M11</framework.version>
</properties>

<dependencyManagement>
Expand Down

0 comments on commit e0e64ff

Please sign in to comment.