summaryrefslogtreecommitdiffstats
path: root/container-di/src/test/java/com/yahoo/container/di/ConfigRetrieverTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'container-di/src/test/java/com/yahoo/container/di/ConfigRetrieverTest.java')
-rw-r--r--container-di/src/test/java/com/yahoo/container/di/ConfigRetrieverTest.java137
1 files changed, 137 insertions, 0 deletions
diff --git a/container-di/src/test/java/com/yahoo/container/di/ConfigRetrieverTest.java b/container-di/src/test/java/com/yahoo/container/di/ConfigRetrieverTest.java
new file mode 100644
index 00000000000..e6b0309981a
--- /dev/null
+++ b/container-di/src/test/java/com/yahoo/container/di/ConfigRetrieverTest.java
@@ -0,0 +1,137 @@
+// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.container.di;
+
+import com.yahoo.config.ConfigInstance;
+import com.yahoo.config.test.Bootstrap1Config;
+import com.yahoo.config.test.Bootstrap2Config;
+import com.yahoo.config.test.TestConfig;
+import com.yahoo.container.di.ConfigRetriever.BootstrapConfigs;
+import com.yahoo.container.di.ConfigRetriever.ComponentsConfigs;
+import com.yahoo.container.di.ConfigRetriever.ConfigSnapshot;
+import com.yahoo.vespa.config.ConfigKey;
+import org.hamcrest.Matchers;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Optional;
+import java.util.Set;
+
+import static org.hamcrest.CoreMatchers.instanceOf;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.fail;
+
+/**
+ *
+ * @author gjoranv
+ * @author Tony Vaagenes
+ * @author ollivir
+ */
+public class ConfigRetrieverTest {
+
+ private DirConfigSource dirConfigSource = null;
+
+ @Before
+ public void setup() {
+ dirConfigSource = new DirConfigSource("ConfigRetrieverTest-");
+ }
+
+ @After
+ public void cleanup() {
+ dirConfigSource.cleanup();
+ }
+
+ @Test
+ public void require_that_bootstrap_configs_come_first() {
+ writeConfigs();
+ ConfigRetriever retriever = createConfigRetriever();
+ ConfigSnapshot bootstrapConfigs = retriever.getConfigs(Collections.emptySet(), 0, false);
+
+ assertThat(bootstrapConfigs, Matchers.instanceOf(BootstrapConfigs.class));
+ }
+
+ @Test
+ @SuppressWarnings("unused")
+ public void require_that_components_comes_after_bootstrap() {
+ writeConfigs();
+ ConfigRetriever retriever = createConfigRetriever();
+ ConfigSnapshot bootstrapConfigs = retriever.getConfigs(Collections.emptySet(), 0, false);
+
+ ConfigKey<? extends ConfigInstance> testConfigKey = new ConfigKey<>(TestConfig.class, dirConfigSource.configId());
+ ConfigSnapshot componentsConfigs = retriever.getConfigs(Collections.singleton(testConfigKey), 0);
+
+ if (componentsConfigs instanceof ComponentsConfigs) {
+ assertThat(componentsConfigs.size(), is(3));
+ } else {
+ fail("ComponentsConfigs has unexpected type: " + componentsConfigs);
+ }
+ }
+
+ @Test
+ @SuppressWarnings("unused")
+ public void require_no_reconfig_when_restart_on_redeploy() {
+ // TODO
+ writeConfigs();
+ ConfigRetriever retriever = createConfigRetriever();
+ ConfigSnapshot bootstrapConfigs = retriever.getConfigs(Collections.emptySet(), 0, false);
+
+ ConfigKey<? extends ConfigInstance> testConfigKey = new ConfigKey<>(TestConfig.class, dirConfigSource.configId());
+ Optional<ConfigSnapshot> componentsConfigs = retriever.getConfigsOnce(Collections.singleton(testConfigKey), 0, true);
+
+ if (componentsConfigs.isPresent()) {
+ fail("Expected no configs");
+ }
+ }
+
+ @Rule
+ public ExpectedException expectedException = ExpectedException.none();
+
+ @Ignore
+ @SuppressWarnings("unused")
+ public void require_exception_upon_modified_components_keys_without_bootstrap() {
+ expectedException.expect(IllegalArgumentException.class);
+
+ writeConfigs();
+ ConfigRetriever retriever = createConfigRetriever();
+ ConfigKey<? extends ConfigInstance> testConfigKey = new ConfigKey<>(TestConfig.class, dirConfigSource.configId());
+ ConfigSnapshot bootstrapConfigs = retriever.getConfigs(Collections.emptySet(), 0, false);
+ ConfigSnapshot componentsConfigs = retriever.getConfigs(Collections.singleton(testConfigKey), 0, false);
+ Set<ConfigKey<? extends ConfigInstance>> keys = new HashSet<>();
+ keys.add(testConfigKey);
+ keys.add(new ConfigKey<>(TestConfig.class, ""));
+ retriever.getConfigs(keys, 0);
+ }
+
+ @Test
+ public void require_that_empty_components_keys_after_bootstrap_returns_components_configs() {
+ writeConfigs();
+ ConfigRetriever retriever = createConfigRetriever();
+ assertThat(retriever.getConfigs(Collections.emptySet(), 0), instanceOf(BootstrapConfigs.class));
+ assertThat(retriever.getConfigs(Collections.emptySet(), 0), instanceOf(ComponentsConfigs.class));
+ }
+
+ public void writeConfigs() {
+ writeConfig("bootstrap1", "dummy \"ignored\"");
+ writeConfig("bootstrap2", "dummy \"ignored\"");
+ writeConfig("test", "stringVal \"ignored\"");
+ }
+
+ private ConfigRetriever createConfigRetriever() {
+ String configId = dirConfigSource.configId();
+ CloudSubscriberFactory subscriber = new CloudSubscriberFactory(dirConfigSource.configSource());
+ Set<ConfigKey<? extends ConfigInstance>> keys = new HashSet<>();
+ keys.add(new ConfigKey<>(Bootstrap1Config.class, configId));
+ keys.add(new ConfigKey<>(Bootstrap2Config.class, configId));
+ return new ConfigRetriever(keys, keySet -> subscriber.getSubscriber(keySet));
+ }
+
+ private void writeConfig(String name, String contents) {
+ dirConfigSource.writeConfig(name, contents);
+ }
+}