Merge branch 'master' into 2.0.x

This commit is contained in:
Dave Syer
2017-11-07 10:41:59 +00:00
2 changed files with 90 additions and 14 deletions

View File

@@ -1,16 +1,17 @@
package org.springframework.cloud.context.refresh;
import static org.assertj.core.api.Assertions.assertThat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.junit.After;
import org.junit.Test;
import org.mockito.Mockito;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.logging.LoggingSystem;
import org.springframework.boot.test.util.TestPropertyValues;
import org.springframework.boot.test.util.TestPropertyValues.Type;
import org.springframework.cloud.bootstrap.config.PropertySourceLocator;
@@ -22,10 +23,18 @@ import org.springframework.core.env.MapPropertySource;
import org.springframework.core.env.MutablePropertySources;
import org.springframework.core.env.PropertySource;
import static org.assertj.core.api.Assertions.assertThat;
public class ContextRefresherTests {
private RefreshScope scope = Mockito.mock(RefreshScope.class);
@After
public void close() {
System.clearProperty(LoggingSystem.SYSTEM_PROPERTY);
TestLoggingSystem.count = 0;
}
@Test
public void orderNewPropertiesConsistentWithNewContext() {
try (ConfigurableApplicationContext context = SpringApplication.run(Empty.class,
@@ -38,8 +47,8 @@ public class ContextRefresherTests {
ContextRefresher refresher = new ContextRefresher(context, scope);
refresher.refresh();
names = names(context.getEnvironment().getPropertySources());
assertThat(names)
.contains("applicationConfig: [classpath:/bootstrap-refresh.properties]");
assertThat(names).contains(
"applicationConfig: [classpath:/bootstrap-refresh.properties]");
assertThat(names).containsSequence(
"applicationConfig: [classpath:/application.properties]",
"applicationConfig: [classpath:/bootstrap-refresh.properties]",
@@ -53,7 +62,8 @@ public class ContextRefresherTests {
// a bootstrapProperties immediately
try (ConfigurableApplicationContext context = SpringApplication.run(Empty.class,
"--spring.main.webEnvironment=false", "--debug=false",
"--spring.main.bannerMode=OFF", "--spring.cloud.bootstrap.name=refresh")) {
"--spring.main.bannerMode=OFF",
"--spring.cloud.bootstrap.name=refresh")) {
List<String> names = names(context.getEnvironment().getPropertySources());
System.err.println("***** " + context.getEnvironment().getPropertySources());
assertThat(names).doesNotContain("bootstrapProperties");
@@ -71,19 +81,42 @@ public class ContextRefresherTests {
public void parentContextIsClosed() {
// Use spring.cloud.bootstrap.name to switch off the defaults (which would pick up
// a bootstrapProperties immediately
try (ConfigurableApplicationContext context = SpringApplication.run(ContextRefresherTests.class,
"--spring.main.webEnvironment=false", "--debug=false",
"--spring.main.bannerMode=OFF", "--spring.cloud.bootstrap.name=refresh")) {
try (ConfigurableApplicationContext context = SpringApplication.run(
ContextRefresherTests.class, "--spring.main.webEnvironment=false",
"--debug=false", "--spring.main.bannerMode=OFF",
"--spring.cloud.bootstrap.name=refresh")) {
ContextRefresher refresher = new ContextRefresher(context, scope);
TestPropertyValues.of(
"spring.cloud.bootstrap.sources: org.springframework.cloud.context.refresh.ContextRefresherTests.PropertySourceConfiguration")
.applyTo(context);
ConfigurableApplicationContext refresherContext = refresher.addConfigFilesToEnvironment();
assertThat(refresherContext.getParent()).isNotNull().isInstanceOf(ConfigurableApplicationContext.class);
ConfigurableApplicationContext parent = (ConfigurableApplicationContext) refresherContext.getParent();
ConfigurableApplicationContext refresherContext = refresher
.addConfigFilesToEnvironment();
assertThat(refresherContext.getParent()).isNotNull()
.isInstanceOf(ConfigurableApplicationContext.class);
ConfigurableApplicationContext parent = (ConfigurableApplicationContext) refresherContext
.getParent();
assertThat(parent.isActive()).isFalse();
}
}
@Test
public void loggingSystemNotInitialized() {
System.setProperty(LoggingSystem.SYSTEM_PROPERTY,
TestLoggingSystem.class.getName());
TestLoggingSystem system = (TestLoggingSystem) LoggingSystem
.get(getClass().getClassLoader());
assertThat(system.getCount()).isEqualTo(0);
try (ConfigurableApplicationContext context = SpringApplication.run(Empty.class,
"--spring.main.webEnvironment=false", "--debug=false",
"--spring.main.bannerMode=OFF",
"--spring.cloud.bootstrap.name=refresh")) {
assertThat(system.getCount()).isEqualTo(4);
ContextRefresher refresher = new ContextRefresher(context, scope);
refresher.refresh();
assertThat(system.getCount()).isEqualTo(4);
}
}
private List<String> names(MutablePropertySources propertySources) {
List<String> list = new ArrayList<>();
for (PropertySource<?> p : propertySources) {
@@ -95,7 +128,7 @@ public class ContextRefresherTests {
@Configuration
protected static class Empty {
}
@Configuration
// This is added to bootstrap context as a source in bootstrap.properties
protected static class PropertySourceConfiguration implements PropertySourceLocator {
@@ -110,4 +143,22 @@ public class ContextRefresherTests {
}
public static class TestLoggingSystem extends LoggingSystem {
private static int count;
public TestLoggingSystem(ClassLoader loader) {
}
public int getCount() {
return count;
}
@Override
public void beforeInitialize() {
count++;
}
}
}