Get many of the OSGi/Karaf tests passing with Karaf3 by making sure the JUnit bundle is loaded very very early.
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/a522c92e Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/a522c92e Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/a522c92e Branch: refs/heads/master Commit: a522c92e4fb25ff4a36d693f1f7154f6d7b1f47f Parents: 9fd3919 Author: Daniel Kulp <dk...@apache.org> Authored: Thu Aug 28 12:40:54 2014 -0400 Committer: Daniel Kulp <dk...@apache.org> Committed: Thu Aug 28 12:40:54 2014 -0400 ---------------------------------------------------------------------- parent/pom.xml | 6 +++ tests/camel-itest-karaf/pom.xml | 5 +++ .../camel/itest/karaf/AbstractFeatureTest.java | 34 +++++++++++++--- tests/camel-itest-osgi/pom.xml | 10 +++++ .../itest/osgi/OSGiIntegrationTestSupport.java | 42 +++++++++++++++----- 5 files changed, 83 insertions(+), 14 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/a522c92e/parent/pom.xml ---------------------------------------------------------------------- diff --git a/parent/pom.xml b/parent/pom.xml index 8ae3da2..f3ae665 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -1970,6 +1970,12 @@ <artifactId>pax-swissbox-tinybundles</artifactId> <version>${pax-tiny-bundle-version}</version> </dependency> + <dependency> + <groupId>org.ops4j.pax.exam</groupId> + <artifactId>pax-exam-invoker-junit</artifactId> + <version>${pax-exam-version}</version> + </dependency> + <!-- optional Saxon support --> http://git-wip-us.apache.org/repos/asf/camel/blob/a522c92e/tests/camel-itest-karaf/pom.xml ---------------------------------------------------------------------- diff --git a/tests/camel-itest-karaf/pom.xml b/tests/camel-itest-karaf/pom.xml index 9944170..5f5bc44 100644 --- a/tests/camel-itest-karaf/pom.xml +++ b/tests/camel-itest-karaf/pom.xml @@ -82,6 +82,11 @@ <scope>test</scope> </dependency> <dependency> + <groupId>org.apache.servicemix.bundles</groupId> + <artifactId>org.apache.servicemix.bundles.junit</artifactId> + <version>${junit-bundle-version}</version> + </dependency> + <dependency> <groupId>org.osgi</groupId> <artifactId>org.osgi.core</artifactId> <scope>test</scope> http://git-wip-us.apache.org/repos/asf/camel/blob/a522c92e/tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/AbstractFeatureTest.java ---------------------------------------------------------------------- diff --git a/tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/AbstractFeatureTest.java b/tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/AbstractFeatureTest.java index 430273d..2ab693c 100644 --- a/tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/AbstractFeatureTest.java +++ b/tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/AbstractFeatureTest.java @@ -17,9 +17,11 @@ package org.apache.camel.itest.karaf; import java.io.File; - +import java.io.InputStream; import java.lang.reflect.Field; import java.nio.charset.Charset; +import java.util.Properties; + import javax.inject.Inject; import org.apache.camel.CamelContext; @@ -33,13 +35,14 @@ import org.junit.Before; import org.ops4j.pax.exam.Option; import org.ops4j.pax.exam.karaf.options.KarafDistributionOption; import org.ops4j.pax.exam.karaf.options.LogLevelOption; +import org.ops4j.pax.exam.options.MavenArtifactProvisionOption; import org.ops4j.pax.exam.options.UrlReference; import org.osgi.framework.BundleContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import static org.junit.Assert.assertNotNull; + import static org.ops4j.pax.exam.CoreOptions.maven; import static org.ops4j.pax.exam.CoreOptions.mavenBundle; import static org.ops4j.pax.exam.CoreOptions.vmOption; @@ -177,15 +180,31 @@ public abstract class AbstractFeatureTest { throw new RuntimeException(e); } } - + private static String getKarafVersion() { - String karafVersion = System.getProperty("karafVersion"); + InputStream ins = AbstractFeatureTest.class.getResourceAsStream("/META-INF/maven/dependencies.properties"); + Properties p = new Properties(); + try { + p.load(ins); + } catch (Throwable t) { + // + } + String karafVersion = p.getProperty("org.apache.karaf/apache-karaf/version"); + if (karafVersion == null) { + karafVersion = System.getProperty("karafVersion"); + } if (karafVersion == null) { // setup the default version of it karafVersion = "2.3.6"; } return karafVersion; } + public static MavenArtifactProvisionOption getJUnitBundle() { + MavenArtifactProvisionOption mavenOption = mavenBundle().groupId("org.apache.servicemix.bundles") + .artifactId("org.apache.servicemix.bundles.junit"); + mavenOption.versionAsInProject().start(true).startLevel(10); + return mavenOption; + } public static Option[] configure(String feature) { switchPlatformEncodingToUTF8(); @@ -193,6 +212,10 @@ public abstract class AbstractFeatureTest { LOG.info("*** The karaf version is " + karafVersion + " ***"); Option[] options = new Option[] { + // for remote debugging + //org.ops4j.pax.exam.CoreOptions.vmOption("-Xdebug"), + //org.ops4j.pax.exam.CoreOptions.vmOption("-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5008"), + KarafDistributionOption.karafDistributionConfiguration() .frameworkUrl(maven().groupId("org.apache.karaf").artifactId("apache-karaf").type("tar.gz").versionAsInProject()) .karafVersion(karafVersion) @@ -206,7 +229,8 @@ public abstract class AbstractFeatureTest { //KarafDistributionOption.replaceConfigurationFile("etc/config.properties", new File("src/test/resources/org/apache/camel/itest/karaf/config.properties")), KarafDistributionOption.replaceConfigurationFile("etc/custom.properties", new File("src/test/resources/org/apache/camel/itest/karaf/custom.properties")), KarafDistributionOption.replaceConfigurationFile("etc/org.ops4j.pax.url.mvn.cfg", new File("src/test/resources/org/apache/camel/itest/karaf/org.ops4j.pax.url.mvn.cfg")), - + + getJUnitBundle(), // we need INFO logging otherwise we cannot see what happens new LogLevelOption(LogLevelOption.LogLevel.INFO), http://git-wip-us.apache.org/repos/asf/camel/blob/a522c92e/tests/camel-itest-osgi/pom.xml ---------------------------------------------------------------------- diff --git a/tests/camel-itest-osgi/pom.xml b/tests/camel-itest-osgi/pom.xml index a1be199..c1106f8 100644 --- a/tests/camel-itest-osgi/pom.xml +++ b/tests/camel-itest-osgi/pom.xml @@ -56,6 +56,11 @@ </dependency> <dependency> <groupId>org.ops4j.pax.exam</groupId> + <artifactId>pax-exam-invoker-junit</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.ops4j.pax.exam</groupId> <artifactId>pax-exam</artifactId> <scope>test</scope> </dependency> @@ -338,6 +343,11 @@ <scope>test</scope> </dependency> <dependency> + <groupId>org.apache.servicemix.bundles</groupId> + <artifactId>org.apache.servicemix.bundles.junit</artifactId> + <version>${junit-bundle-version}</version> + </dependency> + <dependency> <groupId>org.apache.aries.blueprint</groupId> <artifactId>org.apache.aries.blueprint</artifactId> <scope>test</scope> http://git-wip-us.apache.org/repos/asf/camel/blob/a522c92e/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/OSGiIntegrationTestSupport.java ---------------------------------------------------------------------- diff --git a/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/OSGiIntegrationTestSupport.java b/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/OSGiIntegrationTestSupport.java index e9ee455..359403f 100644 --- a/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/OSGiIntegrationTestSupport.java +++ b/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/OSGiIntegrationTestSupport.java @@ -16,8 +16,10 @@ */ package org.apache.camel.itest.osgi; import java.io.File; +import java.io.InputStream; import java.util.ArrayList; import java.util.List; +import java.util.Properties; import java.util.concurrent.atomic.AtomicInteger; import javax.inject.Inject; @@ -80,6 +82,12 @@ public class OSGiIntegrationTestSupport extends CamelTestSupport { return getCamelKarafFeatureUrl(null); } + public static MavenArtifactProvisionOption getJUnitBundle() { + MavenArtifactProvisionOption mavenOption = mavenBundle().groupId("org.apache.servicemix.bundles") + .artifactId("org.apache.servicemix.bundles.junit"); + mavenOption.versionAsInProject().start(true).startLevel(10); + return mavenOption; + } public static UrlReference getCamelKarafFeatureUrl(String version) { String type = "xml/features"; @@ -139,7 +147,17 @@ public class OSGiIntegrationTestSupport extends CamelTestSupport { } private static String getKarafVersion() { - String karafVersion = System.getProperty("karafVersion"); + InputStream ins = OSGiIntegrationTestSupport.class.getResourceAsStream("/META-INF/maven/dependencies.properties"); + Properties p = new Properties(); + try { + p.load(ins); + } catch (Throwable t) { + // + } + String karafVersion = p.getProperty("org.apache.karaf/apache-karaf/version"); + if (karafVersion == null) { + karafVersion = System.getProperty("karafVersion"); + } if (karafVersion == null) { // setup the default version of it karafVersion = "2.3.6"; @@ -154,19 +172,27 @@ public class OSGiIntegrationTestSupport extends CamelTestSupport { Option[] options = // Set the karaf environment with some customer configuration new Option[] { + // for remote debugging + //org.ops4j.pax.exam.CoreOptions.vmOption("-Xdebug"), + //org.ops4j.pax.exam.CoreOptions.vmOption("-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5008"), + KarafDistributionOption.karafDistributionConfiguration() - .frameworkUrl(maven().groupId("org.apache.karaf").artifactId("apache-karaf").type("tar.gz").versionAsInProject()) + .frameworkUrl(maven().groupId("org.apache.karaf") + .artifactId("apache-karaf").type("tar.gz").versionAsInProject()) .karafVersion(karafVersion) .name("Apache Karaf") - .useDeployFolder(false).unpackDirectory(new File("target/paxexam/unpack/")), + .useDeployFolder(false) + .unpackDirectory(new File("target/paxexam/unpack/")), //KarafDistributionOption.keepRuntimeFolder(), // override the config.properties (to fix pax-exam bug) // KarafDistributionOption.replaceConfigurationFile("etc/config.properties", new File("src/test/resources/org/apache/camel/itest/karaf/config.properties")), KarafDistributionOption.replaceConfigurationFile("etc/custom.properties", new File("src/test/resources/org/apache/camel/itest/karaf/custom.properties")), KarafDistributionOption.replaceConfigurationFile("etc/org.ops4j.pax.url.mvn.cfg", new File("src/test/resources/org/apache/camel/itest/karaf/org.ops4j.pax.url.mvn.cfg")), - - + + //Grab JUnit and put it very early in the startup to make sure any bundles that are loaded + //will use the same version/bundle + getJUnitBundle(), // we need INFO logging otherwise we cannot see what happens new LogLevelOption(LogLevelOption.LogLevel.INFO), // install the cxf jaxb spec as the karaf doesn't provide it by default @@ -179,10 +205,8 @@ public class OSGiIntegrationTestSupport extends CamelTestSupport { @Configuration public static Option[] configure() throws Exception { Option[] options = combine( - getDefaultCamelKarafOptions()); - - // for remote debugging - // vmOption("-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5008"), + getDefaultCamelKarafOptions() + ); return options; }