/* Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved See License.txt in the project root for license information. */ package microsoft.aspnet.signalr.client.tests.realtransport; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.util.ArrayList; import java.util.List; import java.util.UUID; import java.util.concurrent.Semaphore; import microsoft.aspnet.signalr.client.Connection; import microsoft.aspnet.signalr.client.ConnectionState; import microsoft.aspnet.signalr.client.MessageReceivedHandler; import microsoft.aspnet.signalr.client.SignalRFuture; import microsoft.aspnet.signalr.client.StateChangedCallback; import microsoft.aspnet.signalr.client.tests.util.MultiResult; import microsoft.aspnet.signalr.client.tests.util.Utils; import org.junit.Test; import com.google.gson.JsonElement; import com.google.gson.JsonPrimitive; public class ConnectionTests { @Test public void testStart() throws Exception { Connection connection = new Connection(TestData.SERVER_URL, TestData.CONNECTION_QUERYSTRING, TestData.getLogger()); final List<ConnectionState> newStates = new ArrayList<ConnectionState>(); connection.stateChanged(new StateChangedCallback() { @Override public void stateChanged(ConnectionState oldState, ConnectionState newState) { newStates.add(newState); } }); SignalRFuture<Void> startFuture = connection.start(); startFuture.get(); assertEquals(2, newStates.size()); assertEquals(ConnectionState.Connecting, newStates.get(0)); assertEquals(ConnectionState.Connected, newStates.get(1)); assertEquals(ConnectionState.Connected, connection.getState()); assertTrue(startFuture.isDone()); connection.disconnect(); } @Test public void testMessageReceived() throws Exception { Connection connection = new Connection(TestData.SERVER_URL, TestData.CONNECTION_QUERYSTRING, TestData.getLogger()); final MultiResult result = new MultiResult(); Utils.addResultHandlersToConnection(connection, result, true); connection.start().get(); final Semaphore semaphore = new Semaphore(0); connection.received(new MessageReceivedHandler() { @Override public void onMessageReceived(JsonElement json) { result.listResult.add(json); semaphore.release(); } }); TestData.triggerTestMessage(); semaphore.acquire(); assertEquals(1, result.listResult.size()); JsonPrimitive json = (JsonPrimitive) result.listResult.get(0); String message = json.getAsString(); assertEquals("test message", message); connection.disconnect(); } @Test public void testSendMessage() throws Exception { Connection connection = new Connection(TestData.SERVER_URL, TestData.CONNECTION_QUERYSTRING, TestData.getLogger()); final MultiResult result = new MultiResult(); Utils.addResultHandlersToConnection(connection, result, true); connection.start().get(); String dataToSend = UUID.randomUUID().toString(); connection.send(dataToSend).get(); String lastSentData = TestData.getLastSentData(); assertEquals(dataToSend, lastSentData); connection.disconnect(); } @Test public void testStop() throws Exception { Connection connection = new Connection(TestData.SERVER_URL, TestData.CONNECTION_QUERYSTRING, TestData.getLogger()); connection.start().get(); final MultiResult result = new MultiResult(); assertEquals(ConnectionState.Connected, connection.getState()); final Semaphore semaphore = new Semaphore(0); connection.closed(new Runnable() { @Override public void run() { result.intResult++; semaphore.release(); } }); connection.stop(); semaphore.acquire(); assertEquals(ConnectionState.Disconnected, connection.getState()); assertEquals(1, result.intResult); } }