Author: markt
Date: Mon Mar 18 20:40:13 2013
New Revision: 1457981

URL: http://svn.apache.org/r1457981
Log:
A test client for running the autobahn tests as a client.

Added:
    tomcat/trunk/test/org/apache/tomcat/websocket/TestWsClientAutobahn.java   
(with props)

Added: tomcat/trunk/test/org/apache/tomcat/websocket/TestWsClientAutobahn.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/tomcat/websocket/TestWsClientAutobahn.java?rev=1457981&view=auto
==============================================================================
--- tomcat/trunk/test/org/apache/tomcat/websocket/TestWsClientAutobahn.java 
(added)
+++ tomcat/trunk/test/org/apache/tomcat/websocket/TestWsClientAutobahn.java Mon 
Mar 18 20:40:13 2013
@@ -0,0 +1,181 @@
+/*
+ * 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 java.net.URI;
+import java.nio.ByteBuffer;
+import java.util.concurrent.CountDownLatch;
+
+import javax.websocket.ClientEndpoint;
+import javax.websocket.ContainerProvider;
+import javax.websocket.OnClose;
+import javax.websocket.OnError;
+import javax.websocket.OnMessage;
+import javax.websocket.Session;
+import javax.websocket.WebSocketContainer;
+
+/**
+ * Runs the Autobahn test suite in client mode for testing the WebSocket client
+ * implementation.
+ */
+public class TestWsClientAutobahn {
+
+    private static final String HOST = "localhost";
+    private static final int PORT = 9001;
+    private static final String USER_AGENT = "ApacheTomcat8WebSocketClient";
+
+
+    public static void main(String[] args) throws Exception {
+
+        WebSocketContainer wsc = ContainerProvider.getWebSocketContainer();
+
+        int testCaseCount = getTestCaseCount(wsc);
+        System.out.println("There are " + testCaseCount + " test cases");
+        for (int testCase = 1; testCase <= testCaseCount; testCase++) {
+            if (testCase % 50 == 0) {
+                System.out.println(testCase);
+            } else {
+                System.out.print('.');
+            }
+            executeTestCase(wsc, testCase);
+
+        }
+        System.out.println("Testing complete");
+        updateReports(wsc);
+    }
+
+
+    private static int getTestCaseCount(WebSocketContainer wsc)
+            throws Exception {
+
+        URI uri = new URI("ws://" + HOST + ":" + PORT + "/getCaseCount");
+        CaseCountClient caseCountClient = new CaseCountClient();
+        wsc.connectToServer(caseCountClient, uri);
+        return caseCountClient.getCaseCount();
+    }
+
+
+    private static void executeTestCase(WebSocketContainer wsc, int testCase)
+            throws Exception {
+        URI uri = new URI("ws://" + HOST + ":" + PORT + "/runCase?case=" +
+                testCase + "&agent=" + USER_AGENT);
+        TestCaseClient testCaseClient = new TestCaseClient();
+        wsc.connectToServer(testCaseClient, uri);
+        testCaseClient.waitForClose();
+    }
+
+
+    private static void updateReports(WebSocketContainer wsc)
+            throws Exception {
+
+        URI uri = new URI("ws://" + HOST + ":" + PORT +
+                "/updateReports?agent=" + USER_AGENT);
+        UpdateReportsClient updateReportsClient = new UpdateReportsClient();
+        wsc.connectToServer(updateReportsClient, uri);
+    }
+
+
+    @ClientEndpoint
+    public static class CaseCountClient {
+
+        private final CountDownLatch latch = new CountDownLatch(1);
+        private volatile int caseCount = 0;
+
+        // Need to wait for message
+        public int getCaseCount() throws InterruptedException {
+            latch.await();
+            return caseCount;
+        }
+
+        @OnMessage
+        public void onMessage(String msg) {
+            latch.countDown();
+            caseCount = Integer.valueOf(msg).intValue();
+        }
+
+
+        @OnError
+        public void onError(Throwable t) {
+            latch.countDown();
+            t.printStackTrace();
+        }
+    }
+
+
+    @ClientEndpoint
+    public static class TestCaseClient {
+
+        private final CountDownLatch latch = new CountDownLatch(1);
+
+        public void waitForClose() throws InterruptedException {
+            latch.await();
+        }
+
+        @OnMessage
+        public void echoTextMessage(Session session, String msg, boolean last) 
{
+            try {
+                if (session.isOpen()) {
+                    session.getBasicRemote().sendText(msg, last);
+                }
+            } catch (IOException e) {
+                try {
+                    session.close();
+                } catch (IOException e1) {
+                    // Ignore
+                }
+            }
+        }
+
+        @OnMessage
+        public void echoBinaryMessage(Session session, ByteBuffer bb,
+                boolean last) {
+            try {
+                if (session.isOpen()) {
+                    session.getBasicRemote().sendBinary(bb, last);
+                }
+            } catch (IOException e) {
+                try {
+                    session.close();
+                } catch (IOException e1) {
+                    // Ignore
+                }
+            }
+        }
+
+        @OnClose
+        public void releaseLatch() {
+            latch.countDown();
+        }
+    }
+
+
+    @ClientEndpoint
+    public static class UpdateReportsClient {
+
+        private final CountDownLatch latch = new CountDownLatch(1);
+
+        public void waitForClose() throws InterruptedException {
+            latch.await();
+        }
+
+        @OnClose
+        public void onClose() {
+            latch.countDown();
+        }
+    }
+}

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



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

Reply via email to