WICKET-5452 Make Wicket-Atmosphere testable - AtmosphereTester

Make it possible to write to the underlying http response


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

Branch: refs/heads/wicket-6.x
Commit: beeb0001ac71001c7fddaf519109e73a28649457
Parents: 2524554
Author: Martin Tzvetanov Grigorov <[email protected]>
Authored: Wed Aug 13 15:04:59 2014 +0200
Committer: Martin Tzvetanov Grigorov <[email protected]>
Committed: Fri Aug 15 09:45:50 2014 +0200

----------------------------------------------------------------------
 .../atmosphere/tester/AtmosphereTester.java     |  7 ++-
 .../atmosphere/tester/TesterAsyncSupport.java   |  4 +-
 .../atmosphere/tester/TesterBroadcaster.java    | 26 +++++++++
 .../tester/TesterBroadcasterFactory.java        | 32 ++++++++++++
 .../atmosphere/tester/TesterEventBus.java       | 55 +++++++++++---------
 .../wicket/atmosphere/AtmosphereTest.java       |  8 +--
 6 files changed, 98 insertions(+), 34 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/beeb0001/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/AtmosphereTester.java
----------------------------------------------------------------------
diff --git 
a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/AtmosphereTester.java
 
b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/AtmosphereTester.java
index a0b3e27..c5b1cb3 100644
--- 
a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/AtmosphereTester.java
+++ 
b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/AtmosphereTester.java
@@ -26,7 +26,6 @@ import org.atmosphere.cpr.AtmosphereResourceImpl;
 import org.atmosphere.cpr.AtmosphereResponse;
 import org.atmosphere.cpr.HeaderConfig;
 import org.atmosphere.handler.AtmosphereHandlerAdapter;
-import org.atmosphere.util.SimpleBroadcaster;
 
 /**
  *
@@ -45,13 +44,13 @@ public class AtmosphereTester
                        @Override
                        public void onRequest()
                        {
-                               SimpleBroadcaster broadcaster = 
eventBus.getBroadcaster();
+                               TesterBroadcaster broadcaster = 
eventBus.getBroadcaster();
 
                                AtmosphereResource atmosphereResource = new 
AtmosphereResourceImpl();
                                AtmosphereRequest atmosphereRequest = 
AtmosphereRequest.wrap(wicketTester.getRequest());
                                AtmosphereResponse atmosphereResponse = 
AtmosphereResponse.wrap(wicketTester.getResponse());
                                TesterAsyncSupport asyncSupport = new 
TesterAsyncSupport();
-                               atmosphereResource.initialize(eventBus.config, 
broadcaster, atmosphereRequest, atmosphereResponse,
+                               
atmosphereResource.initialize(broadcaster.getApplicationConfig(), broadcaster, 
atmosphereRequest, atmosphereResponse,
                                                asyncSupport, new 
AtmosphereHandlerAdapter());
 
                                atmosphereResource.setBroadcaster(broadcaster);
@@ -67,7 +66,7 @@ public class AtmosphereTester
                page.add(atmosphereBehavior);
 
                wicketTester.startPage(page);
-               
wicketTester.getRequest().setHeader(HeaderConfig.X_ATMOSPHERE_TRANSPORT, 
AtmosphereResource.TRANSPORT.WEBSOCKET.name());
+               
wicketTester.getRequest().setHeader(HeaderConfig.X_ATMOSPHERE_TRANSPORT, 
AtmosphereResource.TRANSPORT.LONG_POLLING.name());
                wicketTester.executeBehavior(atmosphereBehavior);
        }
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/beeb0001/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterAsyncSupport.java
----------------------------------------------------------------------
diff --git 
a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterAsyncSupport.java
 
b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterAsyncSupport.java
index 60a3cc0..18bb39c 100644
--- 
a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterAsyncSupport.java
+++ 
b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterAsyncSupport.java
@@ -30,7 +30,7 @@ import org.atmosphere.cpr.AtmosphereResponse;
 /**
  *
  */
