[arquillian-issues] [JBoss JIRA] (ARQ-1940) arquillian-osgi-bundle is not undeployed when executing a test with surefire 2.18

Grzegorz Grzybek (JIRA) issues at jboss.org
Thu Oct 22 05:24:00 EDT 2015


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

Grzegorz Grzybek edited comment on ARQ-1940 at 10/22/15 5:23 AM:
-----------------------------------------------------------------

The problem was introduced by [this commit|https://github.com/apache/maven-surefire/commit/4df65165] in maven-surefire-plugin 2.18.
With surefire 2.17, we had {{org.jboss.arquillian.junit.Arquillian}} object created once, when runners were created using this invocation trace:
{noformat}
"main at 1" prio=5 tid=0x1 nid=NA runnable
  java.lang.Thread.State: RUNNABLE
	  at org.jboss.arquillian.junit.Arquillian.<init>(Arquillian.java:50)
	  at sun.reflect.NativeConstructorAccessorImpl.newInstance0(NativeConstructorAccessorImpl.java:-1)
	  at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	  at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	  at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
	  at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:104)
	  at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:86)
	  at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
	  at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26)
	  at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
	  at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:33)
	  - locked <0x2b5> (a java.lang.Object)
	  at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:262)
	  at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153)
	  at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:124)
	  at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:200)
	  at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:153)
	  at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103)
{noformat}

However mave-surefire 2.18 added:
{code:java}
runNotifier.fireTestRunStarted( createTestsDescription() );
{code}
invocation before tests are started. And this leads to double creation of Arquillian runner.

1st:
{noformat}
"main at 1" prio=5 tid=0x1 nid=NA runnable
  java.lang.Thread.State: RUNNABLE
	  at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:25)
	  at org.junit.runner.Computer.getRunner(Computer.java:40)
	  at org.junit.runner.Computer$1.runnerForClass(Computer.java:31)
	  at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
	  at org.junit.runners.model.RunnerBuilder.runners(RunnerBuilder.java:101)
	  at org.junit.runners.model.RunnerBuilder.runners(RunnerBuilder.java:87)
	  at org.junit.runners.Suite.<init>(Suite.java:81)
	  at org.junit.runner.Computer.getSuite(Computer.java:28)
	  at org.junit.runner.Request.classes(Request.java:75)
	  at org.junit.runner.Request.classes(Request.java:91)
	  at sun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethodAccessorImpl.java:-1)
	  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	  at java.lang.reflect.Method.invoke(Method.java:497)
	  at org.apache.maven.surefire.common.junit4.JUnit4Reflector.createRequest(JUnit4Reflector.java:67)
	  at org.apache.maven.surefire.common.junit4.JUnit4ProviderUtil.createSuiteDescription(JUnit4ProviderUtil.java:111)
	  at org.apache.maven.surefire.junit4.JUnit4Provider.createTestsDescription(JUnit4Provider.java:328)
	  at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:166)
	  at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:286)
	  at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:240)
	  at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:121)
{noformat}
2nd:
{noformat}
"main at 1" prio=5 tid=0x1 nid=NA runnable
  java.lang.Thread.State: RUNNABLE
	  at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:25)
	  at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
	  at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:33)
	  - locked <0x3ab> (a java.lang.Object)
	  at org.junit.internal.requests.FilterRequest.getRunner(FilterRequest.java:36)
	  at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:341)
	  at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:269)
	  at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:240)
	  at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:184)
	  at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:286)
	  at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:240)
	  at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:121)
{noformat}

So in surefire 2.18, {{org.jboss.arquillian.junit.State#runnerStarted()}} is called twice and at the end we have no "Suite finished" event.


was (Author: grgrzybek):
The problem was introduced by [this commit|https://github.com/apache/maven-surefire/commit/4df65165] in maven-surefire-plugin 2.18.
With surefire 2.17, we had {{org.jboss.arquillian.junit.Arquillian}} object created once, when runners were created using this invocation trace:
{noformat}
"main at 1" prio=5 tid=0x1 nid=NA runnable
  java.lang.Thread.State: RUNNABLE
	  at org.jboss.arquillian.junit.Arquillian.<init>(Arquillian.java:50)
	  at sun.reflect.NativeConstructorAccessorImpl.newInstance0(NativeConstructorAccessorImpl.java:-1)
	  at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	  at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	  at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
	  at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:104)
	  at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:86)
	  at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
	  at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26)
	  at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
	  at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:33)
	  - locked <0x2b5> (a java.lang.Object)
	  at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:262)
	  at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153)
	  at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:124)
	  at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:200)
	  at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:153)
	  at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103)
{noformat}

However mave-surefire 2.18 added:
{code:java}
runNotifier.fireTestRunStarted( createTestsDescription() );
{code}
invocation before tests are started. And this leads to earler creation of Arquillian runner.

1st:
{noformat}
"main at 1" prio=5 tid=0x1 nid=NA runnable
  java.lang.Thread.State: RUNNABLE
	  at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:25)
	  at org.junit.runner.Computer.getRunner(Computer.java:40)
	  at org.junit.runner.Computer$1.runnerForClass(Computer.java:31)
	  at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
	  at org.junit.runners.model.RunnerBuilder.runners(RunnerBuilder.java:101)
	  at org.junit.runners.model.RunnerBuilder.runners(RunnerBuilder.java:87)
	  at org.junit.runners.Suite.<init>(Suite.java:81)
	  at org.junit.runner.Computer.getSuite(Computer.java:28)
	  at org.junit.runner.Request.classes(Request.java:75)
	  at org.junit.runner.Request.classes(Request.java:91)
	  at sun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethodAccessorImpl.java:-1)
	  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	  at java.lang.reflect.Method.invoke(Method.java:497)
	  at org.apache.maven.surefire.common.junit4.JUnit4Reflector.createRequest(JUnit4Reflector.java:67)
	  at org.apache.maven.surefire.common.junit4.JUnit4ProviderUtil.createSuiteDescription(JUnit4ProviderUtil.java:111)
	  at org.apache.maven.surefire.junit4.JUnit4Provider.createTestsDescription(JUnit4Provider.java:328)
	  at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:166)
	  at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:286)
	  at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:240)
	  at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:121)
{noformat}
2nd:
{noformat}
"main at 1" prio=5 tid=0x1 nid=NA runnable
  java.lang.Thread.State: RUNNABLE
	  at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:25)
	  at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
	  at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:33)
	  - locked <0x3ab> (a java.lang.Object)
	  at org.junit.internal.requests.FilterRequest.getRunner(FilterRequest.java:36)
	  at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:341)
	  at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:269)
	  at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:240)
	  at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:184)
	  at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:286)
	  at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:240)
	  at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:121)
{noformat}

So in surefire 2.18, {{org.jboss.arquillian.junit.State#runnerStarted()}} is called twice and at the end we have no "Suite finished" event.

> arquillian-osgi-bundle is not undeployed when executing a test with surefire 2.18
> ---------------------------------------------------------------------------------
>
>                 Key: ARQ-1940
>                 URL: https://issues.jboss.org/browse/ARQ-1940
>             Project: Arquillian
>          Issue Type: Bug
>          Components: OSGi Containers
>            Reporter: Tomas Rohovsky
>            Priority: Minor
>         Attachments: surefire-reproducer.zip
>
>
> arquillian-osgi-bundle is not undeployed when executing a test with surefire-plugin 2.18. It works with older versions of surefire-plugin. A reproducer is attached.



--
This message was sent by Atlassian JIRA
(v6.4.11#64026)


More information about the arquillian-issues mailing list