Try to reproduce the issue described in http://www.mail-archive.com/users@felix.apache.org/msg09205.html
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1045175 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/ipojo/tests/core/service-dependency/src/main/java/org/apache/felix/ipojo/test/scenarios/component/inner/C1.java b/ipojo/tests/core/service-dependency/src/main/java/org/apache/felix/ipojo/test/scenarios/component/inner/C1.java
new file mode 100644
index 0000000..a1e6f57
--- /dev/null
+++ b/ipojo/tests/core/service-dependency/src/main/java/org/apache/felix/ipojo/test/scenarios/component/inner/C1.java
@@ -0,0 +1,11 @@
+package org.apache.felix.ipojo.test.scenarios.component.inner;
+
+import org.apache.felix.ipojo.test.scenarios.service.dependency.service.Call;
+
+public class C1 implements Call {
+
+ public String callMe() {
+ return "called";
+ }
+
+}
diff --git a/ipojo/tests/core/service-dependency/src/main/java/org/apache/felix/ipojo/test/scenarios/component/inner/C2.java b/ipojo/tests/core/service-dependency/src/main/java/org/apache/felix/ipojo/test/scenarios/component/inner/C2.java
new file mode 100644
index 0000000..b0e23ab
--- /dev/null
+++ b/ipojo/tests/core/service-dependency/src/main/java/org/apache/felix/ipojo/test/scenarios/component/inner/C2.java
@@ -0,0 +1,13 @@
+package org.apache.felix.ipojo.test.scenarios.component.inner;
+
+import org.apache.felix.ipojo.test.scenarios.service.dependency.service.Call;
+
+public class C2 {
+
+ private Call c1;
+
+ public String authenticate() {
+ return c1.callMe();
+ }
+
+}
diff --git a/ipojo/tests/core/service-dependency/src/main/java/org/apache/felix/ipojo/test/scenarios/component/inner/C3.java b/ipojo/tests/core/service-dependency/src/main/java/org/apache/felix/ipojo/test/scenarios/component/inner/C3.java
new file mode 100644
index 0000000..c9bd632
--- /dev/null
+++ b/ipojo/tests/core/service-dependency/src/main/java/org/apache/felix/ipojo/test/scenarios/component/inner/C3.java
@@ -0,0 +1,19 @@
+package org.apache.felix.ipojo.test.scenarios.component.inner;
+
+public class C3 {
+
+ private C2 c2;
+
+ public MyFilter getFilter() {
+ return new MyFilter() {
+ public String authenticate() {
+ System.out.println("My Filter ...");
+ String r = c2.authenticate();
+ System.out.println(" ... " + r);
+ return r;
+ }
+ };
+
+ }
+
+}
diff --git a/ipojo/tests/core/service-dependency/src/main/java/org/apache/felix/ipojo/test/scenarios/component/inner/MyFilter.java b/ipojo/tests/core/service-dependency/src/main/java/org/apache/felix/ipojo/test/scenarios/component/inner/MyFilter.java
new file mode 100644
index 0000000..2b5adc2
--- /dev/null
+++ b/ipojo/tests/core/service-dependency/src/main/java/org/apache/felix/ipojo/test/scenarios/component/inner/MyFilter.java
@@ -0,0 +1,7 @@
+package org.apache.felix.ipojo.test.scenarios.component.inner;
+
+public interface MyFilter {
+
+ public String authenticate();
+
+}
diff --git a/ipojo/tests/core/service-dependency/src/main/java/org/apache/felix/ipojo/test/scenarios/service/dependency/DependencyTestSuite.java b/ipojo/tests/core/service-dependency/src/main/java/org/apache/felix/ipojo/test/scenarios/service/dependency/DependencyTestSuite.java
index 0803a30..51045e2 100644
--- a/ipojo/tests/core/service-dependency/src/main/java/org/apache/felix/ipojo/test/scenarios/service/dependency/DependencyTestSuite.java
+++ b/ipojo/tests/core/service-dependency/src/main/java/org/apache/felix/ipojo/test/scenarios/service/dependency/DependencyTestSuite.java
@@ -22,6 +22,7 @@
import org.apache.felix.ipojo.junit4osgi.OSGiTestSuite;
import org.apache.felix.ipojo.test.scenarios.service.dependency.di.DefaultImplementationTestSuite;
+import org.apache.felix.ipojo.test.scenarios.service.dependency.inner.InnerProxyMixTest;
import org.osgi.framework.BundleContext;
public class DependencyTestSuite {
@@ -63,6 +64,7 @@
ots.addTestSuite(ModifyDependencies.class);
ots.addTestSuite(ProxyTest.class);
ots.addTestSuite(NonProxiedNotInterfaceDependencies.class);
+ ots.addTestSuite(InnerProxyMixTest.class);
return ots;
}
diff --git a/ipojo/tests/core/service-dependency/src/main/java/org/apache/felix/ipojo/test/scenarios/service/dependency/inner/InnerProxyMixTest.java b/ipojo/tests/core/service-dependency/src/main/java/org/apache/felix/ipojo/test/scenarios/service/dependency/inner/InnerProxyMixTest.java
new file mode 100644
index 0000000..1a59c0a
--- /dev/null
+++ b/ipojo/tests/core/service-dependency/src/main/java/org/apache/felix/ipojo/test/scenarios/service/dependency/inner/InnerProxyMixTest.java
@@ -0,0 +1,66 @@
+package org.apache.felix.ipojo.test.scenarios.service.dependency.inner;
+
+import org.apache.felix.ipojo.ComponentInstance;
+import org.apache.felix.ipojo.junit4osgi.OSGiTestCase;
+import org.apache.felix.ipojo.junit4osgi.helpers.IPOJOHelper;
+import org.apache.felix.ipojo.test.scenarios.component.inner.C1;
+import org.apache.felix.ipojo.test.scenarios.component.inner.C2;
+import org.apache.felix.ipojo.test.scenarios.component.inner.C3;
+
+public class InnerProxyMixTest extends OSGiTestCase {
+
+ public static String C1 = C1.class.getName();
+ public static String C2 = C2.class.getName();
+ public static String C3 = C3.class.getName();
+
+ IPOJOHelper ipojo;
+ private ComponentInstance instancec1;
+ private ComponentInstance instancec2;
+ private ComponentInstance instancec3;
+
+ public void setUp() {
+ ipojo = new IPOJOHelper(this);
+ // Create the instances
+ instancec1 = ipojo.createComponentInstance(C1);
+ instancec2 = ipojo.createComponentInstance(C2);
+ instancec3 = ipojo.createComponentInstance(C3);
+ }
+
+ public void tearDown() {
+ ipojo.dispose();
+ }
+
+ public void testMix() {
+ // Check that everything is OK
+ assertEquals(ComponentInstance.VALID, instancec1.getState());
+ assertEquals(ComponentInstance.VALID, instancec2.getState());
+ assertEquals(ComponentInstance.VALID, instancec3.getState());
+
+ // Call C3
+ C3 svc = (C3) getServiceObject(C3, null);
+ assertNotNull(svc);
+ assertEquals("called", svc.getFilter().authenticate());
+
+ // So far, all right
+
+ //We stop c1 and c2.
+ instancec1.stop();
+ instancec2.stop();
+
+ assertEquals(ComponentInstance.INVALID, instancec3.getState()); // C2 dependency invalid
+
+ instancec1.start();
+ instancec2.start();
+
+ // Check that everything is OK
+ assertEquals(ComponentInstance.VALID, instancec1.getState());
+ assertEquals(ComponentInstance.VALID, instancec2.getState());
+ assertEquals(ComponentInstance.VALID, instancec3.getState());
+
+ // Call C3
+ svc = (C3) getServiceObject(C3, null);
+ assertNotNull(svc);
+ assertEquals("called", svc.getFilter().authenticate());
+ }
+
+}
diff --git a/ipojo/tests/core/service-dependency/src/main/java/org/apache/felix/ipojo/test/scenarios/service/dependency/service/Call.java b/ipojo/tests/core/service-dependency/src/main/java/org/apache/felix/ipojo/test/scenarios/service/dependency/service/Call.java
new file mode 100644
index 0000000..34513fb
--- /dev/null
+++ b/ipojo/tests/core/service-dependency/src/main/java/org/apache/felix/ipojo/test/scenarios/service/dependency/service/Call.java
@@ -0,0 +1,8 @@
+package org.apache.felix.ipojo.test.scenarios.service.dependency.service;
+
+public interface Call {
+
+
+ public String callMe();
+
+}
diff --git a/ipojo/tests/core/service-dependency/src/main/resources/metadata.xml b/ipojo/tests/core/service-dependency/src/main/resources/metadata.xml
index 1571e43..e4e3a7f 100644
--- a/ipojo/tests/core/service-dependency/src/main/resources/metadata.xml
+++ b/ipojo/tests/core/service-dependency/src/main/resources/metadata.xml
@@ -1045,4 +1045,20 @@
<requires field="map"/>
</component>
+ <!-- Inner + Proxy mix -->
+ <component
+ classname="org.apache.felix.ipojo.test.scenarios.component.inner.C1">
+ <provides/>
+ </component>
+ <component
+ classname="org.apache.felix.ipojo.test.scenarios.component.inner.C2">
+ <provides specifications="org.apache.felix.ipojo.test.scenarios.component.inner.C2"/>
+ <requires field="c1"/>
+ </component>
+ <component
+ classname="org.apache.felix.ipojo.test.scenarios.component.inner.C3">
+ <provides specifications="org.apache.felix.ipojo.test.scenarios.component.inner.C3"/>
+ <requires field="c2"/>
+ </component>
+
</ipojo>