Skip to content

Commit 8cc7c7f

Browse files
committed
Adding a new test for WebSocket Chat
1 parent 63c5ca9 commit 8cc7c7f

File tree

4 files changed

+137
-0
lines changed

4 files changed

+137
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package org.javaee7.websocket.chat;
2+
3+
import java.io.IOException;
4+
import java.util.concurrent.CountDownLatch;
5+
6+
import javax.websocket.ClientEndpoint;
7+
import javax.websocket.OnMessage;
8+
import javax.websocket.OnOpen;
9+
import javax.websocket.Session;
10+
11+
/**
12+
* @author Arun Gupta
13+
*/
14+
@ClientEndpoint
15+
public class ChatClientEndpoint1 {
16+
public static String TEXT = "Client1 joins";
17+
public static CountDownLatch latch;
18+
public static String response;
19+
20+
@OnOpen
21+
public void onOpen(Session session) {
22+
try {
23+
session.getBasicRemote().sendText(TEXT);
24+
} catch (IOException ioe) {
25+
ioe.printStackTrace();
26+
}
27+
}
28+
29+
@OnMessage
30+
public void processMessage(String message) {
31+
response = message;
32+
latch.countDown();
33+
}
34+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package org.javaee7.websocket.chat;
2+
3+
import java.io.IOException;
4+
import java.util.concurrent.CountDownLatch;
5+
6+
import javax.websocket.ClientEndpoint;
7+
import javax.websocket.OnMessage;
8+
import javax.websocket.OnOpen;
9+
import javax.websocket.Session;
10+
11+
/**
12+
* @author Arun Gupta
13+
*/
14+
@ClientEndpoint
15+
public class ChatClientEndpoint2 {
16+
public static String TEXT = "Client2 joins";
17+
public static CountDownLatch latch;
18+
public static String response;
19+
20+
@OnOpen
21+
public void onOpen(Session session) {
22+
try {
23+
session.getBasicRemote().sendText(TEXT);
24+
} catch (IOException ioe) {
25+
ioe.printStackTrace();
26+
}
27+
}
28+
29+
@OnMessage
30+
public void processMessage(String message) {
31+
response = message;
32+
latch.countDown();
33+
}
34+
}

websocket/chat/src/main/java/org/javaee7/websocket/chat/ChatEndpoint.java

+1
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
public class ChatEndpoint {
5353
@OnMessage
5454
public void message(String message, Session client) throws IOException, EncodeException {
55+
System.out.println("message: " + message);
5556
for (Session peer : client.getOpenSessions()) {
5657
peer.getBasicRemote().sendText(message);
5758
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
package org.javaee7.websocket.chat;
2+
3+
import java.io.IOException;
4+
import java.net.URI;
5+
import java.net.URISyntaxException;
6+
import java.util.concurrent.CountDownLatch;
7+
import java.util.concurrent.TimeUnit;
8+
import javax.websocket.ContainerProvider;
9+
import javax.websocket.DeploymentException;
10+
import javax.websocket.Session;
11+
import javax.websocket.WebSocketContainer;
12+
import org.jboss.arquillian.container.test.api.Deployment;
13+
import org.jboss.arquillian.junit.Arquillian;
14+
import org.jboss.arquillian.test.api.ArquillianResource;
15+
import org.jboss.shrinkwrap.api.ShrinkWrap;
16+
import org.jboss.shrinkwrap.api.spec.WebArchive;
17+
import org.junit.Test;
18+
import static org.junit.Assert.*;
19+
import org.junit.runner.RunWith;
20+
21+
/**
22+
* @author Arun Gupta
23+
*/
24+
@RunWith(Arquillian.class)
25+
public class ChatTest {
26+
27+
@ArquillianResource
28+
URI base;
29+
30+
@Deployment(testable = false)
31+
public static WebArchive createDeployment() {
32+
return ShrinkWrap.create(WebArchive.class)
33+
.addClasses(ChatEndpoint.class,
34+
ChatClientEndpoint1.class,
35+
ChatClientEndpoint2.class);
36+
}
37+
38+
@Test
39+
public void testConnect() throws URISyntaxException, DeploymentException, IOException, InterruptedException {
40+
ChatClientEndpoint1.latch = new CountDownLatch(1);
41+
final Session session1 = connectToServer(ChatClientEndpoint1.class);
42+
assertNotNull(session1);
43+
assertTrue(ChatClientEndpoint1.latch.await(2, TimeUnit.SECONDS));
44+
45+
assertEquals(ChatClientEndpoint1.TEXT, ChatClientEndpoint1.response);
46+
47+
ChatClientEndpoint1.latch = new CountDownLatch(1);
48+
ChatClientEndpoint2.latch = new CountDownLatch(1);
49+
final Session session2 = connectToServer(ChatClientEndpoint2.class);
50+
assertNotNull(session2);
51+
assertTrue(ChatClientEndpoint1.latch.await(2, TimeUnit.SECONDS));
52+
assertTrue(ChatClientEndpoint2.latch.await(2, TimeUnit.SECONDS));
53+
assertEquals(ChatClientEndpoint2.TEXT, ChatClientEndpoint1.response);
54+
assertEquals(ChatClientEndpoint2.TEXT, ChatClientEndpoint2.response);
55+
}
56+
57+
58+
public Session connectToServer(Class<?> endpoint) throws DeploymentException, IOException, URISyntaxException {
59+
WebSocketContainer container = ContainerProvider.getWebSocketContainer();
60+
URI uri = new URI("ws://"
61+
+ base.getHost()
62+
+ ":"
63+
+ base.getPort()
64+
+ base.getPath()
65+
+ "chat");
66+
return container.connectToServer(endpoint, uri);
67+
}
68+
}

0 commit comments

Comments
 (0)