From 97b44327373dd46532c6eb6a7b256eadbca83b9e Mon Sep 17 00:00:00 2001 From: amckenzie Date: Fri, 18 Oct 2019 11:01:27 +0100 Subject: [PATCH] Status of VERIFY_CATCHUP command now correctly set to COMMAND_FAILED on verification errors --- CHANGELOG.md | 5 + .../commands/VerificationCommandResult.java | 74 ++++++++++ .../commands/VerifyCatchupCommandHandler.java | 7 +- .../process/CatchupVerificationProcess.java | 53 ++++---- .../process/CommandResultGenerator.java | 43 ++++++ .../process/VerificationResult.java | 2 +- .../process/VerificationResultFilter.java | 32 +++++ .../process/VerificationResultsLogger.java | 27 ++++ .../process/VerificationRunner.java | 22 +++ .../validation/process/VerifierProvider.java | 6 + .../ProcessedEventCountVerifier.java | 5 +- .../ProcessedEventLinkVerifier.java | 7 +- .../PublishedEventCountVerifier.java | 8 +- .../PublishedEventLinkVerifier.java | 5 +- .../StreamBufferEmptyVerifier.java | 5 +- .../VerificationCommandResultTest.java | 48 +++++++ .../VerifyCatchupCommandHandlerTest.java | 17 ++- .../CatchupVerificationProcessTest.java | 67 +++++---- .../process/CommandResultGeneratorTest.java | 90 +++++++++++++ .../process/VerificationResultFilterTest.java | 127 ++++++++++++++++++ .../VerificationResultsLoggerTest.java | 62 +++++++++ .../process/VerificationRunnerTest.java | 54 ++++++++ .../process/VerifierProviderTest.java | 6 + .../AllEventsInStreamsVerifierTest.java | 6 +- .../ProcessedEventCountVerifierTest.java | 4 +- .../ProcessedEventLinkVerifierTest.java | 4 +- .../PublishedEventCountVerifierTest.java | 5 +- .../PublishedEventLinkVerifierTest.java | 4 +- .../StreamBufferEmptyVerifierTest.java | 4 +- pom.xml | 2 +- 30 files changed, 717 insertions(+), 84 deletions(-) create mode 100644 event-store-management/event-store-management-core/src/main/java/uk/gov/justice/services/eventstore/management/validation/commands/VerificationCommandResult.java create mode 100644 event-store-management/event-store-management-core/src/main/java/uk/gov/justice/services/eventstore/management/validation/process/CommandResultGenerator.java create mode 100644 event-store-management/event-store-management-core/src/main/java/uk/gov/justice/services/eventstore/management/validation/process/VerificationResultFilter.java create mode 100644 event-store-management/event-store-management-core/src/main/java/uk/gov/justice/services/eventstore/management/validation/process/VerificationResultsLogger.java create mode 100644 event-store-management/event-store-management-core/src/main/java/uk/gov/justice/services/eventstore/management/validation/process/VerificationRunner.java rename event-store-management/event-store-management-core/src/main/java/uk/gov/justice/services/eventstore/management/validation/process/{ => verifiers}/ProcessedEventCountVerifier.java (90%) rename event-store-management/event-store-management-core/src/main/java/uk/gov/justice/services/eventstore/management/validation/process/{ => verifiers}/ProcessedEventLinkVerifier.java (69%) rename event-store-management/event-store-management-core/src/main/java/uk/gov/justice/services/eventstore/management/validation/process/{ => verifiers}/PublishedEventCountVerifier.java (83%) rename event-store-management/event-store-management-core/src/main/java/uk/gov/justice/services/eventstore/management/validation/process/{ => verifiers}/PublishedEventLinkVerifier.java (74%) rename event-store-management/event-store-management-core/src/main/java/uk/gov/justice/services/eventstore/management/validation/process/{ => verifiers}/StreamBufferEmptyVerifier.java (83%) create mode 100644 event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/commands/VerificationCommandResultTest.java create mode 100644 event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/process/CommandResultGeneratorTest.java create mode 100644 event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/process/VerificationResultFilterTest.java create mode 100644 event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/process/VerificationResultsLoggerTest.java create mode 100644 event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/process/VerificationRunnerTest.java rename event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/process/{ => verifiers}/AllEventsInStreamsVerifierTest.java (93%) rename event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/process/{ => verifiers}/ProcessedEventCountVerifierTest.java (96%) rename event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/process/{ => verifiers}/ProcessedEventLinkVerifierTest.java (88%) rename event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/process/{ => verifiers}/PublishedEventCountVerifierTest.java (93%) rename event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/process/{ => verifiers}/PublishedEventLinkVerifierTest.java (88%) rename event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/process/{ => verifiers}/StreamBufferEmptyVerifierTest.java (92%) diff --git a/CHANGELOG.md b/CHANGELOG.md index af2f079ee..4da3687a5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,11 @@ on [Keep a CHANGELOG](http://keepachangelog.com/). This project adheres to ## [Unreleased] +## [2.2.1] - 2019-10-18 +### Fixed +- VERIFY_CATCHUP now correctly marks its status as COMMAND_FAILED if any of +the verification steps fail. Verification warnings are considered successful + ## [2.2.0] - 2019-10-15 ### Added - New table in System database 'system_command_status' for storing state of commands diff --git a/event-store-management/event-store-management-core/src/main/java/uk/gov/justice/services/eventstore/management/validation/commands/VerificationCommandResult.java b/event-store-management/event-store-management-core/src/main/java/uk/gov/justice/services/eventstore/management/validation/commands/VerificationCommandResult.java new file mode 100644 index 000000000..3f74a51e5 --- /dev/null +++ b/event-store-management/event-store-management-core/src/main/java/uk/gov/justice/services/eventstore/management/validation/commands/VerificationCommandResult.java @@ -0,0 +1,74 @@ +package uk.gov.justice.services.eventstore.management.validation.commands; + +import static uk.gov.justice.services.jmx.api.domain.CommandState.COMMAND_COMPLETE; +import static uk.gov.justice.services.jmx.api.domain.CommandState.COMMAND_FAILED; + +import uk.gov.justice.services.jmx.api.domain.CommandState; + +import java.util.Objects; +import java.util.UUID; + +public class VerificationCommandResult { + + private final UUID commandId; + private final String message; + private final CommandState commandState; + + private VerificationCommandResult(final UUID commandId, final String message, final CommandState commandState) { + this.commandId = commandId; + this.message = message; + this.commandState = commandState; + } + + public static VerificationCommandResult success(final UUID commandId, final String message) { + return new VerificationCommandResult( + commandId, + message, + COMMAND_COMPLETE + ); + } + + public static VerificationCommandResult failure(final UUID commandId, final String message) { + return new VerificationCommandResult( + commandId, + message, + COMMAND_FAILED + ); + } + + public UUID getCommandId() { + return commandId; + } + + public String getMessage() { + return message; + } + + public CommandState getCommandState() { + return commandState; + } + + @Override + public boolean equals(final Object o) { + if (this == o) return true; + if (!(o instanceof VerificationCommandResult)) return false; + final VerificationCommandResult that = (VerificationCommandResult) o; + return Objects.equals(commandId, that.commandId) && + Objects.equals(message, that.message) && + commandState == that.commandState; + } + + @Override + public int hashCode() { + return Objects.hash(commandId, message, commandState); + } + + @Override + public String toString() { + return "VerificationResult{" + + "commandId=" + commandId + + ", message='" + message + '\'' + + ", commandState=" + commandState + + '}'; + } +} diff --git a/event-store-management/event-store-management-core/src/main/java/uk/gov/justice/services/eventstore/management/validation/commands/VerifyCatchupCommandHandler.java b/event-store-management/event-store-management-core/src/main/java/uk/gov/justice/services/eventstore/management/validation/commands/VerifyCatchupCommandHandler.java index f2834a5d2..b7d43ceca 100644 --- a/event-store-management/event-store-management-core/src/main/java/uk/gov/justice/services/eventstore/management/validation/commands/VerifyCatchupCommandHandler.java +++ b/event-store-management/event-store-management-core/src/main/java/uk/gov/justice/services/eventstore/management/validation/commands/VerifyCatchupCommandHandler.java @@ -2,7 +2,6 @@ import static java.lang.String.format; import static uk.gov.justice.services.jmx.api.command.VerifyCatchupCommand.VERIFY_CATCHUP; -import static uk.gov.justice.services.jmx.api.domain.CommandState.COMMAND_COMPLETE; import static uk.gov.justice.services.jmx.api.domain.CommandState.COMMAND_FAILED; import static uk.gov.justice.services.jmx.api.domain.CommandState.COMMAND_IN_PROGRESS; @@ -50,14 +49,14 @@ public void validateCatchup(final VerifyCatchupCommand verifyCatchupCommand, fin )); try { - catchupVerificationProcess.runVerification(); + final VerificationCommandResult verificationCommandResult = catchupVerificationProcess.runVerification(commandId); systemCommandStateChangedEventFirer.fire(new SystemCommandStateChangedEvent( commandId, verifyCatchupCommand, - COMMAND_COMPLETE, + verificationCommandResult.getCommandState(), clock.now(), - "Verification of catchup complete" + verificationCommandResult.getMessage() )); } catch (final Exception e) { final String message = format("Verification of catchup failed: %s: %s", e.getClass().getSimpleName(), e.getMessage()); diff --git a/event-store-management/event-store-management-core/src/main/java/uk/gov/justice/services/eventstore/management/validation/process/CatchupVerificationProcess.java b/event-store-management/event-store-management-core/src/main/java/uk/gov/justice/services/eventstore/management/validation/process/CatchupVerificationProcess.java index e2e5aba77..530abd5b4 100644 --- a/event-store-management/event-store-management-core/src/main/java/uk/gov/justice/services/eventstore/management/validation/process/CatchupVerificationProcess.java +++ b/event-store-management/event-store-management-core/src/main/java/uk/gov/justice/services/eventstore/management/validation/process/CatchupVerificationProcess.java @@ -1,50 +1,45 @@ package uk.gov.justice.services.eventstore.management.validation.process; -import static java.lang.String.format; -import static java.util.stream.Collectors.toList; -import static uk.gov.justice.services.eventstore.management.validation.process.VerificationResult.VerificationResultType.ERROR; -import static uk.gov.justice.services.eventstore.management.validation.process.VerificationResult.VerificationResultType.SUCCESS; -import static uk.gov.justice.services.eventstore.management.validation.process.VerificationResult.VerificationResultType.WARNING; +import uk.gov.justice.services.eventstore.management.validation.commands.VerificationCommandResult; -import java.util.Collection; import java.util.List; +import java.util.UUID; import javax.inject.Inject; -import org.slf4j.Logger; - public class CatchupVerificationProcess { @Inject - private Logger logger; + private VerificationRunner verificationRunner; @Inject - private VerifierProvider verifierProvider; + private VerificationResultFilter verificationResultFilter; - public void runVerification() { + @Inject + private VerificationResultsLogger verificationResultsLogger; - final List verificationResults = verifierProvider.getVerifiers().stream() - .map(Verifier::verify) - .flatMap(Collection::stream) - .collect(toList()); + @Inject + private CommandResultGenerator commandResultGenerator; - final List errorResults = filter(verificationResults, ERROR); - final List warningResults = filter(verificationResults, WARNING); - final List successfulResults = filter(verificationResults, SUCCESS); + public VerificationCommandResult runVerification(final UUID commandId) { - logger.info(format("Verification of Catchup completed with %d Errors, %d Warnings and %d Successes", errorResults.size(), warningResults.size(), successfulResults.size())); + final List verificationResults = verificationRunner.runVerifiers(); - errorResults.forEach(verificationResult -> logger.error("ERROR: " + verificationResult.getMessage())); - warningResults.forEach(verificationResult -> logger.warn("WARNING: " + verificationResult.getMessage())); - successfulResults.forEach(verificationResult -> logger.info("SUCCESS: " + verificationResult.getMessage())); - } + final List successResults = verificationResultFilter.findSuccesses(verificationResults); + final List warningResults = verificationResultFilter.findWarnings(verificationResults); + final List errorResults = verificationResultFilter.findErrors(verificationResults); - private List filter( - final List verificationResults, - final VerificationResult.VerificationResultType verificationResultType) { + verificationResultsLogger.logResults( + successResults, + warningResults, + errorResults + ); - return verificationResults.stream() - .filter(verificationResult -> verificationResult.getVerificationResultType() == verificationResultType) - .collect(toList()); + return commandResultGenerator.createCommandResult( + commandId, + successResults, + warningResults, + errorResults + ); } } diff --git a/event-store-management/event-store-management-core/src/main/java/uk/gov/justice/services/eventstore/management/validation/process/CommandResultGenerator.java b/event-store-management/event-store-management-core/src/main/java/uk/gov/justice/services/eventstore/management/validation/process/CommandResultGenerator.java new file mode 100644 index 000000000..6205d5ade --- /dev/null +++ b/event-store-management/event-store-management-core/src/main/java/uk/gov/justice/services/eventstore/management/validation/process/CommandResultGenerator.java @@ -0,0 +1,43 @@ +package uk.gov.justice.services.eventstore.management.validation.process; + +import static java.lang.String.format; +import static uk.gov.justice.services.eventstore.management.validation.commands.VerificationCommandResult.failure; +import static uk.gov.justice.services.eventstore.management.validation.commands.VerificationCommandResult.success; + +import uk.gov.justice.services.eventstore.management.validation.commands.VerificationCommandResult; + +import java.util.List; +import java.util.UUID; + +public class CommandResultGenerator { + + public VerificationCommandResult createCommandResult( + final UUID commandId, + final List successfulResults, + final List warningResults, + final List errorResults) { + + + if (errorResults.isEmpty()) { + final String message = format( + "Verification of Catchup completed successfully with %d Error(s), %d Warning(s) and %d Success(es)", + errorResults.size(), + warningResults.size(), + successfulResults.size()); + + return success(commandId, message); + } + + final String message = format( + "Verification of Catchup failed with %d Error(s), %d Warning(s) and %d Success(es)", + errorResults.size(), + warningResults.size(), + successfulResults.size()); + + return failure( + commandId, + message + ); + + } +} diff --git a/event-store-management/event-store-management-core/src/main/java/uk/gov/justice/services/eventstore/management/validation/process/VerificationResult.java b/event-store-management/event-store-management-core/src/main/java/uk/gov/justice/services/eventstore/management/validation/process/VerificationResult.java index 833787606..ba26494f8 100644 --- a/event-store-management/event-store-management-core/src/main/java/uk/gov/justice/services/eventstore/management/validation/process/VerificationResult.java +++ b/event-store-management/event-store-management-core/src/main/java/uk/gov/justice/services/eventstore/management/validation/process/VerificationResult.java @@ -6,7 +6,7 @@ public class VerificationResult { - enum VerificationResultType { + public enum VerificationResultType { SUCCESS, WARNING, ERROR diff --git a/event-store-management/event-store-management-core/src/main/java/uk/gov/justice/services/eventstore/management/validation/process/VerificationResultFilter.java b/event-store-management/event-store-management-core/src/main/java/uk/gov/justice/services/eventstore/management/validation/process/VerificationResultFilter.java new file mode 100644 index 000000000..da88b4168 --- /dev/null +++ b/event-store-management/event-store-management-core/src/main/java/uk/gov/justice/services/eventstore/management/validation/process/VerificationResultFilter.java @@ -0,0 +1,32 @@ +package uk.gov.justice.services.eventstore.management.validation.process; + +import static java.util.stream.Collectors.toList; +import static uk.gov.justice.services.eventstore.management.validation.process.VerificationResult.VerificationResultType.ERROR; +import static uk.gov.justice.services.eventstore.management.validation.process.VerificationResult.VerificationResultType.SUCCESS; +import static uk.gov.justice.services.eventstore.management.validation.process.VerificationResult.VerificationResultType.WARNING; + +import java.util.List; + +public class VerificationResultFilter { + + public List findSuccesses(final List verificationResults) { + return filter(SUCCESS, verificationResults); + } + + public List findWarnings(final List verificationResults) { + return filter(WARNING, verificationResults); + } + + public List findErrors(final List verificationResults) { + return filter(ERROR, verificationResults); + } + + private List filter( + final VerificationResult.VerificationResultType verificationResultType, + final List verificationResults) { + + return verificationResults.stream() + .filter(verificationResult -> verificationResult.getVerificationResultType() == verificationResultType) + .collect(toList()); + } +} diff --git a/event-store-management/event-store-management-core/src/main/java/uk/gov/justice/services/eventstore/management/validation/process/VerificationResultsLogger.java b/event-store-management/event-store-management-core/src/main/java/uk/gov/justice/services/eventstore/management/validation/process/VerificationResultsLogger.java new file mode 100644 index 000000000..6d957d9ae --- /dev/null +++ b/event-store-management/event-store-management-core/src/main/java/uk/gov/justice/services/eventstore/management/validation/process/VerificationResultsLogger.java @@ -0,0 +1,27 @@ +package uk.gov.justice.services.eventstore.management.validation.process; + +import static java.lang.String.format; + +import java.util.List; + +import javax.inject.Inject; + +import org.slf4j.Logger; + +public class VerificationResultsLogger { + + @Inject + private Logger logger; + + public void logResults( + final List successfulResults, + final List warningResults, + final List errorResults) { + + logger.info(format("Verification of Catchup completed with %d Errors, %d Warnings and %d Successes", errorResults.size(), warningResults.size(), successfulResults.size())); + + errorResults.forEach(verificationResult -> logger.error("ERROR: " + verificationResult.getMessage())); + warningResults.forEach(verificationResult -> logger.warn("WARNING: " + verificationResult.getMessage())); + successfulResults.forEach(verificationResult -> logger.info("SUCCESS: " + verificationResult.getMessage())); + } +} diff --git a/event-store-management/event-store-management-core/src/main/java/uk/gov/justice/services/eventstore/management/validation/process/VerificationRunner.java b/event-store-management/event-store-management-core/src/main/java/uk/gov/justice/services/eventstore/management/validation/process/VerificationRunner.java new file mode 100644 index 000000000..df8d0805f --- /dev/null +++ b/event-store-management/event-store-management-core/src/main/java/uk/gov/justice/services/eventstore/management/validation/process/VerificationRunner.java @@ -0,0 +1,22 @@ +package uk.gov.justice.services.eventstore.management.validation.process; + +import static java.util.stream.Collectors.toList; + +import java.util.Collection; +import java.util.List; + +import javax.inject.Inject; + +public class VerificationRunner { + + @Inject + private VerifierProvider verifierProvider; + + public List runVerifiers() { + + return verifierProvider.getVerifiers().stream() + .map(Verifier::verify) + .flatMap(Collection::stream) + .collect(toList()); + } +} diff --git a/event-store-management/event-store-management-core/src/main/java/uk/gov/justice/services/eventstore/management/validation/process/VerifierProvider.java b/event-store-management/event-store-management-core/src/main/java/uk/gov/justice/services/eventstore/management/validation/process/VerifierProvider.java index 0c0329fd0..86308bfb4 100644 --- a/event-store-management/event-store-management-core/src/main/java/uk/gov/justice/services/eventstore/management/validation/process/VerifierProvider.java +++ b/event-store-management/event-store-management-core/src/main/java/uk/gov/justice/services/eventstore/management/validation/process/VerifierProvider.java @@ -2,6 +2,12 @@ import static java.util.Arrays.asList; +import uk.gov.justice.services.eventstore.management.validation.process.verifiers.ProcessedEventCountVerifier; +import uk.gov.justice.services.eventstore.management.validation.process.verifiers.ProcessedEventLinkVerifier; +import uk.gov.justice.services.eventstore.management.validation.process.verifiers.PublishedEventCountVerifier; +import uk.gov.justice.services.eventstore.management.validation.process.verifiers.PublishedEventLinkVerifier; +import uk.gov.justice.services.eventstore.management.validation.process.verifiers.StreamBufferEmptyVerifier; + import java.util.List; import javax.inject.Inject; diff --git a/event-store-management/event-store-management-core/src/main/java/uk/gov/justice/services/eventstore/management/validation/process/ProcessedEventCountVerifier.java b/event-store-management/event-store-management-core/src/main/java/uk/gov/justice/services/eventstore/management/validation/process/verifiers/ProcessedEventCountVerifier.java similarity index 90% rename from event-store-management/event-store-management-core/src/main/java/uk/gov/justice/services/eventstore/management/validation/process/ProcessedEventCountVerifier.java rename to event-store-management/event-store-management-core/src/main/java/uk/gov/justice/services/eventstore/management/validation/process/verifiers/ProcessedEventCountVerifier.java index 47ebf309f..48e5ed442 100644 --- a/event-store-management/event-store-management-core/src/main/java/uk/gov/justice/services/eventstore/management/validation/process/ProcessedEventCountVerifier.java +++ b/event-store-management/event-store-management-core/src/main/java/uk/gov/justice/services/eventstore/management/validation/process/verifiers/ProcessedEventCountVerifier.java @@ -1,4 +1,4 @@ -package uk.gov.justice.services.eventstore.management.validation.process; +package uk.gov.justice.services.eventstore.management.validation.process.verifiers; import static java.lang.String.format; import static java.util.Collections.singletonList; @@ -6,6 +6,9 @@ import static uk.gov.justice.services.eventstore.management.validation.process.VerificationResult.success; import uk.gov.justice.services.eventsourcing.source.core.EventStoreDataSourceProvider; +import uk.gov.justice.services.eventstore.management.validation.process.TableRowCounter; +import uk.gov.justice.services.eventstore.management.validation.process.VerificationResult; +import uk.gov.justice.services.eventstore.management.validation.process.Verifier; import uk.gov.justice.services.jdbc.persistence.ViewStoreJdbcDataSourceProvider; import java.util.List; diff --git a/event-store-management/event-store-management-core/src/main/java/uk/gov/justice/services/eventstore/management/validation/process/ProcessedEventLinkVerifier.java b/event-store-management/event-store-management-core/src/main/java/uk/gov/justice/services/eventstore/management/validation/process/verifiers/ProcessedEventLinkVerifier.java similarity index 69% rename from event-store-management/event-store-management-core/src/main/java/uk/gov/justice/services/eventstore/management/validation/process/ProcessedEventLinkVerifier.java rename to event-store-management/event-store-management-core/src/main/java/uk/gov/justice/services/eventstore/management/validation/process/verifiers/ProcessedEventLinkVerifier.java index 35d3f1c1c..e02034549 100644 --- a/event-store-management/event-store-management-core/src/main/java/uk/gov/justice/services/eventstore/management/validation/process/ProcessedEventLinkVerifier.java +++ b/event-store-management/event-store-management-core/src/main/java/uk/gov/justice/services/eventstore/management/validation/process/verifiers/ProcessedEventLinkVerifier.java @@ -1,5 +1,8 @@ -package uk.gov.justice.services.eventstore.management.validation.process; +package uk.gov.justice.services.eventstore.management.validation.process.verifiers; +import uk.gov.justice.services.eventstore.management.validation.process.EventLinkageChecker; +import uk.gov.justice.services.eventstore.management.validation.process.VerificationResult; +import uk.gov.justice.services.eventstore.management.validation.process.Verifier; import uk.gov.justice.services.jdbc.persistence.ViewStoreJdbcDataSourceProvider; import java.util.List; @@ -8,7 +11,7 @@ import org.slf4j.Logger; -public class ProcessedEventLinkVerifier implements Verifier{ +public class ProcessedEventLinkVerifier implements Verifier { @Inject private ViewStoreJdbcDataSourceProvider viewStoreJdbcDataSourceProvider; diff --git a/event-store-management/event-store-management-core/src/main/java/uk/gov/justice/services/eventstore/management/validation/process/PublishedEventCountVerifier.java b/event-store-management/event-store-management-core/src/main/java/uk/gov/justice/services/eventstore/management/validation/process/verifiers/PublishedEventCountVerifier.java similarity index 83% rename from event-store-management/event-store-management-core/src/main/java/uk/gov/justice/services/eventstore/management/validation/process/PublishedEventCountVerifier.java rename to event-store-management/event-store-management-core/src/main/java/uk/gov/justice/services/eventstore/management/validation/process/verifiers/PublishedEventCountVerifier.java index 570f66785..d6eb750cc 100644 --- a/event-store-management/event-store-management-core/src/main/java/uk/gov/justice/services/eventstore/management/validation/process/PublishedEventCountVerifier.java +++ b/event-store-management/event-store-management-core/src/main/java/uk/gov/justice/services/eventstore/management/validation/process/verifiers/PublishedEventCountVerifier.java @@ -1,4 +1,4 @@ -package uk.gov.justice.services.eventstore.management.validation.process; +package uk.gov.justice.services.eventstore.management.validation.process.verifiers; import static java.lang.String.format; import static java.util.Collections.singletonList; @@ -6,6 +6,10 @@ import static uk.gov.justice.services.eventstore.management.validation.process.VerificationResult.success; import uk.gov.justice.services.eventsourcing.source.core.EventStoreDataSourceProvider; +import uk.gov.justice.services.eventstore.management.validation.process.EventLogActiveEventRowCounter; +import uk.gov.justice.services.eventstore.management.validation.process.TableRowCounter; +import uk.gov.justice.services.eventstore.management.validation.process.VerificationResult; +import uk.gov.justice.services.eventstore.management.validation.process.Verifier; import java.util.List; @@ -14,7 +18,7 @@ import org.slf4j.Logger; -public class PublishedEventCountVerifier implements Verifier{ +public class PublishedEventCountVerifier implements Verifier { private static final String PUBLISHED_EVENT_TABLE_NAME = "published_event"; diff --git a/event-store-management/event-store-management-core/src/main/java/uk/gov/justice/services/eventstore/management/validation/process/PublishedEventLinkVerifier.java b/event-store-management/event-store-management-core/src/main/java/uk/gov/justice/services/eventstore/management/validation/process/verifiers/PublishedEventLinkVerifier.java similarity index 74% rename from event-store-management/event-store-management-core/src/main/java/uk/gov/justice/services/eventstore/management/validation/process/PublishedEventLinkVerifier.java rename to event-store-management/event-store-management-core/src/main/java/uk/gov/justice/services/eventstore/management/validation/process/verifiers/PublishedEventLinkVerifier.java index 201d4097e..be8dccfb8 100644 --- a/event-store-management/event-store-management-core/src/main/java/uk/gov/justice/services/eventstore/management/validation/process/PublishedEventLinkVerifier.java +++ b/event-store-management/event-store-management-core/src/main/java/uk/gov/justice/services/eventstore/management/validation/process/verifiers/PublishedEventLinkVerifier.java @@ -1,6 +1,9 @@ -package uk.gov.justice.services.eventstore.management.validation.process; +package uk.gov.justice.services.eventstore.management.validation.process.verifiers; import uk.gov.justice.services.eventsourcing.source.core.EventStoreDataSourceProvider; +import uk.gov.justice.services.eventstore.management.validation.process.EventLinkageChecker; +import uk.gov.justice.services.eventstore.management.validation.process.VerificationResult; +import uk.gov.justice.services.eventstore.management.validation.process.Verifier; import java.util.List; diff --git a/event-store-management/event-store-management-core/src/main/java/uk/gov/justice/services/eventstore/management/validation/process/StreamBufferEmptyVerifier.java b/event-store-management/event-store-management-core/src/main/java/uk/gov/justice/services/eventstore/management/validation/process/verifiers/StreamBufferEmptyVerifier.java similarity index 83% rename from event-store-management/event-store-management-core/src/main/java/uk/gov/justice/services/eventstore/management/validation/process/StreamBufferEmptyVerifier.java rename to event-store-management/event-store-management-core/src/main/java/uk/gov/justice/services/eventstore/management/validation/process/verifiers/StreamBufferEmptyVerifier.java index b9642f78d..7f3974013 100644 --- a/event-store-management/event-store-management-core/src/main/java/uk/gov/justice/services/eventstore/management/validation/process/StreamBufferEmptyVerifier.java +++ b/event-store-management/event-store-management-core/src/main/java/uk/gov/justice/services/eventstore/management/validation/process/verifiers/StreamBufferEmptyVerifier.java @@ -1,10 +1,13 @@ -package uk.gov.justice.services.eventstore.management.validation.process; +package uk.gov.justice.services.eventstore.management.validation.process.verifiers; import static java.lang.String.format; import static java.util.Collections.singletonList; import static uk.gov.justice.services.eventstore.management.validation.process.VerificationResult.error; import static uk.gov.justice.services.eventstore.management.validation.process.VerificationResult.success; +import uk.gov.justice.services.eventstore.management.validation.process.TableRowCounter; +import uk.gov.justice.services.eventstore.management.validation.process.VerificationResult; +import uk.gov.justice.services.eventstore.management.validation.process.Verifier; import uk.gov.justice.services.jdbc.persistence.ViewStoreJdbcDataSourceProvider; import java.util.List; diff --git a/event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/commands/VerificationCommandResultTest.java b/event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/commands/VerificationCommandResultTest.java new file mode 100644 index 000000000..b5db59b99 --- /dev/null +++ b/event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/commands/VerificationCommandResultTest.java @@ -0,0 +1,48 @@ +package uk.gov.justice.services.eventstore.management.validation.commands; + +import static java.util.UUID.randomUUID; +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.assertThat; +import static uk.gov.justice.services.eventstore.management.validation.commands.VerificationCommandResult.failure; +import static uk.gov.justice.services.eventstore.management.validation.commands.VerificationCommandResult.success; +import static uk.gov.justice.services.jmx.api.domain.CommandState.COMMAND_COMPLETE; +import static uk.gov.justice.services.jmx.api.domain.CommandState.COMMAND_FAILED; + +import java.util.UUID; + +import org.junit.Test; + +public class VerificationCommandResultTest { + + @Test + public void shouldCreateASuccessfulResult() throws Exception { + + final UUID commandId = randomUUID(); + final String message = "message"; + + final VerificationCommandResult successfulCommandResult = success( + commandId, + message + ); + + assertThat(successfulCommandResult.getCommandState(), is(COMMAND_COMPLETE)); + assertThat(successfulCommandResult.getCommandId(), is(commandId)); + assertThat(successfulCommandResult.getMessage(), is(message)); + } + + @Test + public void shouldCreateAFailureResult() throws Exception { + + final UUID commandId = randomUUID(); + final String message = "message"; + + final VerificationCommandResult failedCommandResult = failure( + commandId, + message + ); + + assertThat(failedCommandResult.getCommandState(), is(COMMAND_FAILED)); + assertThat(failedCommandResult.getCommandId(), is(commandId)); + assertThat(failedCommandResult.getMessage(), is(message)); + } +} diff --git a/event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/commands/VerifyCatchupCommandHandlerTest.java b/event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/commands/VerifyCatchupCommandHandlerTest.java index bf9d3c277..3e5d83386 100644 --- a/event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/commands/VerifyCatchupCommandHandlerTest.java +++ b/event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/commands/VerifyCatchupCommandHandlerTest.java @@ -6,7 +6,7 @@ import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.inOrder; import static org.mockito.Mockito.when; -import static uk.gov.justice.services.jmx.api.domain.CommandState.COMMAND_COMPLETE; +import static uk.gov.justice.services.eventstore.management.validation.commands.VerificationCommandResult.success; import static uk.gov.justice.services.jmx.api.domain.CommandState.COMMAND_FAILED; import static uk.gov.justice.services.jmx.api.domain.CommandState.COMMAND_IN_PROGRESS; @@ -52,7 +52,6 @@ public class VerifyCatchupCommandHandlerTest { @InjectMocks private VerifyCatchupCommandHandler verifyCatchupCommandHandler; - @Test public void shouldFireCommandStatusEventsAndRunVerification() throws Exception { @@ -62,6 +61,9 @@ public void shouldFireCommandStatusEventsAndRunVerification() throws Exception { final UUID commandId = randomUUID(); final VerifyCatchupCommand verifyCatchupCommand = new VerifyCatchupCommand(); + final String successMessage = "success message"; + final VerificationCommandResult verificationCommandResult = success(commandId, successMessage); + final InOrder inOrder = inOrder( logger, systemCommandStateChangedEventFirer, @@ -69,12 +71,13 @@ public void shouldFireCommandStatusEventsAndRunVerification() throws Exception { ); when(clock.now()).thenReturn(startedAt, completedAt); + when(catchupVerificationProcess.runVerification(commandId)).thenReturn(verificationCommandResult); verifyCatchupCommandHandler.validateCatchup(verifyCatchupCommand, commandId); inOrder.verify(logger).info("Received VERIFY_CATCHUP command"); inOrder.verify(systemCommandStateChangedEventFirer).fire(systemCommandStateChangedEventCaptor.capture()); - inOrder.verify(catchupVerificationProcess).runVerification(); + inOrder.verify(catchupVerificationProcess).runVerification(commandId); inOrder.verify(systemCommandStateChangedEventFirer).fire(systemCommandStateChangedEventCaptor.capture()); final List allValues = systemCommandStateChangedEventCaptor.getAllValues(); @@ -89,10 +92,10 @@ public void shouldFireCommandStatusEventsAndRunVerification() throws Exception { assertThat(startEvent.getMessage(), is("Verification of catchup started")); assertThat(endEvent.getCommandId(), is(commandId)); - assertThat(endEvent.getCommandState(), is(COMMAND_COMPLETE)); + assertThat(endEvent.getCommandState(), is(verificationCommandResult.getCommandState())); assertThat(endEvent.getSystemCommand(), is(verifyCatchupCommand)); assertThat(endEvent.getStatusChangedAt(), is(completedAt)); - assertThat(endEvent.getMessage(), is("Verification of catchup complete")); + assertThat(endEvent.getMessage(), is(successMessage)); } @Test @@ -114,13 +117,13 @@ public void shouldFireFailedEventIfVerificationFails() throws Exception { ); when(clock.now()).thenReturn(startedAt, failedAt); - doThrow(nullPointerException).when(catchupVerificationProcess).runVerification(); + doThrow(nullPointerException).when(catchupVerificationProcess).runVerification(commandId); verifyCatchupCommandHandler.validateCatchup(verifyCatchupCommand, commandId); inOrder.verify(logger).info("Received VERIFY_CATCHUP command"); inOrder.verify(systemCommandStateChangedEventFirer).fire(systemCommandStateChangedEventCaptor.capture()); - inOrder.verify(catchupVerificationProcess).runVerification(); + inOrder.verify(catchupVerificationProcess).runVerification(commandId); inOrder.verify(logger).error("Verification of catchup failed: NullPointerException: Ooops", nullPointerException); inOrder.verify(systemCommandStateChangedEventFirer).fire(systemCommandStateChangedEventCaptor.capture()); diff --git a/event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/process/CatchupVerificationProcessTest.java b/event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/process/CatchupVerificationProcessTest.java index 4ddaff676..8dea46405 100644 --- a/event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/process/CatchupVerificationProcessTest.java +++ b/event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/process/CatchupVerificationProcessTest.java @@ -1,29 +1,38 @@ package uk.gov.justice.services.eventstore.management.validation.process; -import static java.util.Arrays.asList; -import static org.mockito.Mockito.inOrder; +import static java.util.Collections.singletonList; +import static java.util.UUID.randomUUID; +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.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.eventstore.management.validation.process.VerificationResult.error; -import static uk.gov.justice.services.eventstore.management.validation.process.VerificationResult.success; -import static uk.gov.justice.services.eventstore.management.validation.process.VerificationResult.warning; + +import uk.gov.justice.services.eventstore.management.validation.commands.VerificationCommandResult; + +import java.util.List; +import java.util.UUID; import org.junit.Test; import org.junit.runner.RunWith; -import org.mockito.InOrder; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; -import org.slf4j.Logger; @RunWith(MockitoJUnitRunner.class) public class CatchupVerificationProcessTest { @Mock - private Logger logger; + private VerificationRunner verificationRunner; + + @Mock + private VerificationResultFilter verificationResultFilter; + + @Mock + private VerificationResultsLogger verificationResultsLogger; @Mock - private VerifierProvider verifierProvider; + private CommandResultGenerator commandResultGenerator; @InjectMocks private CatchupVerificationProcess catchupVerificationProcess; @@ -31,31 +40,31 @@ public class CatchupVerificationProcessTest { @Test public void shouldRunTheVariousVerificationProcessesAndLogTheResults() throws Exception { - final VerificationResult error_1 = error("error 1"); - final VerificationResult error_2 = error("error 2"); - final VerificationResult warning_1 = warning("warning 1"); - final VerificationResult warning_2 = warning("warning 2"); - final VerificationResult success_1 = success("success 1"); - final VerificationResult success_2 = success("success 2"); + final UUID commandId = randomUUID(); - final Verifier verifier_1 = mock(Verifier.class); - final Verifier verifier_2 = mock(Verifier.class); + final List verificationResults = singletonList(mock(VerificationResult.class)); + final List successResults = singletonList(mock(VerificationResult.class)); + final List warningResults = singletonList(mock(VerificationResult.class)); + final List errorResults = singletonList(mock(VerificationResult.class)); - when(verifierProvider.getVerifiers()).thenReturn(asList(verifier_1, verifier_2)); - when(verifier_1.verify()).thenReturn(asList(warning_1, success_1, error_1)); - when(verifier_2.verify()).thenReturn(asList(success_2, warning_2, error_2)); + final VerificationCommandResult verificationCommandResult = mock(VerificationCommandResult.class); - catchupVerificationProcess.runVerification(); + when(verificationRunner.runVerifiers()).thenReturn(verificationResults); + when(verificationResultFilter.findSuccesses(verificationResults)).thenReturn(successResults); + when(verificationResultFilter.findWarnings(verificationResults)).thenReturn(warningResults); + when(verificationResultFilter.findErrors(verificationResults)).thenReturn(errorResults); - final InOrder inOrder = inOrder(logger); + when(commandResultGenerator.createCommandResult( + commandId, + successResults, + warningResults, + errorResults)).thenReturn(verificationCommandResult); - inOrder.verify(logger).info("Verification of Catchup completed with 2 Errors, 2 Warnings and 2 Successes"); + assertThat(catchupVerificationProcess.runVerification(commandId), is(verificationCommandResult)); - inOrder.verify(logger).error("ERROR: error 1"); - inOrder.verify(logger).error("ERROR: error 2"); - inOrder.verify(logger).warn("WARNING: warning 1"); - inOrder.verify(logger).warn("WARNING: warning 2"); - inOrder.verify(logger).info("SUCCESS: success 1"); - inOrder.verify(logger).info("SUCCESS: success 2"); + verify(verificationResultsLogger).logResults( + successResults, + warningResults, + errorResults); } } diff --git a/event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/process/CommandResultGeneratorTest.java b/event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/process/CommandResultGeneratorTest.java new file mode 100644 index 000000000..e77f1f37d --- /dev/null +++ b/event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/process/CommandResultGeneratorTest.java @@ -0,0 +1,90 @@ +package uk.gov.justice.services.eventstore.management.validation.process; + +import static java.util.Collections.emptyList; +import static java.util.Collections.singletonList; +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.assertThat; +import static org.mockito.Mockito.mock; +import static uk.gov.justice.services.jmx.api.domain.CommandState.COMMAND_COMPLETE; +import static uk.gov.justice.services.jmx.api.domain.CommandState.COMMAND_FAILED; + +import uk.gov.justice.services.eventstore.management.validation.commands.VerificationCommandResult; + +import java.util.List; +import java.util.UUID; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.runners.MockitoJUnitRunner; + + +@RunWith(MockitoJUnitRunner.class) +public class CommandResultGeneratorTest { + + @InjectMocks + private CommandResultGenerator commandResultGenerator; + + @Test + public void shouldGenerateSuccessfulResultIfNoErrorsExist() throws Exception { + + final UUID commandId = UUID.randomUUID(); + + final List successfulResults = singletonList(mock(VerificationResult.class)); + final List warningResults = emptyList(); + final List errorResults = emptyList(); + + final VerificationCommandResult verificationCommandResult = commandResultGenerator.createCommandResult( + commandId, + successfulResults, + warningResults, + errorResults + ); + + assertThat(verificationCommandResult.getCommandId(), is(commandId)); + assertThat(verificationCommandResult.getCommandState(), is(COMMAND_COMPLETE)); + assertThat(verificationCommandResult.getMessage(), is("Verification of Catchup completed successfully with 0 Error(s), 0 Warning(s) and 1 Success(es)")); + } + + @Test + public void shouldStillMarkAsSuccessfulIfWarningsExist() throws Exception { + + final UUID commandId = UUID.randomUUID(); + + final List successfulResults = singletonList(mock(VerificationResult.class)); + final List warningResults = singletonList(mock(VerificationResult.class)); + final List errorResults = emptyList(); + + final VerificationCommandResult verificationCommandResult = commandResultGenerator.createCommandResult( + commandId, + successfulResults, + warningResults, + errorResults + ); + + assertThat(verificationCommandResult.getCommandId(), is(commandId)); + assertThat(verificationCommandResult.getCommandState(), is(COMMAND_COMPLETE)); + assertThat(verificationCommandResult.getMessage(), is("Verification of Catchup completed successfully with 0 Error(s), 1 Warning(s) and 1 Success(es)")); + } + + @Test + public void shouldGenerateErrorResultIfAnyErrorsExist() throws Exception { + + final UUID commandId = UUID.randomUUID(); + + final List successfulResults = singletonList(mock(VerificationResult.class)); + final List warningResults = singletonList(mock(VerificationResult.class)); + final List errorResults = singletonList(mock(VerificationResult.class)); + + final VerificationCommandResult verificationCommandResult = commandResultGenerator.createCommandResult( + commandId, + successfulResults, + warningResults, + errorResults + ); + + assertThat(verificationCommandResult.getCommandId(), is(commandId)); + assertThat(verificationCommandResult.getCommandState(), is(COMMAND_FAILED)); + assertThat(verificationCommandResult.getMessage(), is("Verification of Catchup failed with 1 Error(s), 1 Warning(s) and 1 Success(es)")); + } +} diff --git a/event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/process/VerificationResultFilterTest.java b/event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/process/VerificationResultFilterTest.java new file mode 100644 index 000000000..8a7eea7a6 --- /dev/null +++ b/event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/process/VerificationResultFilterTest.java @@ -0,0 +1,127 @@ +package uk.gov.justice.services.eventstore.management.validation.process; + +import static java.util.Arrays.asList; +import static org.hamcrest.CoreMatchers.hasItem; +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.assertThat; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; +import static uk.gov.justice.services.eventstore.management.validation.process.VerificationResult.VerificationResultType.ERROR; +import static uk.gov.justice.services.eventstore.management.validation.process.VerificationResult.VerificationResultType.SUCCESS; +import static uk.gov.justice.services.eventstore.management.validation.process.VerificationResult.VerificationResultType.WARNING; + +import java.util.List; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.runners.MockitoJUnitRunner; + +@RunWith(MockitoJUnitRunner.class) +public class VerificationResultFilterTest { + + @InjectMocks + private VerificationResultFilter verificationResultFilter; + + @Test + public void shouldFindAllSuccessfulResults() throws Exception { + + final VerificationResult successfulResult_1 = mock(VerificationResult.class); + final VerificationResult successfulResult_2 = mock(VerificationResult.class); + final VerificationResult warningResult_1 = mock(VerificationResult.class); + final VerificationResult warningResult_2 = mock(VerificationResult.class); + final VerificationResult errorResult_1 = mock(VerificationResult.class); + final VerificationResult errorResult_2 = mock(VerificationResult.class); + + final List verificationResults = asList( + successfulResult_1, + successfulResult_2, + warningResult_1, + warningResult_2, + errorResult_1, + errorResult_2 + ); + + when(successfulResult_1.getVerificationResultType()).thenReturn(SUCCESS); + when(successfulResult_2.getVerificationResultType()).thenReturn(SUCCESS); + when(warningResult_1.getVerificationResultType()).thenReturn(WARNING); + when(warningResult_2.getVerificationResultType()).thenReturn(WARNING); + when(errorResult_1.getVerificationResultType()).thenReturn(ERROR); + when(errorResult_2.getVerificationResultType()).thenReturn(ERROR); + + final List successfulResults = verificationResultFilter.findSuccesses(verificationResults); + + assertThat(successfulResults.size(), is(2)); + + assertThat(successfulResults, hasItem(successfulResult_1)); + assertThat(successfulResults, hasItem(successfulResult_2)); + } + + @Test + public void shouldFindAllWarningResults() throws Exception { + + final VerificationResult successfulResult_1 = mock(VerificationResult.class); + final VerificationResult successfulResult_2 = mock(VerificationResult.class); + final VerificationResult warningResult_1 = mock(VerificationResult.class); + final VerificationResult warningResult_2 = mock(VerificationResult.class); + final VerificationResult errorResult_1 = mock(VerificationResult.class); + final VerificationResult errorResult_2 = mock(VerificationResult.class); + + final List verificationResults = asList( + successfulResult_1, + successfulResult_2, + warningResult_1, + warningResult_2, + errorResult_1, + errorResult_2 + ); + + when(successfulResult_1.getVerificationResultType()).thenReturn(SUCCESS); + when(successfulResult_2.getVerificationResultType()).thenReturn(SUCCESS); + when(warningResult_1.getVerificationResultType()).thenReturn(WARNING); + when(warningResult_2.getVerificationResultType()).thenReturn(WARNING); + when(errorResult_1.getVerificationResultType()).thenReturn(ERROR); + when(errorResult_2.getVerificationResultType()).thenReturn(ERROR); + + final List warningResults = verificationResultFilter.findWarnings(verificationResults); + + assertThat(warningResults.size(), is(2)); + + assertThat(warningResults, hasItem(warningResult_1)); + assertThat(warningResults, hasItem(warningResult_2)); + } + + @Test + public void shouldFindAllErrorResults() throws Exception { + + final VerificationResult successfulResult_1 = mock(VerificationResult.class); + final VerificationResult successfulResult_2 = mock(VerificationResult.class); + final VerificationResult warningResult_1 = mock(VerificationResult.class); + final VerificationResult warningResult_2 = mock(VerificationResult.class); + final VerificationResult errorResult_1 = mock(VerificationResult.class); + final VerificationResult errorResult_2 = mock(VerificationResult.class); + + final List verificationResults = asList( + successfulResult_1, + successfulResult_2, + warningResult_1, + warningResult_2, + errorResult_1, + errorResult_2 + ); + + when(successfulResult_1.getVerificationResultType()).thenReturn(SUCCESS); + when(successfulResult_2.getVerificationResultType()).thenReturn(SUCCESS); + when(warningResult_1.getVerificationResultType()).thenReturn(WARNING); + when(warningResult_2.getVerificationResultType()).thenReturn(WARNING); + when(errorResult_1.getVerificationResultType()).thenReturn(ERROR); + when(errorResult_2.getVerificationResultType()).thenReturn(ERROR); + + final List errorResults = verificationResultFilter.findErrors(verificationResults); + + assertThat(errorResults.size(), is(2)); + + assertThat(errorResults, hasItem(errorResult_1)); + assertThat(errorResults, hasItem(errorResult_2)); + } +} diff --git a/event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/process/VerificationResultsLoggerTest.java b/event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/process/VerificationResultsLoggerTest.java new file mode 100644 index 000000000..7320bde3d --- /dev/null +++ b/event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/process/VerificationResultsLoggerTest.java @@ -0,0 +1,62 @@ +package uk.gov.justice.services.eventstore.management.validation.process; + +import static java.util.Arrays.asList; +import static org.mockito.Mockito.inOrder; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import java.util.List; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InOrder; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.runners.MockitoJUnitRunner; +import org.slf4j.Logger; + + +@RunWith(MockitoJUnitRunner.class) +public class VerificationResultsLoggerTest { + + @Mock + private Logger logger; + + @InjectMocks + private VerificationResultsLogger verificationResultsLogger; + + @Test + public void shouldLogAllSuccessesWarningsAndErrors() throws Exception { + + final VerificationResult successfulResult_1 = mock(VerificationResult.class); + final VerificationResult successfulResult_2 = mock(VerificationResult.class); + final VerificationResult warningResult_1 = mock(VerificationResult.class); + final VerificationResult warningResult_2 = mock(VerificationResult.class); + final VerificationResult errorResult_1 = mock(VerificationResult.class); + final VerificationResult errorResult_2 = mock(VerificationResult.class); + + final List successResults = asList(successfulResult_1, successfulResult_2); + final List warningResults = asList(warningResult_1, warningResult_2); + final List errorResults = asList(errorResult_1, errorResult_2); + + when(successfulResult_1.getMessage()).thenReturn("Success 1"); + when(successfulResult_2.getMessage()).thenReturn("Success 2"); + when(warningResult_1.getMessage()).thenReturn("Warning 1"); + when(warningResult_2.getMessage()).thenReturn("Warning 2"); + when(errorResult_1.getMessage()).thenReturn("Error 1"); + when(errorResult_2.getMessage()).thenReturn("Error 2"); + + verificationResultsLogger.logResults(successResults, warningResults, errorResults); + + final InOrder inOrder = inOrder(logger); + + inOrder.verify(logger).info("Verification of Catchup completed with 2 Errors, 2 Warnings and 2 Successes"); + inOrder.verify(logger).error("ERROR: Error 1"); + inOrder.verify(logger).error("ERROR: Error 2"); + inOrder.verify(logger).warn("WARNING: Warning 1"); + inOrder.verify(logger).warn("WARNING: Warning 2"); + inOrder.verify(logger).info("SUCCESS: Success 1"); + inOrder.verify(logger).info("SUCCESS: Success 2"); + + } +} diff --git a/event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/process/VerificationRunnerTest.java b/event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/process/VerificationRunnerTest.java new file mode 100644 index 000000000..88d0b5409 --- /dev/null +++ b/event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/process/VerificationRunnerTest.java @@ -0,0 +1,54 @@ +package uk.gov.justice.services.eventstore.management.validation.process; + +import static java.util.Arrays.asList; +import static java.util.Collections.singletonList; +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.assertThat; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import java.util.List; + +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 VerificationRunnerTest { + + @Mock + private VerifierProvider verifierProvider; + + @InjectMocks + private VerificationRunner verificationRunner; + + @Test + public void shouldFindAndRunVerifiers() throws Exception { + + final Verifier verifier_1 = mock(Verifier.class); + final Verifier verifier_2 = mock(Verifier.class); + final Verifier verifier_3 = mock(Verifier.class); + + final VerificationResult verificationResult_1_a = mock(VerificationResult.class); + final VerificationResult verificationResult_1_b = mock(VerificationResult.class); + final VerificationResult verificationResult_2 = mock(VerificationResult.class); + final VerificationResult verificationResult_3 = mock(VerificationResult.class); + + when(verifierProvider.getVerifiers()).thenReturn(asList(verifier_1, verifier_2, verifier_3)); + + when(verifier_1.verify()).thenReturn(asList(verificationResult_1_a, verificationResult_1_b)); + when(verifier_2.verify()).thenReturn(singletonList(verificationResult_2)); + when(verifier_3.verify()).thenReturn(singletonList(verificationResult_3)); + + final List verificationResults = verificationRunner.runVerifiers(); + + assertThat(verificationResults.size(), is(4)); + + assertThat(verificationResults.get(0), is(verificationResult_1_a)); + assertThat(verificationResults.get(1), is(verificationResult_1_b)); + assertThat(verificationResults.get(2), is(verificationResult_2)); + assertThat(verificationResults.get(3), is(verificationResult_3)); + } +} diff --git a/event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/process/VerifierProviderTest.java b/event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/process/VerifierProviderTest.java index 0cdda53ef..7f1021239 100644 --- a/event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/process/VerifierProviderTest.java +++ b/event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/process/VerifierProviderTest.java @@ -3,6 +3,12 @@ import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; +import uk.gov.justice.services.eventstore.management.validation.process.verifiers.ProcessedEventCountVerifier; +import uk.gov.justice.services.eventstore.management.validation.process.verifiers.ProcessedEventLinkVerifier; +import uk.gov.justice.services.eventstore.management.validation.process.verifiers.PublishedEventCountVerifier; +import uk.gov.justice.services.eventstore.management.validation.process.verifiers.PublishedEventLinkVerifier; +import uk.gov.justice.services.eventstore.management.validation.process.verifiers.StreamBufferEmptyVerifier; + import java.util.List; import org.junit.Test; diff --git a/event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/process/AllEventsInStreamsVerifierTest.java b/event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/process/verifiers/AllEventsInStreamsVerifierTest.java similarity index 93% rename from event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/process/AllEventsInStreamsVerifierTest.java rename to event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/process/verifiers/AllEventsInStreamsVerifierTest.java index efafae986..d74ec4baf 100644 --- a/event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/process/AllEventsInStreamsVerifierTest.java +++ b/event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/process/verifiers/AllEventsInStreamsVerifierTest.java @@ -1,4 +1,4 @@ -package uk.gov.justice.services.eventstore.management.validation.process; +package uk.gov.justice.services.eventstore.management.validation.process.verifiers; import static com.google.common.collect.Sets.newHashSet; import static java.util.UUID.fromString; @@ -13,6 +13,10 @@ import static uk.gov.justice.services.eventstore.management.validation.process.VerificationResult.VerificationResultType.WARNING; import uk.gov.justice.services.eventsourcing.source.core.EventStoreDataSourceProvider; +import uk.gov.justice.services.eventstore.management.validation.process.ActiveStreamIdProvider; +import uk.gov.justice.services.eventstore.management.validation.process.AllEventsInStreamsVerifier; +import uk.gov.justice.services.eventstore.management.validation.process.CatchupVerificationException; +import uk.gov.justice.services.eventstore.management.validation.process.VerificationResult; import java.sql.Connection; import java.sql.PreparedStatement; diff --git a/event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/process/ProcessedEventCountVerifierTest.java b/event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/process/verifiers/ProcessedEventCountVerifierTest.java similarity index 96% rename from event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/process/ProcessedEventCountVerifierTest.java rename to event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/process/verifiers/ProcessedEventCountVerifierTest.java index d97bc8e7b..776cf8155 100644 --- a/event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/process/ProcessedEventCountVerifierTest.java +++ b/event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/process/verifiers/ProcessedEventCountVerifierTest.java @@ -1,4 +1,4 @@ -package uk.gov.justice.services.eventstore.management.validation.process; +package uk.gov.justice.services.eventstore.management.validation.process.verifiers; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; @@ -8,6 +8,8 @@ import static uk.gov.justice.services.eventstore.management.validation.process.VerificationResult.VerificationResultType.SUCCESS; import uk.gov.justice.services.eventsourcing.source.core.EventStoreDataSourceProvider; +import uk.gov.justice.services.eventstore.management.validation.process.TableRowCounter; +import uk.gov.justice.services.eventstore.management.validation.process.VerificationResult; import uk.gov.justice.services.jdbc.persistence.ViewStoreJdbcDataSourceProvider; import java.util.List; diff --git a/event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/process/ProcessedEventLinkVerifierTest.java b/event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/process/verifiers/ProcessedEventLinkVerifierTest.java similarity index 88% rename from event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/process/ProcessedEventLinkVerifierTest.java rename to event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/process/verifiers/ProcessedEventLinkVerifierTest.java index 45a7fa5e0..f4ff38912 100644 --- a/event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/process/ProcessedEventLinkVerifierTest.java +++ b/event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/process/verifiers/ProcessedEventLinkVerifierTest.java @@ -1,4 +1,4 @@ -package uk.gov.justice.services.eventstore.management.validation.process; +package uk.gov.justice.services.eventstore.management.validation.process.verifiers; import static java.util.Collections.singletonList; import static org.hamcrest.CoreMatchers.is; @@ -6,6 +6,8 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import uk.gov.justice.services.eventstore.management.validation.process.EventLinkageChecker; +import uk.gov.justice.services.eventstore.management.validation.process.VerificationResult; import uk.gov.justice.services.jdbc.persistence.ViewStoreJdbcDataSourceProvider; import java.util.List; diff --git a/event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/process/PublishedEventCountVerifierTest.java b/event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/process/verifiers/PublishedEventCountVerifierTest.java similarity index 93% rename from event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/process/PublishedEventCountVerifierTest.java rename to event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/process/verifiers/PublishedEventCountVerifierTest.java index 9a351d7da..d50d3f8e4 100644 --- a/event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/process/PublishedEventCountVerifierTest.java +++ b/event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/process/verifiers/PublishedEventCountVerifierTest.java @@ -1,4 +1,4 @@ -package uk.gov.justice.services.eventstore.management.validation.process; +package uk.gov.justice.services.eventstore.management.validation.process.verifiers; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; @@ -8,6 +8,9 @@ import static uk.gov.justice.services.eventstore.management.validation.process.VerificationResult.VerificationResultType.SUCCESS; import uk.gov.justice.services.eventsourcing.source.core.EventStoreDataSourceProvider; +import uk.gov.justice.services.eventstore.management.validation.process.EventLogActiveEventRowCounter; +import uk.gov.justice.services.eventstore.management.validation.process.TableRowCounter; +import uk.gov.justice.services.eventstore.management.validation.process.VerificationResult; import java.util.List; diff --git a/event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/process/PublishedEventLinkVerifierTest.java b/event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/process/verifiers/PublishedEventLinkVerifierTest.java similarity index 88% rename from event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/process/PublishedEventLinkVerifierTest.java rename to event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/process/verifiers/PublishedEventLinkVerifierTest.java index 22fea70e2..848f097df 100644 --- a/event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/process/PublishedEventLinkVerifierTest.java +++ b/event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/process/verifiers/PublishedEventLinkVerifierTest.java @@ -1,4 +1,4 @@ -package uk.gov.justice.services.eventstore.management.validation.process; +package uk.gov.justice.services.eventstore.management.validation.process.verifiers; import static java.util.Collections.singletonList; import static org.hamcrest.CoreMatchers.is; @@ -7,6 +7,8 @@ import static org.mockito.Mockito.when; import uk.gov.justice.services.eventsourcing.source.core.EventStoreDataSourceProvider; +import uk.gov.justice.services.eventstore.management.validation.process.EventLinkageChecker; +import uk.gov.justice.services.eventstore.management.validation.process.VerificationResult; import java.util.List; diff --git a/event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/process/StreamBufferEmptyVerifierTest.java b/event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/process/verifiers/StreamBufferEmptyVerifierTest.java similarity index 92% rename from event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/process/StreamBufferEmptyVerifierTest.java rename to event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/process/verifiers/StreamBufferEmptyVerifierTest.java index 34e3c6a7a..0b9f53a4a 100644 --- a/event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/process/StreamBufferEmptyVerifierTest.java +++ b/event-store-management/event-store-management-core/src/test/java/uk/gov/justice/services/eventstore/management/validation/process/verifiers/StreamBufferEmptyVerifierTest.java @@ -1,4 +1,4 @@ -package uk.gov.justice.services.eventstore.management.validation.process; +package uk.gov.justice.services.eventstore.management.validation.process.verifiers; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; @@ -7,6 +7,8 @@ import static uk.gov.justice.services.eventstore.management.validation.process.VerificationResult.VerificationResultType.ERROR; import static uk.gov.justice.services.eventstore.management.validation.process.VerificationResult.VerificationResultType.SUCCESS; +import uk.gov.justice.services.eventstore.management.validation.process.TableRowCounter; +import uk.gov.justice.services.eventstore.management.validation.process.VerificationResult; import uk.gov.justice.services.jdbc.persistence.ViewStoreJdbcDataSourceProvider; import java.util.List; diff --git a/pom.xml b/pom.xml index 9661572ba..3ca34f766 100644 --- a/pom.xml +++ b/pom.xml @@ -40,7 +40,7 @@ event-store 4.1.0 - 6.2.0 + 6.2.1 2.4.0 1.20.2 1.24.3