package org.jooby.ws;
import static org.junit.Assert.assertEquals;
import java.util.concurrent.atomic.AtomicInteger;
import org.jooby.test.ServerFeature;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.ning.http.client.AsyncHttpClient;
import com.ning.http.client.AsyncHttpClientConfig;
import com.ning.http.client.ws.WebSocket;
import com.ning.http.client.ws.WebSocketTextListener;
import com.ning.http.client.ws.WebSocketUpgradeHandler;
public class WebSocketTerminateFeature extends ServerFeature {
private static AtomicInteger state = new AtomicInteger(0);
{
ws("/ws", ws -> {
ws.onClose(status -> {
state.set(status.code());
});
ws.terminate();
});
}
private AsyncHttpClient client;
@Before
public void before() {
state.set(0);
client = new AsyncHttpClient(new AsyncHttpClientConfig.Builder().build());
}
@After
public void after() {
client.close();
}
@Test
public void terminate() throws Exception {
assertEquals(0, state.get());
client.prepareGet(ws("ws").toString())
.execute(new WebSocketUpgradeHandler.Builder().addWebSocketListener(
new WebSocketTextListener() {
@Override
public void onMessage(final String message) {
}
@Override
public void onOpen(final WebSocket websocket) {
}
@Override
public void onClose(final WebSocket websocket) {
}
@Override
public void onError(final Throwable t) {
}
}).build())
.get();
while (1006 != state.get()) {
Thread.sleep(300L);
}
assertEquals(1006, state.get());
}
}