| /** |
| * 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.camel.itest.osgi; |
| |
| import org.apache.camel.CamelContext; |
| import org.apache.camel.osgi.CamelContextFactory; |
| import org.apache.camel.test.junit4.CamelTestSupport; |
| import org.apache.karaf.testing.Helper; |
| import org.ops4j.pax.exam.Inject; |
| import org.ops4j.pax.exam.Option; |
| import org.ops4j.pax.exam.junit.Configuration; |
| import org.ops4j.pax.exam.options.UrlReference; |
| import org.osgi.framework.Bundle; |
| import org.osgi.framework.BundleContext; |
| import org.slf4j.Logger; |
| import org.slf4j.LoggerFactory; |
| |
| import static org.ops4j.pax.exam.CoreOptions.equinox; |
| import static org.ops4j.pax.exam.CoreOptions.felix; |
| import static org.ops4j.pax.exam.CoreOptions.mavenBundle; |
| import static org.ops4j.pax.exam.OptionUtils.combine; |
| import static org.ops4j.pax.exam.container.def.PaxRunnerOptions.profile; |
| import static org.ops4j.pax.exam.container.def.PaxRunnerOptions.scanFeatures; |
| import static org.ops4j.pax.exam.container.def.PaxRunnerOptions.workingDirectory; |
| |
| public class OSGiIntegrationTestSupport extends CamelTestSupport { |
| protected static final transient Logger LOG = LoggerFactory.getLogger(OSGiIntegrationTestSupport.class); |
| @Inject |
| protected BundleContext bundleContext; |
| |
| protected Bundle getInstalledBundle(String symbolicName) { |
| for (Bundle b : bundleContext.getBundles()) { |
| if (b.getSymbolicName().equals(symbolicName)) { |
| return b; |
| } |
| } |
| for (Bundle b : bundleContext.getBundles()) { |
| System.err.println("Bundle: " + b.getSymbolicName()); |
| } |
| throw new RuntimeException("Bundle " + symbolicName + " does not exist"); |
| } |
| |
| protected CamelContext createCamelContext() throws Exception { |
| LOG.info("Get the bundleContext is " + bundleContext); |
| LOG.info("Application installed as bundle id: " + bundleContext.getBundle().getBundleId()); |
| |
| setThreadContextClassLoader(); |
| |
| CamelContextFactory factory = new CamelContextFactory(); |
| factory.setBundleContext(bundleContext); |
| factory.setRegistry(createRegistry()); |
| return factory.createContext(); |
| } |
| |
| protected void setThreadContextClassLoader() { |
| // set the thread context classloader current bundle classloader |
| Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader()); |
| } |
| |
| public static UrlReference getCamelKarafFeatureUrl() { |
| |
| String type = "xml/features"; |
| return mavenBundle().groupId("org.apache.camel.karaf"). |
| artifactId("apache-camel").versionAsInProject().type(type); |
| } |
| |
| public static UrlReference getKarafFeatureUrl() { |
| String karafVersion = System.getProperty("karafVersion"); |
| System.out.println("*** The karaf version is " + karafVersion + " ***"); |
| |
| String type = "xml/features"; |
| return mavenBundle().groupId("org.apache.karaf.assemblies.features"). |
| artifactId("standard").version(karafVersion).type(type); |
| } |
| |
| public static Option[] getDefaultCamelKarafOptions() { |
| Option[] options = combine( |
| // Default karaf environment |
| Helper.getDefaultOptions( |
| // this is how you set the default log level when using pax logging (logProfile) |
| Helper.setLogLevel("WARN")), |
| |
| // install the spring, http features first |
| scanFeatures(getKarafFeatureUrl(), "spring", "spring-dm", "jetty"), |
| |
| // using the features to install the camel components |
| scanFeatures(getCamelKarafFeatureUrl(), |
| "camel-core", "camel-spring", "camel-test"), |
| |
| workingDirectory("target/paxrunner/"), |
| |
| equinox(), |
| felix()); |
| return options; |
| } |
| |
| @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"), |
| |
| return options; |
| } |
| |
| } |