Updated Branches:
  refs/heads/master 776cb63e5 -> 5ae1222e2

WICKET-4832 Websocket broadcast support

Add WebSocketTester support for server side broadcasted messages


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/5ae1222e
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/5ae1222e
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/5ae1222e

Branch: refs/heads/master
Commit: 5ae1222e23621b7e69af4fbe7ca435d9c8f44290
Parents: 776cb63
Author: Martin Tzvetanov Grigorov <[email protected]>
Authored: Thu Dec 6 16:13:41 2012 +0100
Committer: Martin Tzvetanov Grigorov <[email protected]>
Committed: Thu Dec 6 16:13:41 2012 +0100

----------------------------------------------------------------------
 .../protocol/ws/api/WebSocketPushBroadcaster.java  |   10 ++-
 .../ws/util/tester/TestWebSocketProcessor.java     |   20 ++---
 .../protocol/ws/util/tester/WebSocketTester.java   |   23 +----
 .../protocol/ws/util/tester/WebSocketTestPage.java |    5 +
 .../ws/util/tester/WebSocketTesterTest.java        |   68 ++++++++++++++-
 5 files changed, 87 insertions(+), 39 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/5ae1222e/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/WebSocketPushBroadcaster.java
----------------------------------------------------------------------
diff --git 
a/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/WebSocketPushBroadcaster.java
 
b/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/WebSocketPushBroadcaster.java
index 1d3d9a9..7a016f0 100644
--- 
a/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/WebSocketPushBroadcaster.java
+++ 
b/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/WebSocketPushBroadcaster.java
@@ -45,7 +45,7 @@ public class WebSocketPushBroadcaster
        }
 
        /**
-        * Processes the given message in the page and session identified by 
the given websocket connection.
+        * Processes the given message in the page and session identified by 
the given Web Socket connection.
         * The message is sent as an event to the Page and components of the 
session allowing the components
         * to be updated.
         *
@@ -66,13 +66,15 @@ public class WebSocketPushBroadcaster
                Args.notNull(connection, "connection");
                Args.notNull(message, "message");
 
-               IWebSocketConnection wsConnection = 
registry.getConnection(connection.getApplication(),
-                       connection.getSessionId(), connection.getPageId());
+               Application application = connection.getApplication();
+               String sessionId = connection.getSessionId();
+               Integer pageId = connection.getPageId();
+               IWebSocketConnection wsConnection = 
registry.getConnection(application, sessionId, pageId);
                if (wsConnection == null)
                {
                        return;
                }
-               process(connection.getApplication(), 
singletonList(wsConnection), message);
+               process(application, singletonList(wsConnection), message);
        }
 
        /**

http://git-wip-us.apache.org/repos/asf/wicket/blob/5ae1222e/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/util/tester/TestWebSocketProcessor.java
----------------------------------------------------------------------
diff --git 
a/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/util/tester/TestWebSocketProcessor.java
 
b/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/util/tester/TestWebSocketProcessor.java
index b9e0b5c..7afe82f 100644
--- 
a/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/util/tester/TestWebSocketProcessor.java
+++ 
b/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/util/tester/TestWebSocketProcessor.java
@@ -22,10 +22,10 @@ import javax.servlet.http.HttpSession;
 import org.apache.wicket.Application;
 import org.apache.wicket.Page;
 import org.apache.wicket.protocol.http.mock.MockHttpServletRequest;
-import org.apache.wicket.protocol.http.mock.MockHttpSession;
 import org.apache.wicket.protocol.ws.api.AbstractWebSocketProcessor;
 import org.apache.wicket.protocol.ws.api.message.IWebSocketPushMessage;
 import org.apache.wicket.util.lang.Args;
+import org.apache.wicket.util.tester.WicketTester;
 
 /**
  * An {@link org.apache.wicket.protocol.ws.api.IWebSocketProcessor} used by 
{@link WebSocketTester}
@@ -40,9 +40,9 @@ abstract class TestWebSocketProcessor extends 
AbstractWebSocketProcessor
         * @param page
         *      the page that may have registered {@link 
org.apache.wicket.protocol.ws.api.WebSocketBehavior}
         */
-       public TestWebSocketProcessor(final Page page)
+       public TestWebSocketProcessor(final WicketTester wicketTester, final 
Page page)
        {
-               super(createRequest(page), page.getApplication());
+               super(createRequest(wicketTester, page), page.getApplication());
        }
 
        /**
@@ -52,11 +52,11 @@ abstract class TestWebSocketProcessor extends 
AbstractWebSocketProcessor
         *      the page that may have registered {@link 
org.apache.wicket.protocol.ws.api.WebSocketBehavior}
         * @return a mock http request
         */
