/* * Copyright 2012 Harald Wellmann. * * Licensed 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.ops4j.pax.cdi.test.support; import static org.ops4j.pax.exam.Constants.START_LEVEL_SYSTEM_BUNDLES; import static org.ops4j.pax.exam.CoreOptions.bundle; import static org.ops4j.pax.exam.CoreOptions.cleanCaches; import static org.ops4j.pax.exam.CoreOptions.composite; import static org.ops4j.pax.exam.CoreOptions.frameworkProperty; import static org.ops4j.pax.exam.CoreOptions.frameworkStartLevel; import static org.ops4j.pax.exam.CoreOptions.junitBundles; import static org.ops4j.pax.exam.CoreOptions.mavenBundle; import static org.ops4j.pax.exam.CoreOptions.systemProperty; import static org.ops4j.pax.exam.CoreOptions.systemTimeout; import static org.ops4j.pax.exam.CoreOptions.when; import java.io.File; import java.io.IOException; import java.util.Properties; import java.util.ServiceLoader; import org.ops4j.lang.Ops4jException; import org.ops4j.pax.exam.Option; import org.ops4j.pax.exam.options.ProvisionOption; import org.ops4j.pax.exam.util.PathUtils; import org.osgi.framework.launch.FrameworkFactory; /** * Reusable composite options for Pax CDI integration tests with Pax Exam. * * @author Harald Wellmann */ public class TestConfiguration { private static final String JETTY_VERSION = "9.3.11.v20160721"; private static volatile String paxCdiRoot; private static boolean consoleEnabled = Boolean.getBoolean("org.ops4j.pax.cdi.console"); private TestConfiguration() { } public static Option regressionDefaults() { Properties props = new Properties(); try { props.load(TestConfiguration.class.getResourceAsStream("/systemPackages.properties")); } catch (IOException exc) { throw new Ops4jException(exc); } return composite( cleanCaches(), frameworkStartLevel(20), // add SLF4J and logback bundles mavenBundle("org.slf4j", "slf4j-api").versionAsInProject().startLevel( START_LEVEL_SYSTEM_BUNDLES), mavenBundle("ch.qos.logback", "logback-core").versionAsInProject().startLevel( START_LEVEL_SYSTEM_BUNDLES), mavenBundle("ch.qos.logback", "logback-classic").versionAsInProject().startLevel( START_LEVEL_SYSTEM_BUNDLES), mavenBundle("org.apache.felix", "org.apache.felix.configadmin", "1.6.0"), mavenBundle("org.apache.felix", "org.apache.felix.scr", "1.6.2"), mavenBundle("org.apache.xbean", "xbean-asm5-shaded", "4.4"), // mavenBundle("org.apache.xbean", "xbean-finder-shaded", "4.4"), // // Set logback configuration via system property. // This way, both the driver and the container use the same configuration systemProperty("logback.configurationFile").value( "file:" + PathUtils.getBaseDir() + "/src/test/resources/logback.xml"), when(consoleEnabled).useOptions( mavenBundle("org.apache.felix", "org.apache.felix.shell.remote", "1.1.2").startLevel(2), mavenBundle("org.apache.felix", "org.apache.felix.gogo.command", "0.14.0").startLevel(2), mavenBundle("org.apache.felix", "org.apache.felix.gogo.runtime", "0.12.1").startLevel(2), mavenBundle("org.apache.felix", "org.apache.felix.gogo.shell", "0.10.0").startLevel(2)), when(consoleEnabled && isEquinox()).useOptions( //frameworkProperty("osgi.console").value("6666"), frameworkProperty("eclipse.consoleLog").value("true"), frameworkProperty("osgi.console.enable.builtin").value("true"), bundle("file:target/org.eclipse.equinox.console.jar").startLevel(2)), // do not treat javax.annotation as system package frameworkProperty("org.osgi.framework.system.packages").value(props.get("org.osgi.framework.system.packages")), systemTimeout(2000000), junitBundles()); } public static Option cdiProviderBundles() { return composite( cdiProviderSpecificBundles(), workspaceBundle("org.ops4j.pax.cdi", "pax-cdi-extender"), workspaceBundle("org.ops4j.pax.cdi", "pax-cdi-extension"), workspaceBundle("org.ops4j.pax.cdi", "pax-cdi-api"), workspaceBundle("org.ops4j.pax.cdi", "pax-cdi-spi")); } public static Option cdiProviderSpecificBundles() { switch (getCdiProvider()) { case OWB1: return openWebBeans1Bundles(); case WELD2: return weld2Bundles(); default: throw new IllegalArgumentException("pax.cdi.provider unknown or null"); } } public static Option paxCdiProviderAdapter() { switch (getCdiProvider()) { case OWB1: return workspaceBundle("org.ops4j.pax.cdi", "pax-cdi-openwebbeans"); case WELD2: return workspaceBundle("org.ops4j.pax.cdi", "pax-cdi-weld"); default: throw new IllegalArgumentException("pax.cdi.provider unknown or null"); } } public static Option paxCdiProviderWebAdapter() { switch (getCdiProvider()) { case OWB1: return composite( workspaceBundle("org.ops4j.pax.cdi", "pax-cdi-web"), workspaceBundle("org.ops4j.pax.cdi", "pax-cdi-jetty-openwebbeans"), mavenBundle("org.apache.openwebbeans", "openwebbeans-web").versionAsInProject(), mavenBundle("org.apache.openwebbeans", "openwebbeans-el22").versionAsInProject(), // needed by pax-cdi-web-openwebbeans mavenBundle("org.apache.geronimo.specs", "geronimo-jsp_2.2_spec", "1.2") ); case WELD2: return composite( workspaceBundle("org.ops4j.pax.cdi", "pax-cdi-web"), workspaceBundle("org.ops4j.pax.cdi", "pax-cdi-jetty-weld"), mavenBundle("org.apache.geronimo.specs", "geronimo-servlet_3.0_spec", "1.0"), // needed by pax-cdi-web-weld mavenBundle("org.apache.geronimo.specs", "geronimo-jsp_2.2_spec", "1.2") ); default: throw new IllegalArgumentException("pax.cdi.provider unknown or null"); } } public static Option paxCdiProviderUndertowAdapter() { switch (getCdiProvider()) { case OWB1: return composite( workspaceBundle("org.ops4j.pax.cdi", "pax-cdi-servlet"), workspaceBundle("org.ops4j.pax.cdi", "pax-cdi-undertow-openwebbeans"), mavenBundle("org.apache.openwebbeans", "openwebbeans-web").versionAsInProject(), mavenBundle("org.apache.openwebbeans", "openwebbeans-el22").versionAsInProject(), // needed by pax-cdi-web-openwebbeans mavenBundle("org.apache.geronimo.specs", "geronimo-jsp_2.2_spec", "1.2") ); case WELD2: return composite( workspaceBundle("org.ops4j.pax.cdi", "pax-cdi-servlet"), workspaceBundle("org.ops4j.pax.cdi", "pax-cdi-undertow-weld"), mavenBundle("org.apache.geronimo.specs", "geronimo-servlet_3.0_spec", "1.0"), // needed by pax-cdi-web-weld mavenBundle("org.apache.geronimo.specs", "geronimo-jsp_2.2_spec", "1.2") ); default: throw new IllegalArgumentException("pax.cdi.provider unknown or null"); } } public static Option paxCdiProviderJettyAdapter() { switch (getCdiProvider()) { case OWB1: return composite( workspaceBundle("org.ops4j.pax.cdi", "pax-cdi-servlet"), workspaceBundle("org.ops4j.pax.cdi", "pax-cdi-jetty-openwebbeans"), mavenBundle("org.apache.openwebbeans", "openwebbeans-web").versionAsInProject(), mavenBundle("org.apache.openwebbeans", "openwebbeans-el22").versionAsInProject() ); case WELD2: return composite( workspaceBundle("org.ops4j.pax.cdi", "pax-cdi-servlet"), workspaceBundle("org.ops4j.pax.cdi", "pax-cdi-jetty-weld") ); default: throw new IllegalArgumentException("pax.cdi.provider unknown or null"); } } public static Option paxCdiJsfAdapter() { switch (getCdiProvider()) { case OWB1: return composite( mavenBundle("org.apache.openwebbeans", "openwebbeans-jsf").versionAsInProject() ); case WELD2: return composite( ); default: throw new IllegalArgumentException("pax.cdi.provider unknown or null"); } } public static CdiProvider getCdiProvider() { String provider = System.getProperty("pax.cdi.provider", "owb1"); if (provider == null) { throw new IllegalArgumentException("system property pax.cdi.provider must not be null"); } return CdiProvider.valueOf(provider.toUpperCase()); } public static Option paxCdiCoreBundles() { return composite( mavenBundle("javax.interceptor", "javax.interceptor-api", "1.2"), mavenBundle("javax.annotation", "javax.annotation-api", "1.2"), mavenBundle("javax.enterprise", "cdi-api").versionAsInProject(), // mavenBundle("org.apache.geronimo.specs", "geronimo-atinject_1.0_spec", "1.0"), mavenBundle("javax.el", "javax.el-api", "3.0.0"), mavenBundle("org.apache.xbean", "xbean-bundleutils", "4.4"), mavenBundle("org.apache.xbean", "xbean-asm5-shaded", "4.4"), mavenBundle("org.apache.xbean", "xbean-finder-shaded", "4.4") ); } public static Option openWebBeans1Bundles() { return composite( paxCdiCoreBundles(), mavenBundle("javax.validation", "validation-api", "1.1.0.Final"), mavenBundle("javax.transaction", "javax.transaction-api", "1.2"), mavenBundle("javax.servlet", "javax.servlet-api", "3.1.0"), mavenBundle("org.apache.openwebbeans", "openwebbeans-impl").versionAsInProject(), mavenBundle("org.apache.openwebbeans", "openwebbeans-spi").versionAsInProject(), mavenBundle("org.apache.openwebbeans", "openwebbeans-el22").versionAsInProject(), mavenBundle("org.slf4j", "jul-to-slf4j").versionAsInProject()); } public static Option weld2Bundles() { return composite( paxCdiCoreBundles(), mavenBundle("org.jboss.logging", "jboss-logging", "3.3.0.Final"), mavenBundle("org.jboss.classfilewriter", "jboss-classfilewriter", "1.1.2.Final"), mavenBundle("com.google.guava", "guava", "18.0"), mavenBundle("org.jboss.weld", "weld-osgi-bundle").versionAsInProject()); } public static Option paxWebBundles() { return composite( mavenBundle("org.apache.xbean", "xbean-asm5-shaded", "4.4"), // mavenBundle("org.apache.xbean", "xbean-finder-shaded", "4.4"), // mavenBundle("org.apache.xbean", "xbean-bundleutils", "4.4"), mavenBundle("javax.servlet", "javax.servlet-api", "3.1.0"), mavenBundle("org.ops4j.pax.web", "pax-web-spi").version(Info.getPaxWebVersion()), mavenBundle("org.ops4j.pax.web", "pax-web-api").version(Info.getPaxWebVersion()), mavenBundle("org.ops4j.pax.web", "pax-web-extender-war").version(Info.getPaxWebVersion()).startLevel(10), mavenBundle("org.ops4j.pax.web", "pax-web-extender-whiteboard").version(Info.getPaxWebVersion()), mavenBundle("org.ops4j.pax.web", "pax-web-jetty").version(Info.getPaxWebVersion()), //mavenBundle("org.ops4j.pax.web", "pax-web-descriptor").version(Info.getPaxWebVersion()), //mavenBundle("org.ops4j.pax.web", "pax-web-jsp").version(Info.getPaxWebVersion()), mavenBundle("org.ops4j.pax.web", "pax-web-runtime").version(Info.getPaxWebVersion()), mavenBundle("org.eclipse.jdt.core.compiler", "ecj").version("3.5.1"), mavenBundle("org.eclipse.jetty", "jetty-util").version(JETTY_VERSION), mavenBundle("org.eclipse.jetty", "jetty-io").version(JETTY_VERSION), mavenBundle("org.eclipse.jetty", "jetty-http").version(JETTY_VERSION), mavenBundle("org.eclipse.jetty", "jetty-continuation").version(JETTY_VERSION), mavenBundle("org.eclipse.jetty", "jetty-server").version(JETTY_VERSION), mavenBundle("org.eclipse.jetty", "jetty-security").version(JETTY_VERSION), mavenBundle("org.eclipse.jetty", "jetty-xml").version(JETTY_VERSION), mavenBundle("org.eclipse.jetty", "jetty-servlet").version(JETTY_VERSION)); } public static Option paxWebUndertowBundles() { return composite( mavenBundle("org.ops4j.pax.tipi", "org.ops4j.pax.tipi.undertow.servlet", "1.0.15.1"), mavenBundle("org.ops4j.pax.tipi", "org.ops4j.pax.tipi.undertow.core", "1.0.15.1"), mavenBundle("org.ops4j.pax.tipi", "org.ops4j.pax.tipi.xnio.api", "3.2.2.2"), mavenBundle("org.ops4j.pax.tipi", "org.ops4j.pax.tipi.xnio.nio", "3.2.2.2"), mavenBundle("org.jboss.logging", "jboss-logging", "3.3.0.Final"), mavenBundle("javax.annotation", "javax.annotation-api", "1.2"), mavenBundle("javax.servlet", "javax.servlet-api", "3.1.0"), mavenBundle("org.apache.xbean", "xbean-bundleutils", "4.4"), mavenBundle("org.apache.xbean", "xbean-finder", "4.4"), mavenBundle("org.ow2.asm", "asm-all", "5.0.2"), mavenBundle("org.apache.felix", "org.apache.felix.configadmin", "1.8.0"), mavenBundle("org.apache.felix", "org.apache.felix.eventadmin", "1.3.2"), mavenBundle("org.ops4j.pax.web", "pax-web-extender").version(Info.getPaxWebVersion()), mavenBundle("org.ops4j.pax.web", "pax-web-spi").version(Info.getPaxWebVersion()), mavenBundle("org.ops4j.pax.web", "pax-web-descriptor").version(Info.getPaxWebVersion()), mavenBundle("org.ops4j.pax.web", "pax-web-jaas").version(Info.getPaxWebVersion()), mavenBundle("org.ops4j.pax.web", "pax-web-undertow").version(Info.getPaxWebVersion())); } public static ProvisionOption<?> workspaceBundle(String groupId, String artifactId) { String samples = groupId.endsWith(".samples") ? "pax-cdi-samples/" : ""; String fileName = String.format("%s/../../../../%s%s/target/classes", PathUtils.getBaseDir(), samples, artifactId); if (new File(fileName).exists()) { String url = "reference:file:" + fileName; return bundle(url); } else { return mavenBundle(groupId, artifactId, Info.getPaxCdiVersion()); } } public static Option workspaceFragment(String groupId, String artifactId) { String samples = groupId.endsWith(".samples") ? "pax-cdi-samples/" : ""; String fileName = String.format("%s/../../../../%s%s/target/classes", PathUtils.getBaseDir(), samples, artifactId); if (new File(fileName).exists()) { String url = "reference:file:" + fileName; return bundle(url).noStart(); } else { return mavenBundle(groupId, artifactId, Info.getPaxCdiVersion()).noStart(); } } public static String getPaxCdiRoot() { if (paxCdiRoot == null) { paxCdiRoot = System.getProperty("pax.cdi.root"); if (paxCdiRoot == null) { Properties props = new Properties(); try { props.load(TestConfiguration.class .getResourceAsStream("/org.ops4j.pax.cdi.properties")); paxCdiRoot = props.getProperty("pax.cdi.root"); } catch (IOException exc) { throw new Ops4jException(exc); } } } return paxCdiRoot; } public static boolean isWeld() { switch (getCdiProvider()) { case WELD2: return true; default: return false; } } public static boolean isEquinox() { FrameworkFactory factory = ServiceLoader.load(FrameworkFactory.class).iterator().next(); return factory.getClass().getSimpleName().contains("Equinox"); } public static boolean isFelix() { FrameworkFactory factory = ServiceLoader.load(FrameworkFactory.class).iterator().next(); return factory.getClass().getCanonicalName().contains("felix"); } }