package io.bootique;
import io.bootique.config.ConfigurationFactory;
import io.bootique.type.TypeRef;
import io.bootique.unit.BQInternalTestFactory;
import org.junit.Rule;
import org.junit.Test;
import java.util.Map;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
public class Bootique_ConfigurationIT {
@Rule
public BQInternalTestFactory runtimeFactory = new BQInternalTestFactory();
@Test
public void testEmptyConfig() {
BQRuntime runtime = runtimeFactory.app("--config=src/test/resources/io/bootique/empty.yml").createRuntime();
Map<String, String> config = runtime.getInstance(ConfigurationFactory.class)
.config(new TypeRef<Map<String, String>>() {
}, "");
assertEquals("{}", config.toString());
}
@Test
public void testConfigEmptyConfig() {
BQRuntime runtime = runtimeFactory.app("--config=src/test/resources/io/bootique/test1.yml",
"--config=src/test/resources/io/bootique/empty.yml").createRuntime();
Map<String, String> config = runtime.getInstance(ConfigurationFactory.class)
.config(new TypeRef<Map<String, String>>() {
}, "");
assertEquals("{a=b}", config.toString());
}
@Test
public void testConfigConfig() {
BQRuntime runtime = runtimeFactory.app("--config=src/test/resources/io/bootique/test1.yml",
"--config=src/test/resources/io/bootique/test2.yml").createRuntime();
Map<String, String> config = runtime.getInstance(ConfigurationFactory.class)
.config(new TypeRef<Map<String, String>>() {
}, "");
assertEquals("{a=e, c=d}", config.toString());
}
@Test
public void testConfigConfig_Reverse() {
BQRuntime runtime = runtimeFactory.app("--config=src/test/resources/io/bootique/test2.yml",
"--config=src/test/resources/io/bootique/test1.yml").createRuntime();
Map<String, String> config = runtime.getInstance(ConfigurationFactory.class)
.config(new TypeRef<Map<String, String>>() {
}, "");
assertEquals("{a=b, c=d}", config.toString());
}
@Test
public void testConfigEnvOverrides() {
BQRuntime runtime = runtimeFactory.app("--config=src/test/resources/io/bootique/test2.yml").var("BQ_A", "F")
.createRuntime();
Map<String, String> config = runtime.getInstance(ConfigurationFactory.class)
.config(new TypeRef<Map<String, String>>() {
}, "");
assertEquals("{a=F, c=d}", config.toString());
}
@Test
public void testConfigEnvOverrides_Nested() {
BQRuntime runtime = runtimeFactory.app("--config=src/test/resources/io/bootique/test3.yml")
.var("BQ_A", "F")
.var("BQ_C_M_F", "F1")
.var("BQ_C_M_K", "3")
.createRuntime();
Bean1 b1 = runtime.getInstance(ConfigurationFactory.class).config(Bean1.class, "");
assertEquals("F", b1.a);
assertEquals(3, b1.c.m.k);
assertEquals("n", b1.c.m.l);
assertEquals("F1", b1.c.m.f);
}
@Test
public void testConfigEnvVars_NoYaml() {
BQRuntime runtime = runtimeFactory.app()
.var("BQ_A", "F")
.var("BQ_C_M_F", "F1")
.var("BQ_C_M_K", "3")
.createRuntime();
Bean1 b1 = runtime.getInstance(ConfigurationFactory.class).config(Bean1.class, "");
assertEquals("F", b1.a);
assertEquals(3, b1.c.m.k);
assertNull(b1.c.m.l);
assertEquals("F1", b1.c.m.f);
}
@Test
public void testConfigEnvVars_NoYaml_Prefix() {
BQRuntime runtime = runtimeFactory.app()
.var("BQ_P_A", "F")
.var("BQ_P_C_M_F", "F1")
.var("BQ_P_C_M_K", "3")
.createRuntime();
Bean1 b1 = runtime.getInstance(ConfigurationFactory.class).config(Bean1.class, "p");
assertEquals("F", b1.a);
assertEquals(3, b1.c.m.k);
assertNull(b1.c.m.l);
assertEquals("F1", b1.c.m.f);
}
@Test
public void testConfigEnvVars_Map() {
BQRuntime runtime = runtimeFactory.app()
.var("BQ_M_X", "XXX")
.createRuntime();
Bean4 b4 = runtime.getInstance(ConfigurationFactory.class).config(Bean4.class, "");
// this assertion highlights a limitation of the shell var CI approach - we end up stuck with an uppercase
// key that may not be what the end users expect
assertEquals("XXX", b4.m.get("X"));
}
@Test
public void testConfigEnvVars_MapOverride() {
BQRuntime runtime = runtimeFactory.app("--config=src/test/resources/io/bootique/test4.yml")
.var("BQ_M_X", "XXX")
.createRuntime();
Bean4 b4 = runtime.getInstance(ConfigurationFactory.class).config(Bean4.class, "");
assertEquals("XXX", b4.m.get("x"));
assertEquals("b", b4.m.get("y"));
}
@Test
public void testConfigEnvOverrides_Alias() {
BQRuntime runtime = runtimeFactory.app("--config=src/test/resources/io/bootique/test3.yml")
.varAlias("a", "V1")
.varAlias("c.m.f", "V2")
.varAlias("c.m.k", "V3")
.var("V1", "K")
.var("V2", "K1")
.var("V3", "4")
.createRuntime();
Bean1 b1 = runtime.getInstance(ConfigurationFactory.class).config(Bean1.class, "");
assertEquals("K", b1.a);
assertEquals(4, b1.c.m.k);
assertEquals("n", b1.c.m.l);
assertEquals("K1", b1.c.m.f);
}
static class Bean1 {
private String a;
private Bean2 c;
public void setA(String a) {
this.a = a;
}
public void setC(Bean2 c) {
this.c = c;
}
}
static class Bean2 {
private Bean3 m;
public void setM(Bean3 m) {
this.m = m;
}
}
static class Bean3 {
private int k;
private String f;
private String l;
public void setK(int k) {
this.k = k;
}
public void setF(String f) {
this.f = f;
}
public void setL(String l) {
this.l = l;
}
}
static class Bean4 {
private Map<String, String> m;
public void setM(Map<String, String> m) {
this.m = m;
}
}
}