@ -17,12 +17,18 @@
@@ -17,12 +17,18 @@
package org.springframework.boot.web.servlet.support ;
import java.util.Collections ;
import java.util.Vector ;
import java.util.concurrent.atomic.AtomicBoolean ;
import javax.servlet.ServletContext ;
import javax.servlet.ServletContextEvent ;
import javax.servlet.ServletContextListener ;
import javax.servlet.ServletException ;
import org.junit.jupiter.api.AfterEach ;
import org.junit.jupiter.api.Test ;
import org.junit.jupiter.api.extension.ExtendWith ;
import org.mockito.ArgumentCaptor ;
import org.springframework.boot.SpringApplication ;
import org.springframework.boot.builder.SpringApplicationBuilder ;
@ -46,6 +52,7 @@ import static org.assertj.core.api.Assertions.assertThat;
@@ -46,6 +52,7 @@ import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatIllegalStateException ;
import static org.mockito.BDDMockito.given ;
import static org.mockito.Mockito.mock ;
import static org.mockito.Mockito.verify ;
/ * *
* Tests for { @link SpringBootServletInitializer } .
@ -142,6 +149,31 @@ class SpringBootServletInitializerTests {
@@ -142,6 +149,31 @@ class SpringBootServletInitializerTests {
}
}
@Test
void whenServletContextIsDestroyedThenJdbcDriversAreDeregistered ( ) throws ServletException {
ServletContext servletContext = mock ( ServletContext . class ) ;
given ( servletContext . getInitParameterNames ( ) ) . willReturn ( new Vector < String > ( ) . elements ( ) ) ;
given ( servletContext . getAttributeNames ( ) ) . willReturn ( new Vector < String > ( ) . elements ( ) ) ;
AtomicBoolean driversDeregistered = new AtomicBoolean ( ) ;
new SpringBootServletInitializer ( ) {
@Override
protected SpringApplicationBuilder configure ( SpringApplicationBuilder builder ) {
return builder . sources ( Config . class ) ;
}
@Override
protected void deregisterJdbcDrivers ( ServletContext servletContext ) {
driversDeregistered . set ( true ) ;
}
} . onStartup ( servletContext ) ;
ArgumentCaptor < ServletContextListener > captor = ArgumentCaptor . forClass ( ServletContextListener . class ) ;
verify ( servletContext ) . addListener ( captor . capture ( ) ) ;
captor . getValue ( ) . contextDestroyed ( new ServletContextEvent ( servletContext ) ) ;
assertThat ( driversDeregistered ) . isTrue ( ) ;
}
static class PropertySourceVerifyingSpringBootServletInitializer extends SpringBootServletInitializer {
@Override