From f5eb4864cc1ffc9b07588206f3cb4bed7625b104 Mon Sep 17 00:00:00 2001 From: Olivier Lamy Date: Sat, 22 Dec 2018 21:16:23 +1000 Subject: [PATCH] Issue #3166 Jetty 10.0.x autobahn test ci (#3221) * issue #3166 add autobahn test Signed-off-by: olivier lamy --- jetty-websocket/websocket-core/pom.xml | 50 +++++++++++ .../autobahn/AutobahnWebSocketServer.java | 9 +- tests/pom.xml | 4 + tests/test-websocket-autobahn/pom.xml | 77 +++++++++++++++++ .../autobahn/WebSocketJsrServer.java | 74 +++++++++++++++++ .../websocket/autobahn/WebSocketServer.java | 82 +++++++++++++++++++ .../main/resources/jetty-logging.properties | 6 ++ 7 files changed, 300 insertions(+), 2 deletions(-) create mode 100644 tests/test-websocket-autobahn/pom.xml create mode 100644 tests/test-websocket-autobahn/src/main/java/org/eclipse/jetty/websocket/autobahn/WebSocketJsrServer.java create mode 100644 tests/test-websocket-autobahn/src/main/java/org/eclipse/jetty/websocket/autobahn/WebSocketServer.java create mode 100644 tests/test-websocket-autobahn/src/main/resources/jetty-logging.properties diff --git a/jetty-websocket/websocket-core/pom.xml b/jetty-websocket/websocket-core/pom.xml index d02d69eddc5..1ae3e48c3d3 100644 --- a/jetty-websocket/websocket-core/pom.xml +++ b/jetty-websocket/websocket-core/pom.xml @@ -96,4 +96,54 @@ + + + autobahn + + + autobahn + true + + + + + + me.normanmaurer.maven.autobahntestsuite + autobahntestsuite-maven-plugin + 0.1.4 + + + + + + + + 20000 + true + + * + + + + false + + + + test + + fuzzingclient + + + + + + org.eclipse.jetty.websocket.core.autobahn.AutobahnWebSocketServer + + + + + + + + diff --git a/jetty-websocket/websocket-core/src/test/java/org/eclipse/jetty/websocket/core/autobahn/AutobahnWebSocketServer.java b/jetty-websocket/websocket-core/src/test/java/org/eclipse/jetty/websocket/core/autobahn/AutobahnWebSocketServer.java index 8c683a08875..add8dd1e4f0 100644 --- a/jetty-websocket/websocket-core/src/test/java/org/eclipse/jetty/websocket/core/autobahn/AutobahnWebSocketServer.java +++ b/jetty-websocket/websocket-core/src/test/java/org/eclipse/jetty/websocket/core/autobahn/AutobahnWebSocketServer.java @@ -67,7 +67,12 @@ public class AutobahnWebSocketServer { public static void main(String[] args) throws Exception { - Server server = new Server(); + int port = 9001; // same port as found in fuzzing-client.json + if(args != null && args.length>0) + { + port = Integer.parseInt( args[0] ); + } + Server server = new Server( port ); ServerConnector connector = new ServerConnector( server, @@ -75,7 +80,7 @@ public class AutobahnWebSocketServer ); connector.addBean(new RFC6455Handshaker()); - connector.setPort(9001); // same port as found in fuzzing-client.json + //connector.setPort(9001); connector.setIdleTimeout(10000); server.addConnector(connector); diff --git a/tests/pom.xml b/tests/pom.xml index 75c7c09c84c..016176f7843 100644 --- a/tests/pom.xml +++ b/tests/pom.xml @@ -68,5 +68,9 @@ test-quickstart test-jmx test-http-client-transport + diff --git a/tests/test-websocket-autobahn/pom.xml b/tests/test-websocket-autobahn/pom.xml new file mode 100644 index 00000000000..83efe96b160 --- /dev/null +++ b/tests/test-websocket-autobahn/pom.xml @@ -0,0 +1,77 @@ + + + + org.eclipse.jetty.tests + tests-parent + 10.0.0-SNAPSHOT + ../pom.xml + + 4.0.0 + org.eclipse.jetty + test-websocket-autobahn + Test :: Jetty Websocket Autobahn + Jetty Websocket Autobahn test suite + http://www.eclipse.org/jetty + + + org.eclipse.jetty.websocket + javax-websocket-server + ${project.version} + + + org.eclipse.jetty.websocket + websocket-server + ${project.version} + + + + + autobahn + + + autobahn + true + + + + + + me.normanmaurer.maven.autobahntestsuite + autobahntestsuite-maven-plugin + 0.1.4 + + + + + + + + 20000 + true + + * + + + + false + + + + test + + fuzzingclient + + + + + + org.eclipse.jetty.websocket.autobahn.WebSocketJsrServer + + + + + + + + + diff --git a/tests/test-websocket-autobahn/src/main/java/org/eclipse/jetty/websocket/autobahn/WebSocketJsrServer.java b/tests/test-websocket-autobahn/src/main/java/org/eclipse/jetty/websocket/autobahn/WebSocketJsrServer.java new file mode 100644 index 00000000000..add34f6a89c --- /dev/null +++ b/tests/test-websocket-autobahn/src/main/java/org/eclipse/jetty/websocket/autobahn/WebSocketJsrServer.java @@ -0,0 +1,74 @@ +// +// ======================================================================== +// Copyright (c) 1995-2018 Mort Bay Consulting Pty. Ltd. +// ------------------------------------------------------------------------ +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Eclipse Public License v1.0 +// and Apache License v2.0 which accompanies this distribution. +// +// The Eclipse Public License is available at +// http://www.eclipse.org/legal/epl-v10.html +// +// The Apache License v2.0 is available at +// http://www.opensource.org/licenses/apache2.0.php +// +// You may elect to redistribute this code under either of these licenses. +// ======================================================================== +// + +package org.eclipse.jetty.websocket.autobahn; + +import org.eclipse.jetty.server.Server; +import org.eclipse.jetty.servlet.ServletContextHandler; +import org.eclipse.jetty.websocket.javax.server.JavaxWebSocketServerContainerInitializer; + +import javax.websocket.EndpointConfig; +import javax.websocket.OnMessage; +import javax.websocket.OnOpen; +import javax.websocket.Session; +import javax.websocket.server.ServerContainer; +import javax.websocket.server.ServerEndpoint; + +/** + * Example of setting up a javax.websocket server with Jetty embedded + */ +public class WebSocketJsrServer +{ + /** + * A server socket endpoint + */ + @ServerEndpoint( value = "/" ) + public static class EchoJsrSocket + { + @OnMessage + public void onMessage( Session session, String message ) + { + session.getAsyncRemote().sendText( message ); + } + + @OnOpen + public void onOpen( Session session, EndpointConfig endpointConfig ){ + session.setMaxTextMessageBufferSize( Integer.MAX_VALUE ); + session.setMaxBinaryMessageBufferSize( Integer.MAX_VALUE ); + } + + } + + public static void main( String[] args ) + throws Exception + { + Server server = new Server( Integer.parseInt( args[0] ) ); + + ServletContextHandler context = new ServletContextHandler( ServletContextHandler.SESSIONS ); + context.setContextPath( "/" ); + server.setHandler( context ); + + ServerContainer wsContainer = JavaxWebSocketServerContainerInitializer.configureContext( context ); + + wsContainer.addEndpoint( EchoJsrSocket.class ); + + server.start(); + context.dumpStdErr(); + server.join(); + } +} diff --git a/tests/test-websocket-autobahn/src/main/java/org/eclipse/jetty/websocket/autobahn/WebSocketServer.java b/tests/test-websocket-autobahn/src/main/java/org/eclipse/jetty/websocket/autobahn/WebSocketServer.java new file mode 100644 index 00000000000..96fdb5cb0ef --- /dev/null +++ b/tests/test-websocket-autobahn/src/main/java/org/eclipse/jetty/websocket/autobahn/WebSocketServer.java @@ -0,0 +1,82 @@ +// +// ======================================================================== +// Copyright (c) 1995-2018 Mort Bay Consulting Pty. Ltd. +// ------------------------------------------------------------------------ +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Eclipse Public License v1.0 +// and Apache License v2.0 which accompanies this distribution. +// +// The Eclipse Public License is available at +// http://www.eclipse.org/legal/epl-v10.html +// +// The Apache License v2.0 is available at +// http://www.opensource.org/licenses/apache2.0.php +// +// You may elect to redistribute this code under either of these licenses. +// ======================================================================== +// + +package org.eclipse.jetty.websocket.autobahn; + +import org.eclipse.jetty.server.Server; +import org.eclipse.jetty.servlet.ServletContextHandler; +import org.eclipse.jetty.servlet.ServletHolder; +import org.eclipse.jetty.websocket.api.Session; +import org.eclipse.jetty.websocket.api.annotations.OnWebSocketMessage; +import org.eclipse.jetty.websocket.api.annotations.WebSocket; +import org.eclipse.jetty.websocket.servlet.WebSocketServlet; +import org.eclipse.jetty.websocket.servlet.WebSocketServletFactory; + +/** + * Example of setting up a Jetty WebSocket server + *

