2 * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
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
8 package org.opendaylight.yangtools.websocket;
11 import java.net.URISyntaxException;
13 import org.junit.Before;
14 import org.junit.Test;
15 import org.junit.Assert;
17 import org.slf4j.Logger;
18 import org.slf4j.LoggerFactory;
20 import java.util.concurrent.ExecutionException;
21 import java.util.concurrent.TimeUnit;
22 import java.util.concurrent.TimeoutException;
24 import org.opendaylight.yangtools.websocket.client.WebSocketIClient;
25 import org.opendaylight.yangtools.websocket.server.WebSocketServer;
27 import io.netty.handler.codec.http.websocketx.CloseWebSocketFrame;
29 import com.google.common.util.concurrent.SettableFuture;
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;
37 * Tracks if the message from the server has been received
39 private SettableFuture<Boolean> messageReceived = SettableFuture.<Boolean>create();
42 * Tracks the port on which the server is listening
47 public void startWebSocketServer(){
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");
60 public void connectAndSendData(){
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);
70 wsClient.writeAndFlush(MESSAGE);
71 wsClient.writeAndFlush(new CloseWebSocketFrame());
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.
78 messageReceived.get(5, TimeUnit.SECONDS);
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());
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");
94 private class ClientMessageCallback implements org.opendaylight.yangtools.websocket.client.callback.ClientMessageCallback {
96 public void onMessageReceived(Object message) {
97 logger.info("received message {}",message);
98 messageReceived.set(true);