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