[arquillian-issues] [JBoss JIRA] (ARQ-245) When using TestNG, an embedded container (e.g. weld-ee) and multiple test classes, test fail randomly

Elias Ross (JIRA) jira-events at lists.jboss.org
Thu Sep 13 17:49:33 EDT 2012


    [ https://issues.jboss.org/browse/ARQ-245?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12718476#comment-12718476 ] 

Elias Ross commented on ARQ-245:
--------------------------------

I have a similar issue with multiple test cases that install JMX MBeans for each test.

The tests execute in Eclipse, but don't work from Maven.

The work around I came up with is to build a testng.xml file:

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="suite" verbose="1">
   <test name="injection">
      <classes>
         <class name="net.noderunner.management.AutoRegistrationTest" />
      </classes>
   </test>
   <test name="injection2">
      <classes>
         <class name="net.noderunner.management.MBeanRegisterTest" />
      </classes>
   </test>
   <test name="other">
      <classes>
         <class name="net.noderunner.management.ManualTest" />
      </classes>
   </test>
</suite>

Shutdown then seems to happen correctly.
                
> When using TestNG, an embedded container (e.g. weld-ee) and multiple test classes, test fail randomly
> -----------------------------------------------------------------------------------------------------
>
>                 Key: ARQ-245
>                 URL: https://issues.jboss.org/browse/ARQ-245
>             Project: Arquillian
>          Issue Type: Bug
>          Components: Test Harness Integration
>    Affects Versions: 1.0.0.Alpha3
>            Reporter: Adam Warski
>
> As TestNG interleaves tests from different classes (even in single-threaded mode), cleanup of one class (@AfterClass) can happen to be invoked in the middle of executing tests from another class. More precisely, it clears the Container instance:
> 	  at org.jboss.weld.Container.cleanup(Container.java:108)
> 	  at org.jboss.weld.bootstrap.WeldBootstrap.shutdown(WeldBootstrap.java:460)
> 	  at org.jboss.arquillian.container.weld.ee.embedded_1_1.mock.MockServletLifecycle.endApplication(MockServletLifecycle.java:126)
> 	  at org.jboss.arquillian.container.weld.ee.embedded_1_1.mock.TestContainer.stopContainer(TestContainer.java:139)
> 	  at org.jboss.arquillian.container.weld.ee.embedded_1_1.WeldEEMockContainer.undeploy(WeldEEMockContainer.java:131)
> 	  at org.jboss.arquillian.impl.handler.ContainerUndeployer.callback(ContainerUndeployer.java:61)
> 	  at org.jboss.arquillian.impl.handler.ContainerUndeployer.callback(ContainerUndeployer.java:47)
> 	  at org.jboss.arquillian.impl.event.MapEventManager.fire(MapEventManager.java:63)
> 	  at org.jboss.arquillian.impl.context.AbstractEventContext.fire(AbstractEventContext.java:115)
> 	  at org.jboss.arquillian.impl.EventTestRunnerAdaptor.afterClass(EventTestRunnerAdaptor.java:86)
> 	  at org.jboss.arquillian.testng.Arquillian.arquillianAfterClass(Arquillian.java:83)
> 	  at sun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethodAccessorImpl.java:-1)
> 	  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> 	  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> 	  at java.lang.reflect.Method.invoke(Method.java:597)
> 	  at org.testng.internal.MethodHelper.invokeMethod(MethodHelper.java:644)
> 	  at org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:443)
> 	  at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:160)
> 	  at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:90)
> 	  at org.testng.internal.TestMethodWorker.invokeAfterClassMethods(TestMethodWorker.java:227)
> 	  at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:124)
> 	  at org.testng.TestRunner.runWorkers(TestRunner.java:908)
> 	  at org.testng.TestRunner.privateRun(TestRunner.java:617)
> 	  at org.testng.TestRunner.run(TestRunner.java:498)
> 	  at org.testng.SuiteRunner.runTest(SuiteRunner.java:329)
> 	  at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:324)
> 	  at org.testng.SuiteRunner.privateRun(SuiteRunner.java:296)
> 	  at org.testng.SuiteRunner.run(SuiteRunner.java:201)
> 	  at org.testng.TestNG.createAndRunSuiteRunners(TestNG.java:915)
> 	  at org.testng.TestNG.runSuitesLocally(TestNG.java:879)
> 	  at org.testng.TestNG.run(TestNG.java:787)
> 	  at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:75)
> 	  at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:92)
> (notice the AfterClass, Arquillian:83), which causes any subsequent test to throw:
> org.jboss.arquillian.impl.event.FiredEventException: java.lang.IllegalStateException: Singleton is not set
> 	at org.jboss.arquillian.impl.event.MapEventManager.fire(MapEventManager.java:68)
> 	at org.jboss.arquillian.impl.context.AbstractEventContext.fire(AbstractEventContext.java:115)
> 	at org.jboss.arquillian.impl.context.AbstractEventContext.fire(AbstractEventContext.java:113)
> 	at org.jboss.arquillian.impl.EventTestRunnerAdaptor.before(EventTestRunnerAdaptor.java:97)
> 	at org.jboss.arquillian.testng.Arquillian.arquillianBeforeTest(Arquillian.java:89)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> 	at java.lang.reflect.Method.invoke(Method.java:597)
> 	at org.testng.internal.MethodHelper.invokeMethod(MethodHelper.java:644)
> 	at org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:443)
> 	at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:160)
> 	at org.testng.internal.Invoker.invokeMethod(Invoker.java:494)
> 	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:700)
> 	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1002)
> 	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:137)
> 	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:121)
> 	at org.testng.TestRunner.runWorkers(TestRunner.java:908)
> 	at org.testng.TestRunner.privateRun(TestRunner.java:617)
> 	at org.testng.TestRunner.run(TestRunner.java:498)
> 	at org.testng.SuiteRunner.runTest(SuiteRunner.java:329)
> 	at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:324)
> 	at org.testng.SuiteRunner.privateRun(SuiteRunner.java:296)
> 	at org.testng.SuiteRunner.run(SuiteRunner.java:201)
> 	at org.testng.TestNG.createAndRunSuiteRunners(TestNG.java:915)
> 	at org.testng.TestNG.runSuitesLocally(TestNG.java:879)
> 	at org.testng.TestNG.run(TestNG.java:787)
> 	at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:75)
> 	at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:92)
> Caused by: java.lang.IllegalStateException: Singleton is not set
> 	at org.jboss.weld.bootstrap.api.helpers.IsolatedStaticSingletonProvider$IsolatedStaticSingleton.get(IsolatedStaticSingletonProvider.java:52)
> 	at org.jboss.weld.Container.instance(Container.java:58)
> 	at org.jboss.weld.bean.proxy.ClientProxyMethodHandler.getProxiedInstance(ClientProxyMethodHandler.java:138)
> 	at org.jboss.weld.bean.proxy.ClientProxyMethodHandler.invoke(ClientProxyMethodHandler.java:100)
> 	at org.jboss.weld.util.CleanableMethodHandler.invoke(CleanableMethodHandler.java:43)
> 	at org.jboss.weld.servlet.HttpSessionManager_$$_javassist_14.setSession(HttpSessionManager_$$_javassist_14.java)
> 	at org.jboss.arquillian.container.weld.ee.embedded_1_1.WeldEEMockContainer$1.callback(WeldEEMockContainer.java:111)
> 	at org.jboss.arquillian.container.weld.ee.embedded_1_1.WeldEEMockContainer$1.callback(WeldEEMockContainer.java:95)
> 	at org.jboss.arquillian.impl.event.MapEventManager.fire(MapEventManager.java:63)
> 	... 28 more

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira


More information about the arquillian-issues mailing list