From 0986ce12e6c88c20f18bcfb0d83ce806e0447d92 Mon Sep 17 00:00:00 2001 From: Chris Eager Date: Tue, 30 Apr 2024 14:57:14 -0500 Subject: [PATCH] Validate integration test Config --- .../java/org/signal/integration/Operations.java | 16 ++++++++++++++-- .../org/signal/integration/config/Config.java | 15 +++++++++------ .../integration/config/DynamoDbTables.java | 6 ++++-- 3 files changed, 27 insertions(+), 10 deletions(-) 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 38c6e175a..52262dcd6 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 104f8a54b..5343625d8 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 9a1843ad2..03e4a8183 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) { }