Skip to content

Commit acd03d0

Browse files
committed
Add test for connectBlocking cleanup (TooTallNate#1399)
1 parent aa84b39 commit acd03d0

File tree

1 file changed

+68
-0
lines changed

1 file changed

+68
-0
lines changed
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
package org.java_websocket.client;
2+
3+
import java.io.IOException;
4+
import java.net.*;
5+
import java.util.Set;
6+
import java.util.concurrent.*;
7+
import org.java_websocket.WebSocket;
8+
import org.java_websocket.handshake.*;
9+
import org.java_websocket.client.*;
10+
import org.java_websocket.server.WebSocketServer;
11+
import org.java_websocket.util.SocketUtil;
12+
import org.java_websocket.enums.ReadyState;
13+
import org.junit.Test;
14+
import static org.junit.Assert.*;
15+
16+
public class ConnectBlockingTest {
17+
18+
@Test(timeout = 1000)
19+
public void test_ConnectBlockingCleanup() throws Throwable {
20+
21+
Set<Thread> threadSet1 = Thread.getAllStackTraces().keySet();
22+
final CountDownLatch ready = new CountDownLatch(1);
23+
final CountDownLatch accepted = new CountDownLatch(1);
24+
25+
final int port = SocketUtil.getAvailablePort();
26+
27+
/* TCP server which listens to a port, but does not answer handshake */
28+
Thread server = new Thread(new Runnable() {
29+
@Override
30+
public void run() {
31+
try {
32+
ServerSocket serverSocket = new ServerSocket(port);
33+
ready.countDown();
34+
Socket clientSocket = serverSocket.accept();
35+
accepted.countDown();
36+
} catch (Throwable t) {
37+
assertTrue(t instanceof InterruptedException);
38+
}
39+
}
40+
});
41+
server.start();
42+
ready.await();
43+
44+
WebSocketClient client = new WebSocketClient(URI.create("ws://localhost:" + port)) {
45+
@Override
46+
public void onOpen(ServerHandshake handshake) {
47+
}
48+
@Override
49+
public void onClose(int code, String reason, boolean remote) {}
50+
@Override
51+
public void onMessage(String message) {}
52+
@Override
53+
public void onError(Exception ex) {
54+
ex.printStackTrace();
55+
}
56+
};
57+
boolean connected = client.connectBlocking(100, TimeUnit.MILLISECONDS);
58+
assertEquals("TCP socket should have been accepted", 0, accepted.getCount());
59+
assertFalse("WebSocket should not be connected (as server didn't send handshake)", connected);
60+
61+
server.interrupt();
62+
server.join();
63+
64+
Set<Thread> threadSet2 = Thread.getAllStackTraces().keySet();
65+
assertEquals("no threads left over", threadSet1, threadSet2);
66+
assertTrue("WebSocket is in closed state", client.getReadyState() == ReadyState.CLOSED || client.getReadyState() == ReadyState.NOT_YET_CONNECTED);
67+
}
68+
}

0 commit comments

Comments
 (0)