Skip to content

Commit 7ecd7f0

Browse files
author
Reza Rahman
committed
Chat test
1 parent d7c5448 commit 7ecd7f0

4 files changed

Lines changed: 95 additions & 33 deletions

File tree

actionbazaar/pom.xml

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,11 @@
3838
<version>7.0</version>
3939
<scope>provided</scope>
4040
</dependency>
41-
<dependency>
42-
<groupId>org.glassfish.jersey.media</groupId>
43-
<artifactId>jersey-media-json-processing</artifactId>
44-
<version>2.5.1</version>
45-
<scope>compile</scope>
41+
<dependency>
42+
<groupId>org.glassfish.jersey.media</groupId>
43+
<artifactId>jersey-media-json-processing</artifactId>
44+
<version>2.5.1</version>
45+
<scope>compile</scope>
4646
</dependency>
4747
<dependency>
4848
<groupId>org.glassfish.jersey.containers</groupId>
@@ -79,6 +79,18 @@
7979
<artifactId>jsfunit-arquillian</artifactId>
8080
<version>2.0.0.Beta3-SNAPSHOT</version>
8181
</dependency>
82+
<dependency>
83+
<groupId>org.glassfish.tyrus</groupId>
84+
<artifactId>tyrus-server</artifactId>
85+
<version>1.7</version>
86+
<scope>test</scope>
87+
</dependency>
88+
<dependency>
89+
<groupId>org.glassfish.tyrus</groupId>
90+
<artifactId>tyrus-container-grizzly-server</artifactId>
91+
<version>1.7</version>
92+
<scope>test</scope>
93+
</dependency>
8294
</dependencies>
8395
<build>
8496
<finalName>actionbazaar</finalName>
@@ -113,7 +125,7 @@
113125
<artifactId>maven-surefire-plugin</artifactId>
114126
<version>2.15</version>
115127
<configuration>
116-
<skipTests>true</skipTests>
128+
<skipTests>false</skipTests>
117129
</configuration>
118130
</plugin>
119131
</plugins>

actionbazaar/src/main/java/com/actionbazaar/interfaces/socket/ChatMessage.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,14 @@ public ChatMessage(String user, String message) {
6262
this.message = message;
6363
}
6464

65+
public String getUser() {
66+
return user;
67+
}
68+
69+
public String getMessage() {
70+
return message;
71+
}
72+
6573
@Override
6674
public void init(EndpointConfig config) {
6775
// Nothing to do.

actionbazaar/src/main/java/com/actionbazaar/interfaces/socket/ChatServer.java

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -72,14 +72,16 @@ public void onMessage(ChatMessage message, Session session) {
7272
new Object[]{message, session});
7373

7474
for (Session peer : session.getOpenSessions()) {
75-
try {
76-
logger.log(Level.INFO, "Broadcasting message {0} to peer {1}",
77-
new Object[]{message, peer});
75+
if (!peer.equals(session)) {
76+
try {
77+
logger.log(Level.INFO, "Broadcasting message {0} to peer {1}",
78+
new Object[]{message, peer});
7879

79-
peer.getBasicRemote().sendObject(message);
80-
} catch (IOException | EncodeException ex) {
81-
logger.log(Level.SEVERE, "Error sending message", ex);
80+
peer.getBasicRemote().sendObject(message);
81+
} catch (IOException | EncodeException ex) {
82+
logger.log(Level.SEVERE, "Error sending message", ex);
83+
}
8284
}
8385
}
8486
}
85-
}
87+
}

actionbazaar/src/test/java/com/actionbazaar/interfaces/socket/ChatServerTest.java

Lines changed: 60 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,25 @@
33
import java.io.IOException;
44
import java.net.URI;
55
import java.net.URISyntaxException;
6+
import java.util.Arrays;
67
import java.util.logging.Level;
78
import java.util.logging.Logger;
89
import javax.websocket.ClientEndpointConfig;
910
import javax.websocket.ContainerProvider;
11+
import javax.websocket.Decoder;
1012
import javax.websocket.DeploymentException;
1113
import javax.websocket.EncodeException;
14+
import javax.websocket.Encoder;
1215
import javax.websocket.Endpoint;
1316
import javax.websocket.EndpointConfig;
17+
import javax.websocket.MessageHandler;
1418
import javax.websocket.Session;
1519
import javax.websocket.WebSocketContainer;
1620
import org.jboss.arquillian.container.test.api.Deployment;
1721
import org.jboss.arquillian.junit.Arquillian;
1822
import org.jboss.shrinkwrap.api.ShrinkWrap;
1923
import org.jboss.shrinkwrap.api.spec.WebArchive;
20-
24+
import static org.junit.Assert.assertEquals;
2125
import org.junit.Test;
2226
import org.junit.runner.RunWith;
2327

