You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@deltaspike.apache.org by gp...@apache.org on 2018/03/01 20:53:05 UTC

deltaspike git commit: DELTASPIKE-1319 basic support for test-suites and minor improvements

Repository: deltaspike
Updated Branches:
  refs/heads/master 5a8369ae9 -> ca6b722bd


DELTASPIKE-1319 basic support for test-suites and minor improvements


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

Branch: refs/heads/master
Commit: ca6b722bd0cea0975580d74fefd53f25e9330cc5
Parents: 5a8369a
Author: gpetracek <gp...@apache.org>
Authored: Thu Mar 1 21:50:11 2018 +0100
Committer: gpetracek <gp...@apache.org>
Committed: Thu Mar 1 21:50:11 2018 +0100

----------------------------------------------------------------------
 .../testcontrol/api/junit/CdiTestRunner.java    |  41 +------
 .../api/junit/CdiTestSuiteRunner.java           | 122 +++++++++++++++++++
 2 files changed, 124 insertions(+), 39 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/deltaspike/blob/ca6b722b/deltaspike/modules/test-control/api/src/main/java/org/apache/deltaspike/testcontrol/api/junit/CdiTestRunner.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/test-control/api/src/main/java/org/apache/deltaspike/testcontrol/api/junit/CdiTestRunner.java b/deltaspike/modules/test-control/api/src/main/java/org/apache/deltaspike/testcontrol/api/junit/CdiTestRunner.java
index c855b40..f50650c 100644
--- a/deltaspike/modules/test-control/api/src/main/java/org/apache/deltaspike/testcontrol/api/junit/CdiTestRunner.java
+++ b/deltaspike/modules/test-control/api/src/main/java/org/apache/deltaspike/testcontrol/api/junit/CdiTestRunner.java
@@ -50,7 +50,6 @@ import javax.enterprise.context.SessionScoped;
 import javax.enterprise.context.spi.CreationalContext;
 import javax.enterprise.inject.spi.Bean;
 import javax.enterprise.inject.spi.BeanManager;
-import javax.inject.Named;
 import javax.inject.Singleton;
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Method;
@@ -468,7 +467,7 @@ public class CdiTestRunner extends BlockJUnit4ClassRunner
                     // Note that Weld 1 was "flat" anyway, so this property only affects newer versions of Weld
                     System.setProperty("org.jboss.weld.se.archive.isolation", "false");
 
-                    checkForLabeledAlternativeConfig(testClass);
+                    CdiTestSuiteRunner.applyAlternativeLabel(testClass);
 
                     container.boot(CdiTestSuiteRunner.getTestContainerConfig());
                     setContainerStarted();
@@ -493,43 +492,6 @@ public class CdiTestRunner extends BlockJUnit4ClassRunner
             startScopes(container, testClass, null, restrictedScopes.toArray(new Class[restrictedScopes.size()]));
         }
 
-        private void checkForLabeledAlternativeConfig(Class<?> testClass)
-        {
-            String activeAlternativeLabel = "";
-            TestControl testControl = testClass.getAnnotation(TestControl.class);
-
-            if (testControl != null)
-            {
-                Class<? extends TestControl.Label> activeTypedAlternativeLabel =
-                    testControl.activeAlternativeLabel();
-
-                if (!TestControl.Label.class.equals(activeTypedAlternativeLabel))
-                {
-                    Named labelName = activeTypedAlternativeLabel.getAnnotation(Named.class);
-
-                    if (labelName != null)
-                    {
-                        activeAlternativeLabel = labelName.value();
-                    }
-                    else
-                    {
-                        String labelClassName = activeTypedAlternativeLabel.getSimpleName();
-                        activeAlternativeLabel = labelClassName.substring(0, 1).toLowerCase();
-
-                        if (labelClassName.length() > 1)
-                        {
-                            activeAlternativeLabel += labelClassName.substring(1);
-                        }
-                    }
-                }
-            }
-            //always set it even if it is empty (it might overrule the value of the prev. test
-            System.setProperty("activeAlternativeLabel", activeAlternativeLabel); //will be picked up by ds-core
-
-            //TODO discuss a spi which allows to run such tests in parallel
-            System.setProperty("activeAlternativeLabelSource", testClass.getName()); //can be used for custom logic
-        }
-
         private void bootExternalContainers(Class testClass)
         {
             if (!this.testControl.startExternalContainers())
@@ -886,4 +848,5 @@ public class CdiTestRunner extends BlockJUnit4ClassRunner
 
         return Collections.unmodifiableList(cdiTestRunner.testContext.externalContainers);
     }
+
 }

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/ca6b722b/deltaspike/modules/test-control/api/src/main/java/org/apache/deltaspike/testcontrol/api/junit/CdiTestSuiteRunner.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/test-control/api/src/main/java/org/apache/deltaspike/testcontrol/api/junit/CdiTestSuiteRunner.java b/deltaspike/modules/test-control/api/src/main/java/org/apache/deltaspike/testcontrol/api/junit/CdiTestSuiteRunner.java
index e24dda6..bfe0b45 100644
--- a/deltaspike/modules/test-control/api/src/main/java/org/apache/deltaspike/testcontrol/api/junit/CdiTestSuiteRunner.java
+++ b/deltaspike/modules/test-control/api/src/main/java/org/apache/deltaspike/testcontrol/api/junit/CdiTestSuiteRunner.java
@@ -22,6 +22,10 @@ import org.apache.deltaspike.cdise.api.CdiContainer;
 import org.apache.deltaspike.cdise.api.CdiContainerLoader;
 import org.apache.deltaspike.core.api.config.ConfigResolver;
 import org.apache.deltaspike.core.api.config.PropertyLoader;
