package org.javaee7.websocket.endpoint;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import javax.websocket.ContainerProvider;
import javax.websocket.DeploymentException;
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 org.junit.Test;
import org.junit.runner.RunWith;
/**
* @author Arun Gupta
*/
@RunWith(Arquillian.class)
public class MyEndpointTest {
final String TEXT = "Hello World!";
@ArquillianResource
URI base;
@Deployment(testable = false)
public static WebArchive createDeployment() {
return ShrinkWrap.create(WebArchive.class)
.addClasses(MyEndpointText.class,
MyEndpointTextClient.class,
MyEndpointByteArray.class,
MyEndpointByteArrayClient.class,
MyEndpointByteBuffer.class,
MyEndpointByteBufferClient.class,
MyEndpointInputStream.class,
MyEndpointInputStreamClient.class);
}
@Test
public void testTextEndpoint() throws URISyntaxException, DeploymentException, IOException, InterruptedException {
MyEndpointTextClient.latch = new CountDownLatch(1);
Session session = connectToServer(MyEndpointTextClient.class, "text");
assertNotNull(session);
assertTrue(MyEndpointTextClient.latch.await(2, TimeUnit.SECONDS));
assertEquals(TEXT, MyEndpointTextClient.response);
}
@Test
public void testEndpointByteBuffer() throws URISyntaxException, DeploymentException, IOException, InterruptedException {
MyEndpointByteBufferClient.latch = new CountDownLatch(1);
Session session = connectToServer(MyEndpointByteBufferClient.class, "bytebuffer");
assertNotNull(session);
assertTrue(MyEndpointByteBufferClient.latch.await(2, TimeUnit.SECONDS));
assertArrayEquals(TEXT.getBytes(), MyEndpointByteBufferClient.response);
}
@Test
public void testEndpointByteArray() throws DeploymentException, IOException, URISyntaxException, InterruptedException {
MyEndpointByteArrayClient.latch = new CountDownLatch(1);
Session session = connectToServer(MyEndpointByteArrayClient.class, "bytearray");
assertNotNull(session);
assertTrue(MyEndpointByteArrayClient.latch.await(2, TimeUnit.SECONDS));
assertNotNull(MyEndpointByteArrayClient.response);
assertArrayEquals(TEXT.getBytes(), MyEndpointByteArrayClient.response);
}
@Test
public void testEndpointInputStream() throws DeploymentException, IOException, URISyntaxException, InterruptedException {
MyEndpointInputStreamClient.latch = new CountDownLatch(1);
Session session = connectToServer(MyEndpointInputStreamClient.class, "inputstream");
assertNotNull(session);
assertTrue(MyEndpointInputStreamClient.latch.await(2, TimeUnit.SECONDS));
assertNotNull(MyEndpointInputStreamClient.response);
assertArrayEquals(TEXT.getBytes(), MyEndpointInputStreamClient.response);
}
public Session connectToServer(Class<?> endpoint, String uriPart) throws DeploymentException, IOException, URISyntaxException {
WebSocketContainer container = ContainerProvider.getWebSocketContainer();
URI uri = new URI("ws://"
+ base.getHost()
+ ":"
+ base.getPort()
+ base.getPath()
+ uriPart);
System.out.println("Connecting to: " + uri);
return container.connectToServer(endpoint, uri);
}
}