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 2013/12/28 14:35:50 UTC
git commit: DELTASPIKE-399 filter test-execution in case of cdi 1.0
Updated Branches:
refs/heads/master a95c1e6e3 -> 7c8039a82
DELTASPIKE-399 filter test-execution in case of cdi 1.0
(currently only in case of owb)
Project: http://git-wip-us.apache.org/repos/asf/deltaspike/repo
Commit: http://git-wip-us.apache.org/repos/asf/deltaspike/commit/7c8039a8
Tree: http://git-wip-us.apache.org/repos/asf/deltaspike/tree/7c8039a8
Diff: http://git-wip-us.apache.org/repos/asf/deltaspike/diff/7c8039a8
Branch: refs/heads/master
Commit: 7c8039a82b00d4f39e2aaaad3ba41d7975cc025b
Parents: a95c1e6
Author: gpetracek <gp...@apache.org>
Authored: Sat Dec 28 14:26:02 2013 +0100
Committer: gpetracek <gp...@apache.org>
Committed: Sat Dec 28 14:34:02 2013 +0100
----------------------------------------------------------------------
.../core/impl/resourceloader/Cdi10Bean.java | 50 +++++++
.../core/impl/resourceloader/Cdi11Bean.java | 67 +++++++++
.../resourceloader/ClasspathResourceTest.java | 50 ++++---
.../impl/resourceloader/FileResourceTest.java | 24 +++-
.../impl/resourceloader/TestResourceHolder.java | 35 +++++
.../test/utils/CdiContainerUnderTest.java | 140 +++++++++++++++++++
.../test/utils/CdiImplementation.java | 48 +++++++
7 files changed, 393 insertions(+), 21 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/7c8039a8/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/impl/resourceloader/Cdi10Bean.java
----------------------------------------------------------------------
diff --git a/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/impl/resourceloader/Cdi10Bean.java b/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/impl/resourceloader/Cdi10Bean.java
new file mode 100644
index 0000000..df5be1b
--- /dev/null
+++ b/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/impl/resourceloader/Cdi10Bean.java
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.deltaspike.test.core.impl.resourceloader;
+
+import javax.enterprise.inject.Instance;
+import java.io.InputStream;
+import java.util.Properties;
+
+public class Cdi10Bean implements TestResourceHolder
+{
+ @Override
+ public InputStream getInputStream()
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public Properties getProperties()
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public Instance<InputStream> getInputStreamInstance()
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public Instance<Properties> getPropertiesInstance()
+ {
+ throw new UnsupportedOperationException();
+ }
+}
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/7c8039a8/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/impl/resourceloader/Cdi11Bean.java
----------------------------------------------------------------------
diff --git a/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/impl/resourceloader/Cdi11Bean.java b/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/impl/resourceloader/Cdi11Bean.java
new file mode 100644
index 0000000..908cc38
--- /dev/null
+++ b/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/impl/resourceloader/Cdi11Bean.java
@@ -0,0 +1,67 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.deltaspike.test.core.impl.resourceloader;
+
+import org.apache.deltaspike.core.api.resourceloader.ClasspathStorage;
+import org.apache.deltaspike.core.api.resourceloader.ExternalResource;
+
+import javax.enterprise.inject.Any;
+import javax.enterprise.inject.Instance;
+import javax.inject.Inject;
+import java.io.InputStream;
+import java.util.Properties;
+
+public class Cdi11Bean implements TestResourceHolder
+{
+ @Inject
+ @ExternalResource(storage = ClasspathStorage.class,location="testconfig.properties")
+ private InputStream inputStream;
+
+ @Inject
+ @ExternalResource(storage = ClasspathStorage.class,location="testconfig.properties")
+ private Properties properties;
+
+ @Inject
+ @Any
+ private Instance<InputStream> inputStreamInstance;
+
+ @Inject
+ @Any
+ private Instance<Properties> propertiesInstance;
+
+ public InputStream getInputStream()
+ {
+ return inputStream;
+ }
+
+ public Properties getProperties()
+ {
+ return properties;
+ }
+
+ public Instance<InputStream> getInputStreamInstance()
+ {
+ return inputStreamInstance;
+ }
+
+ public Instance<Properties> getPropertiesInstance()
+ {
+ return propertiesInstance;
+ }
+}
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/7c8039a8/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/impl/resourceloader/ClasspathResourceTest.java
----------------------------------------------------------------------
diff --git a/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/impl/resourceloader/ClasspathResourceTest.java b/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/impl/resourceloader/ClasspathResourceTest.java
index 8f2e469..a95f6c6 100644
--- a/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/impl/resourceloader/ClasspathResourceTest.java
+++ b/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/impl/resourceloader/ClasspathResourceTest.java
@@ -21,8 +21,9 @@ package org.apache.deltaspike.test.core.impl.resourceloader;
import org.apache.deltaspike.core.api.literal.ExternalResourceLiteral;
import org.apache.deltaspike.core.api.resourceloader.ClasspathStorage;
-import org.apache.deltaspike.core.api.resourceloader.ExternalResource;
import org.apache.deltaspike.test.util.ArchiveUtils;
+import org.apache.deltaspike.test.utils.CdiContainerUnderTest;
+import org.apache.deltaspike.test.utils.CdiImplementation;
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.shrinkwrap.api.Archive;
@@ -31,22 +32,29 @@ import org.jboss.shrinkwrap.api.asset.EmptyAsset;
import org.jboss.shrinkwrap.api.asset.StringAsset;
import org.jboss.shrinkwrap.api.spec.WebArchive;
import org.junit.Assert;
+import org.junit.Assume;
import org.junit.Test;
import org.junit.runner.RunWith;
-import javax.enterprise.inject.Any;
-import javax.enterprise.inject.Instance;
import javax.inject.Inject;
import java.io.IOException;
-import java.io.InputStream;
import java.util.Properties;
@RunWith(Arquillian.class)
-public class ClasspathResourceTest {
+public class ClasspathResourceTest
+{
@Deployment
public static Archive<?> createResourceLoaderArchive()
{
+ Class versionDependentImplementation = Cdi11Bean.class;
+ if (isOwbForCdi10())
+ {
+ versionDependentImplementation = Cdi10Bean.class;
+ }
+
Archive<?> arch = ShrinkWrap.create(WebArchive.class, ClasspathResourceTest.class.getSimpleName() + ".war")
+ .addClass(TestResourceHolder.class)
+ .addClass(versionDependentImplementation)
.addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml")
.add(new StringAsset("some.propertykey = somevalue"), "WEB-INF/classes/testconfig.properties")
.addAsLibraries(ArchiveUtils.getDeltaSpikeCoreArchive());
@@ -54,35 +62,39 @@ public class ClasspathResourceTest {
}
@Inject
- @ExternalResource(storage = ClasspathStorage.class,location="testconfig.properties")
- private InputStream inputStream;
-
- @Inject
- @ExternalResource(storage = ClasspathStorage.class,location="testconfig.properties")
- private Properties props;
-
- @Inject
- @Any
- private Instance<InputStream> inputStreams;
+ private TestResourceHolder testResourceHolder;
@Test
public void testInputStream() throws IOException
{
- Assert.assertNotNull(inputStream);
+ Assume.assumeTrue(!isOwbForCdi10());
+
+ Assert.assertNotNull(testResourceHolder.getInputStream());
Properties p = new Properties();
- p.load(inputStream);
+ p.load(testResourceHolder.getInputStream());
Assert.assertEquals("somevalue", p.getProperty("some.propertykey", "wrong answer"));
}
@Test
public void testProperties()
{
- Assert.assertEquals("somevalue", props.getProperty("some.propertykey", "wrong answer"));
+ Assume.assumeTrue(!isOwbForCdi10());
+
+ Assert.assertEquals("somevalue",
+ testResourceHolder.getProperties().getProperty("some.propertykey", "wrong answer"));
}
@Test(expected = RuntimeException.class)
public void testAmbiguousFileLookup()
{
- inputStreams.select(new ExternalResourceLiteral(ClasspathStorage.class, "META-INF/beans.xml")).get();
+ Assume.assumeTrue(!isOwbForCdi10());
+
+ testResourceHolder.getInputStreamInstance()
+ .select(new ExternalResourceLiteral(ClasspathStorage.class, "META-INF/beans.xml")).get();
+ }
+
+ private static boolean isOwbForCdi10()
+ {
+ return CdiContainerUnderTest.isCdiVersion(CdiImplementation.OWB11) || CdiContainerUnderTest.isCdiVersion(CdiImplementation.OWB12);
}
}
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/7c8039a8/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/impl/resourceloader/FileResourceTest.java
----------------------------------------------------------------------
diff --git a/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/impl/resourceloader/FileResourceTest.java b/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/impl/resourceloader/FileResourceTest.java
index 1a19b9a..bb3e229 100644
--- a/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/impl/resourceloader/FileResourceTest.java
+++ b/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/impl/resourceloader/FileResourceTest.java
@@ -21,7 +21,10 @@ package org.apache.deltaspike.test.core.impl.resourceloader;
import org.apache.deltaspike.core.api.literal.ExternalResourceLiteral;
import org.apache.deltaspike.core.api.resourceloader.FileSystemStorage;
+import org.apache.deltaspike.core.util.ExceptionUtils;
import org.apache.deltaspike.test.util.ArchiveUtils;
+import org.apache.deltaspike.test.utils.CdiContainerUnderTest;
+import org.apache.deltaspike.test.utils.CdiImplementation;
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.shrinkwrap.api.Archive;
@@ -29,8 +32,8 @@ import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.asset.EmptyAsset;
import org.jboss.shrinkwrap.api.spec.WebArchive;
import org.junit.Assert;
+import org.junit.Assume;
import org.junit.Before;
-import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -64,14 +67,22 @@ public class FileResourceTest
}
catch (IOException e)
{
-
+ throw ExceptionUtils.throwAsRuntimeException(e);
}
}
@Deployment
public static Archive<?> createResourceLoaderArchive()
{
+ Class versionDependentImplementation = Cdi11Bean.class;
+ if (isOwbForCdi10())
+ {
+ versionDependentImplementation = Cdi10Bean.class;
+ }
+
Archive<?> arch = ShrinkWrap.create(WebArchive.class, FileResourceTest.class.getSimpleName() + ".war")
+ .addClass(TestResourceHolder.class)
+ .addClass(versionDependentImplementation)
.addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml")
.addAsLibraries(ArchiveUtils.getDeltaSpikeCoreArchive());
return arch;
@@ -88,6 +99,8 @@ public class FileResourceTest
@Test
public void testInputStream() throws IOException
{
+ Assume.assumeTrue(!isOwbForCdi10());
+
InputStream inputStream = inputStreamInst
.select(new ExternalResourceLiteral(FileSystemStorage.class, tempFileName)).get();
Assert.assertNotNull(inputStream);
@@ -99,8 +112,15 @@ public class FileResourceTest
@Test
public void testProperties()
{
+ Assume.assumeTrue(!isOwbForCdi10());
+
Properties props = this.propsInst.select(new ExternalResourceLiteral(FileSystemStorage.class,tempFileName))
.get();
Assert.assertEquals("somevalue", props.getProperty("some.propertykey", "wrong answer"));
}
+
+ private static boolean isOwbForCdi10()
+ {
+ return CdiContainerUnderTest.isCdiVersion(CdiImplementation.OWB11) || CdiContainerUnderTest.isCdiVersion(CdiImplementation.OWB12);
+ }
}
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/7c8039a8/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/impl/resourceloader/TestResourceHolder.java
----------------------------------------------------------------------
diff --git a/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/impl/resourceloader/TestResourceHolder.java b/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/impl/resourceloader/TestResourceHolder.java
new file mode 100644
index 0000000..cf059d2
--- /dev/null
+++ b/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/impl/resourceloader/TestResourceHolder.java
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.deltaspike.test.core.impl.resourceloader;
+
+import javax.enterprise.inject.Instance;
+import java.io.InputStream;
+import java.util.Properties;
+
+//just needed to build different archives - otherwise injection would fail with owb implementing cdi 1.0
+public interface TestResourceHolder
+{
+ InputStream getInputStream();
+
+ Properties getProperties();
+
+ Instance<InputStream> getInputStreamInstance();
+
+ Instance<Properties> getPropertiesInstance();
+}
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/7c8039a8/deltaspike/test-utils/src/main/java/org/apache/deltaspike/test/utils/CdiContainerUnderTest.java
----------------------------------------------------------------------
diff --git a/deltaspike/test-utils/src/main/java/org/apache/deltaspike/test/utils/CdiContainerUnderTest.java b/deltaspike/test-utils/src/main/java/org/apache/deltaspike/test/utils/CdiContainerUnderTest.java
index ddbf711..a9c7cd2 100644
--- a/deltaspike/test-utils/src/main/java/org/apache/deltaspike/test/utils/CdiContainerUnderTest.java
+++ b/deltaspike/test-utils/src/main/java/org/apache/deltaspike/test/utils/CdiContainerUnderTest.java
@@ -18,6 +18,12 @@
*/
package org.apache.deltaspike.test.utils;
+import java.net.URL;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+import java.util.jar.Attributes;
+import java.util.jar.Manifest;
+
/**
* A small helper class which checks if the container
* which is currently being tested matches the given version RegExp
@@ -53,4 +59,138 @@ public class CdiContainerUnderTest
return false;
}
+
+ //TODO discuss merge with #is (there 'cdicontainer.version' isn't available in all cases)
+ public static boolean isCdiVersion(CdiImplementation cdiImplementation)
+ {
+ Class implementationClass = tryToLoadClassForName(cdiImplementation.getImplementationClassName());
+
+ if (implementationClass == null)
+ {
+ return false;
+ }
+
+ String containerVersion = getJarVersion(implementationClass);
+ return containerVersion != null && containerVersion.matches(cdiImplementation.getVersionRegex());
+ }
+
+ private static Class tryToLoadClassForName(String name)
+ {
+ try
+ {
+ return loadClassForName(name);
+ }
+ catch (ClassNotFoundException e)
+ {
+ //do nothing - it's just a try
+ return null;
+ }
+ }
+
+ private static Class loadClassForName(String name) throws ClassNotFoundException
+ {
+ try
+ {
+ // Try WebApp ClassLoader first
+ return Class.forName(name, false, // do not initialize for faster startup
+ getClassLoader(null));
+ }
+ catch (ClassNotFoundException ignore)
+ {
+ // fallback: Try ClassLoader for ClassUtils (i.e. the myfaces.jar lib)
+ return Class.forName(name, false, // do not initialize for faster startup
+ CdiContainerUnderTest.class.getClassLoader());
+ }
+ }
+
+ private static ClassLoader getClassLoader(Object o)
+ {
+ if (System.getSecurityManager() != null)
+ {
+ return AccessController.doPrivileged(new GetClassLoaderAction(o));
+ }
+ else
+ {
+ return getClassLoaderInternal(o);
+ }
+ }
+
+ private static ClassLoader getClassLoaderInternal(Object o)
+ {
+ ClassLoader loader = Thread.currentThread().getContextClassLoader();
+
+ if (loader == null && o != null)
+ {
+ loader = o.getClass().getClassLoader();
+ }
+
+ if (loader == null)
+ {
+ loader = CdiContainerUnderTest.class.getClassLoader();
+ }
+
+ return loader;
+ }
+
+ private static String getJarVersion(Class targetClass)
+ {
+ String manifestFileLocation = getManifestFileLocationOfClass(targetClass);
+
+ try
+ {
+ return new Manifest(new URL(manifestFileLocation).openStream())
+ .getMainAttributes().getValue(Attributes.Name.IMPLEMENTATION_VERSION);
+ }
+ catch (Exception e)
+ {
+ return null;
+ }
+ }
+
+ private static String getManifestFileLocationOfClass(Class targetClass)
+ {
+ String manifestFileLocation;
+
+ try
+ {
+ manifestFileLocation = getManifestLocation(targetClass);
+ }
+ catch (Exception e)
+ {
+ //in this case we have a proxy
+ manifestFileLocation = getManifestLocation(targetClass.getSuperclass());
+ }
+ return manifestFileLocation;
+ }
+
+ private static String getManifestLocation(Class targetClass)
+ {
+ String classFilePath = targetClass.getCanonicalName().replace('.', '/') + ".class";
+ String manifestFilePath = "/META-INF/MANIFEST.MF";
+
+ String classLocation = targetClass.getResource(targetClass.getSimpleName() + ".class").toString();
+ return classLocation.substring(0, classLocation.indexOf(classFilePath) - 1) + manifestFilePath;
+ }
+
+ private static class GetClassLoaderAction implements PrivilegedAction<ClassLoader>
+ {
+ private Object object;
+ GetClassLoaderAction(Object object)
+ {
+ this.object = object;
+ }
+
+ @Override
+ public ClassLoader run()
+ {
+ try
+ {
+ return getClassLoaderInternal(object);
+ }
+ catch (Exception e)
+ {
+ return null;
+ }
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/7c8039a8/deltaspike/test-utils/src/main/java/org/apache/deltaspike/test/utils/CdiImplementation.java
----------------------------------------------------------------------
diff --git a/deltaspike/test-utils/src/main/java/org/apache/deltaspike/test/utils/CdiImplementation.java b/deltaspike/test-utils/src/main/java/org/apache/deltaspike/test/utils/CdiImplementation.java
new file mode 100644
index 0000000..b11b747
--- /dev/null
+++ b/deltaspike/test-utils/src/main/java/org/apache/deltaspike/test/utils/CdiImplementation.java
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.deltaspike.test.utils;
+
+public enum CdiImplementation
+{
+ OWB11 ("org.apache.webbeans.container.BeanManagerImpl", "1\\.1\\..*"),
+ OWB12 ("org.apache.webbeans.container.BeanManagerImpl", "1\\.2\\..*"),
+
+ WELD11("org.jboss.weld.manager.BeanManagerImpl", "1\\.1\\..*"),
+ WELD12("org.jboss.weld.manager.BeanManagerImpl", "1\\.2\\..*"),
+ WELD20("org.jboss.weld.manager.BeanManagerImpl", "2\\.0\\..*");
+
+ private final String implementationClassName;
+ private final String versionRegex;
+
+ CdiImplementation(String implementationClassName, String versionRegex)
+ {
+ this.implementationClassName = implementationClassName;
+ this.versionRegex = versionRegex;
+ }
+
+ public String getImplementationClassName()
+ {
+ return implementationClassName;
+ }
+
+ public String getVersionRegex()
+ {
+ return versionRegex;
+ }
+}