-public class TesterAsyncSupport<E extends AtmosphereResource> implements 
AsyncSupport<E>
+class TesterAsyncSupport<E extends AtmosphereResource> implements 
AsyncSupport<E>
 {
        @Override
        public String getContainerName()
@@ -41,7 +41,6 @@ public class TesterAsyncSupport<E extends AtmosphereResource> 
implements AsyncSu
        @Override
        public void init(ServletConfig sc) throws ServletException
        {
-
        }
 
        @Override
@@ -53,7 +52,6 @@ public class TesterAsyncSupport<E extends AtmosphereResource> 
implements AsyncSu
        @Override
        public void action(E actionEvent)
        {
-               System.err.println("TesterEventSupport#action(): " + 
actionEvent);
        }
 
        @Override

http://git-wip-us.apache.org/repos/asf/wicket/blob/beeb0001/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterBroadcaster.java
----------------------------------------------------------------------
diff --git 
a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterBroadcaster.java
 
b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterBroadcaster.java
new file mode 100644
index 0000000..ead9f3c
--- /dev/null
+++ 
b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterBroadcaster.java
@@ -0,0 +1,26 @@
+package org.apache.wicket.atmosphere.tester;
+
+import org.atmosphere.cpr.AtmosphereConfig;
+import org.atmosphere.cpr.AtmosphereResource;
+import org.atmosphere.cpr.AtmosphereResponse;
+import org.atmosphere.cpr.Entry;
+import org.atmosphere.util.SimpleBroadcaster;
+
+/**
+ *
+ */
+class TesterBroadcaster extends SimpleBroadcaster
+{
+       public AtmosphereConfig getApplicationConfig()
+       {
+               return config;
+       }
+
+       @Override
+       protected void executeBlockingWrite(AtmosphereResource resource, Entry 
entry)
+       {
+               AtmosphereResponse response = resource.getResponse();
+               String message = entry.message.toString();
+               response.write(message);
+       }
+}

http://git-wip-us.apache.org/repos/asf/wicket/blob/beeb0001/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterBroadcasterFactory.java
----------------------------------------------------------------------
diff --git 
a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterBroadcasterFactory.java
 
b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterBroadcasterFactory.java
new file mode 100644
index 0000000..d1b5008
--- /dev/null
+++ 
b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterBroadcasterFactory.java
@@ -0,0 +1,32 @@
+package org.apache.wicket.atmosphere.tester;
+
+import org.atmosphere.cpr.AtmosphereConfig;
+import org.atmosphere.cpr.Broadcaster;
+import org.atmosphere.cpr.BroadcasterLifeCyclePolicy;
+import org.atmosphere.cpr.DefaultBroadcasterFactory;
+import org.atmosphere.util.SimpleBroadcaster;
+
+/**
+*
+*/
+class TesterBroadcasterFactory extends DefaultBroadcasterFactory
+{
+       private final TesterBroadcaster singleBroadcaster;
+
+       TesterBroadcasterFactory(AtmosphereConfig c, TesterBroadcaster 
broadcaster)
+       {
+               super(SimpleBroadcaster.class, 
BroadcasterLifeCyclePolicy.ATMOSPHERE_RESOURCE_POLICY.NEVER.name(), c);
+
+               this.singleBroadcaster = broadcaster;
+
+               // expose myself as BroadcasterFactory.getDefault();
+               factory = this;
+       }
+
+       @SuppressWarnings("unchecked")
+       @Override
+       public <T extends Broadcaster> T lookup(Class<T> c, Object id, boolean 
createIfNull, boolean unique)
+       {
+               return (T) singleBroadcaster;
+       }
+}

http://git-wip-us.apache.org/repos/asf/wicket/blob/beeb0001/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterEventBus.java
----------------------------------------------------------------------
diff --git 
a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterEventBus.java
 
b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterEventBus.java
index 8a94f04..be88777 100644
--- 
a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterEventBus.java
+++ 
b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterEventBus.java
@@ -16,46 +16,53 @@
  */
 package org.apache.wicket.atmosphere.tester;
 
-import org.apache.wicket.application.IComponentOnBeforeRenderListener;
+import java.util.concurrent.Executors;
+
 import org.apache.wicket.atmosphere.EventBus;
 import org.apache.wicket.protocol.http.WebApplication;
 import org.atmosphere.cpr.AtmosphereConfig;
 import org.atmosphere.cpr.AtmosphereFramework;
-import org.atmosphere.cpr.BroadcasterLifeCyclePolicy;
-import org.atmosphere.cpr.DefaultBroadcasterFactory;
-import org.atmosphere.util.SimpleBroadcaster;
+import org.atmosphere.cpr.BroadcasterConfig;
+import org.atmosphere.util.VoidExecutorService;
 
 /**
  *
  */
-public class TesterEventBus extends EventBus
+class TesterEventBus extends EventBus
 {
-       AtmosphereFramework framework = new AtmosphereFramework();
-       AtmosphereConfig config = new AtmosphereConfig(framework);
-
        public TesterEventBus(WebApplication application)
        {
-               super(application, new SimpleBroadcaster());
-
-               framework.setBroadcasterFactory(new 
TesterBroadcasterFactory(config));
-
-               getBroadcaster().initialize("wicket-atmosphere-tester", config);
+               super(application, createBroadcaster());
        }
 
-       @Override
-       public SimpleBroadcaster getBroadcaster()
+       private static TesterBroadcaster createBroadcaster()
        {
-               return (SimpleBroadcaster) super.getBroadcaster();
+               TesterBroadcaster broadcaster = new TesterBroadcaster();
+
+               AtmosphereFramework framework = new AtmosphereFramework();
+               AtmosphereConfig config = new AtmosphereConfig(framework);
+
+               TesterBroadcasterFactory broadcasterFactory = new 
TesterBroadcasterFactory(config, broadcaster);
+               framework.setBroadcasterFactory(broadcasterFactory);
+
+               broadcaster.initialize("wicket-atmosphere-tester", config);
+
+               VoidExecutorService sameThreadExecutorService = new 
VoidExecutorService();
+               BroadcasterConfig broadcasterConfig = new BroadcasterConfig(
+                               sameThreadExecutorService,
+                               sameThreadExecutorService,
+                               Executors.newSingleThreadScheduledExecutor(),
+                               config, "tester-broadcaster-config");
+               broadcaster.setBroadcasterConfig(broadcasterConfig);
+               
broadcasterConfig.setAsyncWriteService(sameThreadExecutorService);
+               broadcasterConfig.setExecutorService(sameThreadExecutorService);
+
+               return broadcaster;
        }
 
-       private static class TesterBroadcasterFactory extends 
DefaultBroadcasterFactory
+       @Override
+       public TesterBroadcaster getBroadcaster()
        {
-               protected TesterBroadcasterFactory(AtmosphereConfig c)
-               {
-                       super(SimpleBroadcaster.class, 
BroadcasterLifeCyclePolicy.ATMOSPHERE_RESOURCE_POLICY.NEVER.name(), c);
-
-                       // expose myself as BroadcasterFactory.getDefault();
-                       factory = this;
-               }
+               return (TesterBroadcaster) super.getBroadcaster();
        }
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/beeb0001/wicket-experimental/wicket-atmosphere/src/test/java/org/apache/wicket/atmosphere/AtmosphereTest.java
----------------------------------------------------------------------
diff --git 
a/wicket-experimental/wicket-atmosphere/src/test/java/org/apache/wicket/atmosphere/AtmosphereTest.java
 
b/wicket-experimental/wicket-atmosphere/src/test/java/org/apache/wicket/atmosphere/AtmosphereTest.java
index 9f86cdf..368367d 100644
--- 
a/wicket-experimental/wicket-atmosphere/src/test/java/org/apache/wicket/atmosphere/AtmosphereTest.java
+++ 
b/wicket-experimental/wicket-atmosphere/src/test/java/org/apache/wicket/atmosphere/AtmosphereTest.java
@@ -33,6 +33,8 @@ public class AtmosphereTest extends Assert
        @Test
        public void atmospherePush()
        {
+               final String updateTimeIsExecuted = "updateTime is executed!";
+
                WicketTester tester = new WicketTester();
                HomePage page = new HomePage(new PageParameters())
                {
@@ -41,8 +43,7 @@ public class AtmosphereTest extends Assert
                        {
                                super.updateTime(target, event);
 
-                               System.err.println("updateTime");
-                               target.appendJavaScript("updateTime is 
executed");
+                               target.appendJavaScript(updateTimeIsExecuted);
                        }
 
                        @Subscribe(contextAwareFilter = ReceiverFilter.class)
@@ -59,7 +60,8 @@ public class AtmosphereTest extends Assert
                Date payload = new Date();
                waTester.post(payload);
 
-               System.err.println("Ajax response:\n" + 
tester.getLastResponseAsString());
+//             System.err.println("Ajax response:\n" + 
tester.getLastResponseAsString());
+               tester.assertContains(updateTimeIsExecuted);
 
                tester.destroy();
        }

Reply via email to