diff options
Diffstat (limited to 'jetty-cdi/test-cdi-it/src/test/java/org/eclipse/jetty/tests/ws/SessionInfoIT.java')
-rw-r--r-- | jetty-cdi/test-cdi-it/src/test/java/org/eclipse/jetty/tests/ws/SessionInfoIT.java | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/jetty-cdi/test-cdi-it/src/test/java/org/eclipse/jetty/tests/ws/SessionInfoIT.java b/jetty-cdi/test-cdi-it/src/test/java/org/eclipse/jetty/tests/ws/SessionInfoIT.java new file mode 100644 index 0000000000..719dcd4df5 --- /dev/null +++ b/jetty-cdi/test-cdi-it/src/test/java/org/eclipse/jetty/tests/ws/SessionInfoIT.java @@ -0,0 +1,106 @@ +// +// ======================================================================== +// Copyright (c) 1995-2015 Mort Bay Consulting Pty. Ltd. +// ------------------------------------------------------------------------ +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Eclipse Public License v1.0 +// and Apache License v2.0 which accompanies this distribution. +// +// The Eclipse Public License is available at +// http://www.eclipse.org/legal/epl-v10.html +// +// The Apache License v2.0 is available at +// http://www.opensource.org/licenses/apache2.0.php +// +// You may elect to redistribute this code under either of these licenses. +// ======================================================================== +// + +package org.eclipse.jetty.tests.ws; + +import static org.hamcrest.Matchers.*; +import static org.junit.Assert.*; + +import java.net.URI; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; + +import javax.websocket.ClientEndpoint; +import javax.websocket.CloseReason; +import javax.websocket.ContainerProvider; +import javax.websocket.OnClose; +import javax.websocket.OnMessage; +import javax.websocket.OnOpen; +import javax.websocket.Session; +import javax.websocket.WebSocketContainer; + +import org.eclipse.jetty.toolchain.test.EventQueue; +import org.eclipse.jetty.util.log.Log; +import org.eclipse.jetty.util.log.Logger; +import org.junit.Test; + +public class SessionInfoIT +{ + @ClientEndpoint + public static class ClientSessionInfoSocket + { + private static final Logger LOG = Log.getLogger(SessionInfoIT.ClientSessionInfoSocket.class); + + public CountDownLatch openLatch = new CountDownLatch(1); + public CountDownLatch closeLatch = new CountDownLatch(1); + public Session session; + public EventQueue<String> messages = new EventQueue<>(); + public CloseReason closeReason; + + @OnOpen + public void onOpen(Session session) + { + LOG.info("onOpen(): {}", session); + this.session = session; + this.openLatch.countDown(); + } + + @OnClose + public void onClose(CloseReason close) + { + LOG.info("onClose(): {}", close); + this.session = null; + this.closeReason = close; + this.closeLatch.countDown(); + } + + @OnMessage + public void onMessage(String message) + { + LOG.info("onMessage(): {}", message); + this.messages.offer(message); + } + } + + @Test + public void testSessionInfo() throws Exception + { + URI serverURI = new URI("ws://localhost:58080/cdi-webapp/"); + + WebSocketContainer container = ContainerProvider.getWebSocketContainer(); + + ClientSessionInfoSocket socket = new ClientSessionInfoSocket(); + + container.connectToServer(socket,serverURI.resolve("sessioninfo")); + + assertThat("Await open", socket.openLatch.await(1,TimeUnit.SECONDS), is(true)); + + socket.session.getBasicRemote().sendText("info"); + socket.messages.awaitEventCount(1,2,TimeUnit.SECONDS); + + System.out.printf("socket.messages.size = %s%n",socket.messages.size()); + + String msg = socket.messages.poll(); + System.out.printf("Message is [%s]%n",msg); + + assertThat("Message", msg, containsString("HttpSession = HttpSession")); + + socket.session.getBasicRemote().sendText("close"); + assertThat("Await close", socket.closeLatch.await(1,TimeUnit.SECONDS),is(true)); + } +} |