Author: markt
Date: Thu Jul 11 10:25:06 2013
New Revision: 1502181

URL: http://svn.apache.org/r1502181
Log:
Add a test case for bug 55233 that also uncovered a couple of bugs in the 
batching code.

Added:
    tomcat/trunk/test/org/apache/tomcat/websocket/TestWebSocketFrameClient.java 
  (with props)
    tomcat/trunk/test/org/apache/tomcat/websocket/TesterFirehoseServer.java   
(with props)
    tomcat/trunk/test/org/apache/tomcat/websocket/TesterMessageCountClient.java
      - copied, changed from r1502156, 
tomcat/trunk/test/org/apache/tomcat/websocket/TesterSingleMessageClient.java
Removed:
    tomcat/trunk/test/org/apache/tomcat/websocket/TesterSingleMessageClient.java
Modified:
    tomcat/trunk/test/org/apache/tomcat/websocket/TestWsPingPongMessages.java
    tomcat/trunk/test/org/apache/tomcat/websocket/TestWsRemoteEndpoint.java
    tomcat/trunk/test/org/apache/tomcat/websocket/TestWsSubprotocols.java
    tomcat/trunk/test/org/apache/tomcat/websocket/TestWsWebSocketContainer.java

Added: 
tomcat/trunk/test/org/apache/tomcat/websocket/TestWebSocketFrameClient.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/tomcat/websocket/TestWebSocketFrameClient.java?rev=1502181&view=auto
==============================================================================
--- tomcat/trunk/test/org/apache/tomcat/websocket/TestWebSocketFrameClient.java 
(added)
+++ tomcat/trunk/test/org/apache/tomcat/websocket/TestWebSocketFrameClient.java 
Thu Jul 11 10:25:06 2013
@@ -0,0 +1,88 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.tomcat.websocket;
+
+import java.net.URI;
+import java.util.List;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+
+import javax.websocket.ClientEndpointConfig;
+import javax.websocket.ContainerProvider;
+import javax.websocket.Session;
+import javax.websocket.WebSocketContainer;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import org.apache.catalina.Context;
+import org.apache.catalina.servlets.DefaultServlet;
+import org.apache.catalina.startup.Tomcat;
+import org.apache.catalina.startup.TomcatBaseTest;
+import org.apache.tomcat.util.descriptor.web.ApplicationListener;
+import org.apache.tomcat.util.net.TesterSupport;
+import org.apache.tomcat.websocket.TesterMessageCountClient.BasicText;
+import 
org.apache.tomcat.websocket.TesterMessageCountClient.TesterProgrammaticEndpoint;
+
+public class TestWebSocketFrameClient extends TomcatBaseTest {
+
+    @Test
+    public void testConnectToServerEndpointSSL() throws Exception {
+
+        Tomcat tomcat = getTomcatInstance();
+        // Must have a real docBase - just use temp
+        Context ctx =
+            tomcat.addContext("", System.getProperty("java.io.tmpdir"));
+        ctx.addApplicationListener(new ApplicationListener(
+                TesterFirehoseServer.Config.class.getName(), false));
+        Tomcat.addServlet(ctx, "default", new DefaultServlet());
+        ctx.addServletMapping("/", "default");
+
+        TesterSupport.initSsl(tomcat);
+
+        tomcat.start();
+
+        WebSocketContainer wsContainer =
+                ContainerProvider.getWebSocketContainer();
+        ClientEndpointConfig clientEndpointConfig =
+                ClientEndpointConfig.Builder.create().build();
+        clientEndpointConfig.getUserProperties().put(
+                WsWebSocketContainer.SSL_TRUSTSTORE_PROPERTY,
+                "test/org/apache/tomcat/util/net/ca.jks");
+        Session wsSession = wsContainer.connectToServer(
+                TesterProgrammaticEndpoint.class,
+                clientEndpointConfig,
+                new URI("wss://localhost:" + getPort() +
+                        TesterFirehoseServer.Config.PATH));
+        CountDownLatch latch =
+                new CountDownLatch(TesterFirehoseServer.MESSAGE_COUNT);
+        BasicText handler = new BasicText(latch);
+        wsSession.addMessageHandler(handler);
+        wsSession.getBasicRemote().sendText("Hello");
+
+        // Ignore the latch result as the message count test below will tell us
+        // if the right number of messages arrived
+        handler.getLatch().await(10, TimeUnit.SECONDS);
+
+        List<String> messages = handler.getMessages();
+        Assert.assertEquals(
+                TesterFirehoseServer.MESSAGE_COUNT, messages.size());
+        for (String message : messages) {
+            Assert.assertEquals(TesterFirehoseServer.MESSAGE, message);
+        }
+    }
+}

