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