@Bean public ConfigurationProvider configurationProvider() { // Specify which files to load. Configuration from both files will be merged. ConfigFilesProvider configFilesProvider = () -> Arrays.asList(Paths.get("application.yaml"), Paths.get("otherConfig.properties")); // Use local files as configuration store ConfigurationSource source = new FilesConfigurationSource(configFilesProvider); // Use relative paths Environment environment = new ImmutableEnvironment(filesPath); // Reload configuration every 5 seconds ReloadStrategy reloadStrategy = new PeriodicalReloadStrategy(5, TimeUnit.SECONDS); // Create provider return new ConfigurationProviderBuilder() .withConfigurationSource(source) .withReloadStrategy(reloadStrategy) .withEnvironment(environment) .build(); } }
@Test void returnsConstantEnvName() { String environmentName = "sampleEnvironment"; ImmutableEnvironment strategy = new ImmutableEnvironment(environmentName); assertThat(strategy.getName()).isEqualTo(environmentName); } }
@Test void getConfigurationThrowsWhenOneOfSourcesThrows() { when(underlyingSources[3].getConfiguration(ArgumentMatchers.any())).thenThrow(new IllegalStateException()); assertThatThrownBy(() -> mergeConfigurationSource.getConfiguration(new ImmutableEnvironment("test"))).isExactlyInstanceOf(IllegalStateException.class); }
@Test void getConfigurationReadsFromGivenPath() { Environment environment = new ImmutableEnvironment(fileRepo.dirPath.resolve("otherApplicationConfigs").toString()); assertThat(source.getConfiguration(environment)).containsOnly(MapEntry.entry("some.setting", "otherAppSetting")); }
@Test void getConfigurationThrowsAfterFailedReload() throws Exception { server.shutdown(); try { source.getConfiguration(new ImmutableEnvironment("us-west-2")); } catch (Exception e) { // NOP } assertThatThrownBy(() -> source.getConfiguration(new ImmutableEnvironment(""))) .isExactlyInstanceOf(SourceCommunicationException.class); }
@Bean public ConfigurationProvider configurationProvider() { // Specify which files to load. Configuration from both files will be merged. ConfigFilesProvider configFilesProvider = () -> Collections.singletonList(Paths.get("application.yaml")); // Use local files as configuration store ConfigurationSource source = new FilesConfigurationSource(configFilesProvider); // Use relative paths Environment environment = new ImmutableEnvironment(filesPath); // Reload configuration every 500 milliseconds ReloadStrategy reloadStrategy = new PeriodicalReloadStrategy(500, TimeUnit.MILLISECONDS); // Create provider return new ConfigurationProviderBuilder() .withConfigurationSource(source) .withReloadStrategy(reloadStrategy) .withEnvironment(environment) .withMetrics(metricRegistry, "firstProvider.") .build(); } }
@Test void getConfigurationDisallowsLeadingSlashInClasspathLocation() { Environment environment = new ImmutableEnvironment("/otherApplicationConfigs"); assertThatThrownBy(() -> source.getConfiguration(environment)).isExactlyInstanceOf(MissingEnvironmentException.class); }
@Test void getConfigurationThrowsWhenOneOfSourcesThrowsOnMissingEnvironment() { when(underlyingSources[1].getConfiguration(ArgumentMatchers.any())).thenThrow(new MissingEnvironmentException("")); assertThatThrownBy(() -> mergeConfigurationSource.getConfiguration(new ImmutableEnvironment("test"))).isExactlyInstanceOf(MissingEnvironmentException.class); }
@Bean public ConfigurationProvider configurationProvider() { // Specify which files to load. Configuration from both files will be merged. ConfigFilesProvider configFilesProvider = () -> Arrays.asList(Paths.get("application.properties"), Paths.get("otherConfig.properties")); // Use Git repository as configuration store ConfigurationSource source = new GitConfigurationSourceBuilder() .withRepositoryURI(configRepoPath) .withConfigFilesProvider(configFilesProvider) .build(); // Select branch to use (use new DefaultEnvironment()) for master Environment environment = new ImmutableEnvironment(branch); // Reload configuration every 5 seconds ReloadStrategy reloadStrategy = new PeriodicalReloadStrategy(5, TimeUnit.SECONDS); // Create provider return new ConfigurationProviderBuilder() .withConfigurationSource(source) .withEnvironment(environment) .withReloadStrategy(reloadStrategy) .build(); } }
@Test void getConfigurationThrowsOnMissingEnvironment() { assertThatThrownBy(() -> source.getConfiguration(new ImmutableEnvironment("awlerijawoetinawwerlkjn"))).isExactlyInstanceOf(MissingEnvironmentException.class); }
@Test void getConfigurationThrowsOnMissingEnvironment() { assertThatThrownBy(() -> source.getConfiguration(new ImmutableEnvironment("awlerijawoetinawwerlkjn"))).isExactlyInstanceOf(MissingEnvironmentException.class); }
@BeforeEach void setUp() throws Exception { fileRepo = new TempConfigurationFileRepo("org.cfg4j-test-repo"); fileRepo.changeProperty(Paths.get("application.properties"), "some.setting", "masterValue"); fileRepo.changeProperty(Paths.get("otherConfig.properties"), "otherConfig.setting", "masterValue"); fileRepo.changeProperty(Paths.get("malformed.properties"), "otherConfig.setting", "\\uzzzzz"); fileRepo.changeProperty(Paths.get("otherApplicationConfigs/application.properties"), "some.setting", "otherAppSetting"); environment = new ImmutableEnvironment(fileRepo.dirPath.toString()); source = new FilesConfigurationSource(); source.init(); }
@Test void getConfigurationIgnoresLeadingSlashInGivenEnvironment() { Environment environment = new ImmutableEnvironment("/us-west-1"); assertThat(source.getConfiguration(environment)).contains(MapEntry.entry("featureA.toggle", "disabled")); }
@Test void getConfigurationReadsFromGivenPath() { Environment environment = new ImmutableEnvironment("otherApplicationConfigs"); assertThat(source.getConfiguration(environment)).containsOnly(MapEntry.entry("some.setting", "otherAppSetting")); }
@Test void getConfigurationThrowsOnMissingBranch() throws Exception { try (GitConfigurationSource gitConfigurationSource = getSourceForRemoteRepoWithDefaults()) { assertThatThrownBy(() -> gitConfigurationSource.getConfiguration(new ImmutableEnvironment("nonExistentBranch"))) .isExactlyInstanceOf(MissingEnvironmentException.class); } }
@Test void getConfigurationReturnsAllKeysFromGivenEnvironment() { Environment environment = new ImmutableEnvironment("us-west-1"); assertThat(source.getConfiguration(environment)).contains(MapEntry.entry("featureA.toggle", "disabled")); }
@Bean public ConfigurationProvider configurationProvider() { // Use Git repository as configuration store ConfigurationSource source = new GitConfigurationSourceBuilder() .withRepositoryURI(configRepoPath) .build(); // Select branch to use (use new DefaultEnvironment()) for master Environment environment = new ImmutableEnvironment(branch); // Reload configuration every 5 seconds ReloadStrategy reloadStrategy = new PeriodicalReloadStrategy(5, TimeUnit.SECONDS); // Create provider return new ConfigurationProviderBuilder() .withConfigurationSource(source) .withEnvironment(environment) .withReloadStrategy(reloadStrategy) .build(); } }
@Bean public ConfigurationProvider configurationProvider() { // Use Git repository as configuration store ConfigurationSource source = new GitConfigurationSourceBuilder() .withRepositoryURI(configRepoPath) .build(); // Select branch to use (use new DefaultEnvironment()) for master Environment environment = new ImmutableEnvironment(branch); // Reload configuration every 5 seconds ReloadStrategy reloadStrategy = new PeriodicalReloadStrategy(5, TimeUnit.SECONDS); // Create provider return new ConfigurationProviderBuilder() .withConfigurationSource(source) .withEnvironment(environment) .withReloadStrategy(reloadStrategy) .build(); } }
@Test void getConfigurationReadsConfigFromGivenBranch() throws Exception { try (GitConfigurationSource gitConfigurationSource = getSourceForRemoteRepoWithDefaults()) { Environment environment = new ImmutableEnvironment(TEST_ENV_BRANCH); assertThat(gitConfigurationSource.getConfiguration(environment)).contains(MapEntry.entry("some.setting", "testValue")); } }
@Test void getConfigurationMergesConfigurationsWithCollidingKeys() { Environment environment = new ImmutableEnvironment("test"); sourcesWithProps(environment, "prop", "value1", "prop", "value2"); assertThat(mergeConfigurationSource.getConfiguration(environment)).containsOnly(MapEntry.entry("prop", "value2")); }