Merge pull request #12477 from dreis2211

* pr/12477:
  Polish "Move test to ApplicationContextRunner"
  Move test to ApplicationContextRunner
pull/12460/merge
Phillip Webb 7 years ago
commit ca7b230521

@ -1,5 +1,5 @@
/*
* Copyright 2012-2017 the original author or authors.
* Copyright 2012-2018 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -19,18 +19,16 @@ package org.springframework.boot.autoconfigure.web.servlet;
import javax.servlet.MultipartConfigElement;
import javax.servlet.http.HttpServletRequest;
import org.junit.After;
import org.junit.Test;
import org.springframework.beans.DirectFieldAccessor;
import org.springframework.boot.test.util.TestPropertyValues;
import org.springframework.boot.autoconfigure.AutoConfigurations;
import org.springframework.boot.test.context.runner.WebApplicationContextRunner;
import org.springframework.boot.web.servlet.MultipartConfigFactory;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.mock.web.MockServletContext;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.multipart.MultipartException;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.MultipartResolver;
@ -47,146 +45,132 @@ import static org.assertj.core.api.Assertions.assertThat;
*/
public class DispatcherServletAutoConfigurationTests {
private AnnotationConfigWebApplicationContext context;
@After
public void closeContext() {
if (this.context != null) {
this.context.close();
}
}
private WebApplicationContextRunner contextRunner = new WebApplicationContextRunner()
.withConfiguration(
AutoConfigurations.of(DispatcherServletAutoConfiguration.class));
@Test
public void registrationProperties() {
this.context = new AnnotationConfigWebApplicationContext();
this.context.register(DispatcherServletAutoConfiguration.class);
this.context.setServletContext(new MockServletContext());
this.context.refresh();
assertThat(this.context.getBean(DispatcherServlet.class)).isNotNull();
ServletRegistrationBean<?> registration = this.context
.getBean(ServletRegistrationBean.class);
assertThat(registration.getUrlMappings().toString()).isEqualTo("[/]");
this.contextRunner.run((context) -> {
assertThat(context.getBean(DispatcherServlet.class)).isNotNull();
ServletRegistrationBean<?> registration = context
.getBean(ServletRegistrationBean.class);
assertThat(registration.getUrlMappings().toString()).isEqualTo("[/]");
});
}
@Test
public void registrationNonServletBean() {
this.context = new AnnotationConfigWebApplicationContext();
this.context.register(NonServletConfiguration.class,
DispatcherServletAutoConfiguration.class);
this.context.setServletContext(new MockServletContext());
this.context.refresh();
assertThat(this.context.getBeanNamesForType(ServletRegistrationBean.class).length)
.isEqualTo(0);
assertThat(this.context.getBeanNamesForType(DispatcherServlet.class).length)
.isEqualTo(0);
this.contextRunner.withUserConfiguration(NonServletConfiguration.class)
.run((context) -> {
assertThat(context).doesNotHaveBean(ServletRegistrationBean.class);
assertThat(context).doesNotHaveBean(DispatcherServlet.class);
});
}
// If a DispatcherServlet instance is registered with a name different
// from the default one, we're registering one anyway
@Test
public void registrationOverrideWithDispatcherServletWrongName() {
this.context = new AnnotationConfigWebApplicationContext();
this.context.register(CustomDispatcherServletWrongName.class,
DispatcherServletAutoConfiguration.class);
this.context.setServletContext(new MockServletContext());
this.context.refresh();
ServletRegistrationBean<?> registration = this.context
.getBean(ServletRegistrationBean.class);
assertThat(registration.getUrlMappings().toString()).isEqualTo("[/]");
assertThat(registration.getServletName()).isEqualTo("dispatcherServlet");
assertThat(this.context.getBeanNamesForType(DispatcherServlet.class).length)
.isEqualTo(2);
this.contextRunner.withUserConfiguration(CustomDispatcherServletWrongName.class)
.run((context) -> {
ServletRegistrationBean<?> registration = context
.getBean(ServletRegistrationBean.class);
assertThat(registration.getUrlMappings().toString()).isEqualTo("[/]");
assertThat(registration.getServletName())
.isEqualTo("dispatcherServlet");
assertThat(context).getBeanNames(DispatcherServlet.class).hasSize(2);
});
}
@Test
public void registrationOverrideWithAutowiredServlet() {
this.context = new AnnotationConfigWebApplicationContext();
this.context.register(CustomAutowiredRegistration.class,
DispatcherServletAutoConfiguration.class);
this.context.setServletContext(new MockServletContext());
this.context.refresh();
ServletRegistrationBean<?> registration = this.context
.getBean(ServletRegistrationBean.class);
assertThat(registration.getUrlMappings().toString()).isEqualTo("[/foo]");
assertThat(registration.getServletName()).isEqualTo("customDispatcher");
assertThat(this.context.getBeanNamesForType(DispatcherServlet.class).length)
.isEqualTo(1);
this.contextRunner.withUserConfiguration(CustomAutowiredRegistration.class)
.run((context) -> {
ServletRegistrationBean<?> registration = context
.getBean(ServletRegistrationBean.class);
assertThat(registration.getUrlMappings().toString())
.isEqualTo("[/foo]");
assertThat(registration.getServletName())
.isEqualTo("customDispatcher");
assertThat(context).hasSingleBean(DispatcherServlet.class);
});
}
@Test
public void servletPath() {
this.context = new AnnotationConfigWebApplicationContext();
this.context.setServletContext(new MockServletContext());
this.context.register(DispatcherServletAutoConfiguration.class);
TestPropertyValues.of("server.servlet.path:/spring").applyTo(this.context);
this.context.refresh();
assertThat(this.context.getBean(DispatcherServlet.class)).isNotNull();
ServletRegistrationBean<?> registration = this.context
.getBean(ServletRegistrationBean.class);
assertThat(registration.getUrlMappings().toString()).isEqualTo("[/spring/*]");
assertThat(registration.getMultipartConfig()).isNull();
this.contextRunner.withPropertyValues("server.servlet.path:/spring")
.run((context) -> {
assertThat(context.getBean(DispatcherServlet.class)).isNotNull();
ServletRegistrationBean<?> registration = context
.getBean(ServletRegistrationBean.class);
assertThat(registration.getUrlMappings().toString())
.isEqualTo("[/spring/*]");
assertThat(registration.getMultipartConfig()).isNull();
});
}
@Test
public void multipartConfig() {
this.context = new AnnotationConfigWebApplicationContext();
this.context.setServletContext(new MockServletContext());
this.context.register(MultipartConfiguration.class,
DispatcherServletAutoConfiguration.class);
this.context.refresh();
ServletRegistrationBean<?> registration = this.context
.getBean(ServletRegistrationBean.class);
assertThat(registration.getMultipartConfig()).isNotNull();
this.contextRunner.withUserConfiguration(MultipartConfiguration.class)
.run((context) -> {
ServletRegistrationBean<?> registration = context
.getBean(ServletRegistrationBean.class);
assertThat(registration.getMultipartConfig()).isNotNull();
});
}
@Test
public void renamesMultipartResolver() {
this.context = new AnnotationConfigWebApplicationContext();
this.context.setServletContext(new MockServletContext());
this.context.register(MultipartResolverConfiguration.class,
DispatcherServletAutoConfiguration.class);
this.context.refresh();
DispatcherServlet dispatcherServlet = this.context
.getBean(DispatcherServlet.class);
dispatcherServlet.onApplicationEvent(new ContextRefreshedEvent(this.context));
assertThat(dispatcherServlet.getMultipartResolver())
.isInstanceOf(MockMultipartResolver.class);
this.contextRunner.withUserConfiguration(MultipartResolverConfiguration.class)
.run((context) -> {
DispatcherServlet dispatcherServlet = context
.getBean(DispatcherServlet.class);
dispatcherServlet
.onApplicationEvent(new ContextRefreshedEvent(context));
assertThat(dispatcherServlet.getMultipartResolver())
.isInstanceOf(MockMultipartResolver.class);
});
}
@Test
public void dispatcherServletDefaultConfig() {
this.context = new AnnotationConfigWebApplicationContext();
this.context.setServletContext(new MockServletContext());
this.context.register(DispatcherServletAutoConfiguration.class);
this.context.refresh();
DispatcherServlet bean = this.context.getBean(DispatcherServlet.class);
assertThat(bean).extracting("throwExceptionIfNoHandlerFound")
.containsExactly(false);
assertThat(bean).extracting("dispatchOptionsRequest").containsExactly(true);
assertThat(bean).extracting("dispatchTraceRequest").containsExactly(false);
assertThat(new DirectFieldAccessor(
this.context.getBean("dispatcherServletRegistration"))
.getPropertyValue("loadOnStartup")).isEqualTo(-1);
this.contextRunner.run((context) -> {
DispatcherServlet dispatcherServlet = context
.getBean(DispatcherServlet.class);
assertThat(dispatcherServlet).extracting("throwExceptionIfNoHandlerFound")
.containsExactly(false);
assertThat(dispatcherServlet).extracting("dispatchOptionsRequest")
.containsExactly(true);
assertThat(dispatcherServlet).extracting("dispatchTraceRequest")
.containsExactly(false);
assertThat(new DirectFieldAccessor(
context.getBean("dispatcherServletRegistration"))
.getPropertyValue("loadOnStartup")).isEqualTo(-1);
});
}
@Test
public void dispatcherServletCustomConfig() {
this.context = new AnnotationConfigWebApplicationContext();
this.context.setServletContext(new MockServletContext());
this.context.register(DispatcherServletAutoConfiguration.class);
TestPropertyValues.of("spring.mvc.throw-exception-if-no-handler-found:true",
"spring.mvc.dispatch-options-request:false",
"spring.mvc.dispatch-trace-request:true",
"spring.mvc.servlet.load-on-startup=5").applyTo(this.context);
this.context.refresh();
DispatcherServlet bean = this.context.getBean(DispatcherServlet.class);
assertThat(bean).extracting("throwExceptionIfNoHandlerFound")
.containsExactly(true);
assertThat(bean).extracting("dispatchOptionsRequest").containsExactly(false);
assertThat(bean).extracting("dispatchTraceRequest").containsExactly(true);
assertThat(new DirectFieldAccessor(
this.context.getBean("dispatcherServletRegistration"))
.getPropertyValue("loadOnStartup")).isEqualTo(5);
this.contextRunner
.withPropertyValues("spring.mvc.throw-exception-if-no-handler-found:true",
"spring.mvc.dispatch-options-request:false",
"spring.mvc.dispatch-trace-request:true",
"spring.mvc.servlet.load-on-startup=5")
.run((context) -> {
DispatcherServlet dispatcherServlet = context
.getBean(DispatcherServlet.class);
assertThat(dispatcherServlet)
.extracting("throwExceptionIfNoHandlerFound")
.containsExactly(true);
assertThat(dispatcherServlet).extracting("dispatchOptionsRequest")
.containsExactly(false);
assertThat(dispatcherServlet).extracting("dispatchTraceRequest")
.containsExactly(true);
assertThat(new DirectFieldAccessor(
context.getBean("dispatcherServletRegistration"))
.getPropertyValue("loadOnStartup")).isEqualTo(5);
});
}
@Configuration

Loading…
Cancel
Save