Propchange: 
tomcat/trunk/test/org/apache/tomcat/websocket/TestWebSocketFrameClient.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: 
tomcat/trunk/test/org/apache/tomcat/websocket/TestWsPingPongMessages.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/tomcat/websocket/TestWsPingPongMessages.java?rev=1502181&r1=1502180&r2=1502181&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/tomcat/websocket/TestWsPingPongMessages.java 
(original)
+++ tomcat/trunk/test/org/apache/tomcat/websocket/TestWsPingPongMessages.java 
Thu Jul 11 10:25:06 2013
@@ -35,8 +35,8 @@ import org.apache.catalina.servlets.Defa
 import org.apache.catalina.startup.Tomcat;
 import org.apache.catalina.startup.TomcatBaseTest;
 import org.apache.tomcat.util.descriptor.web.ApplicationListener;
-import org.apache.tomcat.websocket.TesterSingleMessageClient.TesterEndpoint;
-import 
org.apache.tomcat.websocket.TesterSingleMessageClient.TesterProgrammaticEndpoint;
+import org.apache.tomcat.websocket.TesterMessageCountClient.TesterEndpoint;
+import 
org.apache.tomcat.websocket.TesterMessageCountClient.TesterProgrammaticEndpoint;
 
 
 public class TestWsPingPongMessages extends TomcatBaseTest {
@@ -84,7 +84,7 @@ public class TestWsPingPongMessages exte
     }
 
     public static class PongMessageHandler extends