@@ -27,7 +31,10 @@ public class ChatServerTest {
2731
private static final Logger logger
2832
= Logger.getLogger(ChatServerTest.class.getName());
2933

30-
@Deployment
34+
private static ChatMessage testMessage;
35+
private static ChatMessage testReply;
36+
37+
@Deployment(testable = false)
3138
public static WebArchive createDeployment() {
3239
return ShrinkWrap
3340
.create(WebArchive.class, "actionbazaar-test.war")
@@ -38,29 +45,62 @@ public static WebArchive createDeployment() {
3845
@Test
3946
public void testChat() {
4047
try {
48+
URI uri = new URI("ws://localhost:7001/actionbazaar-test/chat");
49+
4150
WebSocketContainer container = ContainerProvider.getWebSocketContainer();
42-
ClientEndpointConfig clientConfiguration
43-
= ClientEndpointConfig.Builder.create().build();
4451

45-
container.connectToServer(ChatClient.class, clientConfiguration,
46-
new URI("ws://localhost:7001/actionbazaar-test/chat"));
52+
ClientEndpointConfig configuration = ClientEndpointConfig.Builder.create()
53+
.decoders(Arrays.<Class<? extends Decoder>>asList(ChatMessage.class))
54+
.encoders(Arrays.<Class<? extends Encoder>>asList(ChatMessage.class))
55+
.build();
4756

48-
// assertEquals(5, response.getJsonArray("alerts").size());
49-
} catch (URISyntaxException | DeploymentException | IOException ex) {
50-
logger.log(Level.SEVERE, "Error connecting to server", ex);
51-
}
52-
}
57+
Endpoint client1 = new Endpoint() {
58+
@Override
59+
public void onOpen(Session session, EndpointConfig config) {
60+
try {
61+
session.addMessageHandler(new MessageHandler.Whole<ChatMessage>() {
62+
@Override
63+
public void onMessage(ChatMessage message) {
64+
testReply = message;
65+
}
66+
});
67+
session.getBasicRemote().sendObject(
68+
new ChatMessage("rrahman", "Test message"));
69+
} catch (IOException | EncodeException e) {
70+
logger.log(Level.SEVERE, "Error in chat client", e);
71+
}
72+
}
73+
};
74+
75+
Endpoint client2 = new Endpoint() {
76+
@Override
77+
public void onOpen(final Session session, final EndpointConfig config) {
78+
session.addMessageHandler(new MessageHandler.Whole<ChatMessage>() {
79+
@Override
80+
public void onMessage(ChatMessage message) {
81+
try {
82+
testMessage = message;
83+
session.getBasicRemote().sendObject(new ChatMessage("nrahman", "Test reply"));
84+
} catch (IOException | EncodeException ex) {
85+
logger.log(Level.SEVERE, "Error responding to message", ex);
86+
}
87+
}
88+
});
89+
}
90+
};
5391

54-
private class ChatClient extends Endpoint {
92+
container.connectToServer(client2, configuration, uri);
93+
container.connectToServer(client1, configuration, uri);
5594

56-
@Override
57-
public void onOpen(Session session, EndpointConfig config) {
58-
try {
59-
ChatMessage message = new ChatMessage("rrahman", "Test Message");
60-
session.getBasicRemote().sendObject(message);
61-
} catch (IOException | EncodeException ex) {
62-
logger.log(Level.WARNING, "Error sending message", ex);
63-
}
95+
// Wait for conversation to finish.
96+
Thread.sleep(2000);
97+
98+
assertEquals("rrahman", testMessage.getUser());
99+
assertEquals("Test message", testMessage.getMessage());
100+
assertEquals("nrahman", testReply.getUser());
101+
assertEquals("Test reply", testReply.getMessage());
102+
} catch (URISyntaxException | DeploymentException | IOException | InterruptedException ex) {
103+
logger.log(Level.SEVERE, "Error connecting to server", ex);
64104
}
65105
}
66106
}

0 commit comments

Comments
 (0)