Fix deserialization for Duration in dynamic config
This commit is contained in:
		
							parent
							
								
									89256fb5b3
								
							
						
					
					
						commit
						e4dbb8efe7
					
				| 
						 | 
					@ -10,6 +10,7 @@ import com.fasterxml.jackson.core.JsonProcessingException;
 | 
				
			||||||
import com.fasterxml.jackson.databind.DeserializationFeature;
 | 
					import com.fasterxml.jackson.databind.DeserializationFeature;
 | 
				
			||||||
import com.fasterxml.jackson.databind.ObjectMapper;
 | 
					import com.fasterxml.jackson.databind.ObjectMapper;
 | 
				
			||||||
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
 | 
					import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
 | 
				
			||||||
 | 
					import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
 | 
				
			||||||
import com.google.common.annotations.VisibleForTesting;
 | 
					import com.google.common.annotations.VisibleForTesting;
 | 
				
			||||||
import org.apache.commons.lang3.StringUtils;
 | 
					import org.apache.commons.lang3.StringUtils;
 | 
				
			||||||
import org.slf4j.Logger;
 | 
					import org.slf4j.Logger;
 | 
				
			||||||
| 
						 | 
					@ -37,7 +38,9 @@ public class DynamicConfigurationManager {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  private boolean initialized = false;
 | 
					  private boolean initialized = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  public static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(new YAMLFactory()).configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
 | 
					  public static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(new YAMLFactory())
 | 
				
			||||||
 | 
					      .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
 | 
				
			||||||
 | 
					      .registerModule(new JavaTimeModule());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  public DynamicConfigurationManager(String application, String environment, String configurationName) {
 | 
					  public DynamicConfigurationManager(String application, String environment, String configurationName) {
 | 
				
			||||||
    this(AmazonAppConfigClient.builder()
 | 
					    this(AmazonAppConfigClient.builder()
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -5,6 +5,7 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
package org.whispersystems.textsecuregcm.configuration.dynamic;
 | 
					package org.whispersystems.textsecuregcm.configuration.dynamic;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import static org.assertj.core.api.Assertions.assertThat;
 | 
				
			||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
 | 
					import static org.junit.jupiter.api.Assertions.assertEquals;
 | 
				
			||||||
import static org.junit.jupiter.api.Assertions.assertFalse;
 | 
					import static org.junit.jupiter.api.Assertions.assertFalse;
 | 
				
			||||||
import static org.junit.jupiter.api.Assertions.assertNotNull;
 | 
					import static org.junit.jupiter.api.Assertions.assertNotNull;
 | 
				
			||||||
| 
						 | 
					@ -12,6 +13,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import com.fasterxml.jackson.core.JsonProcessingException;
 | 
					import com.fasterxml.jackson.core.JsonProcessingException;
 | 
				
			||||||
import com.vdurmont.semver4j.Semver;
 | 
					import com.vdurmont.semver4j.Semver;
 | 
				
			||||||
 | 
					import java.time.Duration;
 | 
				
			||||||
import java.util.Collections;
 | 
					import java.util.Collections;
 | 
				
			||||||
import java.util.List;
 | 
					import java.util.List;
 | 
				
			||||||
import java.util.Map;
 | 
					import java.util.Map;
 | 
				
			||||||
| 
						 | 
					@ -19,6 +21,7 @@ import java.util.Optional;
 | 
				
			||||||
import java.util.Set;
 | 
					import java.util.Set;
 | 
				
			||||||
import java.util.UUID;
 | 
					import java.util.UUID;
 | 
				
			||||||
import org.junit.jupiter.api.Test;
 | 
					import org.junit.jupiter.api.Test;
 | 
				
			||||||
 | 
					import org.whispersystems.textsecuregcm.configuration.RateLimitsConfiguration.CardinalityRateLimitConfiguration;
 | 
				
			||||||
import org.whispersystems.textsecuregcm.storage.DynamicConfigurationManager;
 | 
					import org.whispersystems.textsecuregcm.storage.DynamicConfigurationManager;
 | 
				
			||||||
import org.whispersystems.textsecuregcm.util.ua.ClientPlatform;
 | 
					import org.whispersystems.textsecuregcm.util.ua.ClientPlatform;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -334,4 +337,33 @@ class DynamicConfigurationTest {
 | 
				
			||||||
      assertTrue(config.isReadEnabled());
 | 
					      assertTrue(config.isReadEnabled());
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @Test
 | 
				
			||||||
 | 
					  void testParseLimits() throws JsonProcessingException {
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      final String emptyConfigYaml = "test: true";
 | 
				
			||||||
 | 
					      final DynamicConfiguration emptyConfig = DynamicConfigurationManager.OBJECT_MAPPER.readValue(
 | 
				
			||||||
 | 
					          emptyConfigYaml, DynamicConfiguration.class);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      assertThat(emptyConfig.getLimits().getUnsealedSenderNumber().getMaxCardinality()).isEqualTo(100);
 | 
				
			||||||
 | 
					      assertThat(emptyConfig.getLimits().getUnsealedSenderNumber().getTtl()).isEqualTo(Duration.ofDays(1));
 | 
				
			||||||
 | 
					      assertThat(emptyConfig.getLimits().getUnsealedSenderNumber().getTtlJitter()).isEqualTo(Duration.ofDays(1));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      final String limitsConfig =
 | 
				
			||||||
 | 
					          "limits:\n"
 | 
				
			||||||
 | 
					          + "  unsealedSenderNumber:\n"
 | 
				
			||||||
 | 
					          + "    maxCardinality: 99\n"
 | 
				
			||||||
 | 
					          + "    ttl: PT23H\n"
 | 
				
			||||||
 | 
					          + "    ttlJitter: PT22H";
 | 
				
			||||||
 | 
					      final CardinalityRateLimitConfiguration unsealedSenderNumber = DynamicConfigurationManager.OBJECT_MAPPER
 | 
				
			||||||
 | 
					          .readValue(limitsConfig, DynamicConfiguration.class)
 | 
				
			||||||
 | 
					          .getLimits().getUnsealedSenderNumber();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      assertThat(unsealedSenderNumber.getMaxCardinality()).isEqualTo(99);
 | 
				
			||||||
 | 
					      assertThat(unsealedSenderNumber.getTtl()).isEqualTo(Duration.ofHours(23));
 | 
				
			||||||
 | 
					      assertThat(unsealedSenderNumber.getTtlJitter()).isEqualTo(Duration.ofHours(22));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue