Skip to content

Commit

Permalink
Merge d234278 into c2b3b29
Browse files Browse the repository at this point in the history
  • Loading branch information
Felipe444 committed May 8, 2019
2 parents c2b3b29 + d234278 commit 74c0a85
Show file tree
Hide file tree
Showing 10 changed files with 141 additions and 0 deletions.
2 changes: 2 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
language: java
sudo: true
jdk:
- openjdk8

cache:
directories:
Expand Down
5 changes: 5 additions & 0 deletions judge-d-server/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,11 @@
<artifactId>spring-jdbc</artifactId>
<version>5.1.3.RELEASE</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-jsonSchema</artifactId>
<version>2.9.8</version>
</dependency>

<!--TEST-->
<dependency>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package dev.hltech.dredd.domain.validation.jms;

import lombok.Data;

import java.util.List;

@Data
public class Capabilities {
private final List<Contract> contracts;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package dev.hltech.dredd.domain.validation.jms;

import com.fasterxml.jackson.module.jsonSchema.JsonSchema;
import lombok.Data;

@Data
public class Contract {
private final DestinationType destinationType;
private final String destinationName;
private final JsonSchema body;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package dev.hltech.dredd.domain.validation.jms;

public enum DestinationType {
QUEUE,
TOPIC
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package dev.hltech.dredd.domain.validation.jms;

import com.google.common.collect.Multimap;
import lombok.Data;

@Data
public class Expectations {
private final Multimap<String, Contract> providerNameToContracts;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package dev.hltech.dredd.domain.validation.jms;

import lombok.Data;

@Data
public class Service {

private final String name;
private final Capabilities capabilities;
private final Expectations expectations;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package dev.hltech.dredd.domain.validation.jms;

import lombok.Getter;
import lombok.RequiredArgsConstructor;

@Getter
@RequiredArgsConstructor
public enum ValidationError {
MISSING_ENDPOINT("Missing endpoint required by consumer"),
WRONG_SCHEMA("Wrong schema of the message");

private final String description;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package dev.hltech.dredd.domain.validation.jms;

import lombok.Data;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

@Data
public class ValidationResult {
private final boolean isValid;
private final String description;
private final List<ValidationError> errors;

public static ValidationResult success(Contract expectation, List<Contract> capabilities) {
return new ValidationResult(true, String.format("Expectation: %s, capabilities: %s", expectation, capabilities), new ArrayList<>());
}

public static ValidationResult failure(Contract expectation, List<Contract> capabilities, ValidationError... errors) {
return new ValidationResult(false, String.format("Expectation: %s, capabilities: %s", expectation, capabilities), Arrays.asList(errors));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package dev.hltech.dredd.domain.validation.jms;

import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;

public class VauntValidator {

public List<ValidationResult> validate(Service consumer, Service provider) {
return consumer.getExpectations().getProviderNameToContracts().get(provider.getName()).stream()
.map(consumerContract -> validateWithMatchingProviderContract(
consumerContract, provider.getCapabilities().getContracts()))
.collect(Collectors.toList());
}

public List<ValidationResult> validate(List<Contract> expectations, List<Contract> capabilities) {
return expectations.stream()
.map(consumerContract -> validateWithMatchingProviderContract(consumerContract, capabilities))
.collect(Collectors.toList());
}

private ValidationResult validateWithMatchingProviderContract(
Contract consumerContract, List<Contract> providerContracts) {
List<Contract> contracts = providerContracts.stream()
.filter(providerContract -> isEndpointMatching(consumerContract, providerContract))
.collect(Collectors.toList());

if (contracts.isEmpty()) {
return ValidationResult.failure(consumerContract, providerContracts, ValidationError.MISSING_ENDPOINT);
}

Optional<Contract> matchingProviderContract = contracts.stream()
.filter(providerContract -> isSchemaMatching(consumerContract, providerContract))
.findFirst();

if (!matchingProviderContract.isPresent()) {
return ValidationResult.failure(consumerContract, providerContracts, ValidationError.WRONG_SCHEMA);
}

return ValidationResult.success(consumerContract, providerContracts);
}

private boolean isEndpointMatching(Contract firstContract, Contract secondContract) {
return firstContract.getDestinationType().equals(secondContract.getDestinationType())
&& firstContract.getDestinationName().equals(secondContract.getDestinationName());
}

private boolean isSchemaMatching(Contract firstContract, Contract secondContract) {
return firstContract.getBody().equals(secondContract.getBody());
}

}

0 comments on commit 74c0a85

Please sign in to comment.