From f6d1e566e7069f27a92c61dd94475145fbd2ace5 Mon Sep 17 00:00:00 2001 From: Chris Eager Date: Thu, 23 May 2024 13:28:34 -0500 Subject: [PATCH] Add validation annotations to DynamicExperimentEnrollmentConfiguration --- ...DynamicExperimentEnrollmentConfiguration.java | 14 ++++++++------ .../dynamic/DynamicConfigurationTest.java | 16 ++++++++++++++++ 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/configuration/dynamic/DynamicExperimentEnrollmentConfiguration.java b/service/src/main/java/org/whispersystems/textsecuregcm/configuration/dynamic/DynamicExperimentEnrollmentConfiguration.java index 04769d620..04885c33f 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/configuration/dynamic/DynamicExperimentEnrollmentConfiguration.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/configuration/dynamic/DynamicExperimentEnrollmentConfiguration.java @@ -6,14 +6,13 @@ package org.whispersystems.textsecuregcm.configuration.dynamic; import com.fasterxml.jackson.annotation.JsonProperty; -import com.google.common.annotations.VisibleForTesting; - -import javax.validation.Valid; -import javax.validation.constraints.Max; -import javax.validation.constraints.Min; import java.util.Collections; import java.util.Set; import java.util.UUID; +import javax.validation.Valid; +import javax.validation.constraints.Max; +import javax.validation.constraints.Min; +import javax.validation.constraints.NotNull; public class DynamicExperimentEnrollmentConfiguration { @@ -21,6 +20,7 @@ public static class UuidSelector { @JsonProperty @Valid + @NotNull private Set uuids = Collections.emptySet(); /** @@ -45,7 +45,9 @@ public int getUuidEnrollmentPercentage() { } - private UuidSelector uuidSelector = new UuidSelector(); + @Valid + @NotNull + private final UuidSelector uuidSelector = new UuidSelector(); /** * If the UUID is not enrolled via {@link UuidSelector#uuids}, what is the percentage chance it should be enrolled. diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/configuration/dynamic/DynamicConfigurationTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/configuration/dynamic/DynamicConfigurationTest.java index 6b69ea71a..fc1597a64 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/configuration/dynamic/DynamicConfigurationTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/configuration/dynamic/DynamicConfigurationTest.java @@ -44,6 +44,22 @@ void testParseExperimentConfig() throws JsonProcessingException { assertFalse(emptyConfig.getExperimentEnrollmentConfiguration("test").isPresent()); } + { + final String invalid = REQUIRED_CONFIG.concat(""" + experiments: + percentageOnly: + enrollmentPercentage: 12 + uuidsAndPercentage: + uuidSelector: + # the below results in uuids = null + uuids: + """); + final Optional maybeConfig = + DynamicConfigurationManager.parseConfiguration(invalid, DynamicConfiguration.class); + + assertFalse(maybeConfig.isPresent()); + } + { final String experimentConfigYaml = REQUIRED_CONFIG.concat(""" experiments: