package org.cloudfoundry.identity.uaa.impl.config;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.springframework.mock.env.MockEnvironment;
import org.springframework.mock.web.MockServletContext;
import org.springframework.util.StringUtils;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertThat;
public class YamlServletProfileInitializerTest {
private static String systemConfiguredProfiles;
private YamlServletProfileInitializer initializer;
private MockEnvironment environment;
private MockServletContext context;
@BeforeClass
public static void saveProfiles() {
systemConfiguredProfiles = System.getProperty("spring.profiles.active");
}
@AfterClass
public static void restoreProfiles() {
if (systemConfiguredProfiles != null) {
System.setProperty("spring.profiles.active", systemConfiguredProfiles);
} else {
System.clearProperty("spring.profiles.active");
}
}
@Before
public void setup() {
initializer = new YamlServletProfileInitializer();
environment = new MockEnvironment();
context = new MockServletContext();
}
@Test
public void tokenizeToStringArray_RemovesSpaces() throws Exception {
String profileString = " database , ldap ";
String[] profiles = StringUtils.tokenizeToStringArray(profileString, ",", true, true);
assertThat(profiles.length, is(2));
assertThat(profiles[0], is("database"));
assertThat(profiles[1], is("ldap"));
// And show what's wrong with commaDelimitedListToStringArray
profiles = StringUtils.commaDelimitedListToStringArray(profileString);
assertThat(profiles.length, is(2));
assertThat(profiles[0], is(" database "));
assertThat(profiles[1], is(" ldap "));
}
@Test
public void if_no_profiles_are_set_use_hsqldb() {
System.clearProperty("spring.profiles.active");
initializer.applySpringProfiles(environment, context);
assertArrayEquals(new String[] {"hsqldb"}, environment.getActiveProfiles());
}
@Test
public void if_profiles_are_set_use_them() {
System.setProperty("spring.profiles.active", "hsqldb,default");
initializer.applySpringProfiles(environment, context);
assertArrayEquals(new String[] {"hsqldb", "default"}, environment.getActiveProfiles());
}
@Test
public void default_profile_unset() {
System.setProperty("spring.profiles.active", "hsqldb");
initializer.applySpringProfiles(environment, context);
assertArrayEquals(new String[] {"hsqldb"}, environment.getActiveProfiles());
assertArrayEquals(new String[0], environment.getDefaultProfiles());
}
@Test
public void yaml_configured_profiles_are_used() {
System.setProperty("spring.profiles.active", "hsqldb,default");
environment.setProperty("spring_profiles", "mysql,default");
initializer.applySpringProfiles(environment, context);
assertArrayEquals(new String[] {"mysql", "default"}, environment.getActiveProfiles());
}
}