You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2019/04/09 14:52:23 UTC

[tomcat] branch 7.0.x updated: Add a standalone server and client for testing connection failures

This is an automated email from the ASF dual-hosted git repository.

markt pushed a commit to branch 7.0.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git


The following commit(s) were added to refs/heads/7.0.x by this push:
     new d70a569  Add a standalone server and client for testing connection failures
d70a569 is described below

commit d70a569f2759138847d0d9448f11694d04aaa6c8
Author: Mark Thomas <ma...@apache.org>
AuthorDate: Tue Apr 9 15:51:46 2019 +0100

    Add a standalone server and client for testing connection failures
---
 .../tomcat/websocket/TesterFirehoseServer.java     | 100 ++++++++++++++++++++-
 1 file changed, 99 insertions(+), 1 deletion(-)

diff --git a/test/org/apache/tomcat/websocket/TesterFirehoseServer.java b/test/org/apache/tomcat/websocket/TesterFirehoseServer.java
index a4f7fff..222ed05 100644
--- a/test/org/apache/tomcat/websocket/TesterFirehoseServer.java
+++ b/test/org/apache/tomcat/websocket/TesterFirehoseServer.java
@@ -17,9 +17,18 @@
 package org.apache.tomcat.websocket;
 
 import java.io.IOException;
+import java.net.URI;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Queue;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicInteger;
 
 import javax.servlet.ServletContextEvent;
+import javax.websocket.ClientEndpointConfig;
+import javax.websocket.ContainerProvider;
 import javax.websocket.DeploymentException;
 import javax.websocket.OnClose;
 import javax.websocket.OnError;
@@ -27,11 +36,20 @@ import javax.websocket.OnMessage;
 import javax.websocket.OnOpen;
 import javax.websocket.RemoteEndpoint.Basic;
 import javax.websocket.Session;
+import javax.websocket.WebSocketContainer;
+import javax.websocket.ClientEndpointConfig.Configurator;
 import javax.websocket.server.ServerContainer;
 import javax.websocket.server.ServerEndpoint;
 
+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.websocket.TesterMessageCountClient.BasicText;
+import org.apache.tomcat.websocket.TesterMessageCountClient.TesterProgrammaticEndpoint;
 import org.apache.tomcat.websocket.server.Constants;
 import org.apache.tomcat.websocket.server.WsContextListener;
+import org.junit.Assert;
 
 /**
  * Sends {@link #MESSAGE_COUNT} messages of size {@link #MESSAGE_SIZE} bytes as
@@ -39,7 +57,7 @@ import org.apache.tomcat.websocket.server.WsContextListener;
  */
 public class TesterFirehoseServer {
 
-    public static final int MESSAGE_COUNT = 100000;
+    public static final int MESSAGE_COUNT = 1000000;
     public static final String MESSAGE;
     public static final int MESSAGE_SIZE = 1024;
     public static final int WAIT_TIME_MILLIS = 60000;
@@ -139,4 +157,84 @@ public class TesterFirehoseServer {
             openConnectionCount.decrementAndGet();
         }
     }
+
+
+    /*
+     * Run as a stand-alone server for testing over a real network
+     */
+    public static class Standalone extends TomcatBaseTest {
+
+        public static void main(String... args) throws Exception {
+            Standalone s = new Standalone();
+            s.start();
+        }
+
+        public void start() throws Exception {
+            setUpPerTestClass();
+            setUp();
+            Tomcat tomcat = getTomcatInstance();
+            // No file system docBase required
+            Context ctx = tomcat.addContext("", null);
+            ctx.addApplicationListener(TesterFirehoseServer.Config.class.getName());
+            Tomcat.addServlet(ctx, "default", new DefaultServlet());
+            ctx.addServletMapping("/", "default");
+
+            tomcat.start();
+
+            while (true) {
+                Thread.sleep(1000);
+            }
+        }
+    }
+
+
+    /*
+     * Run as a stand-alone client for testing over a real network.
+     *
+     * args[0] is host:port
+     */
+    public static class Client {
+
+        public static void main(String... args) throws Exception {
+
+            WebSocketContainer wsContainer = ContainerProvider.getWebSocketContainer();
+
+            // BZ 62596
+            final StringBuilder dummyValue = new StringBuilder(4000);
+            for (int i = 0; i < 4000; i++) {
+                dummyValue.append('A');
+            }
+            ClientEndpointConfig clientEndpointConfig =
+                    ClientEndpointConfig.Builder.create().configurator(new Configurator() {
+                        @Override
+                        public void beforeRequest(Map<String, List<String>> headers) {
+                            headers.put("Dummy", Collections.singletonList(dummyValue.toString()));
+                            super.beforeRequest(headers);
+                        }
+                    }).build();
+
+            Session wsSession = wsContainer.connectToServer(
+                    TesterProgrammaticEndpoint.class,
+                    clientEndpointConfig,
+                    new URI("ws://" + args[0] + TesterFirehoseServer.Config.PATH));
+            CountDownLatch latch = new CountDownLatch(TesterFirehoseServer.MESSAGE_COUNT);
+            BasicText handler = new BasicText(latch);
+            wsSession.addMessageHandler(handler);
+            wsSession.getBasicRemote().sendText("Hello");
+
+            System.out.println("Sent Hello message, waiting for data");
+
+            // Ignore the latch result as the message count test below will tell us
+            // if the right number of messages arrived
+            handler.getLatch().await(TesterFirehoseServer.WAIT_TIME_MILLIS,
+                    TimeUnit.MILLISECONDS);
+
+            Queue<String> messages = handler.getMessages();
+            Assert.assertEquals(
+                    TesterFirehoseServer.MESSAGE_COUNT, messages.size());
+            for (String message : messages) {
+                Assert.assertEquals(TesterFirehoseServer.MESSAGE, message);
+            }
+        }
+    }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org