import com.google.common.annotations.VisibleForTesting;
import java.io.IOException;
+import java.util.concurrent.CountDownLatch;
import java.util.function.Function;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
private DispatcherServlet dispatcherLevel4 = null;
private DispatcherServlet dispatcherSafeMode = null;
+ private final CountDownLatch safeModeInitializationCompletedLatch = new CountDownLatch(2);
+
public ApiV2Servlet() {
this.servletProvider = DispatcherServlet::new;
}
}
if (dispatcherSafeMode != null) {
dispatcherSafeMode.init(config);
+ safeModeInitializationCompletedLatch.countDown();
}
}
public void initDispatcherSafeMode(PlatformLevel platformLevel) {
- this.dispatcherSafeMode = initDispatcherServlet(platformLevel, SafeModeWebConfig.class);
+ dispatcherSafeMode = initDispatcherServlet(platformLevel, SafeModeWebConfig.class);
+ safeModeInitializationCompletedLatch.countDown();
}
public void initDispatcherLevel4(PlatformLevel platformLevel) {
private void destroyDispatcherSafeMode() {
if (dispatcherSafeMode != null) {
+ try {
+ safeModeInitializationCompletedLatch.await();
+ } catch (InterruptedException ie) {
+ Thread.currentThread().interrupt();
+ throw new IllegalStateException(ie);
+ }
DispatcherServlet dispatcherToDestroy = dispatcherSafeMode;
dispatcherSafeMode = null;
dispatcherToDestroy.destroy();
DispatcherServlet mockDispatcherServletLevel4 = mock(DispatcherServlet.class);
underTest.setServletProvider(context -> mockDispatcherServletSafeMode);
- underTest.init(mock(ServletConfig.class));
underTest.initDispatcherSafeMode(mockPlatformLevel);
+ underTest.init(mock(ServletConfig.class));
ServletRequest mockRequest1 = mock(ServletRequest.class);
ServletResponse mockResponse1 = mock(ServletResponse.class);
underTest.service(mockRequest1, mockResponse1);
}
@Test
- public void initDispatcherServlet_initLevel4ShouldDestroySafeMode() {
+ public void initDispatcherServlet_initLevel4ShouldDestroySafeMode() throws ServletException {
PlatformLevel mockPlatformLevel = getMockPlatformLevel();
ApiV2Servlet underTest = new ApiV2Servlet();
DispatcherServlet mockDispatcherServletSafeMode = mock(DispatcherServlet.class);
underTest.setServletProvider(context -> mockDispatcherServletSafeMode);
underTest.initDispatcherSafeMode(mockPlatformLevel);
+ underTest.init(mock(ServletConfig.class));
underTest.setServletProvider(context -> mock(DispatcherServlet.class));
}
@Test
- public void destroy_shouldDestroyDispatcherSafeMode() {
+ public void destroy_shouldDestroyDispatcherSafeMode() throws ServletException {
PlatformLevel mockPlatformLevel = getMockPlatformLevel();
ApiV2Servlet underTest = new ApiV2Servlet();
DispatcherServlet mockDispatcherServletSafeMode = mock(DispatcherServlet.class);
underTest.setServletProvider(context -> mockDispatcherServletSafeMode);
underTest.initDispatcherSafeMode(mockPlatformLevel);
+ underTest.init(mock(ServletConfig.class));
underTest.destroy();