@Test public void testCycleElasticsearchUrls() throws Exception { CorePlugin corePlugin = ConfigurationRegistry.builder() .addOptionProvider(new CorePlugin()) .addConfigSource(new SimpleSource("test") .add("stagemonitor.reporting.elasticsearch.url", "http://bla:1/,http://bla:2,http://bla:3")) .build() .getConfig(CorePlugin.class); assertThat(corePlugin.getElasticsearchUrl().toString()).isEqualTo("http://bla:1"); assertThat(corePlugin.getElasticsearchUrl().toString()).isEqualTo("http://bla:2"); assertThat(corePlugin.getElasticsearchUrl().toString()).isEqualTo("http://bla:3"); assertThat(corePlugin.getElasticsearchUrl().toString()).isEqualTo("http://bla:1"); assertThat(corePlugin.getElasticsearchUrl().toString()).isEqualTo("http://bla:2"); assertThat(corePlugin.getElasticsearchUrl().toString()).isEqualTo("http://bla:3"); }
@Test public void testCycleElasticsearchUrlsBasicAuth() throws Exception { CorePlugin corePlugin = ConfigurationRegistry.builder() .addOptionProvider(new CorePlugin()) .addConfigSource(new SimpleSource("test") .add("stagemonitor.reporting.elasticsearch.url", "http://bla:1/,http://other:p%21p@bla:2,https://bla:3,http://bla:4/search") .add("stagemonitor.reporting.elasticsearch.username", "user") .add("stagemonitor.reporting.elasticsearch.password", "p@ssword!")) .build() .getConfig(CorePlugin.class); URL cycle1 = corePlugin.getElasticsearchUrl(); String basicAuth = HttpClient.getBasicAuthFromUserInfo(cycle1); String testBasicAuth = "Basic " + DatatypeConverter.printBase64Binary("user:p@ssword!".getBytes()); assertThat(basicAuth).isEqualTo(testBasicAuth); assertThat(cycle1.toString()).isEqualTo("http://user:p%40ssword%21@bla:1"); URL cycle2 = corePlugin.getElasticsearchUrl(); String basicAuthCycle2 = HttpClient.getBasicAuthFromUserInfo(cycle2); String testBasicAuthCycle2 = "Basic " + DatatypeConverter.printBase64Binary("other:p!p".getBytes()); assertThat(basicAuth).isEqualTo(testBasicAuth); assertThat(cycle2.toString()).isEqualTo("http://other:p%21p@bla:2"); assertThat(corePlugin.getElasticsearchUrl().toString()).isEqualTo("https://user:p%40ssword%21@bla:3"); assertThat(corePlugin.getElasticsearchUrl().toString()).isEqualTo("http://user:p%40ssword%21@bla:4/search"); assertThat(corePlugin.getElasticsearchUrl().toString()).isEqualTo("http://user:p%40ssword%21@bla:1"); assertThat(corePlugin.getElasticsearchUrl().toString()).isEqualTo("http://other:p%21p@bla:2"); assertThat(corePlugin.getElasticsearchUrl().toString()).isEqualTo("https://user:p%40ssword%21@bla:3"); assertThat(corePlugin.getElasticsearchUrl().toString()).isEqualTo("http://user:p%40ssword%21@bla:4/search"); }
@Test public void testLogUrlWithBasicAuth() throws Exception { class Provider extends ConfigurationOptionProvider { private ConfigurationOption<List<URL>> urlBasicAuthOption = ConfigurationOption.urlsOption() .key("foo") .buildRequired(); } final ConfigurationRegistry configurationRegistry = ConfigurationRegistry.builder() .addOptionProvider(new Provider()) .addConfigSource(new SimpleSource("source").add("foo", "http://user:pwd@example.com")) .build(); configurationLogger.logConfiguration(configurationRegistry); verify(logger).info(startsWith("# stagemonitor configuration")); verify(logger).info(eq("{}: {} (source: {})"), eq("foo"), eq("http://user:XXX@example.com"), eq("source")); } }
@Test public void testValidateConfigurationOption() throws Exception { final ConfigurationOption<Boolean> configurationOption = ConfigurationOption.booleanOption() .key("foo") .addValidator((value) -> { if (!value) { throw new IllegalArgumentException("Validation failed"); } }) .buildWithDefault(true); final ConfigurationOptionProvider optionProvider = TestConfigurationOptionProvider.of(configurationOption); final SimpleSource configurationSource = new SimpleSource("test"); final ConfigurationRegistry config = ConfigurationRegistry.builder() .addOptionProvider(optionProvider) .addConfigSource(configurationSource) .build(); try { config.save("foo", "false", "test"); fail(); } catch (IllegalArgumentException e) { assertEquals("Validation failed", e.getMessage()); } }
@Test public void testOnConfigurationChanged() throws Exception { AtomicBoolean changeListenerFired = new AtomicBoolean(false); final ConfigurationOption<String> configurationOption = ConfigurationOption.stringOption() .key("foo") .dynamic(true) .addChangeListener((opt, oldValue, newValue) -> { assertEquals("foo", opt.getKey()); assertEquals("old", oldValue); assertEquals("new", newValue); changeListenerFired.set(true); throw new RuntimeException("This is an expected test exception. " + "It is thrown to test whether Configuration can cope with change listeners that throw an exception."); }).buildWithDefault("old"); final ConfigurationOptionProvider optionProvider = TestConfigurationOptionProvider.of(configurationOption); final SimpleSource configurationSource = new SimpleSource("test"); final ConfigurationRegistry config = ConfigurationRegistry.builder() .addOptionProvider(optionProvider) .addConfigSource(configurationSource) .build(); config.save("foo", "new", "test"); assertTrue(changeListenerFired.get()); }
@Before public void setUp() throws Exception { GlobalTracerTestHelper.resetGlobalTracer(); tracingPlugin = spy(new TracingPlugin()); doReturn(true).when(tracingPlugin).isRoot(any()); configuration = ConfigurationRegistry.builder() .addOptionProvider(tracingPlugin) .addConfigSource(new SimpleSource()) .build(); final Tracer tracer = mock(Tracer.class); GlobalTracer.register(tracer); spanContext = mock(SpanContextInformation.class); when(spanContext.getSpanWrapper()).thenReturn(mock(SpanWrapper.class)); context = new PreExecutionInterceptorContext(spanContext); interceptor = new RateLimitingPreExecutionInterceptor(); interceptor.init(configuration); }
@Test public void testLogSensitive() throws Exception { class Provider extends ConfigurationOptionProvider { private ConfigurationOption<String> sensitiveOption = ConfigurationOption.stringOption() .key("foo") .sensitive() .buildRequired(); } final ConfigurationRegistry configurationRegistry = ConfigurationRegistry.builder() .addOptionProvider(new Provider()) .addConfigSource(new SimpleSource("source").add("foo", "secret")) .build(); configurationLogger.logConfiguration(configurationRegistry); verify(logger).info(startsWith("# stagemonitor configuration")); verify(logger).info(eq("{}: {} (source: {})"), eq("foo"), eq("XXXX"), eq("source")); }
@Before public void setUp() throws Exception { GlobalTracerTestHelper.resetGlobalTracer(); tracingPlugin = spy(new TracingPlugin()); doReturn(true).when(tracingPlugin).isRoot(any()); configuration = ConfigurationRegistry.builder() .addOptionProvider(tracingPlugin) .addConfigSource(new SimpleSource()) .build(); final Tracer tracer = mock(Tracer.class); GlobalTracer.register(tracer); spanContext = mock(SpanContextInformation.class); when(spanContext.getSpanWrapper()).thenReturn(mock(SpanWrapper.class)); context = new PreExecutionInterceptorContext(spanContext); interceptor = new ProbabilisticSamplingPreExecutionInterceptor(); interceptor.init(configuration); }
@Test public void testAliasKey() throws Exception { class Provider extends ConfigurationOptionProvider { private ConfigurationOption<String> aliasOption = ConfigurationOption.stringOption() .key("foo") .aliasKeys("foo.old") .buildRequired(); } final ConfigurationRegistry configurationRegistry = ConfigurationRegistry.builder() .addOptionProvider(new Provider()) .addConfigSource(new SimpleSource().add("foo.old", "bar")) .build(); configurationLogger.logConfiguration(configurationRegistry); verify(logger).warn(eq("Detected usage of an old configuration key: '{}'. " + "Please use '{}' instead."), eq("foo.old"), eq("foo")); }
@Before public void setUp() throws Exception { configurationRegistry = ConfigurationRegistry.builder() // its also possible to automatically detect all ConfigurationOptionProvider // implementations at runtime via ServiceLoader.load .addOptionProvider(new ExampleConfiguration()) // Defines the hierarchy of configuration sources // The first one has the highest precedence // You can implement custom configuration sources // For example JdbcConfigurationSource to sore config values in your DB .addConfigSource(new SimpleSource()) .addConfigSource(new SystemPropertyConfigurationSource()) .addConfigSource(new PropertyFileConfigurationSource("application.properties")) .addConfigSource(new EnvironmentVariableConfigurationSource()) .build(); // reloads configuration options from all configuration sources each 30 seconds configurationRegistry.scheduleReloadAtRate(30, TimeUnit.SECONDS); exampleConfiguration = configurationRegistry.getConfig(ExampleConfiguration.class); }
@Test public void testDeprecatedOption() throws Exception { class Provider extends ConfigurationOptionProvider { private ConfigurationOption<String> deprecatedOption = ConfigurationOption.stringOption() .key("foo") .tags("deprecated") .buildRequired(); } final ConfigurationRegistry configurationRegistry = ConfigurationRegistry.builder() .addOptionProvider(new Provider()) .addConfigSource(new SimpleSource().add("foo", "bar")) .build(); configurationLogger.logConfiguration(configurationRegistry); verify(logger).warn(contains("Detected usage of deprecated configuration option '{}'"), eq("foo")); }
private ConfigurationRegistry createConfiguration(List<ConfigurationOption<?>> configurationOptions, ConfigurationSource configurationSource) { return ConfigurationRegistry.builder() .addOptionProvider(new ConfigurationOptionProvider() { public List<ConfigurationOption<?>> getConfigurationOptions() { return configurationOptions; } }) .addConfigSource(configurationSource) .build(); }
@Test public void testElasticsearchUrlsBasicAuthViaConfig() throws Exception { CorePlugin corePlugin = ConfigurationRegistry.builder() .addOptionProvider(new CorePlugin()) .addConfigSource(new SimpleSource("test") .add("stagemonitor.reporting.elasticsearch.url", "http://bla:1") .add("stagemonitor.reporting.elasticsearch.username", "user") .add("stagemonitor.reporting.elasticsearch.password", "password")) .build() .getConfig(CorePlugin.class); assertThat(corePlugin.getElasticsearchUrl().toString()).isEqualTo("http://user:password@bla:1"); }
@Test public void testCycleElasticsearchUrlsEmptyString() throws Exception { CorePlugin corePlugin = ConfigurationRegistry.builder() .addOptionProvider(new CorePlugin()) .addConfigSource(new SimpleSource("test") .add("stagemonitor.reporting.elasticsearch.url", "")) .build() .getConfig(CorePlugin.class); assertThat(corePlugin.getElasticsearchUrls()).isEmpty(); }
@Before public void init() { configuration = ConfigurationRegistry.builder() .addConfigSource(new SimpleSource()) .build(); configurationPasswordChecker = new ConfigurationPasswordChecker(configuration, passwordKey); }
@Before public void init() { configuration = ConfigurationRegistry.builder() .addOptionProvider(new CorePlugin()) .addConfigSource(new SimpleSource()) .build(); corePlugin = configuration.getConfig(CorePlugin.class); }
@Test public void testElasticsearchUrlsBasicAuth() throws Exception { CorePlugin corePlugin = ConfigurationRegistry.builder() .addOptionProvider(new CorePlugin()) .addConfigSource(new SimpleSource("test") .add("stagemonitor.reporting.elasticsearch.url", "http://user:password@bla:1")) .build() .getConfig(CorePlugin.class); assertThat(corePlugin.getElasticsearchUrlsWithoutAuthenticationInformation()).isEqualTo("http://user:XXX@bla:1"); }
public AbstractAlerterTest() { configurationSource = new SimpleSource(); alertingPlugin = new AlertingPlugin(); configuration = ConfigurationRegistry.builder() .addOptionProvider(new CorePlugin()) .addOptionProvider(alertingPlugin) .addConfigSource(configurationSource) .build(); }
@Test public void testGetConfigSubclass() { final CorePlugin corePluginMock = mock(CorePlugin.class); configuration = ConfigurationRegistry.builder() .addOptionProvider(corePluginMock) .addConfigSource(new SimpleSource()) .build(); assertSame(corePluginMock, configuration.getConfig(CorePlugin.class)); assertNull(configuration.getConfig(new ConfigurationOptionProvider(){}.getClass())); }
@Test public void testNoElasticsearchUrl() throws Exception { CorePlugin corePlugin = ConfigurationRegistry.builder() .addOptionProvider(new CorePlugin()) .addConfigSource(new SimpleSource("test")) .build() .getConfig(CorePlugin.class); assertNull(corePlugin.getElasticsearchUrl()); }