-            TesterSingleMessageClient.BasicHandler<PongMessage> {
+            TesterMessageCountClient.BasicHandler<PongMessage> {
         public PongMessageHandler(CountDownLatch latch) {
             super(latch);
         }

Modified: 
tomcat/trunk/test/org/apache/tomcat/websocket/TestWsRemoteEndpoint.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/tomcat/websocket/TestWsRemoteEndpoint.java?rev=1502181&r1=1502180&r2=1502181&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/tomcat/websocket/TestWsRemoteEndpoint.java 
(original)
+++ tomcat/trunk/test/org/apache/tomcat/websocket/TestWsRemoteEndpoint.java Thu 
Jul 11 10:25:06 2013
@@ -36,11 +36,11 @@ import org.apache.catalina.servlets.Defa
 import org.apache.catalina.startup.Tomcat;
 import org.apache.catalina.startup.TomcatBaseTest;
 import org.apache.tomcat.util.descriptor.web.ApplicationListener;
-import org.apache.tomcat.websocket.TesterSingleMessageClient.AsyncHandler;
-import org.apache.tomcat.websocket.TesterSingleMessageClient.AsyncText;
-import 
org.apache.tomcat.websocket.TesterSingleMessageClient.TesterAnnotatedEndpoint;
-import org.apache.tomcat.websocket.TesterSingleMessageClient.TesterEndpoint;
-import 
org.apache.tomcat.websocket.TesterSingleMessageClient.TesterProgrammaticEndpoint;
+import org.apache.tomcat.websocket.TesterMessageCountClient.AsyncHandler;
+import org.apache.tomcat.websocket.TesterMessageCountClient.AsyncText;
+import 
org.apache.tomcat.websocket.TesterMessageCountClient.TesterAnnotatedEndpoint;
+import org.apache.tomcat.websocket.TesterMessageCountClient.TesterEndpoint;
+import 
org.apache.tomcat.websocket.TesterMessageCountClient.TesterProgrammaticEndpoint;
 
 public class TestWsRemoteEndpoint extends TomcatBaseTest {
 

Modified: tomcat/trunk/test/org/apache/tomcat/websocket/TestWsSubprotocols.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/tomcat/websocket/TestWsSubprotocols.java?rev=1502181&r1=1502180&r2=1502181&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/tomcat/websocket/TestWsSubprotocols.java 
(original)
+++ tomcat/trunk/test/org/apache/tomcat/websocket/TestWsSubprotocols.java Thu 
Jul 11 10:25:06 2013
@@ -41,7 +41,7 @@ import org.apache.catalina.servlets.Defa
 import org.apache.catalina.startup.Tomcat;
 import org.apache.catalina.startup.TomcatBaseTest;
 import org.apache.tomcat.util.descriptor.web.ApplicationListener;
-import 
org.apache.tomcat.websocket.TesterSingleMessageClient.TesterProgrammaticEndpoint;
+import 
org.apache.tomcat.websocket.TesterMessageCountClient.TesterProgrammaticEndpoint;
 import org.apache.tomcat.websocket.server.Constants;
 import org.apache.tomcat.websocket.server.WsListener;
 

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=1502181&r1=1502180&r2=1502181&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/tomcat/websocket/TestWsWebSocketContainer.java 
(original)
+++ tomcat/trunk/test/org/apache/tomcat/websocket/TestWsWebSocketContainer.java 
Thu Jul 11 10:25:06 2013
@@ -50,11 +50,11 @@ import org.apache.catalina.startup.Tomca
 import org.apache.coyote.http11.Http11Protocol;
 import org.apache.tomcat.util.descriptor.web.ApplicationListener;
 import org.apache.tomcat.util.net.TesterSupport;
-import org.apache.tomcat.websocket.TesterSingleMessageClient.BasicBinary;
-import org.apache.tomcat.websocket.TesterSingleMessageClient.BasicHandler;
-import org.apache.tomcat.websocket.TesterSingleMessageClient.BasicText;
-import org.apache.tomcat.websocket.TesterSingleMessageClient.TesterEndpoint;
-import 
org.apache.tomcat.websocket.TesterSingleMessageClient.TesterProgrammaticEndpoint;
+import org.apache.tomcat.websocket.TesterMessageCountClient.BasicBinary;
+import org.apache.tomcat.websocket.TesterMessageCountClient.BasicHandler;
+import org.apache.tomcat.websocket.TesterMessageCountClient.BasicText;
+import org.apache.tomcat.websocket.TesterMessageCountClient.TesterEndpoint;
+import 
org.apache.tomcat.websocket.TesterMessageCountClient.TesterProgrammaticEndpoint;
 import org.apache.tomcat.websocket.server.Constants;
 import org.apache.tomcat.websocket.server.WsListener;
 

Added: tomcat/trunk/test/org/apache/tomcat/websocket/TesterFirehoseServer.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/tomcat/websocket/TesterFirehoseServer.java?rev=1502181&view=auto
==============================================================================
--- tomcat/trunk/test/org/apache/tomcat/websocket/TesterFirehoseServer.java 
(added)
+++ tomcat/trunk/test/org/apache/tomcat/websocket/TesterFirehoseServer.java Thu 
Jul 11 10:25:06 2013
@@ -0,0 +1,101 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.tomcat.websocket;
+
+import java.io.IOException;
+
+import javax.servlet.ServletContextEvent;
+import javax.websocket.DeploymentException;
+import javax.websocket.OnMessage;
+import javax.websocket.RemoteEndpoint.Basic;
+import javax.websocket.Session;
+import javax.websocket.server.ServerContainer;
+import javax.websocket.server.ServerEndpoint;
+
+import org.apache.tomcat.websocket.server.Constants;
+import org.apache.tomcat.websocket.server.WsListener;
+
+/**
+ * Sends {@link #MESSAGE_COUNT} messages of size {@link #MESSAGE_SIZE} bytes as
+ * quickly as possible after the client sends its first message.
+ */
+public class TesterFirehoseServer {
+
+    public static final int MESSAGE_COUNT = 100000;
+    public static final String MESSAGE;
+    public static final int MESSAGE_SIZE = 1024;
+
+    static {
+        StringBuilder sb = new StringBuilder(MESSAGE_SIZE);
+        for (int i = 0; i < MESSAGE_SIZE; i++) {
+            sb.append('x');
+        }
+        MESSAGE = sb.toString();
+    }
+
+
+    public static class Config extends WsListener {
+
+        public static final String PATH = "/firehose";
+
+        @Override
+        public void contextInitialized(ServletContextEvent sce) {
+            super.contextInitialized(sce);
+            ServerContainer sc =
+                    (ServerContainer) sce.getServletContext().getAttribute(
+                            
Constants.SERVER_CONTAINER_SERVLET_CONTEXT_ATTRIBUTE);
+            try {
+                sc.addEndpoint(Endpoint.class);
+            } catch (DeploymentException e) {
+                throw new IllegalStateException(e);
+            }
+        }
+    }
+
+
+    @ServerEndpoint(Config.PATH)
+    public static class Endpoint {
+
+        private volatile boolean started = false;
+
+        @OnMessage
+        public void onMessage(Session session,
+                @SuppressWarnings("unused") String msg) throws IOException {
+
+            if (started) {
+                return;
+            }
+            synchronized (this) {
+                if (started) {
+                    return;
+                } else {
+                    started = true;
+                }
+            }
+
+            Basic remote = session.getBasicRemote();
+            remote.setBatchingAllowed(true);
+
+            for (int i = 0; i < MESSAGE_COUNT; i++) {
+                remote.sendText(MESSAGE);
+            }
+
+            // Ensure remaining messages are flushed
+            remote.setBatchingAllowed(false);
+        }
+    }
+}

Propchange: 
tomcat/trunk/test/org/apache/tomcat/websocket/TesterFirehoseServer.java
------------------------------------------------------------------------------
    svn:eol-style = native

Copied: 
tomcat/trunk/test/org/apache/tomcat/websocket/TesterMessageCountClient.java 
(from r1502156, 
tomcat/trunk/test/org/apache/tomcat/websocket/TesterSingleMessageClient.java)
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/tomcat/websocket/TesterMessageCountClient.java?p2=tomcat/trunk/test/org/apache/tomcat/websocket/TesterMessageCountClient.java&p1=tomcat/trunk/test/org/apache/tomcat/websocket/TesterSingleMessageClient.java&r1=1502156&r2=1502181&rev=1502181&view=diff
==============================================================================
--- 
tomcat/trunk/test/org/apache/tomcat/websocket/TesterSingleMessageClient.java 
(original)
+++ tomcat/trunk/test/org/apache/tomcat/websocket/TesterMessageCountClient.java 
Thu Jul 11 10:25:06 2013
@@ -31,7 +31,7 @@ import javax.websocket.OnError;
 import javax.websocket.OnOpen;
 import javax.websocket.Session;
 
-public class TesterSingleMessageClient {
+public class TesterMessageCountClient {
 
     public interface TesterEndpoint {
         void setLatch(CountDownLatch latch);
@@ -143,14 +143,28 @@ public class TesterSingleMessageClient {
 
     public static class BasicText extends BasicHandler<String> {
 
+        private final String expected;
 
         public BasicText(CountDownLatch latch) {
+            this(latch, null);
+        }
+
+        public BasicText(CountDownLatch latch, String expected) {
             super(latch);
+            this.expected = expected;
         }
 
         @Override
         public void onMessage(String message) {
-            getMessages().add(message);
+            if (expected == null) {
+                getMessages().add(message);
+            } else {
+                if (!expected.equals(message)) {
+                    throw new IllegalStateException(
+                            "Expected: [" + expected + "]\r\n" +
+                            "Was:      [" + message + "]");
+                }
+            }
             if (getLatch() != null) {
                 getLatch().countDown();
             }



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to