/*
* Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*/
package org.opendaylight.yangtools.websocket;
import com.google.common.util.concurrent.SettableFuture;
import io.netty.handler.codec.http.websocketx.CloseWebSocketFrame;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.opendaylight.yangtools.websocket.client.WebSocketIClient;
import org.opendaylight.yangtools.websocket.server.WebSocketServer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Deprecated
public class WebSocketClientTest {
private static final Logger logger = LoggerFactory.getLogger(WebSocketClientTest.class.toString());
private static final String MESSAGE = "Take me to your leader!";
private Thread webSocketServerThread;
/**
* Tracks if the message from the server has been received
*/
private final SettableFuture<Boolean> messageReceived = SettableFuture.create();
/**
* Tracks the port on which the server is listening
*/
private int port = 0;
@Before
public void startWebSocketServer(){
try {
WebSocketServer webSocketServer = new WebSocketServer(0);
webSocketServerThread = new Thread(webSocketServer);
webSocketServerThread.setDaemon(false);
webSocketServerThread.start();
port = webSocketServer.getPort().get();
} catch (Exception e) {
logger.trace("Error starting websocket server");
}
}
@Test
public void connectAndSendData(){
URI uri = null;
try {
uri = new URI(String.format("ws://localhost:%d/websocket", port));
logger.info("CLIENT: " + uri);
ClientMessageCallback messageCallback = new ClientMessageCallback();
WebSocketIClient wsClient = new WebSocketIClient(uri,messageCallback);
try {
wsClient.connect();
wsClient.writeAndFlush(MESSAGE);
wsClient.writeAndFlush(new CloseWebSocketFrame());
/*
* Wait for up to 5 seconds for the message to be received. If
* after that time, the message has not been received then
* consider this a failed test.
*/
messageReceived.get(5, TimeUnit.SECONDS);
webSocketServerThread.interrupt();
} catch (InterruptedException e) {
logger.info("WebSocket client couldn't connect to : " + uri);
Assert.fail("WebSocker client could not connect to : " + uri);
} catch (ExecutionException | TimeoutException toe) {
logger.info("Message not received");
Assert.fail(toe.toString());
}
} catch (URISyntaxException e) {
logger.info("There is an error in URL sytnax {}",e);
Assert.fail("There is an error in URL sytnax");
}
}
private class ClientMessageCallback implements org.opendaylight.yangtools.websocket.client.callback.ClientMessageCallback {
@Override
public void onMessageReceived(final Object message) {
logger.info("received message {}",message);
messageReceived.set(true);
}
}
}