Wicket tests also use WicketTester :-)

You can create simple application to experiment with.

2011/12/22 Vervenko Pavel <willcode4f...@tut.by>:
> I didn't mean that I want to run core tests.
> I need to run junits for wicket-based web applications in  3-4 parallel
> threads. We have a lot of tests based on WicketTester and it takes a lot of
> time to run them. Parallel running reduces execution time significantly.
> But as far as I can see it's impossible with wicket 1.4.  I'm not sure
> about 1.5.x but I can't migrate to this version just to check.
>
> 22 декабря 2011 г. 18:25 пользователь Martin Grigorov
> <mgrigo...@apache.org>написал:
>
>> Hi,
>>
>> Some people ran 1.5.x core tests in parallel with JUnit/Surefire
>> parallel support and the problems they had were related with setting
>> current Locale with Locale.setDefault(), i.e. JVM wide. Some tests
>> expect specific i18n-ized results and due to changed Locale they
>> failed.
>>
>> Improvements in this area for 1.4.x wont be done but you can provide
>> patches for 1.5 if there are no API breaks and for 6.0 with API
>> changes.
>>
>> On Thu, Dec 22, 2011 at 5:18 PM, Vervenko Pavel <willcode4f...@tut.by>
>> wrote:
>> > Hi!
>> > We are using wicket-1.4.8.
>> > We have a lot of unit tests and it takes long time to run them. To reduce
>> > running time at multi-core systems we decided to run them parallel in
>> > multiple threads.
>> > I use this
>> >
>> http://mycila.googlecode.com/svn/sandbox/src/main/java/com/mycila/sandbox/junit/runner/ConcurrentSuite.java
>> > class
>> > to run junits concurrently.
>> > First problem I've faced with was some exception from
>> > org.apache.wicket.jmx.Initializer :
>> > *org.apache.wicket.WicketRuntimeException:
>> > javax.management.InstanceAlreadyExistsException:
>> > org.apache.wicket.app.SimpleWicketTester$1:type=Application
>> >        at org.apache.wicket.jmx.Initializer.init(Initializer.java:207)
>> >        at
>> > org.apache.wicket.Application.callInitializers(Application.java:843)
>> >        at
>> > org.apache.wicket.Application.initializeComponents(Application.java:678)
>> >        at
>> > org.apache.wicket.protocol.http.WicketFilter.init(WicketFilter.java:725)
>> >        at
>> >
>> org.apache.wicket.protocol.http.MockWebApplication.<init>(MockWebApplication.java:168)
>> >
>> >        at
>> >
>> org.apache.wicket.util.tester.BaseWicketTester.<init>(BaseWicketTester.java:219)
>> >
>> >        at
>> > org.apache.wicket.util.tester.WicketTester.<init>(WicketTester.java:325)
>> >        at
>> > org.apache.wicket.util.tester.WicketTester.<init>(WicketTester.java:308)
>> >        at
>> >
>> com.infoblox.platform.test.PlatformWicketTester.<init>(PlatformWicketTester.java:60)
>> >
>> >        at
>> >
>> com.infoblox.nios.ui.widget.test.SimpleWicketTester.setUp(SimpleWicketTester.java:54)
>> > *
>> >
>> > I've patched the Initializer file, added some synchronization:
>> > *
>> > synchronized (mbeanServer) {
>> >
>> >
>> >    int i = 0;
>> >    while (mbeanServer.isRegistered(appBeanName))
>> >    {
>> >    tempDomain = name + "-" + i++; //$NON-NLS-1$
>> >    appBeanName = new ObjectName(tempDomain + ":type=Application");
>> > //$NON-NLS-1$
>> >    }
>> >    domain = tempDomain;
>> >
>> >    Application appBean = new Application(application);
>> >    register(appBean, appBeanName);
>> >
>> >    register(new ApplicationSettings(application), new ObjectName(domain +
>> >    ":type=Application,name=ApplicationSettings")); //$NON-NLS-1$
>> >    register(new DebugSettings(application), new ObjectName(domain +
>> >    ":type=Application,name=DebugSettings")); //$NON-NLS-1$
>> >    register(new MarkupSettings(application), new ObjectName(domain +
>> >    ":type=Application,name=MarkupSettings")); //$NON-NLS-1$
>> >    register(new ResourceSettings(application), new ObjectName(domain +
>> >    ":type=Application,name=ResourceSettings")); //$NON-NLS-1$
>> >    register(new PageSettings(application), new ObjectName(domain +
>> >    ":type=Application,name=PageSettings")); //$NON-NLS-1$
>> >    register(new RequestCycleSettings(application), new ObjectName(domain
>> +
>> >    ":type=Application,name=RequestCycleSettings")); //$NON-NLS-1$
>> >    register(new SecuritySettings(application), new ObjectName(domain +
>> >    ":type=Application,name=SecuritySettings")); //$NON-NLS-1$
>> >    register(new SessionSettings(application), new ObjectName(domain +
>> >    ":type=Application,name=SessionSettings")); //$NON-NLS-1$
>> >    register(new CookieValuePersisterSettings(application), new
>> > ObjectName(domain +
>> >    ":type=Application,name=CookieValuePersisterSettings")); //$NON-NLS-1$
>> >
>> >    RequestLogger sessionsBean = new RequestLogger(application);
>> >    ObjectName sessionsBeanName = new ObjectName(domain +
>> > ":type=RequestLogger"); //$NON-NLS-1$
>> >    register(sessionsBean, sessionsBeanName);
>> > }*
>> >
>> > and the problem was gone.
>> >
>> > The second problem I found was such mysterious exceptions from different
>> > classes:
>> > *org.apache.wicket.WicketRuntimeException: Exception in rendering
>> > component: [MarkupContainer [Component id = _header_0]]
>> >        at
>> org.apache.wicket.Component.renderComponent(Component.java:2658)
>> >        at
>> > org.apache.wicket.MarkupContainer.onRender(MarkupContainer.java:1512)
>> >        at org.apache.wicket.Component.render(Component.java:2450)
>> >        at
>> > org.apache.wicket.MarkupContainer.autoAdd(MarkupContainer.java:229)
>> >        at
>> >
>> org.apache.wicket.markup.resolver.HtmlHeaderResolver.resolve(HtmlHeaderResolver.java:80)
>> >
>> >        at
>> >
>> org.apache.wicket.markup.resolver.ComponentResolvers.resolve(ComponentResolvers.java:81)
>> >
>> >        at
>> > org.apache.wicket.MarkupContainer.renderNext(MarkupContainer.java:1418)
>> >        at
>> > org.apache.wicket.MarkupContainer.renderAll(MarkupContainer.java:1528)
>> >        at org.apache.wicket.Page.onRender(Page.java:1565)
>> >        at org.apache.wicket.Component.render(Component.java:2450)
>> >        at org.apache.wicket.Page.renderPage(Page.java:914)
>> >        at
>> >
>> org.apache.wicket.request.target.component.PageRequestTarget.respond(PageRequestTarget.java:63)
>> >
>> >        at
>> >
>> org.apache.wicket.request.AbstractRequestCycleProcessor.respond(AbstractRequestCycleProcessor.java:105)
>> >
>> >        at
>> >
>> org.apache.wicket.RequestCycle.processEventsAndRespond(RequestCycle.java:1258)
>> >
>> >        at org.apache.wicket.RequestCycle.step(RequestCycle.java:1329)
>> >        at org.apache.wicket.RequestCycle.steps(RequestCycle.java:1428)
>> >        at org.apache.wicket.RequestCycle.request(RequestCycle.java:545)
>> >        at
>> >
>> org.apache.wicket.protocol.http.MockWebApplication.processRequestCycle(MockWebApplication.java:524)
>> >
>> >        at
>> >
>> org.apache.wicket.util.tester.BaseWicketTester.executeListener(BaseWicketTester.java:265)
>> >
>> >        at
>> >
>> org.apache.wicket.util.tester.BaseWicketTester.startPage(BaseWicketTester.java:249)
>> >
>> >        at
>> >
>> com.infoblox.nios.ui.widget.test.DummyPlatformWicketTester.startPlatformPanel(DummyPlatformWicketTester.java:440)
>> >
>> >        at
>> >
>> com.infoblox.nios.ui.page.permissions.dialogs.TestCommonPermissionPanel.testRoleCorrectRender(TestCommonPermissionPanel.java:84)
>> >
>> >        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>> >        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
>> >        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
>> >        at java.lang.reflect.Method.invoke(Unknown Source)
>> >        at
>> >
>> org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
>> >
>> >        at
>> >
>> org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
>> >
>> >        at
>> >
>> org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
>> >
>> >        at
>> >
>> org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
>> >
>> >        at
>> >
>> org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
>> >
>> >        at
>> >
>> org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:30)
>> >        at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
>> >        at
>> >
>> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
>> >
>> >        at
>> >
>> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
>> >
>> >        at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
>> >        at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
>> >        at
>> > org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
>> >        at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
>> >        at
>> org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
>> >        at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
>> >        at org.junit.runners.Suite.runChild(Suite.java:128)
>> >        at org.junit.runners.Suite.runChild(Suite.java:24)
>> >        at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
>> >        at java.util.concurrent.Executors$RunnableAdapter.call(Unknown
>> > Source)
>> >        at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
>> >        at java.util.concurrent.FutureTask.run(Unknown Source)
>> >        at java.util.concurrent.Executors$RunnableAdapter.call(Unknown
>> > Source)
>> >        at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
>> >        at java.util.concurrent.FutureTask.run(Unknown Source)
>> >        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown
>> > Source)
>> >        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown
>> > Source)
>> >        at java.lang.Thread.run(Unknown Source)
>> > Caused by: java.lang.NullPointerException
>> >        at java.util.concurrent.ConcurrentHashMap.putIfAbsent(Unknown
>> > Source)
>> >        at org.apache.wicket.SharedResources.add(SharedResources.java:162)
>> >        at
>> > org.apache.wicket.ResourceReference.bind(ResourceReference.java:167)
>> >        at
>> >
>> org.apache.wicket.ResourceReference.getSharedResourceKey(ResourceReference.java:230)
>> >
>> >        at org.apache.wicket.RequestCycle.urlFor(RequestCycle.java:1068)
>> >        at org.apache.wicket.RequestCycle.urlFor(RequestCycle.java:1053)
>> >        at
>> >
>> org.apache.wicket.markup.html.internal.HeaderResponse.renderJavascriptReference(HeaderResponse.java:157)
>> >
>> >        at
>> >
>> com.infoblox.widget.ext.ExtInitializerBehavior.renderOptional(ExtInitializerBehavior.java:263)
>> >
>> >        at
>> >
>> com.infoblox.widget.ext.ExtBaseInitializer.renderHead(ExtBaseInitializer.java:126)
>> >
>> >        at
>> >
>> com.infoblox.widget.ext.ExtInitializerBehavior.renderHead(ExtInitializerBehavior.java:158)
>> >
>> >        at
>> >
>> com.infoblox.nios.ui.page.IBExtInitializerBehavior.renderHead(IBExtInitializerBehavior.java:107)
>> >
>> >        at org.apache.wicket.Component.renderHead(Component.java:2701)
>> >        at
>> >
>> org.apache.wicket.markup.html.internal.HtmlHeaderContainer.renderHeaderSections(HtmlHeaderContainer.java:218)
>> >
>> >        at
>> >
>> org.apache.wicket.markup.html.internal.HtmlHeaderContainer.onComponentTagBody(HtmlHeaderContainer.java:137)
>> >
>> >        at
>> org.apache.wicket.Component.renderComponent(Component.java:2619)
>> >        ... 52 more*
>> >
>> > Then I found the notice in the
>> > org.apache.wicket.protocol.http.MockWebApplication:
>> > * * <p>
>> >  * IMPORTANT NOTES
>> >  * <ul>
>> >  * <li>This harness is SINGLE THREADED - there is only one global
>> session.
>> > For multi-threaded
>> >  * testing you must do integration testing with a full tester server.
>> >  * </ul>*
>> > If I got correctly, Wicket testers can't be run in multiple threads.
>> > But this class is absent in new version of wicket, 1.5.x.
>> > Does that mean that there are no concurrency problems with WicketTester
>> in
>> > 1.5.x version?
>> > I'll be thankful for any tips of running wicket tests in paralllel.
>> >
>> > Thanks
>>
>>
>>
>> --
>> Martin Grigorov
>> jWeekend
>> Training, Consulting, Development
>> http://jWeekend.com
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
>> For additional commands, e-mail: users-h...@wicket.apache.org
>>
>>



-- 
Martin Grigorov
jWeekend
Training, Consulting, Development
http://jWeekend.com

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
For additional commands, e-mail: users-h...@wicket.apache.org

Reply via email to