Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -223,10 +223,33 @@ class TransportVersionValidationFuncTest extends AbstractTransportVersionFuncTes

def "unreferable definitions can have primary ids that are patches"() {
given:
unreferableTransportVersion("initial_10.0.1", "10000001")
unreferableTransportVersion("initial_7.0.1", "7000001")
when:
def result = gradleRunner(":myserver:validateTransportVersionResources").build()
then:
result.task(":myserver:validateTransportVersionResources").outcome == TaskOutcome.SUCCESS
}

def "highest id in an referable definition should exist in an upper bounds file"() {
given:
referableAndReferencedTransportVersion("some_tv", "10000000")
when:
def result = validateResourcesFails()
then:
assertValidateResourcesFailure(result, "Transport version definition file " +
"[myserver/src/main/resources/transport/definitions/referable/some_tv.csv] " +
"has the highest transport version id [10000000] but is not present in any upper bounds files")
}

def "highest id in an unreferable definition should exist in an upper bounds file"() {
given:
unreferableTransportVersion("initial_10.0.0", "10000000")
when:
def result = validateResourcesFails()
then:
// TODO: this should be _unreferable_ in the error message, but will require some rework
assertValidateResourcesFailure(result, "Transport version definition file " +
"[myserver/src/main/resources/transport/definitions/referable/initial_10.0.0.csv] " +
"has the highest transport version id [10000000] but is not present in any upper bounds files")
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,8 @@ public void validateTransportVersions() throws IOException {
for (var upperBound : upperBounds.values()) {
validateUpperBound(upperBound, allDefinitions, idsByBase);
}

validateLargestIdIsUsed(upperBounds, allDefinitions);
}

private Map<String, TransportVersionDefinition> collectAllDefinitions(
Expand Down Expand Up @@ -253,6 +255,27 @@ private void validateBase(int base, List<IdAndDefinition> ids) {
}
}

private void validateLargestIdIsUsed(
Map<String, TransportVersionUpperBound> upperBounds,
Map<String, TransportVersionDefinition> allDefinitions
) {
// first id is always the highest within a definition, and validated earlier
// note we use min instead of max because the id comparator is in descending order
var highestDefinition = allDefinitions.values().stream().min(Comparator.comparing(d -> d.ids().get(0))).get();
var highestId = highestDefinition.ids().get(0);

for (var upperBound : upperBounds.values()) {
if (upperBound.id().equals(highestId)) {
return;
}
}

throwDefinitionFailure(
highestDefinition,
"has the highest transport version id [" + highestId + "] but is not present in any upper bounds files"
);
}

private void throwDefinitionFailure(TransportVersionDefinition definition, String message) {
Path relativePath = getResources().get().getReferableDefinitionRepositoryPath(definition);
throw new IllegalStateException("Transport version definition file [" + relativePath + "] " + message);
Expand Down