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
>
>

Reply via email to