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(); }
