diff --git a/integration-tests/src/main/java/org/signal/integration/Operations.java b/integration-tests/src/main/java/org/signal/integration/Operations.java index 38c6e175..52262dcd 100644 --- a/integration-tests/src/main/java/org/signal/integration/Operations.java +++ b/integration-tests/src/main/java/org/signal/integration/Operations.java @@ -24,7 +24,10 @@ import java.util.Base64; import java.util.Collections; import java.util.List; import java.util.Optional; +import java.util.Set; import java.util.concurrent.Executors; +import io.dropwizard.configuration.ConfigurationValidationException; +import io.dropwizard.jersey.validation.Validators; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.Validate; import org.apache.commons.lang3.tuple.Pair; @@ -48,6 +51,7 @@ import org.whispersystems.textsecuregcm.http.FaultTolerantHttpClient; import org.whispersystems.textsecuregcm.storage.Device; import org.whispersystems.textsecuregcm.util.HeaderUtils; import org.whispersystems.textsecuregcm.util.SystemMapper; +import javax.validation.ConstraintViolation; public final class Operations { @@ -306,8 +310,16 @@ public final class Operations { private static Config loadConfigFromClasspath(final String filename) { try { final URL configFileUrl = Resources.getResource(filename); - return SystemMapper.yamlMapper().readValue(Resources.toByteArray(configFileUrl), Config.class); - } catch (final IOException e) { + final Config config = SystemMapper.yamlMapper().readValue(Resources.toByteArray(configFileUrl), Config.class); + + final Set> constraintViolations = Validators.newValidator().validate(config); + + if (!constraintViolations.isEmpty()) { + throw new ConfigurationValidationException(filename, constraintViolations); + } + + return config; + } catch (final Exception e) { throw new RuntimeException(e); } } diff --git a/integration-tests/src/main/java/org/signal/integration/config/Config.java b/integration-tests/src/main/java/org/signal/integration/config/Config.java index 104f8a54..5343625d 100644 --- a/integration-tests/src/main/java/org/signal/integration/config/Config.java +++ b/integration-tests/src/main/java/org/signal/integration/config/Config.java @@ -5,12 +5,15 @@ package org.signal.integration.config; +import javax.validation.Valid; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; import org.whispersystems.textsecuregcm.configuration.DynamoDbClientFactory; -public record Config(String domain, - String rootCert, - DynamoDbClientFactory dynamoDbClient, - DynamoDbTables dynamoDbTables, - String prescribedRegistrationNumber, - String prescribedRegistrationCode) { +public record Config(@NotBlank String domain, + @NotBlank String rootCert, + @NotNull @Valid DynamoDbClientFactory dynamoDbClient, + @NotNull @Valid DynamoDbTables dynamoDbTables, + @NotBlank String prescribedRegistrationNumber, + @NotBlank String prescribedRegistrationCode) { } diff --git a/integration-tests/src/main/java/org/signal/integration/config/DynamoDbTables.java b/integration-tests/src/main/java/org/signal/integration/config/DynamoDbTables.java index 9a1843ad..03e4a818 100644 --- a/integration-tests/src/main/java/org/signal/integration/config/DynamoDbTables.java +++ b/integration-tests/src/main/java/org/signal/integration/config/DynamoDbTables.java @@ -5,6 +5,8 @@ package org.signal.integration.config; -public record DynamoDbTables(String registrationRecovery, - String verificationSessions) { +import javax.validation.constraints.NotBlank; + +public record DynamoDbTables(@NotBlank String registrationRecovery, + @NotBlank String verificationSessions) { }