Drop unneeded generic type specifiers
[yangtools.git] / websocket / websocket-client / src / test / java / org / opendaylight / yangtools / websocket / WebSocketClientTest.java
1 /*
2  * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.yangtools.websocket;
9
10 import java.net.URI;
11 import java.net.URISyntaxException;
12
13 import org.junit.Before;
14 import org.junit.Test;
15 import org.junit.Assert;
16
17 import org.slf4j.Logger;
18 import org.slf4j.LoggerFactory;
19
20 import java.util.concurrent.ExecutionException;
21 import java.util.concurrent.TimeUnit;
22 import java.util.concurrent.TimeoutException;
23
24 import org.opendaylight.yangtools.websocket.client.WebSocketIClient;
25 import org.opendaylight.yangtools.websocket.server.WebSocketServer;
26
27 import io.netty.handler.codec.http.websocketx.CloseWebSocketFrame;
28
29 import com.google.common.util.concurrent.SettableFuture;
30
31 public class WebSocketClientTest {
32     private static final Logger logger = LoggerFactory.getLogger(WebSocketClientTest.class.toString());
33     private static final String MESSAGE = "Take me to your leader!";
34     private Thread webSocketServerThread;
35
36     /**
37      * Tracks if the message from the server has been received
38      */
39     private SettableFuture<Boolean> messageReceived = SettableFuture.create();
40
41     /**
42      * Tracks the port on which the server is listening
43      */
44     private int port = 0;
45
46     @Before
47     public void startWebSocketServer(){
48         try {
49             WebSocketServer webSocketServer = new WebSocketServer(0);
50             webSocketServerThread = new Thread(webSocketServer);
51             webSocketServerThread.setDaemon(false);
52             webSocketServerThread.start();
53             port = webSocketServer.getPort().get();
54         } catch (Exception e) {
55             logger.trace("Error starting websocket server");
56         }
57     }
58
59     @Test
60     public void connectAndSendData(){
61
62         URI uri = null;
63         try {
64             uri = new URI(String.format("ws://localhost:%d/websocket", port));
65             logger.info("CLIENT: " + uri);
66             ClientMessageCallback messageCallback = new ClientMessageCallback();
67             WebSocketIClient wsClient = new WebSocketIClient(uri,messageCallback);
68             try {
69                 wsClient.connect();
70                 wsClient.writeAndFlush(MESSAGE);
71                 wsClient.writeAndFlush(new CloseWebSocketFrame());
72
73                 /*
74                  * Wait for up to 5 seconds for the message to be received. If
75                  * after that time, the message has not been received then
76                  * consider this a failed test.
77                  */
78                 messageReceived.get(5, TimeUnit.SECONDS);
79
80                 webSocketServerThread.interrupt();
81             } catch (InterruptedException e) {
82                 logger.info("WebSocket client couldn't connect to : " + uri);
83                 Assert.fail("WebSocker client could not connect to : " + uri);
84             } catch (ExecutionException | TimeoutException toe) {
85                 logger.info("Message not received");
86                 Assert.fail(toe.toString());
87             }
88         } catch (URISyntaxException e) {
89             logger.info("There is an error in URL sytnax {}",e);
90             Assert.fail("There is an error in URL sytnax");
91         }
92     }
93
94     private class ClientMessageCallback implements org.opendaylight.yangtools.websocket.client.callback.ClientMessageCallback {
95         @Override
96         public void onMessageReceived(Object message) {
97             logger.info("received message {}",message);
98             messageReceived.set(true);
99         }
100     }
101 }