33import java .io .IOException ;
44import java .net .URI ;
55import java .net .URISyntaxException ;
6+ import java .util .Arrays ;
67import java .util .logging .Level ;
78import java .util .logging .Logger ;
89import javax .websocket .ClientEndpointConfig ;
910import javax .websocket .ContainerProvider ;
11+ import javax .websocket .Decoder ;
1012import javax .websocket .DeploymentException ;
1113import javax .websocket .EncodeException ;
14+ import javax .websocket .Encoder ;
1215import javax .websocket .Endpoint ;
1316import javax .websocket .EndpointConfig ;
17+ import javax .websocket .MessageHandler ;
1418import javax .websocket .Session ;
1519import javax .websocket .WebSocketContainer ;
1620import org .jboss .arquillian .container .test .api .Deployment ;
1721import org .jboss .arquillian .junit .Arquillian ;
1822import org .jboss .shrinkwrap .api .ShrinkWrap ;
1923import org .jboss .shrinkwrap .api .spec .WebArchive ;
20-
24+ import static org . junit . Assert . assertEquals ;
2125import org .junit .Test ;
2226import 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