package org.javaee7.websocket.endpoint.programmatic;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.nio.ByteBuffer;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import javax.websocket.ContainerProvider;
import javax.websocket.DeploymentException;
import javax.websocket.MessageHandler;
import javax.websocket.Session;
import javax.websocket.WebSocketContainer;
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.arquillian.test.api.ArquillianResource;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.spec.WebArchive;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import org.junit.Test;
import org.junit.runner.RunWith;
/**
* @author Arun Gupta
*/
@RunWith(Arquillian.class)
public class MyEndpointTest {
@ArquillianResource
URI base;
@Deployment(testable=false)
public static WebArchive createDeployment() {
return ShrinkWrap.create(WebArchive.class)
.addClasses(MyEndpoint.class,
MyEndpointConfig.class,
MyEndpointTextClient.class,
MyEndpointBinaryClient.class);
}
@Test
public void testTextEndpoint() throws URISyntaxException, DeploymentException, IOException, InterruptedException {
MyEndpointTextClient.latch = new CountDownLatch(1);
final String TEXT = "Hello World!";
Session session = connectToServer(MyEndpointTextClient.class);
assertNotNull(session);
session.addMessageHandler(new MessageHandler.Whole<String>() {
@Override
public void onMessage(String text) {
assertEquals(TEXT, text);
}
});
assertTrue(MyEndpointTextClient.latch.await(2, TimeUnit.SECONDS));
}
@Test
public void testBinaryEndpoint() throws URISyntaxException, DeploymentException, IOException, InterruptedException {
MyEndpointBinaryClient.latch = new CountDownLatch(1);
final String TEXT = "Hello World!";
Session session = connectToServer(MyEndpointBinaryClient.class);
assertNotNull(session);
session.addMessageHandler(new MessageHandler.Whole<ByteBuffer>() {
@Override
public void onMessage(ByteBuffer binary) {
assertEquals(TEXT, binary);
}
});
assertTrue(MyEndpointBinaryClient.latch.await(2, TimeUnit.SECONDS));
}
public Session connectToServer(Class<?> endpoint) throws DeploymentException, IOException, URISyntaxException {
WebSocketContainer container = ContainerProvider.getWebSocketContainer();
URI uri = new URI("ws://"
+ base.getHost()
+ ":"
+ base.getPort()
+ base.getPath()
+ "websocket");
System.out.println("Connecting to: " + uri);
return container.connectToServer(endpoint, uri);
}
}