Fix FELIX-4217 Ensure compatibility between Aries Blueprint and iPOJO
Add compatibility tests checking the compatibility between iPOJO, SCR and Blueprint
Are currently tested : Felix SCR, Aries Blueprint, KF SCR
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1524156 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/ipojo/runtime/core-it/ipojo-compatibility-test/pom.xml b/ipojo/runtime/core-it/ipojo-compatibility-test/pom.xml
new file mode 100644
index 0000000..36030a6
--- /dev/null
+++ b/ipojo/runtime/core-it/ipojo-compatibility-test/pom.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>org.apache.felix.ipojo.runtime.core-it</artifactId>
+ <version>1.10.2-SNAPSHOT</version>
+ </parent>
+
+ <artifactId>ipojo-compatibility-test</artifactId>
+ <version>1.10.2-SNAPSHOT</version>
+
+ <name>${project.artifactId}</name>
+
+</project>
\ No newline at end of file
diff --git a/ipojo/runtime/core-it/ipojo-compatibility-test/src/main/java/org/apache/felix/ipojo/test/compatibility/ipojo/HelloServiceConsumer.java b/ipojo/runtime/core-it/ipojo-compatibility-test/src/main/java/org/apache/felix/ipojo/test/compatibility/ipojo/HelloServiceConsumer.java
new file mode 100644
index 0000000..a6a7b95
--- /dev/null
+++ b/ipojo/runtime/core-it/ipojo-compatibility-test/src/main/java/org/apache/felix/ipojo/test/compatibility/ipojo/HelloServiceConsumer.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.felix.ipojo.test.compatibility.ipojo;
+
+import org.apache.felix.ipojo.annotations.Component;
+import org.apache.felix.ipojo.annotations.Instantiate;
+import org.apache.felix.ipojo.annotations.Provides;
+import org.apache.felix.ipojo.annotations.Requires;
+import org.apache.felix.ipojo.test.compatibility.service.CheckService;
+import org.apache.felix.ipojo.test.compatibility.service.HelloService;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+/**
+ * Hello Service Provider with iPOJO.
+ */
+@Component
+@Provides
+@Instantiate
+public class HelloServiceConsumer implements CheckService {
+
+ @Requires
+ private HelloService hello;
+
+ @Override
+ public Map<String, Object> data() {
+ Map<String, Object> map = new LinkedHashMap<String, Object>();
+ map.put("result", hello.hello("john doe"));
+ map.put("object", hello);
+ return map;
+ }
+}
diff --git a/ipojo/runtime/core-it/ipojo-compatibility-test/src/main/java/org/apache/felix/ipojo/test/compatibility/ipojo/HelloServiceProvider.java b/ipojo/runtime/core-it/ipojo-compatibility-test/src/main/java/org/apache/felix/ipojo/test/compatibility/ipojo/HelloServiceProvider.java
new file mode 100644
index 0000000..11f4f49
--- /dev/null
+++ b/ipojo/runtime/core-it/ipojo-compatibility-test/src/main/java/org/apache/felix/ipojo/test/compatibility/ipojo/HelloServiceProvider.java
@@ -0,0 +1,44 @@
+/*
+ * 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.felix.ipojo.test.compatibility.ipojo;
+
+import org.apache.felix.ipojo.annotations.Component;
+import org.apache.felix.ipojo.annotations.Instantiate;
+import org.apache.felix.ipojo.annotations.Provides;
+import org.apache.felix.ipojo.test.compatibility.service.HelloService;
+
+/**
+ * Hello Service Provider with iPOJO.
+ */
+@Component
+@Provides
+@Instantiate
+public class HelloServiceProvider implements HelloService {
+
+ /**
+ * A very original implementation.
+ * @param name the name
+ * @return hello $name
+ */
+ @Override
+ public String hello(String name) {
+ return "hello " + name;
+ }
+}
diff --git a/ipojo/runtime/core-it/ipojo-compatibility-test/src/main/java/org/apache/felix/ipojo/test/compatibility/scr/HelloServiceConsumer.java b/ipojo/runtime/core-it/ipojo-compatibility-test/src/main/java/org/apache/felix/ipojo/test/compatibility/scr/HelloServiceConsumer.java
new file mode 100644
index 0000000..36e05d8
--- /dev/null
+++ b/ipojo/runtime/core-it/ipojo-compatibility-test/src/main/java/org/apache/felix/ipojo/test/compatibility/scr/HelloServiceConsumer.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.felix.ipojo.test.compatibility.scr;
+
+import org.apache.felix.ipojo.test.compatibility.service.CheckService;
+import org.apache.felix.ipojo.test.compatibility.service.HelloService;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+/**
+ * Hello Service Provider with SCR.
+ */
+public class HelloServiceConsumer implements CheckService {
+
+ private HelloService hello;
+
+ @Override
+ public Map<String, Object> data() {
+ synchronized (this) {
+ Map<String, Object> map = new LinkedHashMap<String, Object>();
+ if (hello != null) {
+ map.put("result", hello.hello("john doe"));
+ map.put("object", hello);
+ }
+ return map;
+ }
+ }
+
+ public void bindHello(HelloService h) {
+ synchronized (this) {
+ hello = h;
+ }
+ }
+
+ public void unbindHello(HelloService h) {
+ synchronized (this) {
+ hello = null;
+ }
+ }
+
+ /**
+ * Used by blueprint...
+ *
+ * @param h the hello service instance.
+ */
+ public void setHello(HelloService h) {
+ hello = h;
+ }
+}
diff --git a/ipojo/runtime/core-it/ipojo-compatibility-test/src/main/java/org/apache/felix/ipojo/test/compatibility/scr/HelloServiceProvider.java b/ipojo/runtime/core-it/ipojo-compatibility-test/src/main/java/org/apache/felix/ipojo/test/compatibility/scr/HelloServiceProvider.java
new file mode 100644
index 0000000..93579ea
--- /dev/null
+++ b/ipojo/runtime/core-it/ipojo-compatibility-test/src/main/java/org/apache/felix/ipojo/test/compatibility/scr/HelloServiceProvider.java
@@ -0,0 +1,41 @@
+/*
+ * 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.felix.ipojo.test.compatibility.scr;
+
+import org.apache.felix.ipojo.annotations.Component;
+import org.apache.felix.ipojo.annotations.Instantiate;
+import org.apache.felix.ipojo.annotations.Provides;
+import org.apache.felix.ipojo.test.compatibility.service.HelloService;
+
+/**
+ * Hello Service Provider with SCR.
+ */
+public class HelloServiceProvider implements HelloService {
+
+ /**
+ * A very original implementation.
+ * @param name the name
+ * @return hello $name
+ */
+ @Override
+ public String hello(String name) {
+ return "hello " + name;
+ }
+}
diff --git a/ipojo/runtime/core-it/ipojo-compatibility-test/src/main/java/org/apache/felix/ipojo/test/compatibility/service/CheckService.java b/ipojo/runtime/core-it/ipojo-compatibility-test/src/main/java/org/apache/felix/ipojo/test/compatibility/service/CheckService.java
new file mode 100644
index 0000000..08131ba
--- /dev/null
+++ b/ipojo/runtime/core-it/ipojo-compatibility-test/src/main/java/org/apache/felix/ipojo/test/compatibility/service/CheckService.java
@@ -0,0 +1,31 @@
+/*
+ * 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.felix.ipojo.test.compatibility.service;
+
+import java.util.Map;
+
+/**
+ * A service used to check the correct invocation.
+ */
+public interface CheckService {
+
+ public Map<String, Object> data();
+
+}
diff --git a/ipojo/runtime/core-it/ipojo-compatibility-test/src/main/java/org/apache/felix/ipojo/test/compatibility/service/HelloService.java b/ipojo/runtime/core-it/ipojo-compatibility-test/src/main/java/org/apache/felix/ipojo/test/compatibility/service/HelloService.java
new file mode 100644
index 0000000..50c4781
--- /dev/null
+++ b/ipojo/runtime/core-it/ipojo-compatibility-test/src/main/java/org/apache/felix/ipojo/test/compatibility/service/HelloService.java
@@ -0,0 +1,28 @@
+/*
+ * 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.felix.ipojo.test.compatibility.service;
+
+/**
+ * A simple service that will be implemented with several technology.
+ */
+public interface HelloService {
+
+ public String hello(String name);
+}
diff --git a/ipojo/runtime/core-it/ipojo-compatibility-test/src/main/resources/blueprint/HelloConsumer.xml b/ipojo/runtime/core-it/ipojo-compatibility-test/src/main/resources/blueprint/HelloConsumer.xml
new file mode 100644
index 0000000..4f86166
--- /dev/null
+++ b/ipojo/runtime/core-it/ipojo-compatibility-test/src/main/resources/blueprint/HelloConsumer.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
+
+ <!-- Reuse the same implementation as for SCR -->
+ <bean id="consumer" class="org.apache.felix.ipojo.test.compatibility.scr.HelloServiceConsumer">
+ <property name="hello" ref="helloRef"/>
+ </bean>
+
+ <service id="service" ref="consumer" interface="org.apache.felix.ipojo.test.compatibility.service.CheckService"/>
+ <reference id="helloRef" availability="mandatory"
+ interface="org.apache.felix.ipojo.test.compatibility.service.HelloService"/>
+
+</blueprint>
\ No newline at end of file
diff --git a/ipojo/runtime/core-it/ipojo-compatibility-test/src/main/resources/blueprint/HelloProvider.xml b/ipojo/runtime/core-it/ipojo-compatibility-test/src/main/resources/blueprint/HelloProvider.xml
new file mode 100644
index 0000000..9aa5be9
--- /dev/null
+++ b/ipojo/runtime/core-it/ipojo-compatibility-test/src/main/resources/blueprint/HelloProvider.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
+
+ <!-- Reuse the same implementation as for SCR -->
+ <bean id="provider" class="org.apache.felix.ipojo.test.compatibility.scr.HelloServiceProvider">
+ </bean>
+
+ <service id="service" ref="provider" interface="org.apache.felix.ipojo.test.compatibility.service.HelloService"/>
+
+</blueprint>
\ No newline at end of file
diff --git a/ipojo/runtime/core-it/ipojo-compatibility-test/src/main/resources/scr/HelloConsumer.xml b/ipojo/runtime/core-it/ipojo-compatibility-test/src/main/resources/scr/HelloConsumer.xml
new file mode 100644
index 0000000..d71b6ab
--- /dev/null
+++ b/ipojo/runtime/core-it/ipojo-compatibility-test/src/main/resources/scr/HelloConsumer.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<component name="org.apache.felix.ipojo.test.compatibility.scr.HelloServiceConsumer" immediate="true">
+ <implementation class="org.apache.felix.ipojo.test.compatibility.scr.HelloServiceConsumer"/>
+ <service>
+ <provide interface="org.apache.felix.ipojo.test.compatibility.service.CheckService"/>
+ </service>
+ <reference name="hello"
+ interface="org.apache.felix.ipojo.test.compatibility.service.HelloService"
+ cardinality="1..1"
+ policy="dynamic"
+ bind="bindHello"
+ unbind="unbindHello"
+ />
+</component>
\ No newline at end of file
diff --git a/ipojo/runtime/core-it/ipojo-compatibility-test/src/main/resources/scr/HelloProvider.xml b/ipojo/runtime/core-it/ipojo-compatibility-test/src/main/resources/scr/HelloProvider.xml
new file mode 100644
index 0000000..a8e048a
--- /dev/null
+++ b/ipojo/runtime/core-it/ipojo-compatibility-test/src/main/resources/scr/HelloProvider.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<component name="org.apache.felix.ipojo.test.compatibility.scr.HelloServiceProvider" immediate="true">
+ <implementation class="org.apache.felix.ipojo.test.compatibility.scr.HelloServiceProvider" />
+ <service>
+ <provide interface="org.apache.felix.ipojo.test.compatibility.service.HelloService" />
+ </service>
+</component>
\ No newline at end of file
diff --git a/ipojo/runtime/core-it/ipojo-compatibility-test/src/test/java/org/apache/felix/ipojo/test/compatibility/Common.java b/ipojo/runtime/core-it/ipojo-compatibility-test/src/test/java/org/apache/felix/ipojo/test/compatibility/Common.java
new file mode 100644
index 0000000..c51f593
--- /dev/null
+++ b/ipojo/runtime/core-it/ipojo-compatibility-test/src/test/java/org/apache/felix/ipojo/test/compatibility/Common.java
@@ -0,0 +1,297 @@
+/*
+ * 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.felix.ipojo.test.compatibility;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.felix.ipojo.test.compatibility.ipojo.HelloServiceConsumer;
+import org.apache.felix.ipojo.test.compatibility.ipojo.HelloServiceProvider;
+import org.apache.felix.ipojo.test.compatibility.service.CheckService;
+import org.apache.felix.ipojo.test.compatibility.service.HelloService;
+import org.ops4j.pax.exam.Option;
+import org.ops4j.pax.exam.OptionUtils;
+import org.ops4j.pax.tinybundles.core.TinyBundle;
+import org.ops4j.pax.tinybundles.core.TinyBundles;
+import org.osgi.framework.Constants;
+import org.ow2.chameleon.testing.helpers.BaseTest;
+import org.ow2.chameleon.testing.tinybundles.ipojo.IPOJOStrategy;
+
+import java.io.*;
+import java.net.MalformedURLException;
+
+import static org.ops4j.pax.exam.CoreOptions.*;
+import static org.ops4j.pax.tinybundles.core.TinyBundles.withBnd;
+
+/**
+ * Configure the tests.
+ */
+public abstract class Common extends BaseTest {
+
+ @Override
+ public boolean deployTestBundle() {
+ return false;
+ }
+
+ @Override
+ protected Option[] getCustomOptions() {
+ Option[] options = new Option[] {
+ service(),
+ wrappedBundle(maven("org.easytesting", "fest-assert").versionAsInProject()),
+ wrappedBundle(maven("org.easytesting", "fest-util").versionAsInProject())
+ };
+
+ return OptionUtils.combine(options, bundles());
+ }
+
+ public abstract Option[] bundles();
+
+ /**
+ * Package the service interfaces.
+ */
+ public Option service() {
+ File out = new File("target/bundles/service.jar");
+ if (out.exists()) {
+ try {
+ return bundle(out.toURI().toURL().toExternalForm());
+ } catch (MalformedURLException e) {
+ // Ignore it.
+ }
+ }
+
+ TinyBundle bundle = TinyBundles.bundle();
+ bundle.add(CheckService.class);
+ bundle.add(HelloService.class);
+ InputStream inputStream = bundle
+ .set(Constants.BUNDLE_SYMBOLICNAME, "services")
+ .set(Constants.EXPORT_PACKAGE, "org.apache.felix.ipojo.test.compatibility.service")
+ .build(withBnd());
+
+ try {
+ FileUtils.copyInputStreamToFile(inputStream, out);
+ return bundle(out.toURI().toURL().toExternalForm());
+ } catch (IOException e) {
+ e.printStackTrace();
+ return null;
+ }
+ }
+
+ /**
+ * iPOJO Hello Service Provider.
+ */
+ public Option iPOJOHelloProvider() {
+ File out = new File("target/bundles/hello-provider-ipojo.jar");
+ if (out.exists()) {
+ try {
+ return bundle(out.toURI().toURL().toExternalForm());
+ } catch (MalformedURLException e) {
+ // Ignore it.
+ }
+ }
+
+ TinyBundle bundle = TinyBundles.bundle();
+ bundle.add(HelloServiceProvider.class);
+ InputStream inputStream = bundle
+ .set(Constants.BUNDLE_SYMBOLICNAME, "iPOJO-Hello-Provider")
+ .set(Constants.IMPORT_PACKAGE, "*")
+ .build(IPOJOStrategy.withiPOJO());
+
+ try {
+ FileUtils.copyInputStreamToFile(inputStream, out);
+ return bundle(out.toURI().toURL().toExternalForm());
+ } catch (IOException e) {
+ e.printStackTrace();
+ return null;
+ }
+ }
+
+ /**
+ * iPOJO Hello Service Provider.
+ */
+ public Option iPOJOHelloConsumer() {
+ File out = new File("target/bundles/hello-consumer-ipojo.jar");
+ if (out.exists()) {
+ try {
+ return bundle(out.toURI().toURL().toExternalForm());
+ } catch (MalformedURLException e) {
+ // Ignore it.
+ }
+ }
+
+ TinyBundle bundle = TinyBundles.bundle();
+ bundle.add(HelloServiceConsumer.class);
+ InputStream inputStream = bundle
+ .set(Constants.BUNDLE_SYMBOLICNAME, "iPOJO-Hello-Consumer")
+ .set(Constants.IMPORT_PACKAGE, "*")
+ .build(IPOJOStrategy.withiPOJO());
+
+ try {
+ FileUtils.copyInputStreamToFile(inputStream, out);
+ return bundle(out.toURI().toURL().toExternalForm());
+ } catch (IOException e) {
+ e.printStackTrace();
+ return null;
+ }
+ }
+
+ /**
+ * Package the SCR Hello Service Provider.
+ */
+ public Option SCRHelloProvider() {
+ File out = new File("target/bundles/hello-provider-scr.jar");
+ if (out.exists()) {
+ try {
+ return bundle(out.toURI().toURL().toExternalForm());
+ } catch (MalformedURLException e) {
+ // Ignore it.
+ }
+ }
+
+ File metadata = new File("src/main/resources/scr", "HelloProvider.xml");
+
+ TinyBundle bundle = TinyBundles.bundle();
+ bundle.add(org.apache.felix.ipojo.test.compatibility.scr.HelloServiceProvider.class);
+ try {
+ bundle.add("scr/provider.xml", new FileInputStream(metadata));
+ } catch (FileNotFoundException e) {
+ throw new IllegalArgumentException("Cannot find XML metadata : " + metadata.getAbsolutePath());
+ }
+
+ InputStream inputStream = bundle
+ .set(Constants.BUNDLE_SYMBOLICNAME, "hello-provider-scr")
+ .set(Constants.IMPORT_PACKAGE, "*")
+ .set("Service-Component", "scr/provider.xml")
+ .build(withBnd());
+
+ try {
+ FileUtils.copyInputStreamToFile(inputStream, out);
+ return bundle(out.toURI().toURL().toExternalForm());
+ } catch (IOException e) {
+ e.printStackTrace();
+ return null;
+ }
+ }
+
+ public Option SCRHelloConsumer() {
+ File out = new File("target/bundles/hello-consumer-scr.jar");
+ if (out.exists()) {
+ try {
+ return bundle(out.toURI().toURL().toExternalForm());
+ } catch (MalformedURLException e) {
+ // Ignore it.
+ }
+ }
+
+ File metadata = new File("src/main/resources/scr", "HelloConsumer.xml");
+
+ TinyBundle bundle = TinyBundles.bundle();
+ bundle.add(org.apache.felix.ipojo.test.compatibility.scr.HelloServiceConsumer.class);
+ try {
+ bundle.add("scr/consumer.xml", new FileInputStream(metadata));
+ } catch (FileNotFoundException e) {
+ throw new IllegalArgumentException("Cannot find XML metadata : " + metadata.getAbsolutePath());
+ }
+
+ InputStream inputStream = bundle
+ .set(Constants.BUNDLE_SYMBOLICNAME, "hello-consumer-scr")
+ .set(Constants.IMPORT_PACKAGE, "*")
+ .set("Service-Component", "scr/consumer.xml")
+ .build(withBnd());
+
+ try {
+ FileUtils.copyInputStreamToFile(inputStream, out);
+ return bundle(out.toURI().toURL().toExternalForm());
+ } catch (IOException e) {
+ e.printStackTrace();
+ return null;
+ }
+ }
+
+ /**
+ * Package the Blueprint Hello Service Provider.
+ */
+ public Option BPHelloProvider() {
+ File out = new File("target/bundles/hello-provider-blueprint.jar");
+ if (out.exists()) {
+ try {
+ return bundle(out.toURI().toURL().toExternalForm());
+ } catch (MalformedURLException e) {
+ // Ignore it.
+ }
+ }
+
+ File metadata = new File("src/main/resources/blueprint", "HelloProvider.xml");
+
+ TinyBundle bundle = TinyBundles.bundle();
+ bundle.add(org.apache.felix.ipojo.test.compatibility.scr.HelloServiceProvider.class);
+ try {
+ bundle.add("blueprint/provider.xml", new FileInputStream(metadata));
+ } catch (FileNotFoundException e) {
+ throw new IllegalArgumentException("Cannot find XML metadata : " + metadata.getAbsolutePath());
+ }
+
+ InputStream inputStream = bundle
+ .set(Constants.BUNDLE_SYMBOLICNAME, "hello-provider-blueprint")
+ .set(Constants.IMPORT_PACKAGE, "*")
+ .set("Bundle-Blueprint", "blueprint/provider.xml")
+ .build(withBnd());
+
+ try {
+ FileUtils.copyInputStreamToFile(inputStream, out);
+ return bundle(out.toURI().toURL().toExternalForm());
+ } catch (IOException e) {
+ e.printStackTrace();
+ return null;
+ }
+ }
+
+ public Option BPHelloConsumer() {
+ File out = new File("target/bundles/hello-consumer-blueprint.jar");
+ if (out.exists()) {
+ try {
+ return bundle(out.toURI().toURL().toExternalForm());
+ } catch (MalformedURLException e) {
+ // Ignore it.
+ }
+ }
+
+ File metadata = new File("src/main/resources/blueprint", "HelloConsumer.xml");
+
+ TinyBundle bundle = TinyBundles.bundle();
+ bundle.add(org.apache.felix.ipojo.test.compatibility.scr.HelloServiceConsumer.class);
+ try {
+ bundle.add("blueprint/consumer.xml", new FileInputStream(metadata));
+ } catch (FileNotFoundException e) {
+ throw new IllegalArgumentException("Cannot find XML metadata : " + metadata.getAbsolutePath());
+ }
+
+ InputStream inputStream = bundle
+ .set(Constants.BUNDLE_SYMBOLICNAME, "hello-consumer-blueprint")
+ .set(Constants.IMPORT_PACKAGE, "*")
+ .set("Bundle-Blueprint", "blueprint/consumer.xml")
+ .build(withBnd());
+
+ try {
+ FileUtils.copyInputStreamToFile(inputStream, out);
+ return bundle(out.toURI().toURL().toExternalForm());
+ } catch (IOException e) {
+ e.printStackTrace();
+ return null;
+ }
+ }
+}
diff --git a/ipojo/runtime/core-it/ipojo-compatibility-test/src/test/java/org/apache/felix/ipojo/test/compatibility/TestBeingConsumedByAriesBlueprint1_1_0.java b/ipojo/runtime/core-it/ipojo-compatibility-test/src/test/java/org/apache/felix/ipojo/test/compatibility/TestBeingConsumedByAriesBlueprint1_1_0.java
new file mode 100644
index 0000000..41ba3bc
--- /dev/null
+++ b/ipojo/runtime/core-it/ipojo-compatibility-test/src/test/java/org/apache/felix/ipojo/test/compatibility/TestBeingConsumedByAriesBlueprint1_1_0.java
@@ -0,0 +1,60 @@
+/*
+ * 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.felix.ipojo.test.compatibility;
+
+import org.apache.felix.ipojo.test.compatibility.service.CheckService;
+import org.junit.Test;
+import org.ops4j.pax.exam.Option;
+
+import static org.fest.assertions.Assertions.assertThat;
+import static org.ops4j.pax.exam.CoreOptions.bundle;
+import static org.ops4j.pax.exam.CoreOptions.maven;
+
+/**
+ * Check a configuration using Aries Blueprint 1.0.1
+ * iPOJO provider is consumed by a component using Blueprint.
+ *
+ * This test is intended to pass on Felix, KF and Equinox
+ */
+public class TestBeingConsumedByAriesBlueprint1_1_0 extends Common {
+
+ public static final String BP_ARTIFACTID = "org.apache.aries.blueprint";
+ public static final String BP_VERSION = "1.1.0";
+ public static final String BP_GROUPID = "org.apache.aries.blueprint";
+
+
+ @Override
+ public Option[] bundles() {
+ return new Option[] {
+ bundle(maven(BP_GROUPID, BP_ARTIFACTID, BP_VERSION).getURL()),
+ bundle(maven("org.apache.aries.proxy", "org.apache.aries.proxy", "1.0.1").getURL()),
+ bundle(maven("org.apache.aries", "org.apache.aries.util", "1.1.0").getURL()),
+ BPHelloConsumer(),
+ iPOJOHelloProvider()
+ };
+ }
+
+ @Test
+ public void test() {
+ CheckService checker = osgiHelper.getServiceObject(CheckService.class);
+ assertThat(checker).isNotNull();
+ assertThat(checker.data().get("result")).isEqualTo("hello john doe");
+ }
+}
diff --git a/ipojo/runtime/core-it/ipojo-compatibility-test/src/test/java/org/apache/felix/ipojo/test/compatibility/TestBeingConsumedByFelixSCR1_6_2.java b/ipojo/runtime/core-it/ipojo-compatibility-test/src/test/java/org/apache/felix/ipojo/test/compatibility/TestBeingConsumedByFelixSCR1_6_2.java
new file mode 100644
index 0000000..b9ed818
--- /dev/null
+++ b/ipojo/runtime/core-it/ipojo-compatibility-test/src/test/java/org/apache/felix/ipojo/test/compatibility/TestBeingConsumedByFelixSCR1_6_2.java
@@ -0,0 +1,57 @@
+/*
+ * 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.felix.ipojo.test.compatibility;
+
+import org.apache.felix.ipojo.test.compatibility.service.CheckService;
+import org.junit.Test;
+import org.ops4j.pax.exam.Option;
+
+import static org.fest.assertions.Assertions.assertThat;
+import static org.ops4j.pax.exam.CoreOptions.bundle;
+import static org.ops4j.pax.exam.CoreOptions.maven;
+
+/**
+ * Check a configuration using Felix SCR 1.6.2.
+ * iPOJO provider is consumed by a component using SCR.
+ *
+ * This test is intended to pass on Felix, KF and Equinox
+ */
+public class TestBeingConsumedByFelixSCR1_6_2 extends Common {
+
+ public static final String SCR_ARTIFACTID = "org.apache.felix.scr";
+ public static final String SCR_VERSION = "1.6.2";
+ public static final String SCR_GROUPID = "org.apache.felix";
+
+ @Override
+ public Option[] bundles() {
+ return new Option[] {
+ bundle(maven(SCR_GROUPID, SCR_ARTIFACTID, SCR_VERSION).getURL()),
+ SCRHelloConsumer(),
+ iPOJOHelloProvider()
+ };
+ }
+
+ @Test
+ public void test() {
+ CheckService checker = osgiHelper.getServiceObject(CheckService.class);
+ assertThat(checker).isNotNull();
+ assertThat(checker.data().get("result")).isEqualTo("hello john doe");
+ }
+}
diff --git a/ipojo/runtime/core-it/ipojo-compatibility-test/src/test/java/org/apache/felix/ipojo/test/compatibility/TestBeingConsumedByKnopflerfishSCR4_0_2.java b/ipojo/runtime/core-it/ipojo-compatibility-test/src/test/java/org/apache/felix/ipojo/test/compatibility/TestBeingConsumedByKnopflerfishSCR4_0_2.java
new file mode 100644
index 0000000..90befb6
--- /dev/null
+++ b/ipojo/runtime/core-it/ipojo-compatibility-test/src/test/java/org/apache/felix/ipojo/test/compatibility/TestBeingConsumedByKnopflerfishSCR4_0_2.java
@@ -0,0 +1,65 @@
+/*
+ * 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.felix.ipojo.test.compatibility;
+
+import org.apache.felix.ipojo.test.compatibility.service.CheckService;
+import org.junit.Test;
+import org.ops4j.pax.exam.Option;
+
+import static org.fest.assertions.Assertions.assertThat;
+import static org.ops4j.pax.exam.CoreOptions.bundle;
+import static org.ops4j.pax.exam.CoreOptions.maven;
+
+/**
+ * Check a configuration using Knopflerfish SCR 4.0.2
+ * iPOJO provider is consumed by a component using SCR.
+ *
+ * This test is intended to pass on KF only
+ */
+public class TestBeingConsumedByKnopflerfishSCR4_0_2 extends Common {
+
+ public static final String SCR_URL = "http://www.knopflerfish.org/releases/4.0" +
+ ".0/maven2/org/knopflerfish/bundle/component/4.0.2/component-4.0.2.jar";
+
+ @Override
+ public Option[] bundles() {
+ return new Option[] {
+ bundle(SCR_URL),
+ bundle("http://www.knopflerfish.org/releases/4.0.0/maven2/org/knopflerfish/bundle/cm-API/4.0" +
+ ".1/cm-API-4.0.1.jar"),
+ bundle("http://www.knopflerfish.org/releases/4.0.0/maven2/org/knopflerfish/bundle/kxml-LIB/2.3.0" +
+ ".kf4-001/kxml-LIB-2.3.0.kf4-001.jar"),
+ SCRHelloConsumer(),
+ iPOJOHelloProvider()
+ };
+ }
+
+ @Test
+ public void test() {
+ if (! isKnopflerfish()) {
+ System.out.println("Test ignored - running only on Knopflerfish");
+ return;
+ }
+
+ CheckService checker = osgiHelper.getServiceObject(CheckService.class);
+ assertThat(checker).isNotNull();
+ assertThat(checker.data().get("result")).isEqualTo("hello john doe");
+ }
+}
diff --git a/ipojo/runtime/core-it/ipojo-compatibility-test/src/test/java/org/apache/felix/ipojo/test/compatibility/TestConsumingProviderUsingAriesBlueprint1_1_0.java b/ipojo/runtime/core-it/ipojo-compatibility-test/src/test/java/org/apache/felix/ipojo/test/compatibility/TestConsumingProviderUsingAriesBlueprint1_1_0.java
new file mode 100644
index 0000000..ab683fd
--- /dev/null
+++ b/ipojo/runtime/core-it/ipojo-compatibility-test/src/test/java/org/apache/felix/ipojo/test/compatibility/TestConsumingProviderUsingAriesBlueprint1_1_0.java
@@ -0,0 +1,60 @@
+/*
+ * 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.felix.ipojo.test.compatibility;
+
+import org.apache.felix.ipojo.test.compatibility.service.CheckService;
+import org.junit.Test;
+import org.ops4j.pax.exam.Option;
+
+import static org.fest.assertions.Assertions.assertThat;
+import static org.ops4j.pax.exam.CoreOptions.bundle;
+import static org.ops4j.pax.exam.CoreOptions.maven;
+
+/**
+ * Check a configuration using Aries Blueprint 1.1.0
+ * iPOJO consumer is bound to a Hello Service implementation using Blueprint.
+ *
+ * This test is intended to pass on Felix, KF and Equinox
+ */
+public class TestConsumingProviderUsingAriesBlueprint1_1_0 extends Common {
+
+ public static final String BP_ARTIFACTID = "org.apache.aries.blueprint";
+ public static final String BP_VERSION = "1.1.0";
+ public static final String BP_GROUPID = "org.apache.aries.blueprint";
+
+
+ @Override
+ public Option[] bundles() {
+ return new Option[] {
+ bundle(maven(BP_GROUPID, BP_ARTIFACTID, BP_VERSION).getURL()),
+ bundle(maven("org.apache.aries.proxy", "org.apache.aries.proxy", "1.0.1").getURL()),
+ bundle(maven("org.apache.aries", "org.apache.aries.util", "1.1.0").getURL()),
+ BPHelloProvider(),
+ iPOJOHelloConsumer()
+ };
+ }
+
+ @Test
+ public void test() {
+ CheckService checker = osgiHelper.getServiceObject(CheckService.class);
+ assertThat(checker).isNotNull();
+ assertThat(checker.data().get("result")).isEqualTo("hello john doe");
+ }
+}
diff --git a/ipojo/runtime/core-it/ipojo-compatibility-test/src/test/java/org/apache/felix/ipojo/test/compatibility/TestConsumingProviderUsingFelixSCR1_6_2.java b/ipojo/runtime/core-it/ipojo-compatibility-test/src/test/java/org/apache/felix/ipojo/test/compatibility/TestConsumingProviderUsingFelixSCR1_6_2.java
new file mode 100644
index 0000000..639c06f
--- /dev/null
+++ b/ipojo/runtime/core-it/ipojo-compatibility-test/src/test/java/org/apache/felix/ipojo/test/compatibility/TestConsumingProviderUsingFelixSCR1_6_2.java
@@ -0,0 +1,58 @@
+/*
+ * 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.felix.ipojo.test.compatibility;
+
+import org.apache.felix.ipojo.test.compatibility.service.CheckService;
+import org.junit.Test;
+import org.ops4j.pax.exam.Option;
+
+import static org.fest.assertions.Assertions.assertThat;
+import static org.ops4j.pax.exam.CoreOptions.bundle;
+import static org.ops4j.pax.exam.CoreOptions.maven;
+
+/**
+ * Check a configuration using Felix SCR 1.6.2.
+ * iPOJO consumer is bound to a Hello Service implementation using SCR.
+ *
+ *
+ * This test is intended to pass on Felix, KF and Equinox
+ */
+public class TestConsumingProviderUsingFelixSCR1_6_2 extends Common {
+
+ public static final String SCR_ARTIFACTID = "org.apache.felix.scr";
+ public static final String SCR_VERSION = "1.6.2";
+ public static final String SCR_GROUPID = "org.apache.felix";
+
+ @Override
+ public Option[] bundles() {
+ return new Option[] {
+ bundle(maven(SCR_GROUPID, SCR_ARTIFACTID, SCR_VERSION).getURL()),
+ SCRHelloProvider(),
+ iPOJOHelloConsumer()
+ };
+ }
+
+ @Test
+ public void test() {
+ CheckService checker = osgiHelper.getServiceObject(CheckService.class);
+ assertThat(checker).isNotNull();
+ assertThat(checker.data().get("result")).isEqualTo("hello john doe");
+ }
+}
diff --git a/ipojo/runtime/core-it/ipojo-compatibility-test/src/test/java/org/apache/felix/ipojo/test/compatibility/TestConsumingProviderUsingKnopflerfishSCR4_0_2.java b/ipojo/runtime/core-it/ipojo-compatibility-test/src/test/java/org/apache/felix/ipojo/test/compatibility/TestConsumingProviderUsingKnopflerfishSCR4_0_2.java
new file mode 100644
index 0000000..1932415
--- /dev/null
+++ b/ipojo/runtime/core-it/ipojo-compatibility-test/src/test/java/org/apache/felix/ipojo/test/compatibility/TestConsumingProviderUsingKnopflerfishSCR4_0_2.java
@@ -0,0 +1,64 @@
+/*
+ * 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.felix.ipojo.test.compatibility;
+
+import org.apache.felix.ipojo.test.compatibility.service.CheckService;
+import org.junit.Test;
+import org.ops4j.pax.exam.Option;
+
+import static org.fest.assertions.Assertions.assertThat;
+import static org.ops4j.pax.exam.CoreOptions.bundle;
+
+/**
+ * Check a configuration using Knopflerfish SCR 4.0.2
+ * iPOJO consumer is bound to a Hello Service implementation using SCR.
+ *
+ *
+ * This test is intended to pass on KF only
+ */
+public class TestConsumingProviderUsingKnopflerfishSCR4_0_2 extends Common {
+
+ public static final String SCR_URL = "http://www.knopflerfish.org/releases/4.0" +
+ ".0/maven2/org/knopflerfish/bundle/component/4.0.2/component-4.0.2.jar";
+
+ @Override
+ public Option[] bundles() {
+ return new Option[] {
+ bundle(SCR_URL),
+ bundle("http://www.knopflerfish.org/releases/4.0.0/maven2/org/knopflerfish/bundle/cm-API/4.0" +
+ ".1/cm-API-4.0.1.jar"),
+ bundle("http://www.knopflerfish.org/releases/4.0.0/maven2/org/knopflerfish/bundle/kxml-LIB/2.3.0" +
+ ".kf4-001/kxml-LIB-2.3.0.kf4-001.jar"),
+ SCRHelloProvider(),
+ iPOJOHelloConsumer()
+ };
+ }
+
+ @Test
+ public void test() {
+ if (! isKnopflerfish()) {
+ System.out.println("Test ignored - running only on Knopflerfish");
+ return;
+ }
+ CheckService checker = osgiHelper.getServiceObject(CheckService.class);
+ assertThat(checker).isNotNull();
+ assertThat(checker.data().get("result")).isEqualTo("hello john doe");
+ }
+}
diff --git a/ipojo/runtime/core-it/ipojo-compatibility-test/src/test/java/org/apache/felix/ipojo/test/compatibility/TestiPOJOOnly.java b/ipojo/runtime/core-it/ipojo-compatibility-test/src/test/java/org/apache/felix/ipojo/test/compatibility/TestiPOJOOnly.java
new file mode 100644
index 0000000..beb3623
--- /dev/null
+++ b/ipojo/runtime/core-it/ipojo-compatibility-test/src/test/java/org/apache/felix/ipojo/test/compatibility/TestiPOJOOnly.java
@@ -0,0 +1,49 @@
+/*
+ * 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.felix.ipojo.test.compatibility;
+
+import org.apache.felix.ipojo.test.compatibility.service.CheckService;
+import org.junit.Test;
+import org.ops4j.pax.exam.Option;
+
+import static org.fest.assertions.Assertions.assertThat;
+
+/**
+ * Check a configuration with iPOJO used for the provider and consumer.
+ *
+ * This test is intended to pass on Felix, KF and Equinox
+ */
+public class TestiPOJOOnly extends Common {
+
+ @Override
+ public Option[] bundles() {
+ return new Option[] {
+ iPOJOHelloConsumer(),
+ iPOJOHelloProvider(),
+ };
+ }
+
+ @Test
+ public void test() {
+ CheckService checker = osgiHelper.getServiceObject(CheckService.class);
+ assertThat(checker).isNotNull();
+ assertThat(checker.data().get("result")).isEqualTo("hello john doe");
+ }
+}
diff --git a/ipojo/runtime/core-it/pom.xml b/ipojo/runtime/core-it/pom.xml
index 6b1ce55..e2bf613 100644
--- a/ipojo/runtime/core-it/pom.xml
+++ b/ipojo/runtime/core-it/pom.xml
@@ -40,8 +40,8 @@
<url.version>1.5.1</url.version>
<felix.version>4.2.0</felix.version>
- <equinox.version>3.8.1.v20120830-144521</equinox.version>
- <knoperflerfish.version>5.3.3</knoperflerfish.version>
+ <equinox.version>3.9.0.v20130529-1710</equinox.version>
+ <knoperflerfish.version>6.0.2</knoperflerfish.version>
<manipulator.version>1.10.2-SNAPSHOT</manipulator.version>
</properties>
@@ -66,6 +66,7 @@
<module>ipojo-core-service-dependency-interceptor-test</module>
<module>ipojo-core-service-providing-test</module>
<module>ipojo-api-test</module>
+ <module>ipojo-compatibility-test</module>
</modules>
<build>
@@ -227,6 +228,10 @@
<groupId>org.osgi</groupId>
<artifactId>org.osgi.core</artifactId>
</exclusion>
+ <exclusion>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.compendium</artifactId>
+ </exclusion>
</exclusions>
</dependency>
@@ -302,15 +307,28 @@
<version>1.4</version>
</dependency>
- <dependency>
- <groupId>org.apache.felix</groupId>
- <artifactId>org.apache.felix.framework</artifactId>
- <version>${felix.version}</version>
- </dependency>
</dependencies>
<profiles>
<profile>
+ <id>default</id>
+ <activation>
+ <activeByDefault>true</activeByDefault>
+ </activation>
+ <dependencies>
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.compendium</artifactId>
+ <version>4.3.0</version>
+ </dependency>
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.core</artifactId>
+ <version>4.3.1</version>
+ </dependency>
+ </dependencies>
+ </profile>
+ <profile>
<id>knopflerfish</id>
<activation>
<activeByDefault>false</activeByDefault>
@@ -352,6 +370,11 @@
</properties>
<dependencies>
<dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.compendium</artifactId>
+ <version>4.3.0</version>
+ </dependency>
+ <dependency>
<groupId>org.eclipse.tycho</groupId>
<artifactId>org.eclipse.osgi</artifactId>
<version>${equinox.version}</version>