[ https://issues.apache.org/jira/browse/DELTASPIKE-1230?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15829819#comment-15829819 ]
ASF subversion and git services commented on DELTASPIKE-1230: ------------------------------------------------------------- Commit 08d5916ed5719087abe4829f42b83d493c6ede3a in deltaspike's branch refs/heads/master from [~struberg] [ https://git-wip-us.apache.org/repos/asf?p=deltaspike.git;h=08d5916 ] DELTASPIKE-1230 fix NPE in CdiTestRunner txs rsandtner for the report! > use of ContextControl in CdiTestRunner blows up with NullPointerException > ------------------------------------------------------------------------- > > Key: DELTASPIKE-1230 > URL: https://issues.apache.org/jira/browse/DELTASPIKE-1230 > Project: DeltaSpike > Issue Type: Bug > Components: TestControl > Affects Versions: 1.7.0, 1.7.1, 1.7.2 > Reporter: Reinhard Sandtner > Attachments: deltaspike-test-sample.zip > > > i'm trying to implement a base test class with the annotation > {{@RunWith(CdiTestRunner.class)}} and provide some utility methods for tests. > to start a new request in a test method i'm using {{ContextControl}} to stop > and start {{RequestContext}} and {{SessionContext}}. > here are my cdi-ctrl dependencies > {code} > <dependency> > <groupId>org.apache.deltaspike.cdictrl</groupId> > <artifactId>deltaspike-cdictrl-openejb</artifactId> > <version>${deltaspike.version}</version> > <scope>test</scope> > </dependency> > <dependency> > <groupId>org.apache.tomee</groupId> > <artifactId>openejb-core</artifactId> > <version>7.0.2</version> > <scope>test</scope> > </dependency> > {code} > with one test everything works fine but as soon as i've more the call to > {{contextControl.stopContext(RequestScoped.class)}} (or any other scope) > blows up with an NPE > {noformat} > java.lang.NullPointerException > at > java.util.Collections$UnmodifiableCollection.<init>(Collections.java:1026) > at java.util.Collections$UnmodifiableList.<init>(Collections.java:1302) > at java.util.Collections.unmodifiableList(Collections.java:1287) > at > org.apache.deltaspike.testcontrol.api.junit.CdiTestRunner.getActiveExternalContainers(CdiTestRunner.java:838) > at > org.apache.deltaspike.testcontrol.impl.request.ContextControlDecorator.stopContext(ContextControlDecorator.java:108) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > 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.webbeans.intercept.DecoratorHandler.invoke(DecoratorHandler.java:96) > at > org.apache.deltaspike.cdise.owb.OpenWebBeansContextControl$$OwbInterceptProxy0.stopContext(org/apache/deltaspike/cdise/owb/OpenWebBeansContextControl.java) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > 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.webbeans.intercept.AbstractInvocationContext.directProceed(AbstractInvocationContext.java:113) > at > org.apache.webbeans.intercept.AbstractInvocationContext.proceed(AbstractInvocationContext.java:106) > at > org.apache.webbeans.intercept.InterceptorInvocationContext.proceed(InterceptorInvocationContext.java:67) > at > org.apache.webbeans.intercept.DefaultInterceptorHandler.invoke(DefaultInterceptorHandler.java:139) > at > org.apache.deltaspike.cdise.owb.OpenWebBeansContextControl$$OwbInterceptProxy0.stopContext(org/apache/deltaspike/cdise/owb/OpenWebBeansContextControl.java) > at > at.rsandtner.sample.deltaspike.test.ContainerTest.cleanInstances(ContainerTest.java:40) > at > at.rsandtner.sample.deltaspike.test.TestTwo.testSomething(TestTwo.java:50) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > 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.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) > at > org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) > at > org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) > at > org.apache.deltaspike.testcontrol.api.junit.CdiTestRunner$ContainerAwareMethodInvoker.invokeMethod(CdiTestRunner.java:346) > at > org.apache.deltaspike.testcontrol.api.junit.CdiTestRunner$ContainerAwareMethodInvoker.evaluate(CdiTestRunner.java:318) > at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) > at > org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) > at > org.apache.deltaspike.testcontrol.api.junit.CdiTestRunner.runChild(CdiTestRunner.java:177) > at > org.apache.deltaspike.testcontrol.api.junit.CdiTestRunner.runChild(CdiTestRunner.java:76) > at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) > at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) > at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) > at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) > at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) > at > org.apache.deltaspike.testcontrol.api.junit.CdiTestRunner$BeforeClassStatement.evaluate(CdiTestRunner.java:372) > at org.junit.runners.ParentRunner.run(ParentRunner.java:363) > at > org.apache.deltaspike.testcontrol.api.junit.CdiTestRunner.run(CdiTestRunner.java:144) > at org.junit.runners.Suite.runChild(Suite.java:128) > at org.junit.runners.Suite.runChild(Suite.java:27) > at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) > at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) > at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) > at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) > at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) > at org.junit.runners.ParentRunner.run(ParentRunner.java:363) > at org.junit.runner.JUnitCore.run(JUnitCore.java:137) > at > com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68) > at > com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:51) > at > com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:237) > at > com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > 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 com.intellij.rt.execution.application.AppMain.main(AppMain.java:147) > {noformat} > i've configured {{deltaspike.testcontrol.stop_container = false}} in > {{src/test/resources/META-INF/apache-deltaspike.properties}} > when booting the container for each test class it works but my goal is to > start the container only once for all test in my module since this takes some > time for bigger modules ;) > don't know if the fix is as trivial as it looks but adding > {code} > if (cdiTestRunner == null || *cdiTestRunner.testContext.externalContainers == > null*) > { > return Collections.emptyList(); > } > {code} > fixes at least the NPE. > or is there anything else i’m doing wrong? > will upload a small sample but i'm currently on train and connection is > really bad :/ so this can take some time -- This message was sent by Atlassian JIRA (v6.3.4#6332)