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