package org.javaee7.websocket.chat;
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 static org.junit.Assert.*;
import org.junit.runner.RunWith;
/**
* @author Arun Gupta
*/
@RunWith(Arquillian.class)
public class ChatTest {
@ArquillianResource
URI base;
@Deployment(testable = false)
public static WebArchive createDeployment() {
return ShrinkWrap.create(WebArchive.class)
.addClasses(ChatEndpoint.class,
ChatClientEndpoint1.class,
ChatClientEndpoint2.class);
}
@Test
public void testConnect() throws URISyntaxException, DeploymentException, IOException, InterruptedException {
ChatClientEndpoint1.latch = new CountDownLatch(1);
final Session session1 = connectToServer(ChatClientEndpoint1.class);
assertNotNull(session1);
assertTrue(ChatClientEndpoint1.latch.await(2, TimeUnit.SECONDS));
assertEquals(ChatClientEndpoint1.TEXT, ChatClientEndpoint1.response);
ChatClientEndpoint1.latch = new CountDownLatch(1);
ChatClientEndpoint2.latch = new CountDownLatch(1);
final Session session2 = connectToServer(ChatClientEndpoint2.class);
assertNotNull(session2);
assertTrue(ChatClientEndpoint1.latch.await(2, TimeUnit.SECONDS));
assertTrue(ChatClientEndpoint2.latch.await(2, TimeUnit.SECONDS));
assertEquals(ChatClientEndpoint2.TEXT, ChatClientEndpoint1.response);
assertEquals(ChatClientEndpoint2.TEXT, ChatClientEndpoint2.response);
}
public Session connectToServer(Class<?> endpoint) throws DeploymentException, IOException, URISyntaxException {
WebSocketContainer container = ContainerProvider.getWebSocketContainer();
URI uri = new URI("ws://"
+ base.getHost()
+ ":"
+ base.getPort()
+ base.getPath()
+ "chat");
return container.connectToServer(endpoint, uri);
}
}