You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by vi...@apache.org on 2016/03/16 12:42:18 UTC

svn commit: r1735220 - /tomcat/trunk/test/org/apache/tomcat/websocket/TestWsWebSocketContainer.java

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-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org