From 8fdfe245cadc3e3281d31faa7a926492b4ca37c4 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Fri, 19 Jul 2013 09:19:59 -0700 Subject: [PATCH] Add tests for session timeouts Add unit tests for session timeouts and also added a convenience method to set the time with a TimeUnit. Issue: #53667353 --- ...stractEmbeddedServletContainerFactory.java | 6 +++ ...urableEmbeddedServletContainerFactory.java | 9 ++++ ...yEmbeddedServletContainerFactoryTests.java | 43 ++++++++++++++++--- ...tEmbeddedServletContainerFactoryTests.java | 34 ++++++++++++--- 4 files changed, 80 insertions(+), 12 deletions(-) diff --git a/spring-bootstrap/src/main/java/org/springframework/bootstrap/context/embedded/AbstractEmbeddedServletContainerFactory.java b/spring-bootstrap/src/main/java/org/springframework/bootstrap/context/embedded/AbstractEmbeddedServletContainerFactory.java index 2f7eea3ced..a3768d58fe 100644 --- a/spring-bootstrap/src/main/java/org/springframework/bootstrap/context/embedded/AbstractEmbeddedServletContainerFactory.java +++ b/spring-bootstrap/src/main/java/org/springframework/bootstrap/context/embedded/AbstractEmbeddedServletContainerFactory.java @@ -28,6 +28,7 @@ import java.util.Arrays; import java.util.LinkedHashSet; import java.util.List; import java.util.Set; +import java.util.concurrent.TimeUnit; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -161,6 +162,11 @@ public abstract class AbstractEmbeddedServletContainerFactory implements this.sessionTimeout = sessionTimeout; } + public void setSessionTimeout(int sessionTimeout, TimeUnit timeUnit) { + Assert.notNull(timeUnit, "TimeUnit must not be null"); + this.sessionTimeout = (int) timeUnit.toSeconds(sessionTimeout); + } + /** * @return the session timeout in minutes */ diff --git a/spring-bootstrap/src/main/java/org/springframework/bootstrap/context/embedded/ConfigurableEmbeddedServletContainerFactory.java b/spring-bootstrap/src/main/java/org/springframework/bootstrap/context/embedded/ConfigurableEmbeddedServletContainerFactory.java index 81c88b3461..cb5ee7f5d6 100644 --- a/spring-bootstrap/src/main/java/org/springframework/bootstrap/context/embedded/ConfigurableEmbeddedServletContainerFactory.java +++ b/spring-bootstrap/src/main/java/org/springframework/bootstrap/context/embedded/ConfigurableEmbeddedServletContainerFactory.java @@ -20,6 +20,7 @@ import java.io.File; import java.net.InetAddress; import java.util.List; import java.util.Set; +import java.util.concurrent.TimeUnit; /** * Simple interface that represents customizations to an @@ -59,6 +60,14 @@ public interface ConfigurableEmbeddedServletContainerFactory extends */ void setSessionTimeout(int sessionTimeout); + /** + * The session timeout in the specified {@link TimeUnit} (default 30 seconds). If 0 or + * negative then sessions never expire. + * @param sessionTimeout the session timeout + * @param timeUnit the time unit + */ + void setSessionTimeout(int sessionTimeout, TimeUnit timeUnit); + /** * Sets the specific network address that the server should bind to. * @param address the address to set (defaults to {@code null}) diff --git a/spring-bootstrap/src/test/java/org/springframework/bootstrap/context/embedded/jetty/JettyEmbeddedServletContainerFactoryTests.java b/spring-bootstrap/src/test/java/org/springframework/bootstrap/context/embedded/jetty/JettyEmbeddedServletContainerFactoryTests.java index 8b4526e90e..04c3adaeda 100644 --- a/spring-bootstrap/src/test/java/org/springframework/bootstrap/context/embedded/jetty/JettyEmbeddedServletContainerFactoryTests.java +++ b/spring-bootstrap/src/test/java/org/springframework/bootstrap/context/embedded/jetty/JettyEmbeddedServletContainerFactoryTests.java @@ -17,17 +17,20 @@ package org.springframework.bootstrap.context.embedded.jetty; import java.util.Arrays; +import java.util.concurrent.TimeUnit; +import org.eclipse.jetty.server.Handler; import org.eclipse.jetty.webapp.Configuration; import org.eclipse.jetty.webapp.WebAppContext; import org.junit.Test; import org.mockito.InOrder; import org.springframework.bootstrap.context.embedded.AbstractEmbeddedServletContainerFactoryTests; -import org.springframework.bootstrap.context.embedded.jetty.JettyEmbeddedServletContainer; -import org.springframework.bootstrap.context.embedded.jetty.JettyEmbeddedServletContainerFactory; -import static org.mockito.Matchers.*; -import static org.mockito.Mockito.*; +import static org.hamcrest.Matchers.equalTo; +import static org.junit.Assert.assertThat; +import static org.mockito.Matchers.anyObject; +import static org.mockito.Mockito.inOrder; +import static org.mockito.Mockito.mock; /** * Tests for {@link JettyEmbeddedServletContainerFactory} and @@ -38,6 +41,11 @@ import static org.mockito.Mockito.*; public class JettyEmbeddedServletContainerFactoryTests extends AbstractEmbeddedServletContainerFactoryTests { + @Override + protected JettyEmbeddedServletContainerFactory getFactory() { + return new JettyEmbeddedServletContainerFactory(); + } + @Test public void jettyConfigurations() throws Exception { JettyEmbeddedServletContainerFactory factory = getFactory(); @@ -54,8 +62,29 @@ public class JettyEmbeddedServletContainerFactoryTests extends } } - @Override - protected JettyEmbeddedServletContainerFactory getFactory() { - return new JettyEmbeddedServletContainerFactory(); + @Test + public void sessionTimeout() throws Exception { + JettyEmbeddedServletContainerFactory factory = getFactory(); + factory.setSessionTimeout(10); + assertTimeout(factory, 10); } + + @Test + public void sessionTimeoutInMins() throws Exception { + JettyEmbeddedServletContainerFactory factory = getFactory(); + factory.setSessionTimeout(1, TimeUnit.MINUTES); + assertTimeout(factory, 60); + } + + private void assertTimeout(JettyEmbeddedServletContainerFactory factory, int expected) { + this.container = factory.getEmbeddedServletContainer(); + JettyEmbeddedServletContainer jettyContainer = (JettyEmbeddedServletContainer) this.container; + Handler[] handlers = jettyContainer.getServer().getChildHandlersByClass( + WebAppContext.class); + WebAppContext webAppContext = (WebAppContext) handlers[0]; + int actual = webAppContext.getSessionHandler().getSessionManager() + .getMaxInactiveInterval(); + assertThat(actual, equalTo(expected)); + } + } diff --git a/spring-bootstrap/src/test/java/org/springframework/bootstrap/context/embedded/tomcat/TomcatEmbeddedServletContainerFactoryTests.java b/spring-bootstrap/src/test/java/org/springframework/bootstrap/context/embedded/tomcat/TomcatEmbeddedServletContainerFactoryTests.java index 19e83e134a..c1c8d563bc 100644 --- a/spring-bootstrap/src/test/java/org/springframework/bootstrap/context/embedded/tomcat/TomcatEmbeddedServletContainerFactoryTests.java +++ b/spring-bootstrap/src/test/java/org/springframework/bootstrap/context/embedded/tomcat/TomcatEmbeddedServletContainerFactoryTests.java @@ -17,15 +17,18 @@ package org.springframework.bootstrap.context.embedded.tomcat; import java.util.Arrays; +import java.util.concurrent.TimeUnit; +import org.apache.catalina.Context; import org.apache.catalina.LifecycleEvent; import org.apache.catalina.LifecycleListener; +import org.apache.catalina.startup.Tomcat; import org.junit.Test; import org.mockito.InOrder; import org.springframework.bootstrap.context.embedded.AbstractEmbeddedServletContainerFactoryTests; -import org.springframework.bootstrap.context.embedded.tomcat.TomcatEmbeddedServletContainer; -import org.springframework.bootstrap.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory; +import static org.hamcrest.Matchers.equalTo; +import static org.junit.Assert.assertThat; import static org.mockito.Matchers.anyObject; import static org.mockito.Mockito.inOrder; import static org.mockito.Mockito.mock; @@ -39,6 +42,11 @@ import static org.mockito.Mockito.mock; public class TomcatEmbeddedServletContainerFactoryTests extends AbstractEmbeddedServletContainerFactoryTests { + @Override + protected TomcatEmbeddedServletContainerFactory getFactory() { + return new TomcatEmbeddedServletContainerFactory(); + } + @Test public void tomcatListeners() throws Exception { TomcatEmbeddedServletContainerFactory factory = getFactory(); @@ -55,9 +63,25 @@ public class TomcatEmbeddedServletContainerFactoryTests extends } } - @Override - protected TomcatEmbeddedServletContainerFactory getFactory() { - return new TomcatEmbeddedServletContainerFactory(); + @Test + public void sessionTimeout() throws Exception { + TomcatEmbeddedServletContainerFactory factory = getFactory(); + factory.setSessionTimeout(10); + assertTimeout(factory, 10); + } + + @Test + public void sessionTimeoutInMins() throws Exception { + TomcatEmbeddedServletContainerFactory factory = getFactory(); + factory.setSessionTimeout(1, TimeUnit.MINUTES); + assertTimeout(factory, 60); + } + + private void assertTimeout(TomcatEmbeddedServletContainerFactory factory, int expected) { + this.container = factory.getEmbeddedServletContainer(); + Tomcat tomcat = ((TomcatEmbeddedServletContainer) this.container).getTomcat(); + Context context = (Context) tomcat.getHost().findChildren()[0]; + assertThat(context.getSessionTimeout(), equalTo(expected)); } // FIXME test valve