package org.wildfly.swarm;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import org.junit.Test;
import org.wildfly.swarm.spi.api.SwarmProperties;
import org.wildfly.swarm.spi.api.config.ConfigView;
import static org.fest.assertions.Assertions.assertThat;
/**
* @author Bob McWhirter
*/
public class ProjectStagesTest {
@Test
public void testPropertyBasedConfigStagesFile() throws Exception {
try {
URL projectStages = getClass().getClassLoader().getResource("simple-project-stages.yml");
System.setProperty(SwarmProperties.PROJECT_STAGE_FILE, projectStages.toExternalForm());
Swarm swarm = new Swarm(new Properties());
ConfigView view = swarm.configView();
assertThat(view.resolve("foo.bar.baz").getValue()).isEqualTo("cheddar");
} finally {
System.clearProperty(SwarmProperties.PROJECT_STAGE_FILE);
}
}
@Test
public void testPropertyBasedConfigStagesFileOnlyDefault() throws Exception {
try {
URL projectStages = getClass().getClassLoader().getResource("multi-project-stages.yml");
System.setProperty(SwarmProperties.PROJECT_STAGE_FILE, projectStages.toExternalForm());
Swarm swarm = new Swarm(new Properties());
ConfigView view = swarm.configView();
assertThat(view.resolve("foo.bar.baz").getValue()).isEqualTo("cheddar");
} finally {
System.clearProperty(SwarmProperties.PROJECT_STAGE_FILE);
}
}
@Test
public void testPropertyBasedConfigStagesFileAndSelectedStage() throws Exception {
try {
URL projectStages = getClass().getClassLoader().getResource("multi-project-stages.yml");
System.setProperty(SwarmProperties.PROJECT_STAGE_FILE, projectStages.toExternalForm());
System.setProperty(SwarmProperties.PROJECT_STAGE, "production");
Swarm swarm = new Swarm(new Properties());
ConfigView view = swarm.configView();
assertThat(view.resolve("foo.bar.baz").getValue()).isEqualTo("brie");
} finally {
System.clearProperty(SwarmProperties.PROJECT_STAGE_FILE);
System.clearProperty(SwarmProperties.PROJECT_STAGE);
}
}
@Test
public void testCLIBasedSelectedStage() throws Exception {
Swarm swarm = new Swarm(new Properties(),
"-S", "production");
ConfigView view = swarm.configView();
assertThat(view.resolve("foo.bar.baz").getValue()).isEqualTo("brie");
}
@Test
public void testSwarmAPIToLoadConfig() throws Exception {
Swarm swarm = new Swarm(new Properties());
swarm.withProfile("foo");
ConfigView view = swarm.configView();
assertThat(view.resolve("swarm.myname").getValue()).isEqualTo("foo");
swarm.withProfile("bar");
assertThat(view.resolve("swarm.myname").getValue()).isEqualTo("foo");
assertThat(view.resolve("swarm.mydottednumber").as(Double.class).getValue()).isEqualTo(2.82);
}
@Test
public void testCLIToLoadConfig() throws Exception {
Swarm swarm = new Swarm(new Properties(), "-Sfoo");
ConfigView view = swarm.configView();
assertThat(view.resolve("swarm.myname").getValue()).isEqualTo("foo");
}
@Test
public void testEnvironmentVars() throws Exception {
Map<String, String> environment = new HashMap<>();
environment.put("swarm.myname", "from_env");
Swarm swarm = new Swarm(new Properties(), environment);
ConfigView view = swarm.configView();
assertThat(view.resolve("swarm.myname").getValue()).isEqualTo("from_env");
}
@Test
public void testPropertiesPreferredToEnvironmentVars() throws Exception {
Map<String, String> environment = new HashMap<>();
Properties properties = new Properties();
environment.put("swarm.myname", "from_env");
properties.setProperty("swarm.myname", "from_props");
Swarm swarm = new Swarm(properties, environment);
ConfigView view = swarm.configView();
assertThat(view.resolve("swarm.myname").getValue()).isEqualTo("from_props");
}
@Test
public void testPropertiesOnCLIPreferredToEnvironmentVars() throws Exception {
Map<String, String> environment = new HashMap<>();
Properties properties = new Properties();
environment.put("swarm.myname", "from_env");
properties.setProperty("swarm.myname", "from_props");
Swarm swarm = new Swarm(properties, environment, "-Dswarm.myname=tacos");
ConfigView view = swarm.configView();
assertThat(view.resolve("swarm.myname").getValue()).isEqualTo("tacos");
}
@Test
public void testPseudoPropertiesToSelectProjectStage() throws Exception {
Swarm swarm = new Swarm(new Properties(),
"-Dswarm.project.stage=production");
ConfigView view = swarm.configView();
assertThat(view.resolve("foo.bar.baz").getValue()).isEqualTo("brie");
}
@Test
public void testIsolatedPropertiesToSelectProjectStage() throws Exception {
Properties props = new Properties();
props.setProperty("swarm.project.stage", "production");
Swarm swarm = new Swarm(props,
"-Dswarm.project.stage=production");
ConfigView view = swarm.configView();
assertThat(view.resolve("foo.bar.baz").getValue()).isEqualTo("brie");
assertThat(view.resolve("foo.bar.taco").getValue()).isEqualTo("crunchy");
}
}