Update tests to close the application contexts that they create

This commit updates a number of tests in spring-boot to ensure that
they close the application contexts that they create. SimpleMainTests
still create a number of contexts that are not closed as there’s no
(easy) way to get hold of the context when testing the main method.

See gh-4053
This commit is contained in:
Andy Wilkinson 2015-09-29 21:36:55 +01:00
parent 1bc1785db7
commit e9878ebb5d
8 changed files with 134 additions and 73 deletions

View File

@ -18,9 +18,11 @@ package org.springframework.boot;
import java.io.PrintStream;
import org.junit.After;
import org.junit.Rule;
import org.junit.Test;
import org.springframework.boot.test.OutputCapture;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
@ -35,6 +37,15 @@ import static org.junit.Assert.assertThat;
*/
public class BannerTests {
private ConfigurableApplicationContext context;
@After
public void cleanUp() {
if (this.context != null) {
this.context.close();
}
}
@Rule
public OutputCapture out = new OutputCapture();
@ -42,7 +53,7 @@ public class BannerTests {
public void testDefaultBanner() throws Exception {
SpringApplication application = new SpringApplication(Config.class);
application.setWebEnvironment(false);
application.run();
this.context = application.run();
assertThat(this.out.toString(), containsString(":: Spring Boot ::"));
}
@ -51,7 +62,7 @@ public class BannerTests {
SpringApplication application = new SpringApplication(Config.class);
application.setWebEnvironment(false);
application.setBanner(new DummyBanner());
application.run();
this.context = application.run();
assertThat(this.out.toString(), containsString("My Banner"));
}

View File

@ -16,6 +16,7 @@
package org.springframework.boot;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.boot.sampleconfig.MyComponent;
@ -40,6 +41,11 @@ public class BeanDefinitionLoaderTests {
this.registry = new StaticApplicationContext();
}
@After
public void cleanUp() {
this.registry.close();
}
@Test
public void loadClass() throws Exception {
BeanDefinitionLoader loader = new BeanDefinitionLoader(this.registry,

View File

@ -16,9 +16,10 @@
package org.springframework.boot;
import org.junit.After;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
@ -33,21 +34,29 @@ import static org.junit.Assert.assertEquals;
*/
public class OverrideSourcesTests {
private ConfigurableApplicationContext context;
@After
public void cleanUp() {
if (this.context != null) {
this.context.close();
}
}
@Test
public void beanInjectedToMainConfiguration() {
ApplicationContext context = SpringApplication.run(
new Object[] { MainConfiguration.class },
this.context = SpringApplication.run(new Object[] { MainConfiguration.class },
new String[] { "--spring.main.web_environment=false" });
assertEquals("foo", context.getBean(Service.class).bean.name);
assertEquals("foo", this.context.getBean(Service.class).bean.name);
}
@Test
public void primaryBeanInjectedProvingSourcesNotOverridden() {
ApplicationContext context = SpringApplication
this.context = SpringApplication
.run(new Object[] { MainConfiguration.class, TestConfiguration.class },
new String[] { "--spring.main.web_environment=false",
"--spring.main.sources=org.springframework.boot.OverrideSourcesTests.MainConfiguration" });
assertEquals("bar", context.getBean(Service.class).bean.name);
assertEquals("bar", this.context.getBean(Service.class).bean.name);
}
@Configuration

View File

@ -16,6 +16,7 @@
package org.springframework.boot;
import org.junit.After;
import org.junit.Test;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Configuration;
@ -31,17 +32,26 @@ import static org.junit.Assert.assertThat;
*/
public class ReproTests {
private ConfigurableApplicationContext context;
@After
public void cleanUp() {
if (this.context != null) {
this.context.close();
}
}
@Test
public void enableProfileViaApplicationProperties() throws Exception {
// gh-308
SpringApplication application = new SpringApplication(Config.class);
application.setWebEnvironment(false);
ConfigurableApplicationContext context = application.run(
this.context = application.run(
"--spring.config.name=enableprofileviaapplicationproperties",
"--spring.profiles.active=dev");
assertThat(context.getEnvironment().acceptsProfiles("dev"), equalTo(true));
assertThat(context.getEnvironment().acceptsProfiles("a"), equalTo(true));
assertThat(this.context.getEnvironment().acceptsProfiles("dev"), equalTo(true));
assertThat(this.context.getEnvironment().acceptsProfiles("a"), equalTo(true));
}
@Test
@ -50,8 +60,8 @@ public class ReproTests {
SpringApplication application = new SpringApplication(Config.class);
application.setWebEnvironment(false);
String configName = "--spring.config.name=activeprofilerepro";
assertVersionProperty(application.run(configName, "--spring.profiles.active=B"),
"B", "B");
this.context = application.run(configName, "--spring.profiles.active=B");
assertVersionProperty(this.context, "B", "B");
}
@Test
@ -60,7 +70,8 @@ public class ReproTests {
SpringApplication application = new SpringApplication(Config.class);
application.setWebEnvironment(false);
String configName = "--spring.config.name=activeprofilerepro";
assertVersionProperty(application.run(configName), "B", "B");
this.context = application.run(configName);
assertVersionProperty(this.context, "B", "B");
}
@Test
@ -69,7 +80,8 @@ public class ReproTests {
SpringApplication application = new SpringApplication(Config.class);
application.setWebEnvironment(false);
String configName = "--spring.config.name=activeprofilerepro-ordered";
assertVersionProperty(application.run(configName), "B", "A", "B");
this.context = application.run(configName);
assertVersionProperty(this.context, "B", "A", "B");
}
@Test
@ -78,8 +90,8 @@ public class ReproTests {
SpringApplication application = new SpringApplication(Config.class);
application.setWebEnvironment(false);
String configName = "--spring.config.name=activeprofilerepro";
assertVersionProperty(application.run(configName, "--spring.profiles.active=C"),
"C", "C");
this.context = application.run(configName, "--spring.profiles.active=C");
assertVersionProperty(this.context, "C", "C");
}
@Test
@ -88,9 +100,8 @@ public class ReproTests {
SpringApplication application = new SpringApplication(Config.class);
application.setWebEnvironment(false);
String configName = "--spring.config.name=activeprofilerepro";
assertVersionProperty(
application.run(configName, "--spring.profiles.active=A,C"), "C", "A",
"C");
this.context = application.run(configName, "--spring.profiles.active=A,C");
assertVersionProperty(this.context, "C", "A", "C");
}
@Test
@ -99,9 +110,8 @@ public class ReproTests {
SpringApplication application = new SpringApplication(Config.class);
application.setWebEnvironment(false);
String configName = "--spring.config.name=activeprofilerepro";
assertVersionProperty(
application.run(configName, "--spring.profiles.active=C,A"), "A", "C",
"A");
this.context = application.run(configName, "--spring.profiles.active=C,A");
assertVersionProperty(this.context, "A", "C", "A");
}
@Test
@ -110,8 +120,8 @@ public class ReproTests {
SpringApplication application = new SpringApplication(Config.class);
application.setWebEnvironment(false);
String configName = "--spring.config.name=activeprofilerepro-without-override";
assertVersionProperty(application.run(configName, "--spring.profiles.active=B"),
"B", "B");
this.context = application.run(configName, "--spring.profiles.active=B");
assertVersionProperty(this.context, "B", "B");
}
@Test
@ -120,7 +130,8 @@ public class ReproTests {
SpringApplication application = new SpringApplication(Config.class);
application.setWebEnvironment(false);
String configName = "--spring.config.name=activeprofilerepro-without-override";
assertVersionProperty(application.run(configName), null);
this.context = application.run(configName);
assertVersionProperty(this.context, null);
}
@Test
@ -129,8 +140,8 @@ public class ReproTests {
SpringApplication application = new SpringApplication(Config.class);
application.setWebEnvironment(false);
String configName = "--spring.config.name=activeprofilerepro-without-override";
assertVersionProperty(application.run(configName, "--spring.profiles.active=C"),
"C", "C");
this.context = application.run(configName, "--spring.profiles.active=C");
assertVersionProperty(this.context, "C", "C");
}
@Test
@ -139,9 +150,8 @@ public class ReproTests {
SpringApplication application = new SpringApplication(Config.class);
application.setWebEnvironment(false);
String configName = "--spring.config.name=activeprofilerepro-without-override";
assertVersionProperty(
application.run(configName, "--spring.profiles.active=A,C"), "C", "A",
"C");
this.context = application.run(configName, "--spring.profiles.active=A,C");
assertVersionProperty(this.context, "C", "A", "C");
}
@Test
@ -150,9 +160,8 @@ public class ReproTests {
SpringApplication application = new SpringApplication(Config.class);
application.setWebEnvironment(false);
String configName = "--spring.config.name=activeprofilerepro-without-override";
assertVersionProperty(
application.run(configName, "--spring.profiles.active=C,A"), "A", "C",
"A");
this.context = application.run(configName, "--spring.profiles.active=C,A");
assertVersionProperty(this.context, "A", "C", "A");
}
private void assertVersionProperty(ConfigurableApplicationContext context,

View File

@ -162,7 +162,7 @@ public class SpringApplicationTests {
SpringApplication application = spy(new SpringApplication(ExampleConfig.class));
application.setWebEnvironment(false);
application.setShowBanner(false);
application.run();
this.context = application.run();
verify(application, never()).printBanner((Environment) anyObject());
}
@ -170,7 +170,7 @@ public class SpringApplicationTests {
public void disableBannerViaProperty() throws Exception {
SpringApplication application = spy(new SpringApplication(ExampleConfig.class));
application.setWebEnvironment(false);
application.run("--spring.main.show_banner=false");
this.context = application.run("--spring.main.show_banner=false");
verify(application, never()).printBanner((Environment) anyObject());
}
@ -178,7 +178,7 @@ public class SpringApplicationTests {
public void customBanner() throws Exception {
SpringApplication application = spy(new SpringApplication(ExampleConfig.class));
application.setWebEnvironment(false);
application.run("--banner.location=classpath:test-banner.txt");
this.context = application.run("--banner.location=classpath:test-banner.txt");
assertThat(this.output.toString(), startsWith("Running a Test!"));
}
@ -186,7 +186,8 @@ public class SpringApplicationTests {
public void customBannerWithProperties() throws Exception {
SpringApplication application = spy(new SpringApplication(ExampleConfig.class));
application.setWebEnvironment(false);
application.run("--banner.location=classpath:test-banner-with-placeholder.txt",
this.context = application.run(
"--banner.location=classpath:test-banner-with-placeholder.txt",
"--test.property=123456");
assertThat(this.output.toString(),
startsWith(String.format("Running a Test!%n%n123456")));
@ -308,7 +309,7 @@ public class SpringApplicationTests {
application.setWebEnvironment(false);
ConfigurableEnvironment environment = new StandardEnvironment();
application.setEnvironment(environment);
application.run();
this.context = application.run();
verify(application.getLoader()).setEnvironment(environment);
}
@ -351,7 +352,7 @@ public class SpringApplicationTests {
application.setWebEnvironment(false);
ConfigurableEnvironment environment = new StandardEnvironment();
application.setEnvironment(environment);
application.run("--foo=bar");
this.context = application.run("--foo=bar");
assertTrue(hasPropertySource(environment, CommandLinePropertySource.class,
"commandLineArgs"));
}
@ -365,7 +366,7 @@ public class SpringApplicationTests {
new MapPropertySource("commandLineArgs", Collections
.<String, Object>singletonMap("foo", "original")));
application.setEnvironment(environment);
application.run("--foo=bar", "--bar=foo");
this.context = application.run("--foo=bar", "--bar=foo");
assertTrue(hasPropertySource(environment, CompositePropertySource.class,
"commandLineArgs"));
assertEquals("foo", environment.getProperty("bar"));
@ -379,7 +380,7 @@ public class SpringApplicationTests {
application.setWebEnvironment(false);
ConfigurableEnvironment environment = new StandardEnvironment();
application.setEnvironment(environment);
application.run();
this.context = application.run();
assertEquals("bucket", environment.getProperty("foo"));
}
@ -390,7 +391,7 @@ public class SpringApplicationTests {
application.setAdditionalProfiles("foo");
ConfigurableEnvironment environment = new StandardEnvironment();
application.setEnvironment(environment);
application.run();
this.context = application.run();
assertTrue(environment.acceptsProfiles("foo"));
}
@ -401,7 +402,7 @@ public class SpringApplicationTests {
application.setAdditionalProfiles("foo");
ConfigurableEnvironment environment = new StandardEnvironment();
application.setEnvironment(environment);
application.run("--spring.profiles.active=bar,spam");
this.context = application.run("--spring.profiles.active=bar,spam");
// Command line should always come last
assertArrayEquals(new String[] { "foo", "bar", "spam" },
environment.getActiveProfiles());
@ -414,7 +415,7 @@ public class SpringApplicationTests {
application.setAdditionalProfiles("other");
ConfigurableEnvironment environment = new StandardEnvironment();
application.setEnvironment(environment);
application.run();
this.context = application.run();
// Active profile should win over default
assertEquals("fromotherpropertiesfile", environment.getProperty("my.property"));
}
@ -425,7 +426,7 @@ public class SpringApplicationTests {
application.setWebEnvironment(false);
ConfigurableEnvironment environment = new StandardEnvironment();
application.setEnvironment(environment);
application.run();
this.context = application.run();
assertEquals("bucket", environment.getProperty("foo"));
}
@ -436,7 +437,7 @@ public class SpringApplicationTests {
application.setAddCommandLineProperties(false);
ConfigurableEnvironment environment = new StandardEnvironment();
application.setEnvironment(environment);
application.run("--foo=bar");
this.context = application.run("--foo=bar");
assertFalse(hasPropertySource(environment, PropertySource.class,
"commandLineArgs"));
}
@ -457,7 +458,7 @@ public class SpringApplicationTests {
TestSpringApplication application = new TestSpringApplication(sources);
application.setWebEnvironment(false);
application.setUseMockLoader(true);
application.run();
this.context = application.run();
Set<Object> initialSources = application.getSources();
assertThat(initialSources.toArray(), equalTo(sources));
}
@ -467,7 +468,7 @@ public class SpringApplicationTests {
Object[] sources = { "classpath:org/springframework/boot/sample-${sample.app.test.prop}.xml" };
TestSpringApplication application = new TestSpringApplication(sources);
application.setWebEnvironment(false);
application.run();
this.context = application.run();
}
@Test
@ -487,18 +488,18 @@ public class SpringApplicationTests {
public void exit() throws Exception {
SpringApplication application = new SpringApplication(ExampleConfig.class);
application.setWebEnvironment(false);
ApplicationContext context = application.run();
assertNotNull(context);
assertEquals(0, SpringApplication.exit(context));
this.context = application.run();
assertNotNull(this.context);
assertEquals(0, SpringApplication.exit(this.context));
}
@Test
public void exitWithExplicitCode() throws Exception {
SpringApplication application = new SpringApplication(ExampleConfig.class);
application.setWebEnvironment(false);
ApplicationContext context = application.run();
assertNotNull(context);
assertEquals(2, SpringApplication.exit(context, new ExitCodeGenerator() {
this.context = application.run();
assertNotNull(this.context);
assertEquals(2, SpringApplication.exit(this.context, new ExitCodeGenerator() {
@Override
public int getExitCode() {
return 2;
@ -522,7 +523,7 @@ public class SpringApplicationTests {
public void commandLineArgsApplyToSpringApplication() throws Exception {
TestSpringApplication application = new TestSpringApplication(ExampleConfig.class);
application.setWebEnvironment(false);
application.run("--spring.main.show_banner=false");
this.context = application.run("--spring.main.show_banner=false");
assertThat(application.getShowBanner(), is(false));
}
@ -583,7 +584,7 @@ public class SpringApplicationTests {
public void headless() throws Exception {
TestSpringApplication application = new TestSpringApplication(ExampleConfig.class);
application.setWebEnvironment(false);
application.run();
this.context = application.run();
assertThat(System.getProperty("java.awt.headless"), equalTo("true"));
}
@ -592,7 +593,7 @@ public class SpringApplicationTests {
TestSpringApplication application = new TestSpringApplication(ExampleConfig.class);
application.setWebEnvironment(false);
application.setHeadless(false);
application.run();
this.context = application.run();
assertThat(System.getProperty("java.awt.headless"), equalTo("false"));
}
@ -601,7 +602,7 @@ public class SpringApplicationTests {
System.setProperty("java.awt.headless", "false");
TestSpringApplication application = new TestSpringApplication(ExampleConfig.class);
application.setWebEnvironment(false);
application.run();
this.context = application.run();
assertThat(System.getProperty("java.awt.headless"), equalTo("false"));
}

View File

@ -78,8 +78,13 @@ public class ConfigFileEnvironmentPostProcessorTests {
@Rule
public ExpectedException expected = ExpectedException.none();
private ConfigurableApplicationContext context;
@After
public void cleanup() {
if (this.context != null) {
this.context.close();
}
System.clearProperty("the.property");
System.clearProperty("spring.config.location");
System.clearProperty("spring.main.showBanner");
@ -600,13 +605,12 @@ public class ConfigFileEnvironmentPostProcessorTests {
public void activateProfileFromProfileSpecificProperties() throws Exception {
SpringApplication application = new SpringApplication(Config.class);
application.setWebEnvironment(false);
ConfigurableApplicationContext context = application
.run("--spring.profiles.active=includeprofile");
assertThat(context.getEnvironment(), acceptsProfiles("includeprofile"));
assertThat(context.getEnvironment(), acceptsProfiles("specific"));
assertThat(context.getEnvironment(), acceptsProfiles("morespecific"));
assertThat(context.getEnvironment(), acceptsProfiles("yetmorespecific"));
assertThat(context.getEnvironment(), not(acceptsProfiles("missing")));
this.context = application.run("--spring.profiles.active=includeprofile");
assertThat(this.context.getEnvironment(), acceptsProfiles("includeprofile"));
assertThat(this.context.getEnvironment(), acceptsProfiles("specific"));
assertThat(this.context.getEnvironment(), acceptsProfiles("morespecific"));
assertThat(this.context.getEnvironment(), acceptsProfiles("yetmorespecific"));
assertThat(this.context.getEnvironment(), not(acceptsProfiles("missing")));
}
@Test
@ -614,9 +618,9 @@ public class ConfigFileEnvironmentPostProcessorTests {
// gh-340
SpringApplication application = new SpringApplication(Config.class);
application.setWebEnvironment(false);
ConfigurableApplicationContext context = application
this.context = application
.run("--spring.profiles.active=activeprofilewithsubdoc");
String property = context.getEnvironment().getProperty("foobar");
String property = this.context.getEnvironment().getProperty("foobar");
assertThat(property, equalTo("baz"));
}

View File

@ -28,6 +28,7 @@ import org.springframework.boot.ansi.AnsiOutput.Enabled;
import org.springframework.boot.ansi.AnsiOutputEnabledValue;
import org.springframework.boot.context.config.AnsiOutputApplicationListener;
import org.springframework.boot.test.EnvironmentTestUtils;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.StandardEnvironment;
@ -42,12 +43,21 @@ import static org.junit.Assert.assertThat;
*/
public class AnsiOutputApplicationListenerTests {
private ConfigurableApplicationContext context;
@Before
@After
public void resetAnsi() {
AnsiOutput.setEnabled(Enabled.DETECT);
}
@After
public void cleanUp() {
resetAnsi();
if (this.context != null) {
this.context.close();
}
}
@Test
public void enabled() {
SpringApplication application = new SpringApplication(Config.class);
@ -55,7 +65,7 @@ public class AnsiOutputApplicationListenerTests {
Map<String, Object> props = new HashMap<String, Object>();
props.put("spring.output.ansi.enabled", "ALWAYS");
application.setDefaultProperties(props);
application.run();
this.context = application.run();
assertThat(AnsiOutputEnabledValue.get(), equalTo(Enabled.ALWAYS));
}
@ -66,7 +76,7 @@ public class AnsiOutputApplicationListenerTests {
Map<String, Object> props = new HashMap<String, Object>();
props.put("spring.output.ansi.enabled", "never");
application.setDefaultProperties(props);
application.run();
this.context = application.run();
assertThat(AnsiOutputEnabledValue.get(), equalTo(Enabled.NEVER));
}
@ -77,7 +87,7 @@ public class AnsiOutputApplicationListenerTests {
SpringApplication application = new SpringApplication(Config.class);
application.setWebEnvironment(false);
application.setEnvironment(environment);
application.run();
this.context = application.run();
assertThat(AnsiOutputEnabledValue.get(), equalTo(Enabled.NEVER));
}

View File

@ -18,8 +18,10 @@ package org.springframework.boot.liquibase;
import java.lang.reflect.Field;
import org.junit.After;
import org.junit.Test;
import org.springframework.boot.SpringApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Configuration;
import org.springframework.util.ReflectionUtils;
@ -35,11 +37,20 @@ import static org.junit.Assert.assertThat;
*/
public class LiquibaseServiceLocatorApplicationListenerTests {
private ConfigurableApplicationContext context;
@After
public void cleanUp() {
if (this.context != null) {
this.context.close();
}
}
@Test
public void replacesServiceLocator() throws Exception {
SpringApplication application = new SpringApplication(Conf.class);
application.setWebEnvironment(false);
application.run();
this.context = application.run();
ServiceLocator instance = ServiceLocator.getInstance();
Field field = ReflectionUtils.findField(ServiceLocator.class, "classResolver");
field.setAccessible(true);