Hi,

yes, the the items (1) of src/main/java are in the stream bundle 
(src/main/resources is empty).  The blueprint.xml is in 
src/test/resources/OSGI-INF/blueprint because it is only used for test 
purposes. What is also strange is, that test test seems to run the class 
SipDetectionProcessor it complains to not found! The test class is:

package ch.eugster.ingest.test.sip.detection.processor;

import static org.ops4j.pax.exam.CoreOptions.maven;
import static org.ops4j.pax.exam.CoreOptions.mavenBundle;
import static org.ops4j.pax.exam.CoreOptions.streamBundle;
import static org.ops4j.pax.exam.CoreOptions.wrappedBundle;
import static 
org.ops4j.pax.exam.karaf.options.KarafDistributionOption.configureConsole;
import static org.ops4j.pax.exam.karaf.options.KarafDistributionOption.features;
import static 
org.ops4j.pax.exam.karaf.options.KarafDistributionOption.karafDistributionConfiguration;
import static org.ops4j.pax.exam.karaf.options.KarafDistributionOption.logLevel;
import static org.ops4j.pax.tinybundles.core.TinyBundles.bundle;

import java.io.File;

import javax.inject.Inject;

import org.apache.camel.CamelContext;
import org.apache.camel.Exchange;
import org.apache.camel.Message;
import org.apache.camel.ProducerTemplate;
import org.apache.camel.component.file.GenericFile;
import org.apache.camel.component.mock.MockEndpoint;
import org.apache.camel.impl.DefaultExchange;
import org.apache.camel.impl.DefaultMessage;
import org.apache.camel.test.junit4.CamelTestSupport;
import org.apache.karaf.features.FeaturesService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.ops4j.pax.exam.Configuration;
import org.ops4j.pax.exam.Option;
import org.ops4j.pax.exam.junit.PaxExam;
import org.ops4j.pax.exam.karaf.options.LogLevelOption.LogLevel;
import org.ops4j.pax.exam.util.Filter;
import org.osgi.framework.BundleContext;
import org.osgi.framework.Constants;

import ch.eugster.ingest.sip.detection.processor.SipDetectionProcessor;
import ch.eugster.ingest.sip.detector.api.SipDetector;

@RunWith(PaxExam.class)
public class KarafContainerTest extends CamelTestSupport
{
        private String zipOk    = new 
File("../../../../src/test/resources/SIP_20150306_Matterhorn.zip").getAbsolutePath();

        private String zipNotOk = new 
File("../../../../src/test/resources/SIP_20140430_eCH-0160v1.zip").getAbsolutePath();

        @Inject
        protected BundleContext bundleContext;
        
        @Inject
        protected FeaturesService featuresService;
        
        @Inject 
        protected SipDetector sipDetector;