+import org.apache.deltaspike.core.spi.activation.Deactivatable;
+import org.apache.deltaspike.core.spi.config.ConfigSource;
+import org.apache.deltaspike.core.util.ClassDeactivationUtils;
+import org.apache.deltaspike.testcontrol.api.TestControl;
 import org.junit.runner.Description;
 import org.junit.runner.Runner;
 import org.junit.runner.notification.Failure;
@@ -31,8 +35,12 @@ import org.junit.runners.Suite;
 import org.junit.runners.model.InitializationError;
 import org.junit.runners.model.RunnerBuilder;
 
+import javax.inject.Named;
+import java.util.Arrays;
 import java.util.List;
+import java.util.Map;
 import java.util.Properties;
+import java.util.concurrent.ConcurrentHashMap;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
@@ -103,6 +111,8 @@ public class CdiTestSuiteRunner extends Suite
 
         if (!containerStarted)
         {
+            applyAlternativeLabel(getTestClass().getJavaClass());
+
             container.boot(getTestContainerConfig());
             containerStarted = true;
         }
@@ -207,4 +217,116 @@ public class CdiTestSuiteRunner extends Suite
             CUSTOM_TEST_CONTAINER_CONFIG_FILE_KEY, DEFAULT_TEST_CONTAINER_CONFIG_FILE_NAME);
         return PropertyLoader.getProperties(cdiTestRunnerConfig);
     }
+
+    //just here, because all shared methods are in this class
+    static void applyAlternativeLabel(Class<?> currentAnnotationSource)
+    {
+        String activeAlternativeLabel = checkForLabeledAlternativeConfig(currentAnnotationSource);
+        initTestEnvConfig(currentAnnotationSource, activeAlternativeLabel);
+    }
+
+    private static String checkForLabeledAlternativeConfig(Class<?> currentAnnotationSource)
+    {
+        String activeAlternativeLabel = "";
+        TestControl testControl = currentAnnotationSource.getAnnotation(TestControl.class);
+
+        if (testControl != null)
+        {
+            Class<? extends TestControl.Label> activeTypedAlternativeLabel =
+                    testControl.activeAlternativeLabel();
+
+            if (!TestControl.Label.class.equals(activeTypedAlternativeLabel))
+            {
+                Named labelName = activeTypedAlternativeLabel.getAnnotation(Named.class);
+
+                if (labelName != null)
+                {
+                    activeAlternativeLabel = labelName.value();
+                }
+                else
+                {
+                    String labelClassName = activeTypedAlternativeLabel.getSimpleName();
+                    activeAlternativeLabel = labelClassName.substring(0, 1).toLowerCase();
+
+                    if (labelClassName.length() > 1)
+                    {
+                        activeAlternativeLabel += labelClassName.substring(1);
+                    }
+                }
+            }
+        }
+        return activeAlternativeLabel;
+    }
+
+    private static void initTestEnvConfig(Class<?> testClass, String activeAlternativeLabel)
+    {
+        if (ClassDeactivationUtils.isActivated(TestConfigSource.class))
+        {
+            TestConfigSource testConfigSource = null;
+
+            for (ConfigSource configSource : ConfigResolver.getConfigSources())
+            {
+                if (configSource instanceof TestConfigSource)
+                {
+                    //if it happens: parallel test-execution can't be supported with labeled alternatives
+                    testConfigSource = (TestConfigSource) configSource;
+                }
+            }
+
+            if (testConfigSource == null)
+            {
+                testConfigSource = new TestConfigSource();
+                ConfigResolver.addConfigSources(Arrays.<ConfigSource>asList(testConfigSource));
+            }
+
+            //always set it even if it is empty (it might overrule the value of the prev. test
+            testConfigSource.getProperties().put("activeAlternativeLabel", activeAlternativeLabel);
+
+            testConfigSource.getProperties().put("activeAlternativeLabelSource", testClass.getName());
+        }
+        else
+        {
+            //always set it even if it is empty (it might overrule the value of the prev. test
+            System.setProperty("activeAlternativeLabel", activeAlternativeLabel); //will be picked up by ds-core
+
+            System.setProperty("activeAlternativeLabelSource", testClass.getName()); //can be used for custom logic
+        }
+    }
+
+    //config-sources are already stored per classloader
+    //keep it public to allow type-safe deactivation (if needed)
+    public static class TestConfigSource implements ConfigSource, Deactivatable
+    {
+        private Map<String, String> testConfig = new ConcurrentHashMap<String, String>();
+
+        @Override
+        public int getOrdinal()
+        {
+            return Integer.MIN_VALUE;
+        }
+
+        @Override
+        public Map<String, String> getProperties()
+        {
+            return testConfig;
+        }
+
+        @Override
+        public String getPropertyValue(String key)
+        {
+            return testConfig.get(key);
+        }
+
+        @Override
+        public String getConfigName()
+        {
+            return "ds-test-config";
+        }
+
+        @Override
+        public boolean isScannable()
+        {
+            return true;
+        }
+    }
 }