+ * Note: this uses the Jetty WebSocket API, not the javax.websocket API. + */ +public class WebSocketServer +{ + /** + * Example of a Jetty API WebSocket Echo Socket + */ + @WebSocket + public static class EchoSocket + { + @OnWebSocketMessage + public void onMessage( Session session, String message ) + { + session.getRemote().sendStringByFuture( message ); + } + } + + /** + * Servlet layer + */ + @SuppressWarnings( "serial" ) + public static class EchoServlet + extends WebSocketServlet + { + @Override + public void configure( WebSocketServletFactory factory ) + { + factory.addMapping( factory.parsePathSpec( "/" ), ( req, res ) -> new EchoSocket() ); + } + } + + public static void main( String[] args ) + throws Exception + { + //Log.getLog().setDebugEnabled( true ); + Server server = new Server( Integer.parseInt( args[0] ) ); + //Server server = new Server(9090); + + ServletContextHandler context = new ServletContextHandler( ServletContextHandler.SESSIONS ); + context.setContextPath( "/" ); + server.setHandler( context ); + + // Add the echo socket servlet to the /echo path map + context.addServlet( new ServletHolder( EchoServlet.class ), "/" ); + + server.start(); + context.dumpStdErr(); + server.join(); + } +} diff --git a/tests/test-websocket-autobahn/src/main/resources/jetty-logging.properties b/tests/test-websocket-autobahn/src/main/resources/jetty-logging.properties new file mode 100644 index 00000000000..7fbcf947024 --- /dev/null +++ b/tests/test-websocket-autobahn/src/main/resources/jetty-logging.properties @@ -0,0 +1,6 @@ +# Setup default logging implementation for during testing +org.eclipse.jetty.util.log.class=org.eclipse.jetty.util.log.StdErrLog +org.eclipse.jetty.LEVEL=INFO +#org.eclipse.jetty.util.PathWatcher.LEVEL=DEBUG +#org.eclipse.jetty.util.thread.QueuedThreadPool.LEVEL=DEBUG +#org.eclipse.jetty.util.thread.ReservedThreadExecutor.LEVEL=DEBUG