diff options
Diffstat (limited to 'jetty-websocket/websocket-server')
10 files changed, 404 insertions, 87 deletions
diff --git a/jetty-websocket/websocket-server/pom.xml b/jetty-websocket/websocket-server/pom.xml index b772a7bcbd..c91380ac88 100644 --- a/jetty-websocket/websocket-server/pom.xml +++ b/jetty-websocket/websocket-server/pom.xml @@ -3,7 +3,7 @@ <parent> <groupId>org.eclipse.jetty.websocket</groupId> <artifactId>websocket-parent</artifactId> - <version>9.3.4-SNAPSHOT</version> + <version>9.4.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> @@ -24,7 +24,6 @@ <instructions> <Require-Capability>osgi.extender; filter:="(osgi.extender=osgi.serviceloader.registrar)"</Require-Capability> <Provide-Capability>osgi.serviceloader; osgi.serviceloader=org.eclipse.jetty.websocket.servlet.WebSocketServletFactory</Provide-Capability> - <_nouses>true</_nouses> </instructions> </configuration> </plugin> diff --git a/jetty-websocket/websocket-server/src/main/java/org/eclipse/jetty/websocket/server/WebSocketServerConnection.java b/jetty-websocket/websocket-server/src/main/java/org/eclipse/jetty/websocket/server/WebSocketServerConnection.java index b3ffe52eb7..880c9a4425 100644 --- a/jetty-websocket/websocket-server/src/main/java/org/eclipse/jetty/websocket/server/WebSocketServerConnection.java +++ b/jetty-websocket/websocket-server/src/main/java/org/eclipse/jetty/websocket/server/WebSocketServerConnection.java @@ -20,7 +20,6 @@ package org.eclipse.jetty.websocket.server; import java.net.InetSocketAddress; import java.util.concurrent.Executor; -import java.util.concurrent.atomic.AtomicBoolean; import org.eclipse.jetty.io.ByteBufferPool; import org.eclipse.jetty.io.Connection; @@ -32,8 +31,6 @@ import org.eclipse.jetty.websocket.common.io.AbstractWebSocketConnection; public class WebSocketServerConnection extends AbstractWebSocketConnection implements Connection.UpgradeTo { - private final AtomicBoolean opened = new AtomicBoolean(false); - public WebSocketServerConnection(EndPoint endp, Executor executor, Scheduler scheduler, WebSocketPolicy policy, ByteBufferPool bufferPool) { super(endp,executor,scheduler,policy,bufferPool); @@ -54,17 +51,6 @@ public class WebSocketServerConnection extends AbstractWebSocketConnection imple { return getEndPoint().getRemoteAddress(); } - - @Override - public void onOpen() - { - boolean beenOpened = opened.getAndSet(true); - if (!beenOpened) - { - getSession().open(); - } - super.onOpen(); - } @Override public void setNextIncomingFrames(IncomingFrames incoming) diff --git a/jetty-websocket/websocket-server/src/main/java/org/eclipse/jetty/websocket/server/WebSocketServerFactory.java b/jetty-websocket/websocket-server/src/main/java/org/eclipse/jetty/websocket/server/WebSocketServerFactory.java index 28a8c69dc9..73419f6acb 100644 --- a/jetty-websocket/websocket-server/src/main/java/org/eclipse/jetty/websocket/server/WebSocketServerFactory.java +++ b/jetty-websocket/websocket-server/src/main/java/org/eclipse/jetty/websocket/server/WebSocketServerFactory.java @@ -22,13 +22,12 @@ import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; -import java.util.Set; -import java.util.concurrent.CopyOnWriteArraySet; import java.util.concurrent.Executor; import javax.servlet.ServletContext; @@ -53,7 +52,6 @@ import org.eclipse.jetty.util.ssl.SslContextFactory; import org.eclipse.jetty.util.thread.ScheduledExecutorScheduler; import org.eclipse.jetty.util.thread.Scheduler; import org.eclipse.jetty.websocket.api.InvalidWebSocketException; -import org.eclipse.jetty.websocket.api.StatusCode; import org.eclipse.jetty.websocket.api.WebSocketException; import org.eclipse.jetty.websocket.api.WebSocketPolicy; import org.eclipse.jetty.websocket.api.extensions.ExtensionFactory; @@ -94,7 +92,6 @@ public class WebSocketServerFactory extends ContainerLifeCycle implements WebSoc private final WebSocketExtensionFactory extensionFactory; private Executor executor; private List<SessionFactory> sessionFactories; - private Set<WebSocketSession> openSessions = new CopyOnWriteArraySet<>(); private WebSocketCreator creator; private List<Class<?>> registeredSocketClasses; private DecoratedObjectFactory objectFactory; @@ -228,27 +225,6 @@ public class WebSocketServerFactory extends ContainerLifeCycle implements WebSoc } } - protected void shutdownAllConnections() - { - for (WebSocketSession session : openSessions) - { - if (session.getConnection() != null) - { - try - { - session.getConnection().close( - StatusCode.SHUTDOWN, - "Shutdown"); - } - catch (Throwable t) - { - LOG.debug("During Shutdown All Connections",t); - } - } - } - openSessions.clear(); - } - @Override public WebSocketServletFactory createFactory(WebSocketPolicy policy) { @@ -319,13 +295,6 @@ public class WebSocketServerFactory extends ContainerLifeCycle implements WebSoc } @Override - protected void doStop() throws Exception - { - shutdownAllConnections(); - super.doStop(); - } - - @Override public ByteBufferPool getBufferPool() { return this.bufferPool; @@ -359,9 +328,9 @@ public class WebSocketServerFactory extends ContainerLifeCycle implements WebSoc return extensionFactory; } - public Set<WebSocketSession> getOpenSessions() + public Collection<WebSocketSession> getOpenSessions() { - return Collections.unmodifiableSet(this.openSessions); + return getBeans(WebSocketSession.class); } @Override @@ -484,13 +453,13 @@ public class WebSocketServerFactory extends ContainerLifeCycle implements WebSoc @Override public void onSessionClosed(WebSocketSession session) { - this.openSessions.remove(session); + removeBean(session); } @Override public void onSessionOpened(WebSocketSession session) { - this.openSessions.add(session); + addManaged(session); } protected String[] parseProtocols(String protocol) @@ -625,7 +594,7 @@ public class WebSocketServerFactory extends ContainerLifeCycle implements WebSoc // set true negotiated extension list back to response response.setExtensions(extensionStack.getNegotiatedExtensions()); session.setUpgradeResponse(response); - wsConnection.setSession(session); + wsConnection.addListener(session); // Setup Incoming Routing wsConnection.setNextIncomingFrames(extensionStack); @@ -636,24 +605,13 @@ public class WebSocketServerFactory extends ContainerLifeCycle implements WebSoc extensionStack.setNextOutgoing(wsConnection); // Start Components - session.addBean(extensionStack); - this.addBean(session); + session.addManaged(extensionStack); + this.addManaged(session); if (session.isFailed()) { throw new IOException("Session failed to start"); } - else if (!session.isRunning()) - { - try - { - session.start(); - } - catch (Exception e) - { - throw new IOException("Unable to start Session",e); - } - } // Tell jetty about the new upgraded connection request.setServletAttribute(HttpConnection.UPGRADE_CONNECTION_ATTRIBUTE, wsConnection); diff --git a/jetty-websocket/websocket-server/src/test/java/org/eclipse/jetty/websocket/server/FirefoxTest.java b/jetty-websocket/websocket-server/src/test/java/org/eclipse/jetty/websocket/server/FirefoxTest.java index 6c99ecbfcf..26f882d553 100644 --- a/jetty-websocket/websocket-server/src/test/java/org/eclipse/jetty/websocket/server/FirefoxTest.java +++ b/jetty-websocket/websocket-server/src/test/java/org/eclipse/jetty/websocket/server/FirefoxTest.java @@ -18,7 +18,7 @@ package org.eclipse.jetty.websocket.server; -import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.*; import java.util.concurrent.TimeUnit; @@ -26,6 +26,7 @@ import org.eclipse.jetty.toolchain.test.EventQueue; import org.eclipse.jetty.websocket.common.WebSocketFrame; import org.eclipse.jetty.websocket.common.frames.TextFrame; import org.eclipse.jetty.websocket.common.test.BlockheadClient; +import org.eclipse.jetty.websocket.common.test.IBlockheadClient; import org.eclipse.jetty.websocket.server.examples.MyEchoServlet; import org.junit.AfterClass; import org.junit.Assert; @@ -52,7 +53,7 @@ public class FirefoxTest @Test public void testConnectionKeepAlive() throws Exception { - try (BlockheadClient client = new BlockheadClient(server.getServerUri())) + try (IBlockheadClient client = new BlockheadClient(server.getServerUri())) { // Odd Connection Header value seen in Firefox client.setConnectionValue("keep-alive, Upgrade"); diff --git a/jetty-websocket/websocket-server/src/test/java/org/eclipse/jetty/websocket/server/ManyConnectionsCleanupTest.java b/jetty-websocket/websocket-server/src/test/java/org/eclipse/jetty/websocket/server/ManyConnectionsCleanupTest.java new file mode 100644 index 0000000000..2950c73b60 --- /dev/null +++ b/jetty-websocket/websocket-server/src/test/java/org/eclipse/jetty/websocket/server/ManyConnectionsCleanupTest.java @@ -0,0 +1,369 @@ +// +// ======================================================================== +// Copyright (c) 1995-2015 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.server; + +import static org.hamcrest.Matchers.*; +import static org.junit.Assert.*; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicInteger; + +import org.eclipse.jetty.toolchain.test.EventQueue; +import org.eclipse.jetty.util.log.Log; +import org.eclipse.jetty.util.log.Logger; +import org.eclipse.jetty.util.log.StacklessLogging; +import org.eclipse.jetty.util.log.StdErrLog; +import org.eclipse.jetty.websocket.api.Session; +import org.eclipse.jetty.websocket.api.StatusCode; +import org.eclipse.jetty.websocket.api.WebSocketAdapter; +import org.eclipse.jetty.websocket.common.CloseInfo; +import org.eclipse.jetty.websocket.common.OpCode; +import org.eclipse.jetty.websocket.common.WebSocketFrame; +import org.eclipse.jetty.websocket.common.WebSocketSession; +import org.eclipse.jetty.websocket.common.frames.TextFrame; +import org.eclipse.jetty.websocket.common.test.BlockheadClient; +import org.eclipse.jetty.websocket.common.test.IBlockheadClient; +import org.eclipse.jetty.websocket.server.helper.RFCSocket; +import org.eclipse.jetty.websocket.servlet.ServletUpgradeRequest; +import org.eclipse.jetty.websocket.servlet.ServletUpgradeResponse; +import org.eclipse.jetty.websocket.servlet.WebSocketCreator; +import org.eclipse.jetty.websocket.servlet.WebSocketServlet; +import org.eclipse.jetty.websocket.servlet.WebSocketServletFactory; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Ignore; +import org.junit.Test; + +/** + * Tests various close scenarios that should result in Open Session cleanup + */ +@Ignore +public class ManyConnectionsCleanupTest +{ + static class AbstractCloseSocket extends WebSocketAdapter + { + public CountDownLatch closeLatch = new CountDownLatch(1); + public String closeReason = null; + public int closeStatusCode = -1; + public List<Throwable> errors = new ArrayList<>(); + + @Override + public void onWebSocketClose(int statusCode, String reason) + { + LOG.debug("onWebSocketClose({}, {})",statusCode,reason); + this.closeStatusCode = statusCode; + this.closeReason = reason; + closeLatch.countDown(); + } + + @Override + public void onWebSocketError(Throwable cause) + { + errors.add(cause); + } + } + + @SuppressWarnings("serial") + public static class CloseServlet extends WebSocketServlet implements WebSocketCreator + { + private WebSocketServerFactory serverFactory; + private AtomicInteger calls = new AtomicInteger(0); + + @Override + public void configure(WebSocketServletFactory factory) + { + factory.setCreator(this); + if (factory instanceof WebSocketServerFactory) + { + this.serverFactory = (WebSocketServerFactory)factory; + } + } + + @Override + public Object createWebSocket(ServletUpgradeRequest req, ServletUpgradeResponse resp) + { + if (req.hasSubProtocol("fastclose")) + { + closeSocket = new FastCloseSocket(calls); + return closeSocket; + } + + if (req.hasSubProtocol("fastfail")) + { + closeSocket = new FastFailSocket(calls); + return closeSocket; + } + + if (req.hasSubProtocol("container")) + { + closeSocket = new ContainerSocket(serverFactory,calls); + return closeSocket; + } + return new RFCSocket(); + } + } + + /** + * On Message, return container information + */ + public static class ContainerSocket extends AbstractCloseSocket + { + private static final Logger LOG = Log.getLogger(ManyConnectionsCleanupTest.ContainerSocket.class); + private final WebSocketServerFactory container; + private final AtomicInteger calls; + private Session session; + + public ContainerSocket(WebSocketServerFactory container, AtomicInteger calls) + { + this.container = container; + this.calls = calls; + } + + @Override + public void onWebSocketText(String message) + { + LOG.debug("onWebSocketText({})",message); + calls.incrementAndGet(); + if (message.equalsIgnoreCase("openSessions")) + { + Collection<WebSocketSession> sessions = container.getOpenSessions(); + + StringBuilder ret = new StringBuilder(); + ret.append("openSessions.size=").append(sessions.size()).append('\n'); + int idx = 0; + for (WebSocketSession sess : sessions) + { + ret.append('[').append(idx++).append("] ").append(sess.toString()).append('\n'); + } + session.getRemote().sendStringByFuture(ret.toString()); + session.close(StatusCode.NORMAL,"ContainerSocket"); + } else if(message.equalsIgnoreCase("calls")) + { + session.getRemote().sendStringByFuture(String.format("calls=%,d",calls.get())); + } + } + + @Override + public void onWebSocketConnect(Session sess) + { + LOG.debug("onWebSocketConnect({})",sess); + this.session = sess; + } + } + + /** + * On Connect, close socket + */ + public static class FastCloseSocket extends AbstractCloseSocket + { + private static final Logger LOG = Log.getLogger(ManyConnectionsCleanupTest.FastCloseSocket.class); + private final AtomicInteger calls; + + public FastCloseSocket(AtomicInteger calls) + { + this.calls = calls; + } + + @Override + public void onWebSocketConnect(Session sess) + { + LOG.debug("onWebSocketConnect({})",sess); + calls.incrementAndGet(); + sess.close(StatusCode.NORMAL,"FastCloseServer"); + } + } + + /** + * On Connect, throw unhandled exception + */ + public static class FastFailSocket extends AbstractCloseSocket + { + private static final Logger LOG = Log.getLogger(ManyConnectionsCleanupTest.FastFailSocket.class); + private final AtomicInteger calls; + + public FastFailSocket(AtomicInteger calls) + { + this.calls = calls; + } + + @Override + public void onWebSocketConnect(Session sess) + { + LOG.debug("onWebSocketConnect({})",sess); + calls.incrementAndGet(); + // Test failure due to unhandled exception + // this should trigger a fast-fail closure during open/connect + throw new RuntimeException("Intentional FastFail"); + } + } + + private static final Logger LOG = Log.getLogger(ManyConnectionsCleanupTest.class); + + private static SimpleServletServer server; + private static AbstractCloseSocket closeSocket; + + @BeforeClass + public static void startServer() throws Exception + { + server = new SimpleServletServer(new CloseServlet()); + server.start(); + } + + @AfterClass + public static void stopServer() + { + server.stop(); + } + + /** + * Test session open session cleanup (bug #474936) + * + * @throws Exception + * on test failure + */ + @Test + public void testOpenSessionCleanup() throws Exception + { + int iterationCount = 100; + + StdErrLog.getLogger(FastFailSocket.class).setLevel(StdErrLog.LEVEL_OFF); + + StdErrLog sessLog = StdErrLog.getLogger(WebSocketSession.class); + int oldLevel = sessLog.getLevel(); + sessLog.setLevel(StdErrLog.LEVEL_OFF); + + for (int requests = 0; requests < iterationCount; requests++) + { + fastFail(); + fastClose(); + dropConnection(); + } + + sessLog.setLevel(oldLevel); + + try (IBlockheadClient client = new BlockheadClient(server.getServerUri())) + { + client.setProtocols("container"); + client.setTimeout(1,TimeUnit.SECONDS); + client.connect(); + client.sendStandardRequest(); + client.expectUpgradeResponse(); + + client.write(new TextFrame().setPayload("calls")); + client.write(new TextFrame().setPayload("openSessions")); + + EventQueue<WebSocketFrame> frames = client.readFrames(3,6,TimeUnit.SECONDS); + WebSocketFrame frame; + String resp; + + frame = frames.poll(); + assertThat("frames[0].opcode",frame.getOpCode(),is(OpCode.TEXT)); + resp = frame.getPayloadAsUTF8(); + assertThat("Should only have 1 open session",resp,containsString("calls=" + ((iterationCount * 2) + 1))); + + frame = frames.poll(); + assertThat("frames[1].opcode",frame.getOpCode(),is(OpCode.TEXT)); + resp = frame.getPayloadAsUTF8(); + assertThat("Should only have 1 open session",resp,containsString("openSessions.size=1\n")); + + frame = frames.poll(); + assertThat("frames[2].opcode",frame.getOpCode(),is(OpCode.CLOSE)); + CloseInfo close = new CloseInfo(frame); + assertThat("Close Status Code",close.getStatusCode(),is(StatusCode.NORMAL)); + client.write(close.asFrame()); // respond with close + + // ensure server socket got close event + assertThat("Open Sessions Latch",closeSocket.closeLatch.await(1,TimeUnit.SECONDS),is(true)); + assertThat("Open Sessions.statusCode",closeSocket.closeStatusCode,is(StatusCode.NORMAL)); + assertThat("Open Sessions.errors",closeSocket.errors.size(),is(0)); + } + } + + private void fastClose() throws Exception + { + try (IBlockheadClient client = new BlockheadClient(server.getServerUri())) + { + client.setProtocols("fastclose"); + client.setTimeout(1,TimeUnit.SECONDS); + try (StacklessLogging scope = new StacklessLogging(WebSocketSession.class)) + { + client.connect(); + client.sendStandardRequest(); + client.expectUpgradeResponse(); + + client.readFrames(1,1,TimeUnit.SECONDS); + + CloseInfo close = new CloseInfo(StatusCode.NORMAL,"Normal"); + assertThat("Close Status Code",close.getStatusCode(),is(StatusCode.NORMAL)); + + // Notify server of close handshake + client.write(close.asFrame()); // respond with close + + // ensure server socket got close event + assertThat("Fast Close Latch",closeSocket.closeLatch.await(1,TimeUnit.SECONDS),is(true)); + assertThat("Fast Close.statusCode",closeSocket.closeStatusCode,is(StatusCode.NORMAL)); + } + } + } + + private void fastFail() throws Exception + { + try (IBlockheadClient client = new BlockheadClient(server.getServerUri())) + { + client.setProtocols("fastfail"); + client.setTimeout(1,TimeUnit.SECONDS); + try (StacklessLogging scope = new StacklessLogging(WebSocketSession.class)) + { + client.connect(); + client.sendStandardRequest(); + client.expectUpgradeResponse(); + + // client.readFrames(1,2,TimeUnit.SECONDS); + + CloseInfo close = new CloseInfo(StatusCode.NORMAL,"Normal"); + client.write(close.asFrame()); // respond with close + + // ensure server socket got close event + assertThat("Fast Fail Latch",closeSocket.closeLatch.await(1,TimeUnit.SECONDS),is(true)); + assertThat("Fast Fail.statusCode",closeSocket.closeStatusCode,is(StatusCode.SERVER_ERROR)); + assertThat("Fast Fail.errors",closeSocket.errors.size(),is(1)); + } + } + } + + private void dropConnection() throws Exception + { + try (IBlockheadClient client = new BlockheadClient(server.getServerUri())) + { + client.setProtocols("container"); + client.setTimeout(1,TimeUnit.SECONDS); + try (StacklessLogging scope = new StacklessLogging(WebSocketSession.class)) + { + client.connect(); + client.sendStandardRequest(); + client.expectUpgradeResponse(); + client.disconnect(); + } + } + } +} diff --git a/jetty-websocket/websocket-server/src/test/java/org/eclipse/jetty/websocket/server/WebSocketCloseTest.java b/jetty-websocket/websocket-server/src/test/java/org/eclipse/jetty/websocket/server/WebSocketCloseTest.java index 392dba798a..c4507d4bd9 100644 --- a/jetty-websocket/websocket-server/src/test/java/org/eclipse/jetty/websocket/server/WebSocketCloseTest.java +++ b/jetty-websocket/websocket-server/src/test/java/org/eclipse/jetty/websocket/server/WebSocketCloseTest.java @@ -22,8 +22,8 @@ import static org.hamcrest.Matchers.*; import static org.junit.Assert.*; import java.util.ArrayList; +import java.util.Collection; import java.util.List; -import java.util.Set; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; @@ -41,6 +41,7 @@ import org.eclipse.jetty.websocket.common.WebSocketSession; import org.eclipse.jetty.websocket.common.events.AbstractEventDriver; import org.eclipse.jetty.websocket.common.frames.TextFrame; import org.eclipse.jetty.websocket.common.test.BlockheadClient; +import org.eclipse.jetty.websocket.common.test.IBlockheadClient; import org.eclipse.jetty.websocket.server.helper.RFCSocket; import org.eclipse.jetty.websocket.servlet.ServletUpgradeRequest; import org.eclipse.jetty.websocket.servlet.ServletUpgradeResponse; @@ -50,7 +51,6 @@ import org.eclipse.jetty.websocket.servlet.WebSocketServletFactory; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; -import org.junit.Ignore; /** * Tests various close scenarios @@ -139,7 +139,7 @@ public class WebSocketCloseTest LOG.debug("onWebSocketText({})",message); if (message.equalsIgnoreCase("openSessions")) { - Set<WebSocketSession> sessions = container.getOpenSessions(); + Collection<WebSocketSession> sessions = container.getOpenSessions(); StringBuilder ret = new StringBuilder(); ret.append("openSessions.size=").append(sessions.size()).append('\n'); @@ -218,10 +218,9 @@ public class WebSocketCloseTest * on test failure */ @Test - @Ignore("RELEASE") public void testFastClose() throws Exception { - try (BlockheadClient client = new BlockheadClient(server.getServerUri())) + try (IBlockheadClient client = new BlockheadClient(server.getServerUri())) { client.setProtocols("fastclose"); client.setTimeout(1,TimeUnit.SECONDS); @@ -252,10 +251,9 @@ public class WebSocketCloseTest * on test failure */ @Test - @Ignore("RELEASE") public void testFastFail() throws Exception { - try (BlockheadClient client = new BlockheadClient(server.getServerUri())) + try (IBlockheadClient client = new BlockheadClient(server.getServerUri())) { client.setProtocols("fastfail"); client.setTimeout(1,TimeUnit.SECONDS); @@ -294,7 +292,7 @@ public class WebSocketCloseTest fastClose(); dropConnection(); - try (BlockheadClient client = new BlockheadClient(server.getServerUri())) + try (IBlockheadClient client = new BlockheadClient(server.getServerUri())) { client.setProtocols("container"); client.setTimeout(1,TimeUnit.SECONDS); @@ -328,7 +326,7 @@ public class WebSocketCloseTest private void fastClose() throws Exception { - try (BlockheadClient client = new BlockheadClient(server.getServerUri())) + try (IBlockheadClient client = new BlockheadClient(server.getServerUri())) { client.setProtocols("fastclose"); client.setTimeout(1,TimeUnit.SECONDS); @@ -355,7 +353,7 @@ public class WebSocketCloseTest private void fastFail() throws Exception { - try (BlockheadClient client = new BlockheadClient(server.getServerUri())) + try (IBlockheadClient client = new BlockheadClient(server.getServerUri())) { client.setProtocols("fastfail"); client.setTimeout(1,TimeUnit.SECONDS); @@ -380,7 +378,7 @@ public class WebSocketCloseTest private void dropConnection() throws Exception { - try (BlockheadClient client = new BlockheadClient(server.getServerUri())) + try (IBlockheadClient client = new BlockheadClient(server.getServerUri())) { client.setProtocols("container"); client.setTimeout(1,TimeUnit.SECONDS); diff --git a/jetty-websocket/websocket-server/src/test/java/org/eclipse/jetty/websocket/server/WebSocketServerSessionTest.java b/jetty-websocket/websocket-server/src/test/java/org/eclipse/jetty/websocket/server/WebSocketServerSessionTest.java index 9d52c8eec8..2b98b54519 100644 --- a/jetty-websocket/websocket-server/src/test/java/org/eclipse/jetty/websocket/server/WebSocketServerSessionTest.java +++ b/jetty-websocket/websocket-server/src/test/java/org/eclipse/jetty/websocket/server/WebSocketServerSessionTest.java @@ -28,6 +28,7 @@ import org.eclipse.jetty.toolchain.test.EventQueue; import org.eclipse.jetty.websocket.common.WebSocketFrame; import org.eclipse.jetty.websocket.common.frames.TextFrame; import org.eclipse.jetty.websocket.common.test.BlockheadClient; +import org.eclipse.jetty.websocket.common.test.IBlockheadClient; import org.eclipse.jetty.websocket.server.helper.SessionServlet; import org.junit.AfterClass; import org.junit.Assert; @@ -60,7 +61,7 @@ public class WebSocketServerSessionTest public void testDisconnect() throws Exception { URI uri = server.getServerUri().resolve("/test/disconnect"); - try (BlockheadClient client = new BlockheadClient(uri)) + try (IBlockheadClient client = new BlockheadClient(uri)) { client.connect(); client.sendStandardRequest(); @@ -76,7 +77,7 @@ public class WebSocketServerSessionTest public void testUpgradeRequestResponse() throws Exception { URI uri = server.getServerUri().resolve("/test?snack=cashews&amount=handful&brand=off"); - try (BlockheadClient client = new BlockheadClient(uri)) + try (IBlockheadClient client = new BlockheadClient(uri)) { client.connect(); client.sendStandardRequest(); diff --git a/jetty-websocket/websocket-server/src/test/java/org/eclipse/jetty/websocket/server/browser/BrowserSocket.java b/jetty-websocket/websocket-server/src/test/java/org/eclipse/jetty/websocket/server/browser/BrowserSocket.java index 5810768f97..e6f280db28 100644 --- a/jetty-websocket/websocket-server/src/test/java/org/eclipse/jetty/websocket/server/browser/BrowserSocket.java +++ b/jetty-websocket/websocket-server/src/test/java/org/eclipse/jetty/websocket/server/browser/BrowserSocket.java @@ -136,7 +136,7 @@ public class BrowserSocket if (message.charAt(0) == '@') { String name = message.substring(1); - URL url = Loader.getResource(BrowserSocket.class,name); + URL url = Loader.getResource(name); if (url == null) { writeMessage("Unable to find resource: " + name); diff --git a/jetty-websocket/websocket-server/src/test/java/org/eclipse/jetty/websocket/server/misbehaving/MisbehavingClassTest.java b/jetty-websocket/websocket-server/src/test/java/org/eclipse/jetty/websocket/server/misbehaving/MisbehavingClassTest.java index 2c22e5c2a5..3654ec2f67 100644 --- a/jetty-websocket/websocket-server/src/test/java/org/eclipse/jetty/websocket/server/misbehaving/MisbehavingClassTest.java +++ b/jetty-websocket/websocket-server/src/test/java/org/eclipse/jetty/websocket/server/misbehaving/MisbehavingClassTest.java @@ -18,9 +18,8 @@ package org.eclipse.jetty.websocket.server.misbehaving; -import static org.hamcrest.Matchers.instanceOf; -import static org.hamcrest.Matchers.is; -import static org.junit.Assert.assertThat; +import static org.hamcrest.Matchers.*; +import static org.junit.Assert.*; import java.util.concurrent.TimeUnit; @@ -32,6 +31,7 @@ import org.eclipse.jetty.websocket.common.OpCode; import org.eclipse.jetty.websocket.common.WebSocketFrame; import org.eclipse.jetty.websocket.common.events.AbstractEventDriver; import org.eclipse.jetty.websocket.common.test.BlockheadClient; +import org.eclipse.jetty.websocket.common.test.IBlockheadClient; import org.eclipse.jetty.websocket.server.SimpleServletServer; import org.junit.AfterClass; import org.junit.BeforeClass; @@ -63,7 +63,7 @@ public class MisbehavingClassTest @Test public void testListenerRuntimeOnConnect() throws Exception { - try (BlockheadClient client = new BlockheadClient(server.getServerUri())) + try (IBlockheadClient client = new BlockheadClient(server.getServerUri())) { client.setProtocols("listener-runtime-connect"); client.setTimeout(1,TimeUnit.SECONDS); @@ -99,7 +99,7 @@ public class MisbehavingClassTest @Test public void testAnnotatedRuntimeOnConnect() throws Exception { - try (BlockheadClient client = new BlockheadClient(server.getServerUri())) + try (IBlockheadClient client = new BlockheadClient(server.getServerUri())) { client.setProtocols("annotated-runtime-connect"); client.setTimeout(1,TimeUnit.SECONDS); diff --git a/jetty-websocket/websocket-server/src/test/resources/jetty-logging.properties b/jetty-websocket/websocket-server/src/test/resources/jetty-logging.properties index 9165916af5..924d0006cb 100644 --- a/jetty-websocket/websocket-server/src/test/resources/jetty-logging.properties +++ b/jetty-websocket/websocket-server/src/test/resources/jetty-logging.properties @@ -12,6 +12,11 @@ org.eclipse.jetty.LEVEL=WARN # org.eclipse.jetty.websocket.server.blockhead.LEVEL=DEBUG # org.eclipse.jetty.websocket.server.helper.LEVEL=DEBUG +# org.eclipse.jetty.websocket.client.io.ConnectPromise.LEVEL=DEBUG +# org.eclipse.jetty.websocket.common.WebSocketSession_OPEN.LEVEL=DEBUG +# org.eclipse.jetty.websocket.common.io.IOState.LEVEL=DEBUG +# org.eclipse.jetty.websocket.common.io.AbstractWebSocketConnection_OPEN.LEVEL=DEBUG + ### Show state changes on BrowserDebugTool # -- LEAVE THIS AT DEBUG LEVEL -- org.eclipse.jetty.websocket.server.browser.LEVEL=DEBUG |