From 67ff5f8ff04b78442284c17d763c4cf17d87d4ea Mon Sep 17 00:00:00 2001 From: marci4 Date: Sun, 20 Sep 2020 16:52:52 +0200 Subject: [PATCH 1/2] Replace the type specification in this constructor call with the diamond operator Some javadoc stuff --- .../org/java_websocket/AbstractWebSocket.java | 11 ++++++---- .../org/java_websocket/WebSocketImpl.java | 8 +++---- .../client/WebSocketClient.java | 4 ++-- .../org/java_websocket/drafts/Draft_6455.java | 20 ++++++++--------- .../exceptions/LimitExceededException.java | 3 +++ .../exceptions/WrappedIOException.java | 2 +- .../extensions/ExtensionRequestData.java | 4 ++-- .../PerMessageDeflateExtension.java | 22 ++++++++++++++----- .../handshake/HandshakedataImpl1.java | 2 +- .../DefaultSSLWebSocketServerFactory.java | 2 +- .../server/WebSocketServer.java | 18 ++++++++------- 11 files changed, 57 insertions(+), 39 deletions(-) diff --git a/src/main/java/org/java_websocket/AbstractWebSocket.java b/src/main/java/org/java_websocket/AbstractWebSocket.java index a6709f0aa..c3e77a089 100644 --- a/src/main/java/org/java_websocket/AbstractWebSocket.java +++ b/src/main/java/org/java_websocket/AbstractWebSocket.java @@ -74,7 +74,7 @@ public abstract class AbstractWebSocket extends WebSocketAdapter { * * @since 1.4.1 */ - private ScheduledFuture connectionLostCheckerFuture; + private ScheduledFuture connectionLostCheckerFuture; /** * Attribute for the lost connection check interval in nanoseconds @@ -126,7 +126,7 @@ public void setConnectionLostTimeout(int connectionLostTimeout) { log.trace("Connection lost timer restarted"); //Reset all the pings try { - ArrayList connections = new ArrayList(getConnections()); + ArrayList connections = new ArrayList<>(getConnections()); WebSocketImpl webSocketImpl; for (WebSocket conn : connections) { if (conn instanceof WebSocketImpl) { @@ -188,14 +188,17 @@ private void restartConnectionLostTimer() { /** * Keep the connections in a separate list to not cause deadlocks */ - private ArrayList connections = new ArrayList(); + private ArrayList connections = new ArrayList<>(); @Override public void run() { connections.clear(); try { connections.addAll(getConnections()); - long minimumPongTime = (long) (System.nanoTime() - (connectionLostTimeout * 1.5)); + long minimumPongTime; + synchronized (syncConnectionLost) { + minimumPongTime = (long) (System.nanoTime() - (connectionLostTimeout * 1.5)); + } for (WebSocket conn : connections) { executeConnectionLostDetection(conn, minimumPongTime); } diff --git a/src/main/java/org/java_websocket/WebSocketImpl.java b/src/main/java/org/java_websocket/WebSocketImpl.java index 2fc312e64..8a6f96027 100644 --- a/src/main/java/org/java_websocket/WebSocketImpl.java +++ b/src/main/java/org/java_websocket/WebSocketImpl.java @@ -190,7 +190,7 @@ public WebSocketImpl(WebSocketListener listener, List drafts) { this.role = Role.SERVER; // draft.copyInstance will be called when the draft is first needed if (drafts == null || drafts.isEmpty()) { - knownDrafts = new ArrayList(); + knownDrafts = new ArrayList<>(); knownDrafts.add(new Draft_6455()); } else { knownDrafts = drafts; @@ -208,8 +208,8 @@ public WebSocketImpl(WebSocketListener listener, Draft draft) { if (listener == null || (draft == null && role == Role.SERVER)) { throw new IllegalArgumentException("parameters must not be null"); } - this.outQueue = new LinkedBlockingQueue(); - inQueue = new LinkedBlockingQueue(); + this.outQueue = new LinkedBlockingQueue<>(); + inQueue = new LinkedBlockingQueue<>(); this.wsl = listener; this.role = Role.CLIENT; if (draft != null) { @@ -666,7 +666,7 @@ private void send(Collection frames) { if (frames == null) { throw new IllegalArgumentException(); } - ArrayList outgoingFrames = new ArrayList(); + ArrayList outgoingFrames = new ArrayList<>(); for (Framedata f : frames) { log.trace("send frame: {}", f); outgoingFrames.add(draft.createBinaryFrame(f)); diff --git a/src/main/java/org/java_websocket/client/WebSocketClient.java b/src/main/java/org/java_websocket/client/WebSocketClient.java index d97fab079..4d37b5682 100644 --- a/src/main/java/org/java_websocket/client/WebSocketClient.java +++ b/src/main/java/org/java_websocket/client/WebSocketClient.java @@ -223,7 +223,7 @@ public InetAddress resolve(URI uri) throws UnknownHostException { } }; if (httpHeaders != null) { - headers = new TreeMap(String.CASE_INSENSITIVE_ORDER); + headers = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); headers.putAll(httpHeaders); } this.connectTimeout = connectTimeout; @@ -269,7 +269,7 @@ public Socket getSocket() { */ public void addHeader(String key, String value) { if (headers == null) { - headers = new TreeMap(String.CASE_INSENSITIVE_ORDER); + headers = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); } headers.put(key, value); } diff --git a/src/main/java/org/java_websocket/drafts/Draft_6455.java b/src/main/java/org/java_websocket/drafts/Draft_6455.java index f7e59fc41..06c964d88 100644 --- a/src/main/java/org/java_websocket/drafts/Draft_6455.java +++ b/src/main/java/org/java_websocket/drafts/Draft_6455.java @@ -229,10 +229,10 @@ public Draft_6455(List inputExtensions, List inputProtoco if (inputExtensions == null || inputProtocols == null || inputMaxFrameSize < 1) { throw new IllegalArgumentException(); } - knownExtensions = new ArrayList(inputExtensions.size()); - knownProtocols = new ArrayList(inputProtocols.size()); + knownExtensions = new ArrayList<>(inputExtensions.size()); + knownProtocols = new ArrayList<>(inputProtocols.size()); boolean hasDefault = false; - byteBufferList = new ArrayList(); + byteBufferList = new ArrayList<>(); for (IExtension inputExtension : inputExtensions) { if (inputExtension.getClass().equals(DefaultExtension.class)) { hasDefault = true; @@ -442,13 +442,13 @@ public HandshakeBuilder postProcessHandshakeResponseAsServer(ClientHandshake req @Override public Draft copyInstance() { - ArrayList newExtensions = new ArrayList(); - for (IExtension extension : getKnownExtensions()) { - newExtensions.add(extension.copyInstance()); + ArrayList newExtensions = new ArrayList<>(); + for (IExtension knownExtension : getKnownExtensions()) { + newExtensions.add(knownExtension.copyInstance()); } - ArrayList newProtocols = new ArrayList(); - for (IProtocol protocol : getKnownProtocols()) { - newProtocols.add(protocol.copyInstance()); + ArrayList newProtocols = new ArrayList<>(); + for (IProtocol knownProtocol : getKnownProtocols()) { + newProtocols.add(knownProtocol.copyInstance()); } return new Draft_6455(newExtensions, newProtocols, maxFrameSize); } @@ -700,7 +700,7 @@ private int getSizeBytes(ByteBuffer mes) { @Override public List translateFrame(ByteBuffer buffer) throws InvalidDataException { while (true) { - List frames = new LinkedList(); + List frames = new LinkedList<>(); Framedata cur; if (incompleteframe != null) { // complete an incomplete frame diff --git a/src/main/java/org/java_websocket/exceptions/LimitExceededException.java b/src/main/java/org/java_websocket/exceptions/LimitExceededException.java index 9f76d442f..0d4a81825 100644 --- a/src/main/java/org/java_websocket/exceptions/LimitExceededException.java +++ b/src/main/java/org/java_websocket/exceptions/LimitExceededException.java @@ -55,6 +55,7 @@ public LimitExceededException() { * constructor for a LimitExceededException *

* calling InvalidDataException with closecode TOOBIG + * @param limit the allowed size which was not enough */ public LimitExceededException(int limit) { super(CloseFrame.TOOBIG); @@ -65,6 +66,8 @@ public LimitExceededException(int limit) { * constructor for a LimitExceededException *

* calling InvalidDataException with closecode TOOBIG + * @param s the detail message. + * @param limit the allowed size which was not enough */ public LimitExceededException(String s, int limit) { super(CloseFrame.TOOBIG, s); diff --git a/src/main/java/org/java_websocket/exceptions/WrappedIOException.java b/src/main/java/org/java_websocket/exceptions/WrappedIOException.java index fbcaddeaa..3ec31773d 100644 --- a/src/main/java/org/java_websocket/exceptions/WrappedIOException.java +++ b/src/main/java/org/java_websocket/exceptions/WrappedIOException.java @@ -40,7 +40,7 @@ public class WrappedIOException extends Exception { /** * The websocket where the IOException happened */ - private final WebSocket connection; + private final transient WebSocket connection; /** * The IOException diff --git a/src/main/java/org/java_websocket/extensions/ExtensionRequestData.java b/src/main/java/org/java_websocket/extensions/ExtensionRequestData.java index 8d46d9566..37bc9de20 100644 --- a/src/main/java/org/java_websocket/extensions/ExtensionRequestData.java +++ b/src/main/java/org/java_websocket/extensions/ExtensionRequestData.java @@ -5,13 +5,13 @@ public class ExtensionRequestData { - public static String EMPTY_VALUE = ""; + public static final String EMPTY_VALUE = ""; private Map extensionParameters; private String extensionName; private ExtensionRequestData() { - extensionParameters = new LinkedHashMap(); + extensionParameters = new LinkedHashMap<>(); } public static ExtensionRequestData parseExtensionRequest(String extensionRequest) { diff --git a/src/main/java/org/java_websocket/extensions/permessage_deflate/PerMessageDeflateExtension.java b/src/main/java/org/java_websocket/extensions/permessage_deflate/PerMessageDeflateExtension.java index c0346b88b..6da4a0c98 100644 --- a/src/main/java/org/java_websocket/extensions/permessage_deflate/PerMessageDeflateExtension.java +++ b/src/main/java/org/java_websocket/extensions/permessage_deflate/PerMessageDeflateExtension.java @@ -49,7 +49,7 @@ public class PerMessageDeflateExtension extends CompressionExtension { // For WebSocketServers, this variable holds the extension parameters that the peer client has requested. // For WebSocketClients, this variable holds the extension parameters that client himself has requested. - private Map requestedParameters = new LinkedHashMap(); + private Map requestedParameters = new LinkedHashMap<>(); private Inflater inflater = new Inflater(true); private Deflater deflater = new Deflater(Deflater.DEFAULT_COMPRESSION, true); @@ -71,28 +71,38 @@ public void setDeflater(Deflater deflater) { } /** - * @return serverNoContextTakeover + * Access the "server_no_context_takeover" extension parameter + * + * @see The "server_no_context_takeover" Extension Parameter + * @return serverNoContextTakeover is the server no context parameter active */ public boolean isServerNoContextTakeover() { return serverNoContextTakeover; } /** - * @param serverNoContextTakeover + * Setter for the "server_no_context_takeover" extension parameter + * @see The "server_no_context_takeover" Extension Parameter + * @param serverNoContextTakeover set the server no context parameter */ public void setServerNoContextTakeover(boolean serverNoContextTakeover) { this.serverNoContextTakeover = serverNoContextTakeover; } /** - * @return clientNoContextTakeover + * Access the "client_no_context_takeover" extension parameter + * + * @see The "client_no_context_takeover" Extension Parameter + * @return clientNoContextTakeover is the client no context parameter active */ public boolean isClientNoContextTakeover() { return clientNoContextTakeover; } /** - * @param clientNoContextTakeover + * Setter for the "client_no_context_takeover" extension parameter + * @see The "client_no_context_takeover" Extension Parameter + * @param clientNoContextTakeover set the client no context parameter */ public void setClientNoContextTakeover(boolean clientNoContextTakeover) { this.clientNoContextTakeover = clientNoContextTakeover; @@ -224,7 +234,7 @@ public void encodeFrame(Framedata inputFrame) { * @param data the bytes of data * @return true if the data is OK */ - private boolean endsWithTail(byte[] data) { + private static boolean endsWithTail(byte[] data) { if (data.length < 4) { return false; } diff --git a/src/main/java/org/java_websocket/handshake/HandshakedataImpl1.java b/src/main/java/org/java_websocket/handshake/HandshakedataImpl1.java index bc59993c6..62824cdd2 100644 --- a/src/main/java/org/java_websocket/handshake/HandshakedataImpl1.java +++ b/src/main/java/org/java_websocket/handshake/HandshakedataImpl1.java @@ -48,7 +48,7 @@ public class HandshakedataImpl1 implements HandshakeBuilder { * Constructor for handshake implementation */ public HandshakedataImpl1() { - map = new TreeMap(String.CASE_INSENSITIVE_ORDER); + map = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); } @Override diff --git a/src/main/java/org/java_websocket/server/DefaultSSLWebSocketServerFactory.java b/src/main/java/org/java_websocket/server/DefaultSSLWebSocketServerFactory.java index be5c8e678..f2732030c 100644 --- a/src/main/java/org/java_websocket/server/DefaultSSLWebSocketServerFactory.java +++ b/src/main/java/org/java_websocket/server/DefaultSSLWebSocketServerFactory.java @@ -68,7 +68,7 @@ public ByteChannel wrapChannel(SocketChannel channel, SelectionKey key) throws I * We remove TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 from the enabled ciphers since it is just available when you patch your java installation directly. * E.g. firefox requests this cipher and this causes some dcs/instable connections */ - List ciphers = new ArrayList(Arrays.asList(e.getEnabledCipherSuites())); + List ciphers = new ArrayList<>(Arrays.asList(e.getEnabledCipherSuites())); ciphers.remove("TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"); e.setEnabledCipherSuites(ciphers.toArray(new String[ciphers.size()])); e.setUseClientMode(false); diff --git a/src/main/java/org/java_websocket/server/WebSocketServer.java b/src/main/java/org/java_websocket/server/WebSocketServer.java index 71f8728ba..1c67ee70e 100644 --- a/src/main/java/org/java_websocket/server/WebSocketServer.java +++ b/src/main/java/org/java_websocket/server/WebSocketServer.java @@ -221,10 +221,10 @@ public WebSocketServer(InetSocketAddress address, int decodercount, List this.connections = connectionscontainer; setTcpNoDelay(false); setReuseAddr(false); - iqueue = new LinkedList(); + iqueue = new LinkedList<>(); - decoders = new ArrayList(decodercount); - buffers = new LinkedBlockingQueue(); + decoders = new ArrayList<>(decodercount); + buffers = new LinkedBlockingQueue<>(); for (int i = 0; i < decodercount; i++) { WebSocketWorker ex = new WebSocketWorker(); decoders.add(ex); @@ -270,7 +270,7 @@ public void stop(int timeout) throws InterruptedException { // copy the connections in a list (prevent callback deadlocks) synchronized (connections) { - socketsToClose = new ArrayList(connections); + socketsToClose = new ArrayList<>(connections); } for (WebSocket ws : socketsToClose) { @@ -300,7 +300,7 @@ public void stop() throws IOException, InterruptedException { */ public Collection getConnections() { synchronized (connections) { - return Collections.unmodifiableCollection(new ArrayList(connections)); + return Collections.unmodifiableCollection(new ArrayList<>(connections)); } } @@ -337,6 +337,7 @@ public List getDraft() { * "backlog" parameter to {@link ServerSocket#bind(SocketAddress, int)} * * @since 1.5.0 + * @param numberOfConnections the new number of allowed pending connections */ public void setMaxPendingConnections(int numberOfConnections) { maxPendingConnections = numberOfConnections; @@ -347,6 +348,7 @@ public void setMaxPendingConnections(int numberOfConnections) { * * @see #setMaxPendingConnections(int) * @since 1.5.0 + * @return the maximum number of pending connections */ public int getMaxPendingConnections() { return maxPendingConnections; @@ -1004,10 +1006,10 @@ private void doBroadcast(Object data, Collection clients) { if (strData == null && byteData == null) { return; } - Map> draftFrames = new HashMap>(); + Map> draftFrames = new HashMap<>(); List clientCopy; synchronized (clients) { - clientCopy = new ArrayList(clients); + clientCopy = new ArrayList<>(clients); } for (WebSocket client : clientCopy) { if (client != null) { @@ -1054,7 +1056,7 @@ public class WebSocketWorker extends Thread { private BlockingQueue iqueue; public WebSocketWorker() { - iqueue = new LinkedBlockingQueue(); + iqueue = new LinkedBlockingQueue<>(); setName("WebSocketWorker-" + getId()); setUncaughtExceptionHandler(new UncaughtExceptionHandler() { @Override From 08be8690b3e332c4133864e7d8bbcf9959609bb3 Mon Sep 17 00:00:00 2001 From: marci4 Date: Sat, 26 Sep 2020 17:57:00 +0200 Subject: [PATCH 2/2] Code Quality Reduce complexity Fix broken test --- .../client/WebSocketClient.java | 60 +++++++++++-------- .../server/WebSocketServer.java | 11 +--- .../protocols/AllProtocolTests.java | 2 +- ...va => ProtocolHandshakeRejectionTest.java} | 39 ++++++++---- .../java_websocket/server/AllServerTests.java | 3 +- .../server/WebSocketServerTest.java | 8 +++ 6 files changed, 77 insertions(+), 46 deletions(-) rename src/test/java/org/java_websocket/protocols/{ProtoclHandshakeRejectionTest.java => ProtocolHandshakeRejectionTest.java} (96%) diff --git a/src/main/java/org/java_websocket/client/WebSocketClient.java b/src/main/java/org/java_websocket/client/WebSocketClient.java index 4d37b5682..203c9b67d 100644 --- a/src/main/java/org/java_websocket/client/WebSocketClient.java +++ b/src/main/java/org/java_websocket/client/WebSocketClient.java @@ -36,6 +36,8 @@ import java.net.URI; import java.net.UnknownHostException; import java.nio.ByteBuffer; +import java.security.KeyManagementException; +import java.security.NoSuchAlgorithmException; import java.util.Collection; import java.util.Collections; import java.util.Map; @@ -461,19 +463,7 @@ public void sendPing() { public void run() { InputStream istream; try { - boolean upgradeSocketToSSLSocket = false; - // Prioritise a proxy over a socket factory and apply the socketfactory later - if (proxy != Proxy.NO_PROXY) { - socket = new Socket(proxy); - upgradeSocketToSSLSocket = true; - } else if (socketFactory != null) { - socket = socketFactory.createSocket(); - } else if (socket == null) { - socket = new Socket(proxy); - upgradeSocketToSSLSocket = true; - } else if (socket.isClosed()) { - throw new IOException(); - } + boolean upgradeSocketToSSLSocket = prepareSocket(); socket.setTcpNoDelay(isTcpNoDelay()); socket.setReuseAddress(isReuseAddr()); @@ -485,17 +475,7 @@ public void run() { // if the socket is set by others we don't apply any TLS wrapper if (upgradeSocketToSSLSocket && "wss".equals(uri.getScheme())) { - SSLSocketFactory factory; - // Prioritise the provided socketfactory - // Helps when using web debuggers like Fiddler Classic - if (socketFactory != null && (socketFactory instanceof SSLSocketFactory)) { - factory = (SSLSocketFactory) socketFactory; - } else { - SSLContext sslContext = SSLContext.getInstance("TLSv1.2"); - sslContext.init(null, null, null); - factory = sslContext.getSocketFactory(); - } - socket = factory.createSocket(socket, uri.getHost(), getPort(), true); + upgradeSocketToSSL(); } if (socket instanceof SSLSocket) { @@ -546,6 +526,38 @@ public void run() { connectReadThread = null; } + private void upgradeSocketToSSL() + throws NoSuchAlgorithmException, KeyManagementException, IOException { + SSLSocketFactory factory; + // Prioritise the provided socketfactory + // Helps when using web debuggers like Fiddler Classic + if (socketFactory instanceof SSLSocketFactory) { + factory = (SSLSocketFactory) socketFactory; + } else { + SSLContext sslContext = SSLContext.getInstance("TLSv1.2"); + sslContext.init(null, null, null); + factory = sslContext.getSocketFactory(); + } + socket = factory.createSocket(socket, uri.getHost(), getPort(), true); + } + + private boolean prepareSocket() throws IOException { + boolean upgradeSocketToSSLSocket = false; + // Prioritise a proxy over a socket factory and apply the socketfactory later + if (proxy != Proxy.NO_PROXY) { + socket = new Socket(proxy); + upgradeSocketToSSLSocket = true; + } else if (socketFactory != null) { + socket = socketFactory.createSocket(); + } else if (socket == null) { + socket = new Socket(proxy); + upgradeSocketToSSLSocket = true; + } else if (socket.isClosed()) { + throw new IOException(); + } + return upgradeSocketToSSLSocket; + } + /** * Apply specific SSLParameters If you override this method make sure to always call * super.onSetSSLParameters() to ensure the hostname validation is active diff --git a/src/main/java/org/java_websocket/server/WebSocketServer.java b/src/main/java/org/java_websocket/server/WebSocketServer.java index 1c67ee70e..11073619c 100644 --- a/src/main/java/org/java_websocket/server/WebSocketServer.java +++ b/src/main/java/org/java_websocket/server/WebSocketServer.java @@ -287,7 +287,7 @@ public void stop(int timeout) throws InterruptedException { } } - public void stop() throws IOException, InterruptedException { + public void stop() throws InterruptedException { stop(0); } @@ -538,10 +538,8 @@ private boolean doRead(SelectionKey key, Iterator i) private void doWrite(SelectionKey key) throws WrappedIOException { WebSocketImpl conn = (WebSocketImpl) key.attachment(); try { - if (SocketChannelIOHelper.batch(conn, conn.getChannel())) { - if (key.isValid()) { - key.interestOps(SelectionKey.OP_READ); - } + if (SocketChannelIOHelper.batch(conn, conn.getChannel()) && key.isValid()) { + key.interestOps(SelectionKey.OP_READ); } } catch (IOException e) { throw new WrappedIOException(conn, e); @@ -693,9 +691,6 @@ private void handleFatal(WebSocket conn, Exception e) { } try { stop(); - } catch (IOException e1) { - log.error("Error during shutdown", e1); - onError(null, e1); } catch (InterruptedException e1) { Thread.currentThread().interrupt(); log.error("Interrupt during stop", e); diff --git a/src/test/java/org/java_websocket/protocols/AllProtocolTests.java b/src/test/java/org/java_websocket/protocols/AllProtocolTests.java index ae403d7ba..60c31ae02 100644 --- a/src/test/java/org/java_websocket/protocols/AllProtocolTests.java +++ b/src/test/java/org/java_websocket/protocols/AllProtocolTests.java @@ -32,7 +32,7 @@ @RunWith(Suite.class) @Suite.SuiteClasses({ org.java_websocket.protocols.ProtocolTest.class, - org.java_websocket.protocols.ProtoclHandshakeRejectionTest.class + ProtocolHandshakeRejectionTest.class }) /** * Start all tests for protocols diff --git a/src/test/java/org/java_websocket/protocols/ProtoclHandshakeRejectionTest.java b/src/test/java/org/java_websocket/protocols/ProtocolHandshakeRejectionTest.java similarity index 96% rename from src/test/java/org/java_websocket/protocols/ProtoclHandshakeRejectionTest.java rename to src/test/java/org/java_websocket/protocols/ProtocolHandshakeRejectionTest.java index 270fab805..f1249ff11 100644 --- a/src/test/java/org/java_websocket/protocols/ProtoclHandshakeRejectionTest.java +++ b/src/test/java/org/java_websocket/protocols/ProtocolHandshakeRejectionTest.java @@ -51,7 +51,7 @@ import org.junit.BeforeClass; import org.junit.Test; -public class ProtoclHandshakeRejectionTest { +public class ProtocolHandshakeRejectionTest { private static final String additionalHandshake = "HTTP/1.1 101 Websocket Connection Upgrade\r\nUpgrade: websocket\r\nConnection: Upgrade\r\n"; private static Thread thread; @@ -355,7 +355,7 @@ public void testHandshakeRejectionTestCase13() throws Exception { @Test(timeout = 5000) public void testHandshakeRejectionTestCase14() throws Exception { - ArrayList protocols = new ArrayList(); + ArrayList protocols = new ArrayList<>(); protocols.add(new Protocol("chat")); protocols.add(new Protocol("chat2")); testProtocolRejection(14, new Draft_6455(Collections.emptyList(), protocols)); @@ -363,7 +363,7 @@ public void testHandshakeRejectionTestCase14() throws Exception { @Test(timeout = 5000) public void testHandshakeRejectionTestCase15() throws Exception { - ArrayList protocols = new ArrayList(); + ArrayList protocols = new ArrayList<>(); protocols.add(new Protocol("chat")); protocols.add(new Protocol("chat2")); testProtocolRejection(15, new Draft_6455(Collections.emptyList(), protocols)); @@ -371,7 +371,7 @@ public void testHandshakeRejectionTestCase15() throws Exception { @Test(timeout = 5000) public void testHandshakeRejectionTestCase16() throws Exception { - ArrayList protocols = new ArrayList(); + ArrayList protocols = new ArrayList<>(); protocols.add(new Protocol("chat")); protocols.add(new Protocol("chat2")); testProtocolRejection(16, new Draft_6455(Collections.emptyList(), protocols)); @@ -379,7 +379,7 @@ public void testHandshakeRejectionTestCase16() throws Exception { @Test(timeout = 5000) public void testHandshakeRejectionTestCase17() throws Exception { - ArrayList protocols = new ArrayList(); + ArrayList protocols = new ArrayList<>(); protocols.add(new Protocol("chat")); protocols.add(new Protocol("")); testProtocolRejection(17, new Draft_6455(Collections.emptyList(), protocols)); @@ -402,7 +402,7 @@ public void testHandshakeRejectionTestCase20() throws Exception { @Test(timeout = 5000) public void testHandshakeRejectionTestCase21() throws Exception { - ArrayList protocols = new ArrayList(); + ArrayList protocols = new ArrayList<>(); protocols.add(new Protocol("chat1")); protocols.add(new Protocol("chat2")); protocols.add(new Protocol("chat3")); @@ -411,7 +411,7 @@ public void testHandshakeRejectionTestCase21() throws Exception { @Test(timeout = 5000) public void testHandshakeRejectionTestCase22() throws Exception { - ArrayList protocols = new ArrayList(); + ArrayList protocols = new ArrayList<>(); protocols.add(new Protocol("chat2")); protocols.add(new Protocol("chat3")); protocols.add(new Protocol("chat1")); @@ -420,7 +420,7 @@ public void testHandshakeRejectionTestCase22() throws Exception { @Test(timeout = 5000) public void testHandshakeRejectionTestCase23() throws Exception { - ArrayList protocols = new ArrayList(); + ArrayList protocols = new ArrayList<>(); protocols.add(new Protocol("chat3")); protocols.add(new Protocol("chat2")); protocols.add(new Protocol("chat1")); @@ -463,7 +463,7 @@ public void testHandshakeRejectionTestCase29() throws Exception { private void testProtocolRejection(int i, Draft_6455 draft) throws Exception { final int finalI = i; final boolean[] threadReturned = {false}; - WebSocketClient webSocketClient = new WebSocketClient( + final WebSocketClient webSocketClient = new WebSocketClient( new URI("ws://localhost:" + port + "/" + finalI), draft) { @Override public void onOpen(ServerHandshake handshakedata) { @@ -509,6 +509,7 @@ public void onClose(int code, String reason, boolean remote) { case 2: case 3: case 4: + case 17: case 20: case 24: case 25: @@ -533,10 +534,9 @@ public void onClose(int code, String reason, boolean remote) { case 6: case 7: case 8: - case 17: + case 14: assertEquals("chat", getProtocol().getProvidedProtocol()); break; - case 14: case 22: assertEquals("chat2", getProtocol().getProvidedProtocol()); break; @@ -588,9 +588,24 @@ public void onError(Exception ex) { fail("There should not be an exception"); } }; - Thread finalThread = new Thread(webSocketClient); + final AssertionError[] exc = new AssertionError[1]; + exc[0] = null; + Thread finalThread = new Thread(new Runnable() { + @Override + public void run() { + try { + webSocketClient.run(); + }catch(AssertionError e){ + exc[0] = e; + } + } + + }); finalThread.start(); finalThread.join(); + if (exc[0] != null) { + throw exc[0]; + } if (!threadReturned[0]) { fail("Error"); diff --git a/src/test/java/org/java_websocket/server/AllServerTests.java b/src/test/java/org/java_websocket/server/AllServerTests.java index 9f7683552..f1f84fc90 100644 --- a/src/test/java/org/java_websocket/server/AllServerTests.java +++ b/src/test/java/org/java_websocket/server/AllServerTests.java @@ -25,6 +25,7 @@ package org.java_websocket.server; +import org.java_websocket.protocols.ProtocolHandshakeRejectionTest; import org.junit.runner.RunWith; import org.junit.runners.Suite; @@ -32,7 +33,7 @@ @RunWith(Suite.class) @Suite.SuiteClasses({ org.java_websocket.server.DefaultWebSocketServerFactoryTest.class, - org.java_websocket.protocols.ProtoclHandshakeRejectionTest.class + ProtocolHandshakeRejectionTest.class }) /** * Start all tests for the server diff --git a/src/test/java/org/java_websocket/server/WebSocketServerTest.java b/src/test/java/org/java_websocket/server/WebSocketServerTest.java index decac6c28..5bebf8028 100644 --- a/src/test/java/org/java_websocket/server/WebSocketServerTest.java +++ b/src/test/java/org/java_websocket/server/WebSocketServerTest.java @@ -142,6 +142,14 @@ public void testGetPort() throws IOException, InterruptedException { assertNotEquals(0, server.getPort()); } + @Test + public void testMaxPendingConnections() { + MyWebSocketServer server = new MyWebSocketServer(1337); + assertEquals(server.getMaxPendingConnections(), -1); + server.setMaxPendingConnections(10); + assertEquals(server.getMaxPendingConnections(), 10); + } + @Test public void testBroadcast() { MyWebSocketServer server = new MyWebSocketServer(1337);