        @Inject
        @Filter(value="(camel.context.name=blueprintContext)", timeout=10000)
        protected CamelContext testContext;
        @Configuration
        public static Option[] configuration() throws Exception 
        {
                System.out.println("Configuring container");
                return new Option[] {
                                
karafDistributionConfiguration().frameworkUrl(maven().groupId("org.apache.karaf").artifactId("apache-karaf")
                                                
.type("zip").versionAsInProject())
                                                .unpackDirectory(new 
File("target/paxexam/unpack/"))
                                                .useDeployFolder(false),
                                configureConsole().ignoreLocalConsole(),
                                logLevel(LogLevel.INFO),
                                features(
                                                
maven().groupId("org.apache.camel.karaf").artifactId("apache-camel").type("xml")
                                                                
.classifier("features").versionAsInProject(), "camel-blueprint", "camel-test"),
                                features(
                                                
maven().groupId("org.apache.karaf.features")
                                                                
.artifactId("standard").type("xml")
                                                                
.classifier("features").versionAsInProject(),
                                                "eventadmin"),
                                wrappedBundle(mavenBundle()
                                                
.groupId("de.schlichtherle.truezip")
                                                .artifactId("truezip-swing")
                                                .version("7.7.8")),
                                wrappedBundle(mavenBundle()
                                                
.groupId("de.schlichtherle.truezip")
                                                .artifactId("truezip-kernel")
                                                .version("7.7.8")),
                                wrappedBundle(mavenBundle()
                                                
.groupId("de.schlichtherle.truezip")
                                                .artifactId("truezip-file")
                                                .version("7.7.8")),
                                wrappedBundle(mavenBundle()
                                                
.groupId("de.schlichtherle.truezip")
                                                .artifactId("truezip-path")
                                                .version("7.7.8")),
                                wrappedBundle(mavenBundle()
                                                
.groupId("de.schlichtherle.truezip")
                                                
.artifactId("truezip-driver-file")
                                                .version("7.7.8")),
                                wrappedBundle(mavenBundle()
                                                
.groupId("de.schlichtherle.truezip")
                                                
.artifactId("truezip-driver-zip")
                                                .version("7.7.8")),
                                mavenBundle().groupId("ch.eugster.ingest")
                                                .artifactId("sip-api")
                                                .version("0.0.1-SNAPSHOT"),
                                mavenBundle().groupId("ch.eugster.ingest")
                                                .artifactId("sip-detector-api")
                                                .version("0.0.1-SNAPSHOT"),
                                mavenBundle().groupId("ch.eugster.ingest")
                                                
.artifactId("sip-matterhorn-profile")
                                                .version("0.0.1-SNAPSHOT"),
                                mavenBundle().groupId("ch.eugster.ingest")
                                                
.artifactId("sip-detector-matterhorn")
                                                .version("0.0.1-SNAPSHOT"),
                                streamBundle(
                                                bundle()
                                                                
.add(SipDetectionProcessor.class)
                                                                
.add("OSGI-INF/blueprint/camel-context.xml",
                                                                                
new File("src/test/resources/OSGI-INF/blueprint/blueprint.xml")
                                                                                
                .toURL())
                                                                
.set(Constants.BUNDLE_SYMBOLICNAME, "sip-detection-processor")
                                                                
.set(Constants.DYNAMICIMPORT_PACKAGE, "*").build())
                                                                .start() 
                                };
        }
        
        @Override
        public boolean isCreateCamelContextPerClass() 
        {
                // we override this method and return true, to tell Camel 
test-kit that
                // it should only create CamelContext once (per class), so we 
will
                // re-use the CamelContext between each test method in this 
class
                return true;
        }
        
        @Test
        public void test() throws Exception 
        {
                System.out.println("START TEST");
                
                
assertTrue(featuresService.isInstalled(featuresService.getFeature("eventadmin")));
                
assertTrue(featuresService.isInstalled(featuresService.getFeature("camel-core")));
                
assertTrue(featuresService.isInstalled(featuresService.getFeature("camel-blueprint")));

                System.out.println("Checking sipDetector service: " + 
(this.sipDetector == null ? "not available" : "available"));
                assertTrue(this.sipDetector != null);
                
                doPreSetup();

                MockEndpoint mockEndpoint = (MockEndpoint) 
testContext.getEndpoint("mock:result");
                mockEndpoint.expectedMessageCount(1);

                File file = new File(zipOk);
                System.out.println("File '" + file.getName() + "' " + 
(file.exists() ? "exists" : "does not exist"));
                assertTrue(file.isFile());
                
                ProducerTemplate template = 
this.testContext.createProducerTemplate();
                Message message = new DefaultMessage();
                GenericFile<File> genericFile = new GenericFile<File>();
                genericFile.setFile(file);
                message.setBody(file);
                Exchange exchange = new DefaultExchange(testContext);
                exchange.setIn(message);
                template.send("direct:start", exchange);
                
                file = new File(zipNotOk);
                System.out.println("File '" + file.getName() + "' " + 
(file.exists() ? "exists" : "does not exist"));
                assertTrue(file.isFile());
                
                message = new DefaultMessage();
                genericFile = new GenericFile<File>();
                genericFile.setFile(file);
                message.setBody(file);
                exchange = new DefaultExchange(testContext);
                exchange.setIn(message);
                template.send("direct:start", exchange);

                mockEndpoint.assertIsSatisfied(15000);
        }

}


Christian Eugster
Docuteam GmbH
Langacker 16
Postfach
CH-5405 Baden-Dättwil
+41 (0)56 470 03 37
c.eugs...@docuteam.ch


Reply via email to