public void reportVerificationResults(Boolean allPassed) { ProviderVerifierKt.reportVerificationResults(pact, allPassed, providerVersion()); }
/** * {@inheritDoc} */ @Override public void testInteraction(final String consumerName, final Interaction interaction, PactSource source) { ProviderInfo provider = getProviderInfo(source); ConsumerInfo consumer = new ConsumerInfo(consumerName); ProviderVerifier verifier = setupVerifier(interaction, provider, consumer); Map<String, Object> failures = new HashMap<>(); ProviderClient client = new ProviderClient(provider, new HttpClientFactory()); verifier.verifyResponseFromProvider(provider, interaction, interaction.getDescription(), failures, client); reportTestResult(failures.isEmpty(), verifier); try { if (!failures.isEmpty()) { verifier.displayFailures(failures); throw getAssertionError(failures); } } finally { verifier.finialiseReports(); } }
private ProviderVerifier setupVerifier(RequestResponseInteraction interaction, ProviderInfo provider, ConsumerInfo consumer) { ProviderVerifier verifier = new ProviderVerifier(); setupReporters(verifier, provider.getName(), interaction.getDescription()); verifier.initialiseReporters(provider); verifier.reportVerificationForConsumer(consumer, provider); if (interaction.getProviderState() != null) { verifier.reportStateForInteraction(interaction.getProviderState(), provider, consumer, true); } verifier.reportInteractionDescription(interaction); return verifier; }
protected ProviderInfo getProviderInfo(PactSource source) { Provider provider = testClass.getAnnotation(Provider.class); final ProviderInfo providerInfo = new ProviderInfo(provider.value()); providerInfo.setPort(port); providerInfo.setHost(host); providerInfo.setProtocol(protocol); providerInfo.setPath(path); providerInfo.setInsecure(insecure); if (testClass != null) { final List<FrameworkMethod> methods = testClass.getAnnotatedMethods(TargetRequestFilter.class); if (!methods.isEmpty()) { providerInfo.setRequestFilter((Consumer<HttpRequest>) httpRequest -> methods.forEach(method -> { try { method.invokeExplosively(testTarget, httpRequest); } catch (Throwable t) { throw new AssertionError("Request filter method " + method.getName() + " failed with an exception", t); } })); } } return providerInfo; } }
protected void setupReporters(ProviderVerifier verifier, String name, String description) { String reportDirectory = "target/pact/reports"; String[] reports = new String[]{}; boolean reportingEnabled = false; VerificationReports verificationReports = testClass.getAnnotation(VerificationReports.class); if (verificationReports != null) { reportingEnabled = true; reportDirectory = verificationReports.reportDir(); reports = verificationReports.value(); } else if (valueResolver.propertyDefined("pact.verification.reports")) { reportingEnabled = true; reportDirectory = valueResolver.resolveValue("pact.verification.reportDir:" + reportDirectory); reports = valueResolver.resolveValue("pact.verification.reports:").split(","); } if (reportingEnabled) { File reportDir = new File(reportDirectory); reportDir.mkdirs(); verifier.setReporters(Seq.of(reports) .filter(r -> !r.isEmpty()) .map(r -> { VerifierReporter reporter = ReporterManager.createReporter(r.trim()); reporter.setReportDir(reportDir); reporter.setReportFile(new File(reportDir, name + " - " + description + reporter.getExt())); return reporter; }).toList()); } }
private void setupReporters(ProviderVerifier verifier, String name, String description) { String reportDirectory = "target/pact/reports"; String[] reports = new String[]{}; boolean reportingEnabled = false; VerificationReports verificationReports = testClass.getAnnotation(VerificationReports.class); if (verificationReports != null) { reportingEnabled = true; reportDirectory = verificationReports.reportDir(); reports = verificationReports.value(); } else if (systemPropertyResolver.propertyDefined("pact.verification.reports")) { reportingEnabled = true; reportDirectory = systemPropertyResolver.resolveValue("pact.verification.reportDir:" + reportDirectory); reports = systemPropertyResolver.resolveValue("pact.verification.reports:").split(","); } if (reportingEnabled) { File reportDir = new File(reportDirectory); reportDir.mkdirs(); verifier.setReporters(Arrays.stream(reports) .filter(r -> !r.isEmpty()) .map(r -> { VerifierReporter reporter = ReporterManager.createReporter(r.trim()); reporter.setReportDir(reportDir); reporter.setReportFile(new File(reportDir, name + " - " + description + reporter.getExt())); return reporter; }).collect(Collectors.toList())); } }
@Override public void testInteraction(String consumerName, RequestResponseInteraction interaction) { ProviderInfo provider = getProviderInfo(); ConsumerInfo consumer = new ConsumerInfo(consumerName); ProviderVerifier verifier = setupVerifier(interaction, provider, consumer); Map<String, Object> failures = new HashMap<>(); verifier.verifyResponseFromProvider(provider, interaction, interaction.getDescription(), failures); try { if (!failures.isEmpty()) { verifier.displayFailures(failures); throw getAssertionError(failures); } } finally { verifier.finialiseReports(); } }
public void run(final RunNotifier notifier) { boolean allPassed = true; for (final Interaction interaction : pact.getInteractions()) { final Description description = describeChild(interaction); notifier.fireTestStarted(description); try { interactionBlock(interaction, pactSource).evaluate(); } catch (final Throwable e) { notifier.fireTestFailure(new Failure(description, e)); allPassed = false; } finally { notifier.fireTestFinished(description); } } boolean publishingDisabled = results.values() .stream().anyMatch(pair -> pair.getSecond().publishingResultsDisabled()); if (!publishingDisabled && (!(pact instanceof FilteredPact) || ((FilteredPact) pact).isNotFiltered())) { reportVerificationResults(allPassed); } else { if (publishingDisabled) { LOGGER.warn("Skipping publishing of verification results (" + PACT_VERIFIER_PUBLISHRESULTS + " is not set to 'true')"); } else { LOGGER.warn("Skipping publishing of verification results as the interactions have been filtered"); } } }
@Override public void warnProviderHasNoConsumers(ProviderInfo providerInfo) { appendTextEntry( String.format("WARNING: There are no consumers to verify for provider %s", providerInfo.getName()), this.verificationGroup); }
Pact loadPact(ConsumerInfo consumer, Map options) { Pact pact = PactReader.loadPact(options, consumer.getPactSource()); Map<Consumer, List<Pact>> pacts = this.pactSource.getPacts(); Consumer pactConsumer = consumer.toPactConsumer(); List<Pact> pactList = pacts.getOrDefault(pactConsumer, new ArrayList<>()); pactList.add(pact); pacts.put(pactConsumer, pactList); return pact; }
@PactVerifyProvider("a user created message") public String verifyUserCreatedMessage() throws IOException { // given doNothing().when(publisher).publishMessage(any(String.class), eq("user.created")); // when UserCreatedMessage message = UserCreatedMessage.builder() .messageUuid(UUID.randomUUID().toString()) .user(User.builder() .id(42L) .name("Zaphod Beeblebrox") .build()) .build(); messageProducer.produceUserCreatedMessage(message); // then ArgumentCaptor<String> messageCapture = ArgumentCaptor.forClass(String.class); verify(publisher, times(1)).publishMessage(messageCapture.capture(), eq("user.created")); // returning the message return messageCapture.getValue(); } }
.filter(m -> { PactVerifyProvider annotation = m.getAnnotation(PactVerifyProvider.class); return annotation.value().equals(((Interaction)interaction).getDescription()); }) .collect(Collectors.toSet());
private ProviderVerifier setupVerifier(RequestResponseInteraction interaction, ProviderInfo provider, ConsumerInfo consumer) { ProviderVerifier verifier = new ProviderVerifier(); setupReporters(verifier, provider.getName(), interaction.getDescription()); verifier.initialiseReporters(provider); verifier.reportVerificationForConsumer(consumer, provider); if (interaction.getProviderState() != null) { verifier.reportStateForInteraction(interaction.getProviderState(), provider, consumer, true); } verifier.reportInteractionDescription(interaction); return verifier; }
private ProviderInfo getProviderInfo() { Provider provider = testClass.getAnnotation(Provider.class); final ProviderInfo providerInfo = new ProviderInfo(provider.value()); providerInfo.setPort(port); providerInfo.setHost(host); providerInfo.setProtocol(protocol); providerInfo.setPath(path); providerInfo.setInsecure(insecure); if (testClass != null && testInstance != null) { final Method[] methods = testClass.getMethods(TargetRequestFilter.class); if (methods != null && methods.length > 0) { providerInfo.setRequestFilter((Consumer<HttpRequest>) httpRequest -> Arrays.stream(methods).forEach(method -> { try { method.invoke(testInstance, httpRequest); } catch (Throwable t) { throw new AssertionError("Request filter method " + method.getName() + " failed with an exception", t); } })); } } return providerInfo; }
File reportDir = new File(reportDirectory); reportDir.mkdirs(); verifier.setReporters(Arrays.stream(reports) .filter(r -> !r.isEmpty()) .map(r -> { return injector.inject(new ArquillianVerifierReporter()); } else { VerifierReporter reporter = ReporterManager.createReporter(reportType); reporter.setReportDir(reportDir); reporter.setReportFile(new File(reportDir, name + " - " + description + reporter.getExt())); return reporter;
@Override public void testInteraction(String consumerName, RequestResponseInteraction interaction) { ProviderInfo provider = getProviderInfo(); ConsumerInfo consumer = new ConsumerInfo(consumerName); ProviderVerifier verifier = setupVerifier(interaction, provider, consumer); Map<String, Object> failures = new HashMap<>(); verifier.verifyResponseFromProvider(provider, interaction, interaction.getDescription(), failures); try { if (!failures.isEmpty()) { verifier.displayFailures(failures); throw getAssertionError(failures); } } finally { verifier.finialiseReports(); } }
@Override protected ProviderVerifier setupVerifier(Interaction interaction, ProviderInfo provider, ConsumerInfo consumer) { ProviderVerifier verifier = new ProviderVerifier(); setupReporters(verifier, provider.getName(), interaction.getDescription()); verifier.initialiseReporters(provider); verifier.reportVerificationForConsumer(consumer, provider); if (!interaction.getProviderStates().isEmpty()) { for (ProviderState providerState: interaction.getProviderStates()) { verifier.reportStateForInteraction(providerState.getName(), provider, consumer, true); } } verifier.reportInteractionDescription(interaction); return verifier; }
private ProviderInfo getProviderInfo() { Provider provider = testClass.getAnnotation(Provider.class); final ProviderInfo providerInfo = new ProviderInfo(provider.value()); providerInfo.setPort(port); providerInfo.setHost(host); providerInfo.setProtocol(protocol); providerInfo.setPath(path); providerInfo.setInsecure(insecure); if (testClass != null && testInstance != null) { final Method[] methods = testClass.getMethods(TargetRequestFilter.class); if (methods != null && methods.length > 0) { providerInfo.setRequestFilter( (Consumer<HttpRequest>) httpRequest -> Arrays.stream(methods).forEach(method -> { try { method.invoke(testInstance, httpRequest); } catch (Throwable t) { throw new AssertionError( "Request filter method " + method.getName() + " failed with an exception", t); } })); } } return providerInfo; }
@NotNull @Override protected ProviderVerifier setupVerifier(Interaction interaction, ProviderInfo provider, ConsumerInfo consumer) { ProviderVerifier verifier = new CustomProviderVerifier(getPackagesToScan()); setupReporters(verifier, provider.getName(), interaction.getDescription()); verifier.initialiseReporters(provider); verifier.reportVerificationForConsumer(consumer, provider); if (!interaction.getProviderStates().isEmpty()) { for (ProviderState state : interaction.getProviderStates()) { verifier.reportStateForInteraction(state.getName(), provider, consumer, true); } } verifier.reportInteractionDescription(interaction); return verifier; } }