You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@wicket.apache.org by Vervenko Pavel <wi...@tut.by> on 2011/12/22 16:18:55 UTC

Running unit test in parallel

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

Re: Running unit test in parallel

Posted by Martin Grigorov <mg...@apache.org>.
Wicket tests also use WicketTester :-)

You can create simple application to experiment with.

2011/12/22 Vervenko Pavel <wi...@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
> <mg...@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 <wi...@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-unsubscribe@wicket.apache.org
>> For additional commands, e-mail: users-help@wicket.apache.org
>>
>>



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

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


Re: Running unit test in parallel

Posted by Vervenko Pavel <wi...@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
<mg...@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 <wi...@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-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
>
>

Re: Running unit test in parallel

Posted by Martin Grigorov <mg...@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 <wi...@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-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org