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