-       private static HttpServletRequest createRequest(final Page page)
+       private static HttpServletRequest createRequest(final WicketTester 
wicketTester, final Page page)
        {
                Args.notNull(page, "page");
                Application application = page.getApplication();
-               HttpSession httpSession = new MockHttpSession(null);
+               HttpSession httpSession = wicketTester.getHttpSession();
                MockHttpServletRequest request = new 
MockHttpServletRequest(application, httpSession, null);
                request.addParameter("pageId", page.getId());
                return request;
@@ -88,20 +88,12 @@ abstract class TestWebSocketProcessor extends 
AbstractWebSocketProcessor
                        @Override
                        public void sendMessage(IWebSocketPushMessage message)
                        {
-                               
TestWebSocketProcessor.this.onPushMessage(message);
+                               
TestWebSocketProcessor.this.broadcastMessage(message);
                        }
                });
        }
 
        /**
-        * A callback method that is being called when a test message is 
broadcasted by WebSocketPushBroadcaster
-        *
-        * @param message
-        *      the message sent to the Page and all its children
-        */
-       protected abstract void onPushMessage(IWebSocketPushMessage message);
-
-       /**
         * A callback method that is being called when a test message is 
written to the TestWebSocketConnection
         *
         * @param message

http://git-wip-us.apache.org/repos/asf/wicket/blob/5ae1222e/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/util/tester/WebSocketTester.java
----------------------------------------------------------------------
diff --git 
a/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/util/tester/WebSocketTester.java
 
b/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/util/tester/WebSocketTester.java
index e7be351..2cd6eeb 100644
--- 
a/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/util/tester/WebSocketTester.java
+++ 
b/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/util/tester/WebSocketTester.java
@@ -18,8 +18,8 @@ package org.apache.wicket.protocol.ws.util.tester;
 
 import org.apache.wicket.Page;
 import org.apache.wicket.protocol.ws.api.IWebSocketProcessor;
-import org.apache.wicket.protocol.ws.api.message.IWebSocketPushMessage;
 import org.apache.wicket.util.lang.Args;
+import org.apache.wicket.util.tester.WicketTester;
 
 /**
  * A helper class to test WebSocket related operations.
@@ -38,17 +38,12 @@ public class WebSocketTester
         * @param page
         *      the page that may have registered {@link 
org.apache.wicket.protocol.ws.api.WebSocketBehavior}
         */
