Author: violetagg Date: Wed Mar 16 11:42:17 2016 New Revision: 1735220 URL: http://svn.apache.org/viewvc?rev=1735220&view=rev Log: Added test for javax.websocket.Session.setMaxIdleTimeout(). A message can be received after timeout. Mark the test with @Ignore.
Modified: tomcat/trunk/test/org/apache/tomcat/websocket/TestWsWebSocketContainer.java Modified: tomcat/trunk/test/org/apache/tomcat/websocket/TestWsWebSocketContainer.java URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/tomcat/websocket/TestWsWebSocketContainer.java?rev=1735220&r1=1735219&r2=1735220&view=diff ============================================================================== --- tomcat/trunk/test/org/apache/tomcat/websocket/TestWsWebSocketContainer.java (original) +++ tomcat/trunk/test/org/apache/tomcat/websocket/TestWsWebSocketContainer.java Wed Mar 16 11:42:17 2016 @@ -40,11 +40,13 @@ import javax.websocket.MessageHandler; import javax.websocket.OnMessage; import javax.websocket.Session; import javax.websocket.WebSocketContainer; +import javax.websocket.server.PathParam; import javax.websocket.server.ServerContainer; import javax.websocket.server.ServerEndpoint; import javax.websocket.server.ServerEndpointConfig; import org.junit.Assert; +import org.junit.Ignore; import org.junit.Test; import org.apache.catalina.Context; @@ -765,6 +767,76 @@ public class TestWsWebSocketContainer ex Assert.assertEquals(0, getOpenCount(setA)); } + @Ignore + @Test + public void testSessionMaxIdleTimeout() throws Exception { + + Tomcat tomcat = getTomcatInstance(); + // No file system docBase required + Context ctx = tomcat.addContext("", null); + ctx.addApplicationListener(Config.class.getName()); + Tomcat.addServlet(ctx, "default", new DefaultServlet()); + ctx.addServletMapping("/", "default"); + + tomcat.start(); + + // Need access to implementation methods for configuring unit tests + WsWebSocketContainer wsContainer = (WsWebSocketContainer) + ContainerProvider.getWebSocketContainer(); + wsContainer.setProcessPeriod(1); + + long timeout = 2000; + try (Session session = connectToEchoServer(wsContainer, new EndpointA(), + Config.PATH_MAX_IDLE_TIMEOUT + "/" + (2 * timeout))) { + session.addMessageHandler(new MessageHandler.Whole<String>() { + @Override + public void onMessage(String message) { + System.out.println(message); + } + }); + session.setMaxIdleTimeout(timeout); + session.getBasicRemote().sendText("timeout"); + Thread.sleep(2 * timeout); + } + + } + + public static class Config extends WsContextListener { + + public static final String PATH_MAX_IDLE_TIMEOUT = "/MaxIdleTimeout"; + + @Override + public void contextInitialized(ServletContextEvent sce) { + super.contextInitialized(sce); + ServerContainer sc = + (ServerContainer) sce.getServletContext().getAttribute( + Constants.SERVER_CONTAINER_SERVLET_CONTEXT_ATTRIBUTE); + try { + sc.addEndpoint(MaxIdleTimeout.class); + } catch (DeploymentException e) { + throw new IllegalStateException(e); + } + } + + @ServerEndpoint("/MaxIdleTimeout/{timeout}") + public static class MaxIdleTimeout { + + @OnMessage + public void echoTextMessage(@PathParam("timeout") long timeout, Session session, String msg) { + try { + session.getBasicRemote().sendText(msg + "=" + timeout); + Thread.sleep(timeout); + session.getBasicRemote().sendText("After sleep..."); + } catch (Exception e) { + try { + session.close(); + } catch (IOException e1) { + // Ignore + } + } + } + } + } private int getOpenCount(Set<Session> sessions) { int result = 0; --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org