package com.koushikdutta.async.test; import java.util.concurrent.Semaphore; import java.util.concurrent.TimeUnit; import junit.framework.TestCase; import com.koushikdutta.async.AsyncServer; import com.koushikdutta.async.callback.CompletedCallback; import com.koushikdutta.async.http.AsyncHttpClient; import com.koushikdutta.async.http.AsyncHttpClient.WebSocketConnectCallback; import com.koushikdutta.async.http.WebSocket; import com.koushikdutta.async.http.WebSocket.StringCallback; import com.koushikdutta.async.http.libcore.RequestHeaders; import com.koushikdutta.async.http.server.AsyncHttpServer; import com.koushikdutta.async.http.server.AsyncHttpServer.WebSocketRequestCallback; public class WebSocketTests extends TestCase { AsyncHttpServer httpServer; AsyncServer server; @Override protected void setUp() throws Exception { super.setUp(); server = new AsyncServer(); server.setAutostart(true); httpServer = new AsyncHttpServer(); httpServer.setErrorCallback(new CompletedCallback() { @Override public void onCompleted(Exception ex) { fail(); } }); httpServer.listen(server, 5000); httpServer.websocket("/ws", new WebSocketRequestCallback() { @Override public void onConnected(final WebSocket webSocket, RequestHeaders headers) { webSocket.setStringCallback(new StringCallback() { @Override public void onStringAvailable(String s) { webSocket.send(s); } }); } }); } private static final long TIMEOUT = 10000L; public void testWebSocket() throws Exception { final Semaphore semaphore = new Semaphore(0); AsyncHttpClient.getDefaultInstance().websocket("http://localhost:5000/ws", null, new WebSocketConnectCallback() { @Override public void onCompleted(Exception ex, WebSocket webSocket) { webSocket.send("hello"); webSocket.setStringCallback(new StringCallback() { @Override public void onStringAvailable(String s) { assertEquals(s, "hello"); semaphore.release(); } }); } }); assertTrue(semaphore.tryAcquire(TIMEOUT, TimeUnit.MILLISECONDS)); } @Override protected void tearDown() throws Exception { super.tearDown(); httpServer.stop(); server.stop(); } }