-       public WebSocketTester(final Page page)
+       public WebSocketTester(final WicketTester wicketTester, final Page page)
        {
+               Args.notNull(wicketTester, "wicketTester");
                Args.notNull(page, "page");
 
-               socketProcessor = new TestWebSocketProcessor(page) {
-
-                       @Override
-                       protected void onPushMessage(IWebSocketPushMessage 
message)
-                       {
-                               WebSocketTester.this.onPushMessage(message);
-                       }
+               socketProcessor = new TestWebSocketProcessor(wicketTester, 
page) {
 
                        @Override
                        protected void onOutMessage(String message)
@@ -119,14 +114,4 @@ public class WebSocketTester
        protected void onOutMessage(byte[] message, int offset, int length)
        {
        }
-
-       /**
-        * A callback method which may be overritten to receive messages pushed 
by WebSocketPushBroadcaster
-        *
-        * @param message
-        *      the pushed message to the page
-        */
-       public void onPushMessage(IWebSocketPushMessage message)
-       {
-       }
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/5ae1222e/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/test/java/org/apache/wicket/protocol/ws/util/tester/WebSocketTestPage.java
----------------------------------------------------------------------
diff --git 
a/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/test/java/org/apache/wicket/protocol/ws/util/tester/WebSocketTestPage.java
 
b/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/test/java/org/apache/wicket/protocol/ws/util/tester/WebSocketTestPage.java
index 8fe55e7..8dacf9f 100644
--- 
a/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/test/java/org/apache/wicket/protocol/ws/util/tester/WebSocketTestPage.java
+++ 
b/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/test/java/org/apache/wicket/protocol/ws/util/tester/WebSocketTestPage.java
@@ -35,6 +35,11 @@ import org.junit.Assert;
  */
 class WebSocketTestPage extends WebPage implements 
IMarkupResourceStreamProvider
 {
+       WebSocketTestPage()
+       {
+               add(new WebSocketBehavior() {});
+       }
+
        WebSocketTestPage(final String expectedMessage)
        {
                add(new WebSocketBehavior()

http://git-wip-us.apache.org/repos/asf/wicket/blob/5ae1222e/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/test/java/org/apache/wicket/protocol/ws/util/tester/WebSocketTesterTest.java
----------------------------------------------------------------------
diff --git 
a/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/test/java/org/apache/wicket/protocol/ws/util/tester/WebSocketTesterTest.java
 
b/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/test/java/org/apache/wicket/protocol/ws/util/tester/WebSocketTesterTest.java
index 08af87e..0313db4 100644
--- 
a/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/test/java/org/apache/wicket/protocol/ws/util/tester/WebSocketTesterTest.java
+++ 
b/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/test/java/org/apache/wicket/protocol/ws/util/tester/WebSocketTesterTest.java
@@ -17,7 +17,14 @@
 package org.apache.wicket.protocol.ws.util.tester;
 
 import java.io.UnsupportedEncodingException;
+import java.util.concurrent.atomic.AtomicBoolean;
 
+import org.apache.wicket.event.IEvent;
+import org.apache.wicket.protocol.ws.IWebSocketSettings;
+import org.apache.wicket.protocol.ws.api.WebSocketPushBroadcaster;
+import org.apache.wicket.protocol.ws.api.event.WebSocketPushPayload;
+import org.apache.wicket.protocol.ws.api.message.ConnectedMessage;
+import org.apache.wicket.protocol.ws.api.message.IWebSocketPushMessage;
 import org.apache.wicket.util.string.Strings;
 import org.apache.wicket.util.tester.WicketTester;
 import org.junit.After;
@@ -59,7 +66,7 @@ public class WebSocketTesterTest extends Assert
                WebSocketTestPage page = new WebSocketTestPage(expectedMessage);
                tester.startPage(page);
 
-               WebSocketTester webSocketTester = new WebSocketTester(page) {
+               WebSocketTester webSocketTester = new WebSocketTester(tester, 
page) {
                        @Override
                        protected void onOutMessage(String message)
                        {
@@ -86,7 +93,7 @@ public class WebSocketTesterTest extends Assert
                WebSocketTestPage page = new WebSocketTestPage(expectedMessage, 
offset, length);
                tester.startPage(page);
 
-               WebSocketTester webSocketTester = new WebSocketTester(page) {
+               WebSocketTester webSocketTester = new WebSocketTester(tester, 
page) {
                        @Override
                        protected void onOutMessage(byte[] message, int off, 
int len)
                        {
@@ -109,4 +116,61 @@ public class WebSocketTesterTest extends Assert
                webSocketTester.sendMessage(expectedMessage, offset, length);
                webSocketTester.destroy();
        }
+
+       @Test
+       public void serverSideBroadcast()
+       {
+               final String message = "Broadcasted Message";
+
+               final AtomicBoolean messageReceived = new AtomicBoolean(false);
+
+               WebSocketTestPage page = new WebSocketTestPage()
+               {
+                       @Override
+                       public void onEvent(IEvent<?> event)
+                       {
+                               super.onEvent(event);
+
+                               if (event.getPayload() instanceof 
WebSocketPushPayload)
+                               {
+                                       WebSocketPushPayload payload = 
(WebSocketPushPayload) event.getPayload();
+
+                                       if (payload.getMessage() instanceof 
BroadcastMessage)
+                                       {
+                                               BroadcastMessage 
broadcastMessage = (BroadcastMessage) payload.getMessage();
+                                               if 
(message.equals(broadcastMessage.getText()))
+                                               {
+                                                       
messageReceived.set(true);
+                                               }
+                                       }
+                               }
+                       }
+               };
+               tester.startPage(page);
+               tester.getSession().bind();
+
+               new WebSocketTester(tester, page);
+               IWebSocketSettings webSocketSettings = 
IWebSocketSettings.HOLDER.get(tester.getApplication());
+               WebSocketPushBroadcaster broadcaster = new 
WebSocketPushBroadcaster(webSocketSettings.getConnectionRegistry());
+               ConnectedMessage wsMessage = new 
ConnectedMessage(tester.getApplication(),
+                               tester.getHttpSession().getId(), 
page.getPageId());
+               broadcaster.broadcast(wsMessage, new BroadcastMessage(message));
+
+               assertEquals(true, messageReceived.get());
+       }
+
+       private static class BroadcastMessage implements IWebSocketPushMessage
+       {
+               private final String message;
+
+               private BroadcastMessage(String message)
+               {
+                       this.message = message;
+               }
+
+               public String getText()
+               {
+                       return message;
+               }
+       }
 }

Reply via email to