You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2015/12/02 19:31:38 UTC

tomee git commit: some NPE protections

Repository: tomee
Updated Branches:
  refs/heads/master 04294bfde -> f9f73a49b


some NPE protections


Project: http://git-wip-us.apache.org/repos/asf/tomee/repo
Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/f9f73a49
Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/f9f73a49
Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/f9f73a49

Branch: refs/heads/master
Commit: f9f73a49bc51e56613da9e64c85b79502fcb5b2a
Parents: 04294bf
Author: Romain Manni-Bucau <rm...@gmail.com>
Authored: Wed Dec 2 19:31:31 2015 +0100
Committer: Romain Manni-Bucau <rm...@gmail.com>
Committed: Wed Dec 2 19:31:31 2015 +0100

----------------------------------------------------------------------
 .../openejb/testing/ApplicationComposers.java   | 35 +++++++++++++++-----
 .../apache/openejb/bval/BeanValidationTest.java |  4 +++
 2 files changed, 30 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tomee/blob/f9f73a49/container/openejb-core/src/main/java/org/apache/openejb/testing/ApplicationComposers.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/testing/ApplicationComposers.java b/container/openejb-core/src/main/java/org/apache/openejb/testing/ApplicationComposers.java
index bc5fefd..4f54482 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/testing/ApplicationComposers.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/testing/ApplicationComposers.java
@@ -373,8 +373,7 @@ public class ApplicationComposers {
 
     @SuppressWarnings("unchecked")
     public void before(final Object inputTestInstance) throws Exception {
-        // we hacked testInstance while we were not aware of it, now we can solve it
-        testClassFinders.put(inputTestInstance, testClassFinders.remove(this));
+        fixFakeClassFinder(inputTestInstance);
 
         startContainer(inputTestInstance);
 
@@ -385,12 +384,7 @@ public class ApplicationComposers {
     }
 
     public void deployApp(final Object inputTestInstance) throws Exception {
-        // test injections
-        ClassFinder testClassFinder = testClassFinders.remove(inputTestInstance);
-        if (testClassFinder == null) {
-            testClassFinders.put(inputTestInstance, testClassFinders.remove(this));
-            testClassFinder = testClassFinders.remove(inputTestInstance);
-        }
+        final ClassFinder testClassFinder = fixFakeClassFinder(inputTestInstance);
 
         final ClassLoader loader = testClass.getClassLoader();
         AppModule appModule = new AppModule(loader, testClass.getSimpleName());
@@ -773,6 +767,29 @@ public class ApplicationComposers {
         testClassFinders.put(this, testClassFinder);
     }
 
+    private ClassFinder fixFakeClassFinder(final Object inputTestInstance) {
+        // test injections, we faked the instance before having it so ensuring we use the right finder
+        ClassFinder testClassFinder = testClassFinders.get(inputTestInstance);
+        if (testClassFinder == null) {
+            final ApplicationComposers self = this;
+            final ClassFinder remove = testClassFinders.remove(self);
+            if (remove != null) {
+                testClassFinders.put(inputTestInstance, remove);
+                testClassFinder = remove;
+                afterRunnables.add(new Runnable() { // reset state for next test
+                    @Override
+                    public void run() {
+                        final ClassFinder classFinder = testClassFinders.remove(inputTestInstance);
+                        if (classFinder != null) {
+                            testClassFinders.put(self, classFinder);
+                        }
+                    }
+                });
+            }
+        }
+        return testClassFinder;
+    }
+
     private boolean isCdi(final boolean cdi, final Class<?>[] cdiInterceptors,
                           final Class<?>[] cdiAlternatives, final Class<?>[] cdiStereotypes,
                           final Class<?>[] cdiDecorators) {
@@ -1264,7 +1281,7 @@ public class ApplicationComposers {
     public void startContainer(final Object instance) throws Exception {
         originalProperties = (Properties) System.getProperties().clone();
         originalLoader = Thread.currentThread().getContextClassLoader();
-        testClassFinders.remove(this); // see constructor
+        fixFakeClassFinder(instance);
 
         // For the moment we just take the first @Configuration method
         // maybe later we can add something fancy to allow multiple configurations using a qualifier

http://git-wip-us.apache.org/repos/asf/tomee/blob/f9f73a49/container/openejb-core/src/test/java/org/apache/openejb/bval/BeanValidationTest.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/test/java/org/apache/openejb/bval/BeanValidationTest.java b/container/openejb-core/src/test/java/org/apache/openejb/bval/BeanValidationTest.java
index 9ac79d6..4d7136f 100644
--- a/container/openejb-core/src/test/java/org/apache/openejb/bval/BeanValidationTest.java
+++ b/container/openejb-core/src/test/java/org/apache/openejb/bval/BeanValidationTest.java
@@ -23,6 +23,7 @@ import org.apache.openejb.jee.jpa.unit.PersistenceUnit;
 import org.apache.openejb.junit.ApplicationComposer;
 import org.apache.openejb.testing.Configuration;
 import org.apache.openejb.testing.Module;
+import org.apache.openejb.testing.SimpleLog;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
@@ -51,12 +52,15 @@ import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
+@SimpleLog
 @RunWith(ApplicationComposer.class)
 public class BeanValidationTest {
     @EJB
     private PersistManager persistManager;
+
     @Resource
     private Validator validator;
+
     @Resource
     private ValidatorFactory validatorFactory;