Commit composite service providing test suite
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@654249 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/ipojo/tests/tests.composite.service.providing/pom.xml b/ipojo/tests/tests.composite.service.providing/pom.xml
new file mode 100644
index 0000000..1fbb2af
--- /dev/null
+++ b/ipojo/tests/tests.composite.service.providing/pom.xml
@@ -0,0 +1,101 @@
+<!--
+ 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>
+ <modelVersion>4.0.0</modelVersion>
+ <packaging>bundle</packaging>
+ <name>iPOJO Composite (Service Providing) Test Suite</name>
+ <artifactId>tests.composite.service.providing</artifactId>
+ <groupId>ipojo.tests</groupId>
+ <version>0.8.0-SNAPSHOT</version>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>org.apache.felix.ipojo</artifactId>
+ <version>0.8.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>org.apache.felix.ipojo.composite</artifactId>
+ <version>0.8.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>org.apache.felix.ipojo.metadata</artifactId>
+ <version>0.8.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>org.osgi.core</artifactId>
+ <version>1.0.0</version>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>3.8.1</version>
+ </dependency>
+ <dependency>
+ <groupId>ipojo.examples</groupId>
+ <artifactId>org.apache.felix.ipojo.junit4osgi</artifactId>
+ <version>0.8.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>ipojo.tests</groupId>
+ <artifactId>tests.composite</artifactId>
+ <version>0.8.0-SNAPSHOT</version>
+ </dependency>
+ </dependencies>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-bundle-plugin</artifactId>
+ <version>1.4.0</version>
+ <extensions>true</extensions>
+ <configuration>
+ <instructions>
+ <Bundle-SymbolicName>
+ ${pom.artifactId}
+ </Bundle-SymbolicName>
+ <Private-Package>
+ org.apache.felix.ipojo.test.composite.provides, org.apache.felix.ipojo.test.composite.test
+ </Private-Package>
+ <Test-Suite>
+ org.apache.felix.ipojo.test.composite.test.CompositeTest, org.apache.felix.ipojo.test.composite.provides.ProvidesTestSuite
+ </Test-Suite>
+ </instructions>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-ipojo-plugin</artifactId>
+ <version>0.8.0-SNAPSHOT</version>
+ <executions>
+ <execution>
+ <goals>
+ <goal>ipojo-bundle</goal>
+ </goals>
+ <configuration>
+ <ignoreAnnotations>true</ignoreAnnotations>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/ipojo/tests/tests.composite.service.providing/src/main/java/org/apache/felix/ipojo/test/composite/provides/ProvidesTestSuite.java b/ipojo/tests/tests.composite.service.providing/src/main/java/org/apache/felix/ipojo/test/composite/provides/ProvidesTestSuite.java
new file mode 100644
index 0000000..413ff58
--- /dev/null
+++ b/ipojo/tests/tests.composite.service.providing/src/main/java/org/apache/felix/ipojo/test/composite/provides/ProvidesTestSuite.java
@@ -0,0 +1,43 @@
+/*
+ * 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.composite.provides;
+
+import junit.framework.Test;
+
+import org.apache.felix.ipojo.junit4osgi.OSGiTestSuite;
+import org.osgi.framework.BundleContext;
+
+public class ProvidesTestSuite {
+
+ public static Test suite(BundleContext bc) {
+ OSGiTestSuite ots = new OSGiTestSuite("Composite Service Providing Test Suite", bc);
+ ots.addTestSuite(TestComp0.class);
+ ots.addTestSuite(TestComp1.class);
+ ots.addTestSuite(TestComp2.class);
+ ots.addTestSuite(TestComp3.class);
+ ots.addTestSuite(TestComp4.class);
+ ots.addTestSuite(TestComp5.class);
+ ots.addTestSuite(TestComp6.class);
+ ots.addTestSuite(TestComp7.class);
+ ots.addTestSuite(TestComp8.class);
+
+ return ots;
+ }
+
+}
diff --git a/ipojo/tests/tests.composite.service.providing/src/main/java/org/apache/felix/ipojo/test/composite/provides/TestComp0.java b/ipojo/tests/tests.composite.service.providing/src/main/java/org/apache/felix/ipojo/test/composite/provides/TestComp0.java
new file mode 100644
index 0000000..d3e26a8
--- /dev/null
+++ b/ipojo/tests/tests.composite.service.providing/src/main/java/org/apache/felix/ipojo/test/composite/provides/TestComp0.java
@@ -0,0 +1,339 @@
+/*
+ * 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.composite.provides;
+
+import java.util.Properties;
+
+import org.apache.felix.ipojo.ComponentFactory;
+import org.apache.felix.ipojo.ComponentInstance;
+import org.apache.felix.ipojo.Factory;
+import org.apache.felix.ipojo.architecture.Architecture;
+import org.apache.felix.ipojo.junit4osgi.OSGiTestCase;
+import org.apache.felix.ipojo.test.composite.component.TotoProvider;
+import org.apache.felix.ipojo.test.composite.service.Tota;
+import org.apache.felix.ipojo.test.composite.service.Toto;
+import org.apache.felix.ipojo.test.composite.util.Utils;
+import org.osgi.framework.ServiceReference;
+
+public class TestComp0 extends OSGiTestCase {
+
+ private ComponentFactory tataFactory;
+ private ComponentFactory totoFactory;
+ private ComponentFactory tataFactory2;
+
+ private ComponentInstance totoProv, totoProv2;
+ private ComponentInstance under;
+
+ public void setUp() {
+ tataFactory = (ComponentFactory) Utils.getFactoryByName(context, "tata");
+ totoFactory = (ComponentFactory) Utils.getFactoryByName(context, "toto");
+ tataFactory2 = (ComponentFactory) Utils.getFactoryByName(context, "comp-6");
+ tataFactory2.stop();
+ tataFactory.stop();
+
+ Properties props = new Properties();
+ props.put("name", "toto provider");
+ try {
+ totoProv = totoFactory.createComponentInstance(props);
+ } catch(Exception e) {
+ fail("Cannot create an instance : " + e.getMessage());
+ }
+
+ Properties props3 = new Properties();
+ props3.put("name", "toto provider 2");
+ try {
+ totoProv2 = totoFactory.createComponentInstance(props3);
+ } catch(Exception e) {
+ fail("Cannot create an instance : " + e.getMessage());
+ }
+
+ totoProv.stop();
+ totoProv2.stop();
+
+ Factory factory = Utils.getFactoryByName(context, "comp-0");
+ Properties props2 = new Properties();
+ props2.put("name", "ff");
+ try {
+ under = factory.createComponentInstance(props2);
+ } catch(Exception e) {
+ e.printStackTrace();
+ fail("Cannot create an instance : " + e.getMessage());
+ }
+ }
+
+ public void tearDown() {
+ tataFactory.start();
+ totoProv.dispose();
+ totoProv = null;
+ totoProv2.dispose();
+ totoProv2 = null;
+ tataFactory2.start();
+
+ // Reset counters
+ TotoProvider.toto = 0;
+ TotoProvider.toto_2 = 0;
+ TotoProvider.toto_3 = 0;
+ TotoProvider.toto_4 = 0;
+ TotoProvider.toto1 = 0;
+ }
+
+ public void testSimple() {
+ // Neither factory nor instance
+ assertTrue("Assert under state - 1", under.getState() == ComponentInstance.INVALID);
+ assertNull("Assert no tota service - 1", context.getServiceReference(Tota.class.getName()));
+
+ // Start the importer
+ totoProv.start();
+ assertNotNull("Assert toto service - 1", context.getServiceReference(Toto.class.getName()));
+ assertTrue("Assert under state - 2", under.getState() == ComponentInstance.INVALID);
+ assertNull("Assert no tota service - 2", context.getServiceReference(Tota.class.getName()));
+
+ // Start the factory
+ tataFactory.start();
+ assertTrue("Assert under state - 3", under.getState() == ComponentInstance.VALID);
+ assertNotNull("Assert tota service - 3", context.getServiceReference(Tota.class.getName()));
+ ServiceReference ref = context.getServiceReference(Tota.class.getName());
+ Tota tota = (Tota) context.getService(ref);
+ invokeAll(tota);
+ // Check toto
+ Properties props = tota.getProps();
+ Integer toto = (Integer) props.get("toto");
+ Integer toto_2 = (Integer) props.get("toto_2");
+ Integer toto_3 = (Integer) props.get("toto_3");
+ Integer toto_4 = (Integer) props.get("toto_4");
+ assertEquals("Assert toto - 3", toto.intValue(), 1);
+ assertEquals("Assert toto_2 - 3", toto_2.intValue(), 1);
+ assertEquals("Assert toto_3 - 3", toto_3.intValue(), 1);
+ assertEquals("Assert toto_4 - 3", toto_4.intValue(), 0);
+ //Check tata
+ props = tota.getPropsTata();
+ Integer tata = (Integer) props.get("tata");
+ Integer tataStr = (Integer) props.get("tataStr");
+ Integer tataStrs = (Integer) props.get("tataStrs");
+ Integer tata_2 = (Integer) props.get("tata_2");
+ Integer tata_3 = (Integer) props.get("tata_3");
+ Integer tata1 = (Integer) props.get("tata1");
+ Integer tata1_1 = (Integer) props.get("tata1_1");
+ Integer tata5 = (Integer) props.get("tata5");
+ Integer tata5_1 = (Integer) props.get("tata5_1");
+ Integer tata5_2 = (Integer) props.get("tata5_2");
+ assertEquals("Assert tata - 3", tata.intValue(), 1);
+ assertEquals("Assert tataStr - 3", tataStr.intValue(), 1);
+ assertEquals("Assert tataStrs - 3", tataStrs.intValue(), 0);
+ assertEquals("Assert tata_2 - 3", tata_2.intValue(), 1);
+ assertEquals("Assert tata_3 - 3", tata_3.intValue(), 1);
+ assertEquals("Assert tata1 - 3", tata1.intValue(), 1);
+ assertEquals("Assert tata1_1 - 3", tata1_1.intValue(), 1);
+ assertEquals("Assert tata5 - 3", tata5.intValue(), 1);
+ assertEquals("Assert tata5_1 - 3", tata5_1.intValue(), 1);
+ assertEquals("Assert tata5_2 - 3", tata5_2.intValue(), 1);
+
+ context.ungetService(ref);
+ tota = null;
+
+ // Start a second import
+ totoProv2.start();
+ assertTrue("Assert under state - 4", under.getState() == ComponentInstance.VALID);
+ assertNotNull("Assert tota service - 4", context.getServiceReference(Tota.class.getName()));
+ ref = context.getServiceReference(Tota.class.getName());
+ tota = (Tota) context.getService(ref);
+ invokeAll(tota);
+ // Check toto
+ props = tota.getProps();
+ toto = (Integer) props.get("toto");
+ toto_2 = (Integer) props.get("toto_2");
+ toto_3 = (Integer) props.get("toto_3");
+ toto_4 = (Integer) props.get("toto_4");
+ assertEquals("Assert toto - 4", toto.intValue(), 2);
+ assertEquals("Assert toto_2 - 4", toto_2.intValue(), 2);
+ assertEquals("Assert toto_3 - 4", toto_3.intValue(), 2);
+ assertEquals("Assert toto_4 - 4", toto_4.intValue(), 0);
+ //Check tata
+ props = tota.getPropsTata();
+ tata = (Integer) props.get("tata");
+ tataStr = (Integer) props.get("tataStr");
+ tataStrs = (Integer) props.get("tataStrs");
+ tata_2 = (Integer) props.get("tata_2");
+ tata_3 = (Integer) props.get("tata_3");
+ tata1 = (Integer) props.get("tata1");
+ tata1_1 = (Integer) props.get("tata1_1");
+ tata5 = (Integer) props.get("tata5");
+ tata5_1 = (Integer) props.get("tata5_1");
+ tata5_2 = (Integer) props.get("tata5_2");
+ assertEquals("Assert tata - 4", tata.intValue(), 2);
+ assertEquals("Assert tataStr - 4", tataStr.intValue(), 2);
+ assertEquals("Assert tataStrs - 4", tataStrs.intValue(), 0);
+ assertEquals("Assert tata_2 - 4", tata_2.intValue(), 2);
+ assertEquals("Assert tata_3 - 4", tata_3.intValue(), 2);
+ assertEquals("Assert tata1 - 4", tata1.intValue(), 2);
+ assertEquals("Assert tata1_1 - 4", tata1_1.intValue(), 2);
+ assertEquals("Assert tata5 - 4", tata5.intValue(), 2);
+ assertEquals("Assert tata5_1 - 4", tata5_1.intValue(), 2);
+ assertEquals("Assert tata5_2 - 4", tata5_2.intValue(), 2);
+
+ context.ungetService(ref);
+ tota = null;
+
+ tataFactory.stop();
+ assertTrue("Assert under state - 5", under.getState() == ComponentInstance.INVALID);
+ assertNull("Assert no tota service - 5", context.getServiceReference(Tota.class.getName()));
+
+ totoProv2.stop();
+ tataFactory.start();
+ assertTrue("Assert under state - 6", under.getState() == ComponentInstance.VALID);
+ assertNotNull("Assert tota service - 6", context.getServiceReference(Tota.class.getName()));
+ ref = context.getServiceReference(Tota.class.getName());
+ tota = (Tota) context.getService(ref);
+ invokeAll(tota);
+ // Check toto
+ props = tota.getProps();
+ toto = (Integer) props.get("toto");
+ toto_2 = (Integer) props.get("toto_2");
+ toto_3 = (Integer) props.get("toto_3");
+ toto_4 = (Integer) props.get("toto_4");
+ assertEquals("Assert toto - 6", toto.intValue(), 3);
+ assertEquals("Assert toto_2 - 6", toto_2.intValue(), 3);
+ assertEquals("Assert toto_3 - 6", toto_3.intValue(), 3);
+ assertEquals("Assert toto_4 - 6", toto_4.intValue(), 0);
+ //Check tata
+ props = tota.getPropsTata();
+ tata = (Integer) props.get("tata");
+ tataStr = (Integer) props.get("tataStr");
+ tataStrs = (Integer) props.get("tataStrs");
+ tata_2 = (Integer) props.get("tata_2");
+ tata_3 = (Integer) props.get("tata_3");
+ tata1 = (Integer) props.get("tata1");
+ tata1_1 = (Integer) props.get("tata1_1");
+ tata5 = (Integer) props.get("tata5");
+ tata5_1 = (Integer) props.get("tata5_1");
+ tata5_2 = (Integer) props.get("tata5_2");
+ assertEquals("Assert tata - 6", tata.intValue(), 1);
+ assertEquals("Assert tataStr - 6", tataStr.intValue(), 1);
+ assertEquals("Assert tataStrs - 6", tataStrs.intValue(), 0);
+ assertEquals("Assert tata_2 - 6", tata_2.intValue(), 1);
+ assertEquals("Assert tata_3 - 6", tata_3.intValue(), 1);
+ assertEquals("Assert tata1 - 6", tata1.intValue(), 1);
+ assertEquals("Assert tata1_1 - 6", tata1_1.intValue(), 1);
+ assertEquals("Assert tata5 - 6", tata5.intValue(), 1);
+ assertEquals("Assert tata5_1 - 6", tata5_1.intValue(), 1);
+ assertEquals("Assert tata5_2 - 6", tata5_2.intValue(), 1);
+
+ context.ungetService(ref);
+ tota = null;
+
+ // Is arch exposed
+ assertNotNull("Test arch", Utils.getServiceReferenceByName(context, Architecture.class.getName(), "ff"));
+
+ totoProv.stop();
+
+ assertTrue("Assert under state - 7", under.getState() == ComponentInstance.INVALID);
+ assertNotNull("Test arch-2", Utils.getServiceReferenceByName(context, Architecture.class.getName(), "ff"));
+ assertNull("Assert no tota service - 7", context.getServiceReference(Tota.class.getName()));
+
+ under.dispose();
+ under = null;
+ }
+
+
+
+ private void invoke(Tota tota) {
+ tota.tata();
+
+ assertEquals("Assert invoke tataint", tota.tataInt(2), 2);
+ assertEquals("Assert invoke tataLong", tota.tataLong(2), 2);
+ assertEquals("Assert invoke tataDouble", tota.tataDouble(2), 2);
+ assertEquals("Assert invoke tataChar", tota.tataChar('a'), 'a');
+ assertTrue("Assert invoke tataBoolean", tota.tataBoolean(true));
+ assertEquals("Assert invoke tataByte", tota.tataByte((byte)2), 2);
+ assertEquals("Assert invoke tataShort", tota.tataShort((short)5), 5);
+ assertEquals("Assert invoke tataFloat", tota.tataFloat(5), 5);
+
+ }
+
+ private void invokeArrays(Tota tota) {
+
+ int[] a = new int[] {1,2,3};
+ assertEquals("Assert invoke tataint[]", tota.tataInts(a), a);
+
+ long[] b = new long[] {1,2,3};
+ assertEquals("Assert invoke tataLong[]", tota.tataLongs(b), b);
+
+ double[] c = new double[] {1,2,3};
+ assertEquals("Assert invoke tataDouble[]", tota.tataDoubles(c), c);
+
+ char[] d = new char[] {'a','b', 'c'};
+ assertEquals("Assert invoke tataChar[]", tota.tataChars(d), d);
+
+ boolean[] e = new boolean[] {true, false};
+ assertEquals("Assert invoke tataBoolean[]", tota.tataBooleans(e), e);
+
+ byte[] f = new byte[] {(byte) 1};
+ assertEquals("Assert invoke tataByte[]", tota.tataBytes(f), f);
+
+ short[] g = new short[] {(short) 1};
+ assertEquals("Assert invoke tataShort[]", tota.tataShorts(g), g);
+
+ float[] h = new float[] {5,6,7};
+ assertEquals("Assert invoke tataFloat[]", tota.tataFloats(h), h);
+
+ }
+
+ private void invokeStr(Tota tota) {
+ tota.tataStr();
+ }
+
+ private void invokeTata(Tota tota) {
+ tota.tata(1,2);
+ tota.tata("tototototo");
+ }
+
+ private void invokeTata1(Tota tota) {
+ assertEquals("Assert tata1", tota.tata1("foo"), "foo");
+ assertEquals("Assert tata1 - 2", tota.tata1(new char[] {'a','b','c'}), "abc");
+ }
+
+ private void invokeTata5(Tota tota) {
+ assertEquals("Assert tata5 -1", tota.tata5("foo",1), "foo"+1);
+ assertEquals("Assert tata5 - 2", tota.tata5(new String[] {"a","b","c"}, 1), "31");
+ assertEquals("Assert tata5 - 3", tota.tata5("foo", new int[] {1,2,3}), "foo3");
+ }
+
+ private void invokeAdd(Tota tota) {
+ assertEquals("Assert add", tota.add(1,1,1), 3);
+ }
+
+ private void invokeToto(Tota tota) {
+ tota.toto();
+ assertEquals("Assert toto", tota.toto("foo"), "foo");
+ tota.toto(1,2);
+ }
+
+ private void invokeAll(Tota tota) {
+ invoke(tota);
+ invokeArrays(tota);
+ invokeStr(tota);
+ invokeTata(tota);
+ invokeTata1(tota);
+ invokeTata5(tota);
+ invokeAdd(tota);
+ invokeToto(tota);
+ }
+
+
+}
diff --git a/ipojo/tests/tests.composite.service.providing/src/main/java/org/apache/felix/ipojo/test/composite/provides/TestComp1.java b/ipojo/tests/tests.composite.service.providing/src/main/java/org/apache/felix/ipojo/test/composite/provides/TestComp1.java
new file mode 100644
index 0000000..95d64be
--- /dev/null
+++ b/ipojo/tests/tests.composite.service.providing/src/main/java/org/apache/felix/ipojo/test/composite/provides/TestComp1.java
@@ -0,0 +1,337 @@
+/*
+ * 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.composite.provides;
+
+import java.util.Properties;
+
+import org.apache.felix.ipojo.ComponentFactory;
+import org.apache.felix.ipojo.ComponentInstance;
+import org.apache.felix.ipojo.Factory;
+import org.apache.felix.ipojo.architecture.Architecture;
+import org.apache.felix.ipojo.junit4osgi.OSGiTestCase;
+import org.apache.felix.ipojo.test.composite.component.TotoProvider;
+import org.apache.felix.ipojo.test.composite.service.Tota;
+import org.apache.felix.ipojo.test.composite.util.Utils;
+import org.osgi.framework.ServiceReference;
+
+public class TestComp1 extends OSGiTestCase {
+
+ private ComponentFactory tataFactory;
+ private ComponentFactory totoFactory;
+
+ private ComponentInstance totoProv, totoProv2;
+ private ComponentInstance under;
+ private ComponentFactory tataFactory2;
+
+ public void setUp() {
+ tataFactory = (ComponentFactory) Utils.getFactoryByName(context, "tata");
+ totoFactory = (ComponentFactory) Utils.getFactoryByName(context, "toto");
+ tataFactory2 = (ComponentFactory) Utils.getFactoryByName(context, "comp-6");
+ tataFactory2.stop();
+
+ tataFactory.stop();
+
+ Properties props = new Properties();
+ props.put("name", "toto provider");
+ try {
+ totoProv = totoFactory.createComponentInstance(props);
+ } catch(Exception e) {
+ e.printStackTrace();
+ }
+
+ Properties props3 = new Properties();
+ props3.put("name", "toto provider 2");
+ try {
+ totoProv2 = totoFactory.createComponentInstance(props3);
+ } catch(Exception e) {
+ e.printStackTrace();
+ }
+
+ totoProv.stop();
+ totoProv2.stop();
+
+ Factory factory = Utils.getFactoryByName(context, "comp-1");
+ Properties props2 = new Properties();
+ try {
+ under = factory.createComponentInstance(props2);
+ } catch(Exception e) {
+ fail("Cannot create the instance : " + e.getMessage());
+ }
+
+ }
+
+ public void tearDown() {
+ tataFactory.start();
+ totoProv.dispose();
+ totoProv = null;
+ totoProv2.dispose();
+ totoProv2 = null;
+ tataFactory2.start();
+
+ // Reset counters
+ TotoProvider.toto = 0;
+ TotoProvider.toto_2 = 0;
+ TotoProvider.toto_3 = 0;
+ TotoProvider.toto_4 = 0;
+ TotoProvider.toto1 = 0;
+ }
+
+ public void testSimple() {
+ // Neither factory nor instance
+ assertTrue("Assert under state - 1", under.getState() == ComponentInstance.INVALID);
+ assertNull("Assert no tota service - 1", context.getServiceReference(Tota.class.getName()));
+
+ // Start the importer
+ totoProv.start();
+ assertTrue("Assert under state - 2 ("+under.getState()+")", under.getState() == ComponentInstance.INVALID);
+ assertNull("Assert no tota service - 2", context.getServiceReference(Tota.class.getName()));
+
+ // Start the factory
+ tataFactory.start();
+ assertTrue("Assert under state - 3", under.getState() == ComponentInstance.VALID);
+ assertNotNull("Assert tota service - 3", context.getServiceReference(Tota.class.getName()));
+ ServiceReference ref = context.getServiceReference(Tota.class.getName());
+ Tota tota = (Tota) context.getService(ref);
+ invokeAll(tota);
+ // Check toto
+ Properties props = tota.getProps();
+ Integer toto = (Integer) props.get("toto");
+ Integer toto_2 = (Integer) props.get("toto_2");
+ Integer toto_3 = (Integer) props.get("toto_3");
+ Integer toto_4 = (Integer) props.get("toto_4");
+ assertEquals("Assert toto - 3 ("+toto.intValue()+")", toto.intValue(), 1);
+ assertEquals("Assert toto_2 - 3", toto_2.intValue(), 1);
+ assertEquals("Assert toto_3 - 3", toto_3.intValue(), 1);
+ assertEquals("Assert toto_4 - 3", toto_4.intValue(), 0);
+ //Check tata
+ props = tota.getPropsTata();
+ Integer tata = (Integer) props.get("tata");
+ Integer tataStr = (Integer) props.get("tataStr");
+ Integer tataStrs = (Integer) props.get("tataStrs");
+ Integer tata_2 = (Integer) props.get("tata_2");
+ Integer tata_3 = (Integer) props.get("tata_3");
+ Integer tata1 = (Integer) props.get("tata1");
+ Integer tata1_1 = (Integer) props.get("tata1_1");
+ Integer tata5 = (Integer) props.get("tata5");
+ Integer tata5_1 = (Integer) props.get("tata5_1");
+ Integer tata5_2 = (Integer) props.get("tata5_2");
+ assertEquals("Assert tata - 3", tata.intValue(), 1);
+ assertEquals("Assert tataStr - 3", tataStr.intValue(), 1);
+ assertEquals("Assert tataStrs - 3", tataStrs.intValue(), 0);
+ assertEquals("Assert tata_2 - 3", tata_2.intValue(), 1);
+ assertEquals("Assert tata_3 - 3", tata_3.intValue(), 1);
+ assertEquals("Assert tata1 - 3", tata1.intValue(), 1);
+ assertEquals("Assert tata1_1 - 3", tata1_1.intValue(), 1);
+ assertEquals("Assert tata5 - 3", tata5.intValue(), 1);
+ assertEquals("Assert tata5_1 - 3", tata5_1.intValue(), 1);
+ assertEquals("Assert tata5_2 - 3", tata5_2.intValue(), 1);
+
+ context.ungetService(ref);
+ tota = null;
+
+ // Start a second import
+ totoProv2.start();
+ assertTrue("Assert under state - 4", under.getState() == ComponentInstance.VALID);
+ assertNotNull("Assert tota service - 4", context.getServiceReference(Tota.class.getName()));
+ ref = context.getServiceReference(Tota.class.getName());
+ tota = (Tota) context.getService(ref);
+ invokeAll(tota);
+ // Check toto
+ props = tota.getProps();
+ toto = (Integer) props.get("toto");
+ toto_2 = (Integer) props.get("toto_2");
+ toto_3 = (Integer) props.get("toto_3");
+ toto_4 = (Integer) props.get("toto_4");
+ assertEquals("Assert toto - 4", toto.intValue(), 2);
+ assertEquals("Assert toto_2 - 4", toto_2.intValue(), 2);
+ assertEquals("Assert toto_3 - 4", toto_3.intValue(), 2);
+ assertEquals("Assert toto_4 - 4", toto_4.intValue(), 0);
+ //Check tata
+ props = tota.getPropsTata();
+ tata = (Integer) props.get("tata");
+ tataStr = (Integer) props.get("tataStr");
+ tataStrs = (Integer) props.get("tataStrs");
+ tata_2 = (Integer) props.get("tata_2");
+ tata_3 = (Integer) props.get("tata_3");
+ tata1 = (Integer) props.get("tata1");
+ tata1_1 = (Integer) props.get("tata1_1");
+ tata5 = (Integer) props.get("tata5");
+ tata5_1 = (Integer) props.get("tata5_1");
+ tata5_2 = (Integer) props.get("tata5_2");
+ assertEquals("Assert tata - 4", tata.intValue(), 2);
+ assertEquals("Assert tataStr - 4", tataStr.intValue(), 2);
+ assertEquals("Assert tataStrs - 4", tataStrs.intValue(), 0);
+ assertEquals("Assert tata_2 - 4", tata_2.intValue(), 2);
+ assertEquals("Assert tata_3 - 4", tata_3.intValue(), 2);
+ assertEquals("Assert tata1 - 4", tata1.intValue(), 2);
+ assertEquals("Assert tata1_1 - 4", tata1_1.intValue(), 2);
+ assertEquals("Assert tata5 - 4", tata5.intValue(), 2);
+ assertEquals("Assert tata5_1 - 4", tata5_1.intValue(), 2);
+ assertEquals("Assert tata5_2 - 4", tata5_2.intValue(), 2);
+
+ context.ungetService(ref);
+ tota = null;
+
+ tataFactory.stop();
+ assertTrue("Assert under state - 5", under.getState() == ComponentInstance.INVALID);
+ assertNull("Assert no tota service - 5", context.getServiceReference(Tota.class.getName()));
+
+ totoProv2.stop();
+ tataFactory.start();
+ assertTrue("Assert under state - 6", under.getState() == ComponentInstance.VALID);
+ assertNotNull("Assert tota service - 6", context.getServiceReference(Tota.class.getName()));
+ ref = context.getServiceReference(Tota.class.getName());
+ tota = (Tota) context.getService(ref);
+ invokeAll(tota);
+ // Check toto
+ props = tota.getProps();
+ toto = (Integer) props.get("toto");
+ toto_2 = (Integer) props.get("toto_2");
+ toto_3 = (Integer) props.get("toto_3");
+ toto_4 = (Integer) props.get("toto_4");
+ assertEquals("Assert toto - 6", toto.intValue(), 3);
+ assertEquals("Assert toto_2 - 6", toto_2.intValue(), 3);
+ assertEquals("Assert toto_3 - 6", toto_3.intValue(), 3);
+ assertEquals("Assert toto_4 - 6", toto_4.intValue(), 0);
+ //Check tata
+ props = tota.getPropsTata();
+ tata = (Integer) props.get("tata");
+ tataStr = (Integer) props.get("tataStr");
+ tataStrs = (Integer) props.get("tataStrs");
+ tata_2 = (Integer) props.get("tata_2");
+ tata_3 = (Integer) props.get("tata_3");
+ tata1 = (Integer) props.get("tata1");
+ tata1_1 = (Integer) props.get("tata1_1");
+ tata5 = (Integer) props.get("tata5");
+ tata5_1 = (Integer) props.get("tata5_1");
+ tata5_2 = (Integer) props.get("tata5_2");
+ assertEquals("Assert tata - 6", tata.intValue(), 1);
+ assertEquals("Assert tataStr - 6", tataStr.intValue(), 1);
+ assertEquals("Assert tataStrs - 6", tataStrs.intValue(), 0);
+ assertEquals("Assert tata_2 - 6", tata_2.intValue(), 1);
+ assertEquals("Assert tata_3 - 6", tata_3.intValue(), 1);
+ assertEquals("Assert tata1 - 6", tata1.intValue(), 1);
+ assertEquals("Assert tata1_1 - 6", tata1_1.intValue(), 1);
+ assertEquals("Assert tata5 - 6", tata5.intValue(), 1);
+ assertEquals("Assert tata5_1 - 6", tata5_1.intValue(), 1);
+ assertEquals("Assert tata5_2 - 6", tata5_2.intValue(), 1);
+
+ context.ungetService(ref);
+ tota = null;
+
+ // Is arch exposed
+ assertNotNull("Test arch", Utils.getServiceReferenceByName(context, Architecture.class.getName(), under.getInstanceName()));
+
+ totoProv.stop();
+
+ assertTrue("Assert under state - 7", under.getState() == ComponentInstance.INVALID);
+ assertNotNull("Test arch-2", Utils.getServiceReferenceByName(context, Architecture.class.getName(), under.getInstanceName()));
+ assertNull("Assert no tota service - 7", context.getServiceReference(Tota.class.getName()));
+
+ under.dispose();
+ under = null;
+ }
+
+
+
+ private void invoke(Tota tota) {
+ tota.tata();
+
+ assertEquals("Assert invoke tataint", tota.tataInt(2), 2);
+ assertEquals("Assert invoke tataLong", tota.tataLong(2), 2);
+ assertEquals("Assert invoke tataDouble", tota.tataDouble(2), 2);
+ assertEquals("Assert invoke tataChar", tota.tataChar('a'), 'a');
+ assertTrue("Assert invoke tataBoolean", tota.tataBoolean(true));
+ assertEquals("Assert invoke tataByte", tota.tataByte((byte)2), 2);
+ assertEquals("Assert invoke tataShort", tota.tataShort((short)5), 5);
+ assertEquals("Assert invoke tataFloat", tota.tataFloat(5), 5);
+
+ }
+
+ private void invokeArrays(Tota tota) {
+
+ int[] a = new int[] {1,2,3};
+ assertEquals("Assert invoke tataint[]", tota.tataInts(a), a);
+
+ long[] b = new long[] {1,2,3};
+ assertEquals("Assert invoke tataLong[]", tota.tataLongs(b), b);
+
+ double[] c = new double[] {1,2,3};
+ assertEquals("Assert invoke tataDouble[]", tota.tataDoubles(c), c);
+
+ char[] d = new char[] {'a','b', 'c'};
+ assertEquals("Assert invoke tataChar[]", tota.tataChars(d), d);
+
+ boolean[] e = new boolean[] {true, false};
+ assertEquals("Assert invoke tataBoolean[]", tota.tataBooleans(e), e);
+
+ byte[] f = new byte[] {(byte) 1};
+ assertEquals("Assert invoke tataByte[]", tota.tataBytes(f), f);
+
+ short[] g = new short[] {(short) 1};
+ assertEquals("Assert invoke tataShort[]", tota.tataShorts(g), g);
+
+ float[] h = new float[] {5,6,7};
+ assertEquals("Assert invoke tataFloat[]", tota.tataFloats(h), h);
+
+ }
+
+ private void invokeStr(Tota tota) {
+ tota.tataStr();
+ }
+
+ private void invokeTata(Tota tota) {
+ tota.tata(1,2);
+ tota.tata("tototototo");
+ }
+
+ private void invokeTata1(Tota tota) {
+ assertEquals("Assert tata1", tota.tata1("foo"), "foo");
+ assertEquals("Assert tata1 - 2", tota.tata1(new char[] {'a','b','c'}), "abc");
+ }
+
+ private void invokeTata5(Tota tota) {
+ assertEquals("Assert tata5 -1", tota.tata5("foo",1), "foo"+1);
+ assertEquals("Assert tata5 - 2", tota.tata5(new String[] {"a","b","c"}, 1), "31");
+ assertEquals("Assert tata5 - 3", tota.tata5("foo", new int[] {1,2,3}), "foo3");
+ }
+
+ private void invokeAdd(Tota tota) {
+ assertEquals("Assert add", tota.add(1,1,1), 3);
+ }
+
+ private void invokeToto(Tota tota) {
+ tota.toto();
+ assertEquals("Assert toto", tota.toto("foo"), "foo");
+ tota.toto(1,2);
+ }
+
+ private void invokeAll(Tota tota) {
+ invoke(tota);
+ invokeArrays(tota);
+ invokeStr(tota);
+ invokeTata(tota);
+ invokeTata1(tota);
+ invokeTata5(tota);
+ invokeAdd(tota);
+ invokeToto(tota);
+ }
+
+
+}
diff --git a/ipojo/tests/tests.composite.service.providing/src/main/java/org/apache/felix/ipojo/test/composite/provides/TestComp2.java b/ipojo/tests/tests.composite.service.providing/src/main/java/org/apache/felix/ipojo/test/composite/provides/TestComp2.java
new file mode 100644
index 0000000..763080f
--- /dev/null
+++ b/ipojo/tests/tests.composite.service.providing/src/main/java/org/apache/felix/ipojo/test/composite/provides/TestComp2.java
@@ -0,0 +1,232 @@
+/*
+ * 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.composite.provides;
+
+import java.util.Properties;
+
+import org.apache.felix.ipojo.ComponentFactory;
+import org.apache.felix.ipojo.ComponentInstance;
+import org.apache.felix.ipojo.Factory;
+import org.apache.felix.ipojo.architecture.Architecture;
+import org.apache.felix.ipojo.junit4osgi.OSGiTestCase;
+import org.apache.felix.ipojo.test.composite.component.TotoProvider;
+import org.apache.felix.ipojo.test.composite.service.Tota;
+import org.apache.felix.ipojo.test.composite.util.Utils;
+import org.osgi.framework.ServiceReference;
+
+public class TestComp2 extends OSGiTestCase {
+
+ private ComponentFactory tataFactory;
+ private ComponentFactory totoFactory;
+
+ private ComponentInstance totoProv, totoProv2;
+ private ComponentInstance under;
+ private ComponentFactory tataFactory2;
+
+ public void setUp() {
+ tataFactory = (ComponentFactory) Utils.getFactoryByName(context, "tata");
+ totoFactory = (ComponentFactory) Utils.getFactoryByName(context, "toto");
+ tataFactory2 = (ComponentFactory) Utils.getFactoryByName(context, "comp-6");
+ tataFactory2.stop();
+ tataFactory.stop();
+
+ Properties props = new Properties();
+ props.put("name", "toto provider");
+ try {
+ totoProv = totoFactory.createComponentInstance(props);
+ } catch(Exception e) {
+ e.printStackTrace();
+ }
+
+ Properties props3 = new Properties();
+ props3.put("name", "toto provider 2");
+ try {
+ totoProv2 = totoFactory.createComponentInstance(props3);
+ } catch(Exception e) {
+ e.printStackTrace();
+ }
+
+ totoProv.stop();
+ totoProv2.stop();
+
+ Factory factory = Utils.getFactoryByName(context, "comp-2");
+ Properties props2 = new Properties();
+ props2.put("name", "ff");
+ try {
+ under = factory.createComponentInstance(props2);
+ } catch(Exception e) {
+ e.printStackTrace();
+ }
+
+ }
+
+ public void tearDown() {
+ tataFactory.start();
+ totoProv.dispose();
+ totoProv = null;
+ totoProv2.dispose();
+ totoProv2 = null;
+ tataFactory2.start();
+
+ // Reset counters
+ TotoProvider.toto = 0;
+ TotoProvider.toto_2 = 0;
+ TotoProvider.toto_3 = 0;
+ TotoProvider.toto_4 = 0;
+ TotoProvider.toto1 = 0;
+ }
+
+ public void testSimple() {
+ // Neither factory nor instance
+ assertTrue("Assert under state - 1", under.getState() == ComponentInstance.INVALID);
+ assertNull("Assert no tota service - 1", context.getServiceReference(Tota.class.getName()));
+
+ // Start the importer
+ totoProv.start();
+ assertTrue("Assert under state - 2 ("+under.getState()+")", under.getState() == ComponentInstance.INVALID);
+ assertNull("Assert no tota service - 2", context.getServiceReference(Tota.class.getName()));
+
+ // Start the factory
+ tataFactory.start();
+ assertTrue("Assert under state - 3", under.getState() == ComponentInstance.VALID);
+ assertNotNull("Assert tota service - 3", context.getServiceReference(Tota.class.getName()));
+ ServiceReference ref = context.getServiceReference(Tota.class.getName());
+ Tota tota = (Tota) context.getService(ref);
+
+ invokeAll(tota);
+
+ // Check toto
+ Properties props = tota.getProps();
+ Integer toto = (Integer) props.get("toto");
+ Integer toto_2 = (Integer) props.get("toto_2");
+ Integer toto_3 = (Integer) props.get("toto_3");
+ Integer toto_4 = (Integer) props.get("toto_4");
+ Integer toto_1 = (Integer) props.get("toto1");
+ assertEquals("Assert toto - 3 ("+toto.intValue()+")", toto.intValue(), 1);
+ assertEquals("Assert toto_2 - 3", toto_2.intValue(), 1);
+ assertEquals("Assert toto_3 - 3", toto_3.intValue(), 1);
+ assertEquals("Assert toto_4 - 3", toto_4.intValue(), 0);
+ assertEquals("Assert toto1 - 3 (" + toto_1.intValue() + ")", toto_1.intValue(), 1);
+ //Check tata
+ props = tota.getPropsTata();
+ Integer tata = (Integer) props.get("tata");
+ assertEquals("Assert tata - 3", tata.intValue(), 1);
+
+ context.ungetService(ref);
+ tota = null;
+
+ // Start a second import
+ totoProv2.start();
+ assertTrue("Assert under state - 4", under.getState() == ComponentInstance.VALID);
+ assertNotNull("Assert tota service - 4", context.getServiceReference(Tota.class.getName()));
+ ref = context.getServiceReference(Tota.class.getName());
+ tota = (Tota) context.getService(ref);
+ invokeAll(tota);
+ // Check toto
+ props = tota.getProps();
+ toto = (Integer) props.get("toto");
+ toto_2 = (Integer) props.get("toto_2");
+ toto_3 = (Integer) props.get("toto_3");
+ toto_4 = (Integer) props.get("toto_4");
+ toto_1 = (Integer) props.get("toto1");
+ assertEquals("Assert toto - 4 ("+toto.intValue()+")", toto.intValue(), 2);
+ assertEquals("Assert toto_2 - 4 ("+toto_2.intValue()+")", toto_2.intValue(), 2);
+ assertEquals("Assert toto_3 - 4", toto_3.intValue(), 2);
+ assertEquals("Assert toto_4 - 4", toto_4.intValue(), 0);
+ assertEquals("Assert toto1 - 4", toto_1.intValue(), 3);
+ //Check tata
+ props = tota.getPropsTata();
+ tata = (Integer) props.get("tata");
+ assertEquals("Assert tata - 4", tata.intValue(), 2);
+
+ context.ungetService(ref);
+ tota = null;
+
+ tataFactory.stop();
+ assertTrue("Assert under state - 5", under.getState() == ComponentInstance.INVALID);
+ assertNull("Assert no tota service - 5", context.getServiceReference(Tota.class.getName()));
+
+ totoProv2.stop();
+ tataFactory.start();
+ assertTrue("Assert under state - 6", under.getState() == ComponentInstance.VALID);
+ assertNotNull("Assert tota service - 6", context.getServiceReference(Tota.class.getName()));
+ ref = context.getServiceReference(Tota.class.getName());
+ tota = (Tota) context.getService(ref);
+ invokeAll(tota);
+ // Check toto
+ props = tota.getProps();
+ toto = (Integer) props.get("toto");
+ toto_2 = (Integer) props.get("toto_2");
+ toto_3 = (Integer) props.get("toto_3");
+ toto_4 = (Integer) props.get("toto_4");
+ toto_1 = (Integer) props.get("toto1");
+ assertEquals("Assert toto - 6 ("+toto.intValue()+")", toto.intValue(), 3);
+ assertEquals("Assert toto_2 - 6 ("+toto_2.intValue()+")", toto_2.intValue(), 3);
+ assertEquals("Assert toto_3 - 6", toto_3.intValue(), 3);
+ assertEquals("Assert toto_4 - 6", toto_4.intValue(), 0);
+ assertEquals("Assert toto1 - 6", toto_1.intValue(), 4);
+ //Check tata
+ props = tota.getPropsTata();
+ tata = (Integer) props.get("tata");
+ assertEquals("Assert tata - 6", tata.intValue(), 1);
+
+ context.ungetService(ref);
+ tota = null;
+
+ // Is arch exposed
+ assertNotNull("Test arch", Utils.getServiceReferenceByName(context, Architecture.class.getName(), "ff"));
+
+ totoProv.stop();
+
+ assertTrue("Assert under state - 7", under.getState() == ComponentInstance.INVALID);
+ assertNotNull("Test arch-2", Utils.getServiceReferenceByName(context, Architecture.class.getName(), "ff"));
+ assertNull("Assert no tota service - 7", context.getServiceReference(Tota.class.getName()));
+
+ under.dispose();
+ under = null;
+ }
+
+ private void invoke(Tota tota) {
+ tota.tata();
+
+ assertEquals("Assert invoke tataint", tota.tataInt(2), 2);
+ assertEquals("Assert invoke tataLong", tota.tataLong(2), 2);
+ assertEquals("Assert invoke tataDouble", tota.tataDouble(2), 2);
+ assertEquals("Assert invoke tataChar", tota.tataChar('a'), 'a');
+ assertTrue("Assert invoke tataBoolean", tota.tataBoolean(true));
+ assertEquals("Assert invoke tataByte", tota.tataByte((byte)2), 2);
+ assertEquals("Assert invoke tataShort", tota.tataShort((short)5), 5);
+ assertEquals("Assert invoke tataFloat", tota.tataFloat(5), 5);
+
+ }
+
+ private void invokeToto(Tota tota) {
+ tota.toto();
+ assertEquals("Assert toto", tota.toto("foo"), "foo");
+ tota.toto(1,2);
+ tota.toto1("foo2");
+ }
+
+ private void invokeAll(Tota tota) {
+ invoke(tota);
+ invokeToto(tota);
+ }
+
+
+}
diff --git a/ipojo/tests/tests.composite.service.providing/src/main/java/org/apache/felix/ipojo/test/composite/provides/TestComp3.java b/ipojo/tests/tests.composite.service.providing/src/main/java/org/apache/felix/ipojo/test/composite/provides/TestComp3.java
new file mode 100644
index 0000000..07ac5d3
--- /dev/null
+++ b/ipojo/tests/tests.composite.service.providing/src/main/java/org/apache/felix/ipojo/test/composite/provides/TestComp3.java
@@ -0,0 +1,262 @@
+/*
+ * 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.composite.provides;
+
+import java.util.Properties;
+
+import org.apache.felix.ipojo.ComponentFactory;
+import org.apache.felix.ipojo.ComponentInstance;
+import org.apache.felix.ipojo.Factory;
+import org.apache.felix.ipojo.architecture.Architecture;
+import org.apache.felix.ipojo.junit4osgi.OSGiTestCase;
+import org.apache.felix.ipojo.test.composite.component.TotoProvider;
+import org.apache.felix.ipojo.test.composite.service.Tota;
+import org.apache.felix.ipojo.test.composite.util.Utils;
+import org.osgi.framework.ServiceReference;
+
+public class TestComp3 extends OSGiTestCase {
+
+ private ComponentFactory tataFactory;
+ private ComponentFactory totoFactory;
+
+ private ComponentInstance totoProv, totoProv2;
+ private ComponentInstance under;
+ private ComponentFactory tataFactory2;
+
+ public void setUp() {
+ tataFactory = (ComponentFactory) Utils.getFactoryByName(context, "tata");
+ totoFactory = (ComponentFactory) Utils.getFactoryByName(context, "toto");
+ tataFactory2 = (ComponentFactory) Utils.getFactoryByName(context, "comp-6");
+ tataFactory2.stop();
+ tataFactory.stop();
+
+ Properties props = new Properties();
+ props.put("name", "toto provider");
+ try {
+ totoProv = totoFactory.createComponentInstance(props);
+ } catch(Exception e) {
+ e.printStackTrace();
+ }
+
+ Properties props3 = new Properties();
+ props3.put("name", "toto provider 2");
+ try {
+ totoProv2 = totoFactory.createComponentInstance(props3);
+ } catch(Exception e) {
+ e.printStackTrace();
+ }
+
+ totoProv.stop();
+ totoProv2.stop();
+
+ Factory factory = Utils.getFactoryByName(context, "comp-3");
+ Properties props2 = new Properties();
+ props2.put("name", "ff");
+ try {
+ under = factory.createComponentInstance(props2);
+ } catch(Exception e) {
+ e.printStackTrace();
+ }
+
+ }
+
+ public void tearDown() {
+ tataFactory.start();
+ totoProv.dispose();
+ totoProv = null;
+ totoProv2.dispose();
+ totoProv2 = null;
+ tataFactory2.start();
+
+ // Reset counters
+ TotoProvider.toto = 0;
+ TotoProvider.toto_2 = 0;
+ TotoProvider.toto_3 = 0;
+ TotoProvider.toto_4 = 0;
+ TotoProvider.toto1 = 0;
+ }
+
+ public void testSimple() {
+ // Neither factory nor instance
+ assertTrue("Assert under state - 1", under.getState() == ComponentInstance.INVALID);
+ assertNull("Assert no tota service - 1", context.getServiceReference(Tota.class.getName()));
+
+ // Start the importer
+ totoProv.start();
+ assertTrue("Assert under state - 2 ("+under.getState()+")", under.getState() == ComponentInstance.INVALID);
+ assertNull("Assert no tota service - 2", context.getServiceReference(Tota.class.getName()));
+
+ // Start the factory
+ tataFactory.start();
+ assertTrue("Assert under state - 3", under.getState() == ComponentInstance.VALID);
+ assertNotNull("Assert tota service - 3", context.getServiceReference(Tota.class.getName()));
+ ServiceReference ref = context.getServiceReference(Tota.class.getName());
+ Tota tota = (Tota) context.getService(ref);
+ invokeAll(tota);
+ // Check toto
+ Properties props = tota.getProps();
+ Integer toto = (Integer) props.get("toto");
+ Integer toto_2 = (Integer) props.get("toto_2");
+ Integer toto_3 = (Integer) props.get("toto_3");
+ Integer toto_4 = (Integer) props.get("toto_4");
+ Integer toto_1 = (Integer) props.get("toto1");
+ assertEquals("Assert toto - 3 ("+toto.intValue()+")", toto.intValue(), 1);
+ assertEquals("Assert toto_2 - 3", toto_2.intValue(), 1);
+ assertEquals("Assert toto_3 - 3", toto_3.intValue(), 1);
+ assertEquals("Assert toto_4 - 3", toto_4.intValue(), 0);
+ assertEquals("Assert toto1 - 3 (" + toto_1.intValue() + ")", toto_1.intValue(), 1);
+ //Check tata
+ props = tota.getPropsTata();
+ Integer tata = (Integer) props.get("tata");
+ assertEquals("Assert tata - 3", tata.intValue(), 1);
+
+ context.ungetService(ref);
+ tota = null;
+
+ // Start a second import
+ totoProv2.start();
+ assertTrue("Assert under state - 4", under.getState() == ComponentInstance.VALID);
+ assertNotNull("Assert tota service - 4", context.getServiceReference(Tota.class.getName()));
+ ref = context.getServiceReference(Tota.class.getName());
+ tota = (Tota) context.getService(ref);
+ invokeAll(tota);
+ props = tota.getProps();
+ toto = (Integer) props.get("toto");
+ toto_2 = (Integer) props.get("toto_2");
+ toto_3 = (Integer) props.get("toto_3");
+ toto_4 = (Integer) props.get("toto_4");
+ toto_1 = (Integer) props.get("toto1");
+ assertEquals("Assert toto - 4 ("+toto.intValue()+")", toto.intValue(), 2);
+ assertEquals("Assert toto_2 - 4 ("+toto_2.intValue()+")", toto_2.intValue(), 2);
+ assertEquals("Assert toto_3 - 4", toto_3.intValue(), 2);
+ assertEquals("Assert toto_4 - 4", toto_4.intValue(), 0);
+ assertEquals("Assert toto1 - 4", toto_1.intValue(), 2);
+ //Check tata
+ props = tota.getPropsTata();
+ tata = (Integer) props.get("tata");
+ assertEquals("Assert tata - 4", tata.intValue(), 2);
+ context.ungetService(ref);
+ tota = null;
+
+ // Stop the factory
+ tataFactory.stop();
+ assertTrue("Assert under state - 5", under.getState() == ComponentInstance.INVALID);
+ assertNull("Assert no tota service - 5", context.getServiceReference(Tota.class.getName()));
+
+ totoProv2.stop();
+ totoProv.stop();
+ tataFactory.start();
+ assertTrue("Assert under state - 6", under.getState() == ComponentInstance.VALID);
+ assertNotNull("Assert tota service - 6", context.getServiceReference(Tota.class.getName()));
+ ref = context.getServiceReference(Tota.class.getName());
+ tota = (Tota) context.getService(ref);
+ invokeAllOpt(tota);
+ //Check tata
+ props = tota.getPropsTata();
+ tata = (Integer) props.get("tata");
+ assertEquals("Assert tata - 4", tata.intValue(), 1);
+ context.ungetService(ref);
+ tota = null;
+
+ // Is arch exposed
+ assertNotNull("Test arch", Utils.getServiceReferenceByName(context, Architecture.class.getName(), "ff"));
+
+ tataFactory.stop();
+
+ assertTrue("Assert under state - 7", under.getState() == ComponentInstance.INVALID);
+ assertNotNull("Test arch-2", Utils.getServiceReferenceByName(context, Architecture.class.getName(), "ff"));
+ assertNull("Assert no tota service - 7", context.getServiceReference(Tota.class.getName()));
+
+ under.dispose();
+ under = null;
+ }
+
+ private void invoke(Tota tota) {
+ tota.tata();
+
+ assertEquals("Assert invoke tataint", tota.tataInt(2), 2);
+ assertEquals("Assert invoke tataLong", tota.tataLong(2), 2);
+ assertEquals("Assert invoke tataDouble", tota.tataDouble(2), 2);
+ assertEquals("Assert invoke tataChar", tota.tataChar('a'), 'a');
+ assertTrue("Assert invoke tataBoolean", tota.tataBoolean(true));
+ assertEquals("Assert invoke tataByte", tota.tataByte((byte)2), 2);
+ assertEquals("Assert invoke tataShort", tota.tataShort((short)5), 5);
+ assertEquals("Assert invoke tataFloat", tota.tataFloat(5), 5);
+
+ }
+
+
+ private void invokeStr(Tota tota) {
+ tota.tataStr();
+ }
+
+ private void invokeToto(Tota tota) {
+ tota.toto();
+ assertEquals("Assert toto", tota.toto("foo"), "foo");
+ tota.toto(1,2);
+ tota.toto1("foo");
+ }
+
+ private void invokeAll(Tota tota) {
+ invoke(tota);
+ //invokeArrays(tota);
+ invokeStr(tota);
+ //invokeTata(tota);
+ //invokeTata1(tota);
+ //invokeTata5(tota);
+ //invokeAdd(tota);
+ invokeToto(tota);
+ }
+
+ private void invokeAllOpt(Tota tota) {
+ invoke(tota);
+ //invokeArrays(tota);
+ invokeStr(tota);
+ //invokeTata(tota);
+ //invokeTata1(tota);
+ //invokeTata5(tota);
+ //invokeAdd(tota);
+ invokeTotoOpt(tota);
+ }
+
+ private void invokeTotoOpt(Tota tota) {
+ try {
+ tota.toto();
+ fail("UnsupportedOperationException expected");
+ } catch(UnsupportedOperationException e) { }
+
+ try {
+ assertEquals("Assert toto", tota.toto("foo"), "foo");
+ fail("UnsupportedOperationException expected");
+ } catch(UnsupportedOperationException e) { }
+
+
+ try {
+ tota.toto(1,2);
+ fail("UnsupportedOperationException expected");
+ } catch(UnsupportedOperationException e) { }
+
+ try {
+ tota.toto1("foo");
+ fail("UnsupportedOperationException expected");
+ } catch(UnsupportedOperationException e) { }
+ }
+
+
+}
diff --git a/ipojo/tests/tests.composite.service.providing/src/main/java/org/apache/felix/ipojo/test/composite/provides/TestComp4.java b/ipojo/tests/tests.composite.service.providing/src/main/java/org/apache/felix/ipojo/test/composite/provides/TestComp4.java
new file mode 100644
index 0000000..0d0f36c
--- /dev/null
+++ b/ipojo/tests/tests.composite.service.providing/src/main/java/org/apache/felix/ipojo/test/composite/provides/TestComp4.java
@@ -0,0 +1,261 @@
+/*
+ * 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.composite.provides;
+
+import java.util.Properties;
+
+import org.apache.felix.ipojo.ComponentFactory;
+import org.apache.felix.ipojo.ComponentInstance;
+import org.apache.felix.ipojo.Factory;
+import org.apache.felix.ipojo.architecture.Architecture;
+import org.apache.felix.ipojo.junit4osgi.OSGiTestCase;
+import org.apache.felix.ipojo.test.composite.component.TotoProvider;
+import org.apache.felix.ipojo.test.composite.service.Tota;
+import org.apache.felix.ipojo.test.composite.util.Utils;
+import org.osgi.framework.ServiceReference;
+
+public class TestComp4 extends OSGiTestCase {
+
+ private ComponentFactory tataFactory;
+ private ComponentFactory totoFactory;
+
+ private ComponentInstance totoProv, totoProv2;
+ private ComponentInstance under;
+ private ComponentFactory tataFactory2;
+
+ public void setUp() {
+ tataFactory = (ComponentFactory) Utils.getFactoryByName(context, "tata");
+ totoFactory = (ComponentFactory) Utils.getFactoryByName(context, "toto");
+ tataFactory2 = (ComponentFactory) Utils.getFactoryByName(context, "comp-6");
+ tataFactory2.stop();
+ tataFactory.stop();
+
+ Properties props = new Properties();
+ props.put("name", "toto provider");
+ try {
+ totoProv = totoFactory.createComponentInstance(props);
+ } catch(Exception e) {
+ e.printStackTrace();
+ }
+
+ Properties props3 = new Properties();
+ props3.put("name", "toto provider 2");
+ try {
+ totoProv2 = totoFactory.createComponentInstance(props3);
+ } catch(Exception e) {
+ e.printStackTrace();
+ }
+
+ totoProv.stop();
+ totoProv2.stop();
+
+ Factory factory = Utils.getFactoryByName(context, "comp-4");
+ Properties props2 = new Properties();
+ props2.put("name", "ff");
+ try {
+ under = factory.createComponentInstance(props2);
+ } catch(Exception e) {
+ e.printStackTrace();
+ }
+
+ }
+
+ public void tearDown() {
+ tataFactory2.start();
+ tataFactory.start();
+ totoProv.dispose();
+ totoProv = null;
+ totoProv2.dispose();
+ totoProv2 = null;
+
+ // Reset counters
+ TotoProvider.toto = 0;
+ TotoProvider.toto_2 = 0;
+ TotoProvider.toto_3 = 0;
+ TotoProvider.toto_4 = 0;
+ TotoProvider.toto1 = 0;
+ }
+
+ public void testSimple() {
+ // Neither factory nor instance
+ assertTrue("Assert under state - 1", under.getState() == ComponentInstance.INVALID);
+ assertNull("Assert no tota service - 1", context.getServiceReference(Tota.class.getName()));
+
+ // Start the importer
+ totoProv.start();
+ assertTrue("Assert under state - 2 ("+under.getState()+")", under.getState() == ComponentInstance.INVALID);
+ assertNull("Assert no tota service - 2", context.getServiceReference(Tota.class.getName()));
+
+ // Start the factory
+ tataFactory.start();
+ assertTrue("Assert under state - 3", under.getState() == ComponentInstance.VALID);
+ assertNotNull("Assert tota service - 3", context.getServiceReference(Tota.class.getName()));
+ ServiceReference ref = context.getServiceReference(Tota.class.getName());
+ Tota tota = (Tota) context.getService(ref);
+ invokeAll(tota);
+ // Check toto
+ Properties props = tota.getProps();
+ Integer toto = (Integer) props.get("toto");
+ Integer toto_2 = (Integer) props.get("toto_2");
+ Integer toto_3 = (Integer) props.get("toto_3");
+ Integer toto_4 = (Integer) props.get("toto_4");
+ Integer toto_1 = (Integer) props.get("toto1");
+ assertEquals("Assert toto - 3 ("+toto.intValue()+")", toto.intValue(), 1);
+ assertEquals("Assert toto_2 - 3", toto_2.intValue(), 1);
+ assertEquals("Assert toto_3 - 3", toto_3.intValue(), 1);
+ assertEquals("Assert toto_4 - 3", toto_4.intValue(), 0);
+ assertEquals("Assert toto1 - 3 (" + toto_1.intValue() + ")", toto_1.intValue(), 1);
+ //Check tata
+ props = tota.getPropsTata();
+ Integer tata = (Integer) props.get("tata");
+ assertEquals("Assert tata - 3", tata.intValue(), 1);
+ context.ungetService(ref);
+ tota = null;
+
+ // Start a second import
+ totoProv2.start();
+ assertTrue("Assert under state - 4", under.getState() == ComponentInstance.VALID);
+ assertNotNull("Assert tota service - 4", context.getServiceReference(Tota.class.getName()));
+ ref = context.getServiceReference(Tota.class.getName());
+ tota = (Tota) context.getService(ref);
+ invokeAll(tota);
+ props = tota.getProps();
+ toto = (Integer) props.get("toto");
+ toto_2 = (Integer) props.get("toto_2");
+ toto_3 = (Integer) props.get("toto_3");
+ toto_4 = (Integer) props.get("toto_4");
+ toto_1 = (Integer) props.get("toto1");
+ assertEquals("Assert toto - 4 ("+toto.intValue()+")", toto.intValue(), 2);
+ assertEquals("Assert toto_2 - 4 ("+toto_2.intValue()+")", toto_2.intValue(), 2);
+ assertEquals("Assert toto_3 - 4", toto_3.intValue(), 2);
+ assertEquals("Assert toto_4 - 4", toto_4.intValue(), 0);
+ assertEquals("Assert toto1 - 4", toto_1.intValue(), 2);
+ //Check tata
+ props = tota.getPropsTata();
+ tata = (Integer) props.get("tata");
+ assertEquals("Assert tata - 4", tata.intValue(), 2);
+ context.ungetService(ref);
+ tota = null;
+
+ // Stop the factory
+ tataFactory.stop();
+ assertTrue("Assert under state - 5", under.getState() == ComponentInstance.INVALID);
+ assertNull("Assert no tota service - 5", context.getServiceReference(Tota.class.getName()));
+
+ totoProv2.stop();
+ totoProv.stop();
+ tataFactory.start();
+ assertTrue("Assert under state - 6", under.getState() == ComponentInstance.VALID);
+ assertNotNull("Assert tota service - 6", context.getServiceReference(Tota.class.getName()));
+ ref = context.getServiceReference(Tota.class.getName());
+ tota = (Tota) context.getService(ref);
+ invokeAllOpt(tota);
+ // Check tata
+ props = tota.getPropsTata();
+ tata = (Integer) props.get("tata");
+ assertEquals("Assert tata - 6", tata.intValue(), 1);
+ context.ungetService(ref);
+ tota = null;
+
+ // Is arch exposed
+ assertNotNull("Test arch", Utils.getServiceReferenceByName(context, Architecture.class.getName(), "ff"));
+
+ tataFactory.stop();
+
+ assertTrue("Assert under state - 7", under.getState() == ComponentInstance.INVALID);
+ assertNotNull("Test arch-2", Utils.getServiceReferenceByName(context, Architecture.class.getName(), "ff"));
+ assertNull("Assert no tota service - 7", context.getServiceReference(Tota.class.getName()));
+
+ under.dispose();
+ under = null;
+ }
+
+ private void invoke(Tota tota) {
+ tota.tata();
+
+ assertEquals("Assert invoke tataint", tota.tataInt(2), 2);
+ assertEquals("Assert invoke tataLong", tota.tataLong(2), 2);
+ assertEquals("Assert invoke tataDouble", tota.tataDouble(2), 2);
+ assertEquals("Assert invoke tataChar", tota.tataChar('a'), 'a');
+ assertTrue("Assert invoke tataBoolean", tota.tataBoolean(true));
+ assertEquals("Assert invoke tataByte", tota.tataByte((byte)2), 2);
+ assertEquals("Assert invoke tataShort", tota.tataShort((short)5), 5);
+ assertEquals("Assert invoke tataFloat", tota.tataFloat(5), 5);
+
+ }
+
+
+ private void invokeStr(Tota tota) {
+ tota.tataStr();
+ }
+
+ private void invokeToto(Tota tota) {
+ tota.toto();
+ assertEquals("Assert toto", tota.toto("foo"), "foo");
+ tota.toto(1,2);
+ tota.toto1("foo");
+ }
+
+ private void invokeAll(Tota tota) {
+ invoke(tota);
+ //invokeArrays(tota);
+ invokeStr(tota);
+ //invokeTata(tota);
+ //invokeTata1(tota);
+ //invokeTata5(tota);
+ //invokeAdd(tota);
+ invokeToto(tota);
+ }
+
+ private void invokeAllOpt(Tota tota) {
+ invoke(tota);
+ //invokeArrays(tota);
+ invokeStr(tota);
+ //invokeTata(tota);
+ //invokeTata1(tota);
+ //invokeTata5(tota);
+ //invokeAdd(tota);
+ invokeTotoOpt(tota);
+ }
+
+ private void invokeTotoOpt(Tota tota) {
+ try {
+ tota.toto();
+ fail("UnsupportedOperationException expected");
+ } catch(UnsupportedOperationException e) { }
+
+ try {
+ assertEquals("Assert toto", tota.toto("foo"), "foo");
+ fail("UnsupportedOperationException expected");
+ } catch(UnsupportedOperationException e) { }
+
+
+ try {
+ tota.toto(1,2);
+ fail("UnsupportedOperationException expected");
+ } catch(UnsupportedOperationException e) { }
+
+ try {
+ tota.toto1("foo");
+ fail("UnsupportedOperationException expected");
+ } catch(UnsupportedOperationException e) { }
+ }
+
+
+}
diff --git a/ipojo/tests/tests.composite.service.providing/src/main/java/org/apache/felix/ipojo/test/composite/provides/TestComp5.java b/ipojo/tests/tests.composite.service.providing/src/main/java/org/apache/felix/ipojo/test/composite/provides/TestComp5.java
new file mode 100644
index 0000000..7dd11f7
--- /dev/null
+++ b/ipojo/tests/tests.composite.service.providing/src/main/java/org/apache/felix/ipojo/test/composite/provides/TestComp5.java
@@ -0,0 +1,265 @@
+/*
+ * 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.composite.provides;
+
+import java.util.Properties;
+
+import org.apache.felix.ipojo.ComponentFactory;
+import org.apache.felix.ipojo.ComponentInstance;
+import org.apache.felix.ipojo.Factory;
+import org.apache.felix.ipojo.architecture.Architecture;
+import org.apache.felix.ipojo.junit4osgi.OSGiTestCase;
+import org.apache.felix.ipojo.test.composite.component.TotoProvider;
+import org.apache.felix.ipojo.test.composite.service.Tota;
+import org.apache.felix.ipojo.test.composite.util.Utils;
+import org.osgi.framework.ServiceReference;
+
+public class TestComp5 extends OSGiTestCase {
+
+ private ComponentFactory tataFactory;
+ private ComponentFactory totoFactory;
+
+ private ComponentInstance totoProv, totoProv2;
+ private ComponentInstance under;
+ private ComponentFactory tataFactory2;
+
+ public void setUp() {
+ tataFactory = (ComponentFactory) Utils.getFactoryByName(context, "tata");
+ totoFactory = (ComponentFactory) Utils.getFactoryByName(context, "toto");
+ tataFactory2 = (ComponentFactory) Utils.getFactoryByName(context, "comp-6");
+ tataFactory2.stop();
+ tataFactory.stop();
+
+ Properties props = new Properties();
+ props.put("name", "toto provider");
+ try {
+ totoProv = totoFactory.createComponentInstance(props);
+ } catch(Exception e) {
+ e.printStackTrace();
+ }
+
+ Properties props3 = new Properties();
+ props3.put("name", "toto provider 2");
+ try {
+ totoProv2 = totoFactory.createComponentInstance(props3);
+ } catch(Exception e) {
+ e.printStackTrace();
+ }
+
+ totoProv.stop();
+ totoProv2.stop();
+
+ Factory factory = Utils.getFactoryByName(context, "comp-5");
+ Properties props2 = new Properties();
+ props2.put("name", "ff");
+ try {
+ under = factory.createComponentInstance(props2);
+ } catch(Exception e) {
+ e.printStackTrace();
+ fail("Cannot create an instance from comp-5 : " + e.getMessage());
+ }
+
+ }
+
+ public void tearDown() {
+ tataFactory2.start();
+ tataFactory.start();
+ totoProv.dispose();
+ totoProv = null;
+ totoProv2.dispose();
+ totoProv2 = null;
+
+ // Reset counters
+ TotoProvider.toto = 0;
+ TotoProvider.toto_2 = 0;
+ TotoProvider.toto_3 = 0;
+ TotoProvider.toto_4 = 0;
+ TotoProvider.toto1 = 0;
+ }
+
+ public void testSimple() {
+ // Neither factory nor instance
+ assertTrue("Assert under state - 1", under.getState() == ComponentInstance.INVALID);
+ assertNull("Assert no tota service - 1", context.getServiceReference(Tota.class.getName()));
+
+ // Start the importer
+ totoProv.start();
+ assertTrue("Assert under state - 2 ("+under.getState()+")", under.getState() == ComponentInstance.INVALID);
+ assertNull("Assert no tota service - 2", context.getServiceReference(Tota.class.getName()));
+
+ // Start the factory
+ tataFactory.start();
+ assertTrue("Assert under state - 3", under.getState() == ComponentInstance.VALID);
+ assertNotNull("Assert tota service - 3", context.getServiceReference(Tota.class.getName()));
+ ServiceReference ref = context.getServiceReference(Tota.class.getName());
+ Tota tota = (Tota) context.getService(ref);
+ invokeAll(tota);
+ // Check toto
+ Properties props = tota.getProps();
+ Integer toto = (Integer) props.get("toto");
+ Integer toto_2 = (Integer) props.get("toto_2");
+ Integer toto_3 = (Integer) props.get("toto_3");
+ Integer toto_4 = (Integer) props.get("toto_4");
+ Integer toto_1 = (Integer) props.get("toto1");
+ assertEquals("Assert toto - 3 ("+toto.intValue()+")", toto.intValue(), 1);
+ assertEquals("Assert toto_2 - 3", toto_2.intValue(), 1);
+ assertEquals("Assert toto_3 - 3", toto_3.intValue(), 1);
+ assertEquals("Assert toto_4 - 3", toto_4.intValue(), 0);
+ assertEquals("Assert toto1 - 3 (" + toto_1.intValue() + ")", toto_1.intValue(), 1);
+ //Check tata
+ props = tota.getPropsTata();
+ Integer tata = (Integer) props.get("tata");
+ assertEquals("Assert tata - 3", tata.intValue(), 1);
+ context.ungetService(ref);
+ tota = null;
+
+ // Start a second import
+ totoProv2.start();
+ assertTrue("Assert under state - 4", under.getState() == ComponentInstance.VALID);
+ assertNotNull("Assert tota service - 4", context.getServiceReference(Tota.class.getName()));
+ ref = context.getServiceReference(Tota.class.getName());
+ tota = (Tota) context.getService(ref);
+ invokeAll(tota);
+ // Check toto
+ props = tota.getProps();
+ toto = (Integer) props.get("toto");
+ toto_2 = (Integer) props.get("toto_2");
+ toto_3 = (Integer) props.get("toto_3");
+ toto_4 = (Integer) props.get("toto_4");
+ toto_1 = (Integer) props.get("toto1");
+ assertEquals("Assert toto - 4 ("+toto.intValue()+")", toto.intValue(), 2);
+ assertEquals("Assert toto_2 - 4 ("+toto_2.intValue()+")", toto_2.intValue(), 2);
+ assertEquals("Assert toto_3 - 4", toto_3.intValue(), 2);
+ assertEquals("Assert toto_4 - 4", toto_4.intValue(), 0);
+ assertEquals("Assert toto1 - 4", toto_1.intValue(), 3);
+ //Check tata
+ props = tota.getPropsTata();
+ tata = (Integer) props.get("tata");
+ assertEquals("Assert tata - 4", tata.intValue(), 2);
+ context.ungetService(ref);
+ tota = null;
+
+ // Stop the factory
+ tataFactory.stop();
+ assertTrue("Assert under state - 5", under.getState() == ComponentInstance.INVALID);
+ assertNull("Assert no tota service - 5", context.getServiceReference(Tota.class.getName()));
+
+ totoProv2.stop();
+ totoProv.stop();
+ tataFactory.start();
+ assertTrue("Assert under state - 6", under.getState() == ComponentInstance.VALID);
+ assertNotNull("Assert tota service - 6", context.getServiceReference(Tota.class.getName()));
+ ref = context.getServiceReference(Tota.class.getName());
+ tota = (Tota) context.getService(ref);
+ invokeAllOpt(tota);
+ //Check tata
+ props = tota.getPropsTata();
+ tata = (Integer) props.get("tata");
+ assertEquals("Assert tata - 6", tata.intValue(), 1);
+ context.ungetService(ref);
+ tota = null;
+
+ // Is arch exposed
+ assertNotNull("Test arch", Utils.getServiceReferenceByName(context, Architecture.class.getName(), "ff"));
+
+ tataFactory.stop();
+
+ assertTrue("Assert under state - 7", under.getState() == ComponentInstance.INVALID);
+ assertNotNull("Test arch-2", Utils.getServiceReferenceByName(context, Architecture.class.getName(), "ff"));
+ assertNull("Assert no tota service - 7", context.getServiceReference(Tota.class.getName()));
+
+ under.dispose();
+ under = null;
+ }
+
+
+
+ private void invoke(Tota tota) {
+ tota.tata();
+
+ assertEquals("Assert invoke tataint", tota.tataInt(2), 2);
+ assertEquals("Assert invoke tataLong", tota.tataLong(2), 2);
+ assertEquals("Assert invoke tataDouble", tota.tataDouble(2), 2);
+ assertEquals("Assert invoke tataChar", tota.tataChar('a'), 'a');
+ assertTrue("Assert invoke tataBoolean", tota.tataBoolean(true));
+ assertEquals("Assert invoke tataByte", tota.tataByte((byte)2), 2);
+ assertEquals("Assert invoke tataShort", tota.tataShort((short)5), 5);
+ assertEquals("Assert invoke tataFloat", tota.tataFloat(5), 5);
+
+ }
+
+
+ private void invokeStr(Tota tota) {
+ tota.tataStr();
+ }
+
+ private void invokeToto(Tota tota) {
+ tota.toto();
+ assertEquals("Assert toto", tota.toto("foo"), "foo");
+ tota.toto(1,2);
+ tota.toto1("foo");
+ }
+
+ private void invokeAll(Tota tota) {
+ invoke(tota);
+ //invokeArrays(tota);
+ invokeStr(tota);
+ //invokeTata(tota);
+ //invokeTata1(tota);
+ //invokeTata5(tota);
+ //invokeAdd(tota);
+ invokeToto(tota);
+ }
+
+ private void invokeAllOpt(Tota tota) {
+ invoke(tota);
+ //invokeArrays(tota);
+ invokeStr(tota);
+ //invokeTata(tota);
+ //invokeTata1(tota);
+ //invokeTata5(tota);
+ //invokeAdd(tota);
+ invokeTotoOpt(tota);
+ }
+
+ private void invokeTotoOpt(Tota tota) {
+ try {
+ tota.toto();
+ fail("UnsupportedOperationException expected");
+ } catch(UnsupportedOperationException e) { }
+
+ try {
+ assertEquals("Assert toto", tota.toto("foo"), "foo");
+ fail("UnsupportedOperationException expected");
+ } catch(UnsupportedOperationException e) { }
+
+
+ try {
+ tota.toto(1,2);
+ fail("UnsupportedOperationException expected");
+ } catch(UnsupportedOperationException e) { }
+
+ try {
+ tota.toto1("foo");
+ fail("UnsupportedOperationException expected");
+ } catch(UnsupportedOperationException e) { }
+ }
+
+
+}
diff --git a/ipojo/tests/tests.composite.service.providing/src/main/java/org/apache/felix/ipojo/test/composite/provides/TestComp6.java b/ipojo/tests/tests.composite.service.providing/src/main/java/org/apache/felix/ipojo/test/composite/provides/TestComp6.java
new file mode 100644
index 0000000..609c23c
--- /dev/null
+++ b/ipojo/tests/tests.composite.service.providing/src/main/java/org/apache/felix/ipojo/test/composite/provides/TestComp6.java
@@ -0,0 +1,284 @@
+/*
+ * 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.composite.provides;
+
+import java.util.Properties;
+
+import org.apache.felix.ipojo.ComponentFactory;
+import org.apache.felix.ipojo.ComponentInstance;
+import org.apache.felix.ipojo.Factory;
+import org.apache.felix.ipojo.architecture.Architecture;
+import org.apache.felix.ipojo.junit4osgi.OSGiTestCase;
+import org.apache.felix.ipojo.test.composite.component.TotoProvider;
+import org.apache.felix.ipojo.test.composite.service.Tata;
+import org.apache.felix.ipojo.test.composite.service.Toto;
+import org.apache.felix.ipojo.test.composite.util.Utils;
+import org.osgi.framework.ServiceReference;
+
+public class TestComp6 extends OSGiTestCase {
+
+ private ComponentFactory tataFactory;
+ private ComponentFactory totoFactory;
+
+ private ComponentInstance totoProv, totoProv2;
+ private ComponentInstance under;
+
+ public void setUp() {
+ tataFactory = (ComponentFactory) Utils.getFactoryByName(context, "tata");
+ totoFactory = (ComponentFactory) Utils.getFactoryByName(context, "toto");
+
+ tataFactory.stop();
+
+ Properties props = new Properties();
+ props.put("name", "toto provider");
+ try {
+ totoProv = totoFactory.createComponentInstance(props);
+ } catch(Exception e) {
+ e.printStackTrace();
+ }
+
+ Properties props3 = new Properties();
+ props3.put("name", "toto provider 2");
+ try {
+ totoProv2 = totoFactory.createComponentInstance(props3);
+ } catch(Exception e) {
+ e.printStackTrace();
+ }
+
+ totoProv.stop();
+ totoProv2.stop();
+
+ Factory factory = Utils.getFactoryByName(context, "comp-6");
+ Properties props2 = new Properties();
+ props2.put("name", "ff");
+ try {
+ under = factory.createComponentInstance(props2);
+ } catch(Exception e) {
+ e.printStackTrace();
+ }
+
+ }
+
+ public void tearDown() {
+ tataFactory.start();
+ totoProv.dispose();
+ totoProv = null;
+ totoProv2.dispose();
+ totoProv2 = null;
+
+ // Reset counters
+ TotoProvider.toto = 0;
+ TotoProvider.toto_2 = 0;
+ TotoProvider.toto_3 = 0;
+ TotoProvider.toto_4 = 0;
+ TotoProvider.toto1 = 0;
+ }
+
+ public void testSimple() {
+ // Neither factory nor instance
+ assertTrue("Assert under state - 1", under.getState() == ComponentInstance.INVALID);
+ ServiceReference refToto = Utils.getServiceReferenceByName(context, Toto.class.getName(), "ff");
+ ServiceReference refTata = Utils.getServiceReferenceByName(context, Tata.class.getName(), "ff");
+ assertNull("Assert no toto service - 1", refToto);
+ assertNull("Assert no tata service - 1", refTata);
+
+ // Start the importer
+ totoProv.start();
+ assertTrue("Assert under state - 2 ("+under.getState()+")", under.getState() == ComponentInstance.INVALID);
+ refToto = Utils.getServiceReferenceByName(context, Toto.class.getName(), "ff");
+ refTata = Utils.getServiceReferenceByName(context, Tata.class.getName(), "ff");
+ assertNull("Assert no toto service - 2", refToto);
+ assertNull("Assert no tata service - 2", refTata);
+
+ // Start the factory
+ tataFactory.start();
+ assertTrue("Assert under state - 3", under.getState() == ComponentInstance.VALID);
+ refToto = Utils.getServiceReferenceByName(context, Toto.class.getName(), "ff");
+ refTata = Utils.getServiceReferenceByName(context, Tata.class.getName(), "ff");
+ assertNotNull("Assert toto service - 3", refToto);
+ assertNotNull("Assert tata service - 3", refTata);
+ Toto toto = (Toto) context.getService(refToto);
+ Tata tata = (Tata) context.getService(refTata);
+
+ invokeAll(tata);
+ invokeToto(toto);
+
+ // Check toto
+ Properties props = toto.getProps();
+ Integer toto_0 = (Integer) props.get("toto");
+ Integer toto_2 = (Integer) props.get("toto_2");
+ Integer toto_3 = (Integer) props.get("toto_3");
+ Integer toto_4 = (Integer) props.get("toto_4");
+ Integer toto_1 = (Integer) props.get("toto1");
+ assertEquals("Assert toto - 3 ("+toto_0.intValue()+")", toto_0.intValue(), 1);
+ assertEquals("Assert toto_2 - 3", toto_2.intValue(), 1);
+ assertEquals("Assert toto_3 - 3", toto_3.intValue(), 1);
+ assertEquals("Assert toto_4 - 3", toto_4.intValue(), 0);
+ assertEquals("Assert toto1 - 3 (" + toto_1.intValue() + ")", toto_1.intValue(), 1);
+ //Check tata
+ props = tata.getPropsTata();
+ Integer tata_0 = (Integer) props.get("tata");
+ assertEquals("Assert tata - 3", tata_0.intValue(), 1);
+
+ context.ungetService(refToto);
+ context.ungetService(refTata);
+ toto = null;
+ tata = null;
+
+ // Start a second import
+ totoProv2.start();
+ assertTrue("Assert under state - 4", under.getState() == ComponentInstance.VALID);
+ refToto = Utils.getServiceReferenceByName(context, Toto.class.getName(), "ff");
+ refTata = Utils.getServiceReferenceByName(context, Tata.class.getName(), "ff");
+ assertNotNull("Assert toto service - 4", refToto);
+ assertNotNull("Assert tata service - 4", refTata);
+
+ toto = (Toto) context.getService(refToto);
+ tata = (Tata) context.getService(refTata);
+ invokeAll(tata);
+ invokeToto(toto);
+
+ // Check toto
+ props = toto.getProps();
+ toto_0 = (Integer) props.get("toto");
+ toto_2 = (Integer) props.get("toto_2");
+ toto_3 = (Integer) props.get("toto_3");
+ toto_4 = (Integer) props.get("toto_4");
+ toto_1 = (Integer) props.get("toto1");
+ assertEquals("Assert toto - 4 ("+toto_0.intValue()+")", toto_0.intValue(), 2);
+ assertEquals("Assert toto_2 - 4 ("+toto_2.intValue()+")", toto_2.intValue(), 2);
+ assertEquals("Assert toto_3 - 4", toto_3.intValue(), 2);
+ assertEquals("Assert toto_4 - 4", toto_4.intValue(), 0);
+ assertEquals("Assert toto1 - 4", toto_1.intValue(), 3);
+ //Check tata
+ props = tata.getPropsTata();
+ tata_0 = (Integer) props.get("tata");
+ assertEquals("Assert tata - 4", tata_0.intValue(), 2);
+ context.ungetService(refToto);
+ context.ungetService(refTata);
+ toto = null;
+ tata = null;
+
+ // Stop the factory
+ tataFactory.stop();
+ assertTrue("Assert under state - 5", under.getState() == ComponentInstance.INVALID);
+ refToto = Utils.getServiceReferenceByName(context, Toto.class.getName(), "ff");
+ refTata = Utils.getServiceReferenceByName(context, Tata.class.getName(), "ff");
+ assertNull("Assert no toto service - 5", refToto);
+ assertNull("Assert no tata service - 5", refTata);
+
+ totoProv2.stop();
+ totoProv.stop();
+ tataFactory.start();
+ assertTrue("Assert under state - 6", under.getState() == ComponentInstance.VALID);
+ refToto = Utils.getServiceReferenceByName(context, Toto.class.getName(), "ff");
+ refTata = Utils.getServiceReferenceByName(context, Tata.class.getName(), "ff");
+ assertNotNull("Assert toto service - 6", refToto);
+ assertNotNull("Assert tata service - 6", refTata);
+ toto = (Toto) context.getService(refToto);
+ tata = (Tata) context.getService(refTata);
+
+ invokeAll(tata);
+ invokeTotoOpt(toto);
+ // Check tata
+ props = tata.getPropsTata();
+ tata_0 = (Integer) props.get("tata");
+ assertEquals("Assert tata - 6", tata_0.intValue(), 1);
+ context.ungetService(refToto);
+ context.ungetService(refTata);
+ toto = null;
+ tata = null;
+
+ // Is arch exposed
+ assertNotNull("Test arch", Utils.getServiceReferenceByName(context, Architecture.class.getName(), "ff"));
+
+ tataFactory.stop();
+
+ assertTrue("Assert under state - 7", under.getState() == ComponentInstance.INVALID);
+ assertNotNull("Test arch-2", Utils.getServiceReferenceByName(context, Architecture.class.getName(), "ff"));
+ refToto = Utils.getServiceReferenceByName(context, Toto.class.getName(), "ff");
+ refTata = Utils.getServiceReferenceByName(context, Tata.class.getName(), "ff");
+ assertNull("Assert no toto service - 7", refToto);
+ assertNull("Assert no tata service - 7", refTata);
+
+ under.dispose();
+ under = null;
+ }
+
+ private void invoke(Tata tota) {
+ tota.tata();
+
+ assertEquals("Assert invoke tataint", tota.tataInt(2), 2);
+ assertEquals("Assert invoke tataLong", tota.tataLong(2), 2);
+ assertEquals("Assert invoke tataDouble", tota.tataDouble(2), 2);
+ assertEquals("Assert invoke tataChar", tota.tataChar('a'), 'a');
+ assertTrue("Assert invoke tataBoolean", tota.tataBoolean(true));
+ assertEquals("Assert invoke tataByte", tota.tataByte((byte)2), 2);
+ assertEquals("Assert invoke tataShort", tota.tataShort((short)5), 5);
+ assertEquals("Assert invoke tataFloat", tota.tataFloat(5), 5);
+
+ }
+
+
+ private void invokeStr(Tata tota) {
+ tota.tataStr();
+ }
+
+ private void invokeToto(Toto tota) {
+ tota.toto();
+ assertEquals("Assert toto", tota.toto("foo"), "foo");
+ tota.toto(1,2);
+ tota.toto1("foo");
+ }
+
+ private void invokeAll(Tata tota) {
+ invoke(tota);
+ //invokeArrays(tota);
+ invokeStr(tota);
+ //invokeTata(tota);
+ //invokeTata1(tota);
+ //invokeTata5(tota);
+ //invokeAdd(tota);
+ }
+
+ private void invokeTotoOpt(Toto tota) {
+ try {
+ tota.toto();
+ fail("UnsupportedOperationException expected");
+ } catch(UnsupportedOperationException e) { }
+
+ try {
+ assertEquals("Assert toto", tota.toto("foo"), "foo");
+ fail("UnsupportedOperationException expected");
+ } catch(UnsupportedOperationException e) { }
+
+
+ try {
+ tota.toto(1,2);
+ fail("UnsupportedOperationException expected");
+ } catch(UnsupportedOperationException e) { }
+
+ try {
+ tota.toto1("foo");
+ fail("UnsupportedOperationException expected");
+ } catch(UnsupportedOperationException e) { }
+ }
+
+
+}
diff --git a/ipojo/tests/tests.composite.service.providing/src/main/java/org/apache/felix/ipojo/test/composite/provides/TestComp7.java b/ipojo/tests/tests.composite.service.providing/src/main/java/org/apache/felix/ipojo/test/composite/provides/TestComp7.java
new file mode 100644
index 0000000..67a6c19
--- /dev/null
+++ b/ipojo/tests/tests.composite.service.providing/src/main/java/org/apache/felix/ipojo/test/composite/provides/TestComp7.java
@@ -0,0 +1,333 @@
+/*
+ * 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.composite.provides;
+
+import java.util.Properties;
+
+import org.apache.felix.ipojo.ComponentFactory;
+import org.apache.felix.ipojo.ComponentInstance;
+import org.apache.felix.ipojo.Factory;
+import org.apache.felix.ipojo.architecture.Architecture;
+import org.apache.felix.ipojo.junit4osgi.OSGiTestCase;
+import org.apache.felix.ipojo.test.composite.component.TotoProvider;
+import org.apache.felix.ipojo.test.composite.service.Tota;
+import org.apache.felix.ipojo.test.composite.util.Utils;
+import org.osgi.framework.ServiceReference;
+
+public class TestComp7 extends OSGiTestCase {
+
+ private ComponentFactory tataFactory;
+ private ComponentFactory totoFactory;
+ private ComponentFactory tataFactory2;
+
+ private ComponentInstance totoProv, totoProv2;
+ private ComponentInstance under;
+
+ public void setUp() {
+ tataFactory = (ComponentFactory) Utils.getFactoryByName(context, "tata");
+ totoFactory = (ComponentFactory) Utils.getFactoryByName(context, "toto");
+ tataFactory2 = (ComponentFactory) Utils.getFactoryByName(context, "comp-6");
+ tataFactory2.stop();
+
+ Properties props = new Properties();
+ props.put("name", "toto provider");
+ try {
+ totoProv = totoFactory.createComponentInstance(props);
+ } catch(Exception e) {
+ e.printStackTrace();
+ }
+
+ Properties props3 = new Properties();
+ props3.put("name", "toto provider 2");
+ try {
+ totoProv2 = totoFactory.createComponentInstance(props3);
+ } catch(Exception e) {
+ e.printStackTrace();
+ }
+
+ totoProv.stop();
+ totoProv2.stop();
+
+ Factory factory = Utils.getFactoryByName(context, "comp-7");
+ Properties props2 = new Properties();
+ props2.put("name", "ff");
+ try {
+ under = factory.createComponentInstance(props2);
+ } catch(Exception e) {
+ e.printStackTrace();
+ }
+ tataFactory.stop();
+
+ }
+
+ public void tearDown() {
+ tataFactory.start();
+ totoProv.dispose();
+ totoProv = null;
+ totoProv2.dispose();
+ totoProv2 = null;
+ tataFactory2.start();
+
+ // Reset counters
+ TotoProvider.toto = 0;
+ TotoProvider.toto_2 = 0;
+ TotoProvider.toto_3 = 0;
+ TotoProvider.toto_4 = 0;
+ TotoProvider.toto1 = 0;
+ }
+
+ public void testSimple() {
+ // Neither factory nor instance
+ assertTrue("Assert under state - 1", under.getState() == ComponentInstance.INVALID);
+ assertNull("Assert no tota service - 1", context.getServiceReference(Tota.class.getName()));
+
+ // Start the importer
+ totoProv.start();
+ assertTrue("Assert under state - 2", under.getState() == ComponentInstance.INVALID);
+ assertNull("Assert no tota service - 2", context.getServiceReference(Tota.class.getName()));
+
+ // Start the factory
+ tataFactory.start();
+ assertTrue("Assert under state - 3", under.getState() == ComponentInstance.VALID);
+ assertNotNull("Assert tota service - 3", context.getServiceReference(Tota.class.getName()));
+ ServiceReference ref = context.getServiceReference(Tota.class.getName());
+ Tota tota = (Tota) context.getService(ref);
+ invokeAll(tota);
+ // Check toto
+ Properties props = tota.getProps();
+ Integer toto = (Integer) props.get("toto");
+ Integer toto_2 = (Integer) props.get("toto_2");
+ Integer toto_3 = (Integer) props.get("toto_3");
+ Integer toto_4 = (Integer) props.get("toto_4");
+ assertEquals("Assert toto - 3 ("+toto.intValue()+")", toto.intValue(), 1);
+ assertEquals("Assert toto_2 - 3", toto_2.intValue(), 1);
+ assertEquals("Assert toto_3 - 3", toto_3.intValue(), 1);
+ assertEquals("Assert toto_4 - 3", toto_4.intValue(), 0);
+ //Check tata
+ props = tota.getPropsTata();
+ Integer tata = (Integer) props.get("tata");
+ Integer tataStr = (Integer) props.get("tataStr");
+ Integer tataStrs = (Integer) props.get("tataStrs");
+ Integer tata_2 = (Integer) props.get("tata_2");
+ Integer tata_3 = (Integer) props.get("tata_3");
+ Integer tata1 = (Integer) props.get("tata1");
+ Integer tata1_1 = (Integer) props.get("tata1_1");
+ Integer tata5 = (Integer) props.get("tata5");
+ Integer tata5_1 = (Integer) props.get("tata5_1");
+ Integer tata5_2 = (Integer) props.get("tata5_2");
+ assertEquals("Assert tata - 3", tata.intValue(), 1);
+ assertEquals("Assert tataStr - 3", tataStr.intValue(), 1);
+ assertEquals("Assert tataStrs - 3", tataStrs.intValue(), 0);
+ assertEquals("Assert tata_2 - 3", tata_2.intValue(), 1);
+ assertEquals("Assert tata_3 - 3", tata_3.intValue(), 1);
+ assertEquals("Assert tata1 - 3", tata1.intValue(), 1);
+ assertEquals("Assert tata1_1 - 3", tata1_1.intValue(), 1);
+ assertEquals("Assert tata5 - 3", tata5.intValue(), 1);
+ assertEquals("Assert tata5_1 - 3", tata5_1.intValue(), 1);
+ assertEquals("Assert tata5_2 - 3", tata5_2.intValue(), 1);
+ context.ungetService(ref);
+ tota = null;
+
+ // Start a second import
+ totoProv2.start();
+ assertTrue("Assert under state - 4", under.getState() == ComponentInstance.VALID);
+ assertNotNull("Assert tota service - 4", context.getServiceReference(Tota.class.getName()));
+ ref = context.getServiceReference(Tota.class.getName());
+ tota = (Tota) context.getService(ref);
+ invokeAll(tota);
+ // Check toto
+ props = tota.getProps();
+ toto = (Integer) props.get("toto");
+ toto_2 = (Integer) props.get("toto_2");
+ toto_3 = (Integer) props.get("toto_3");
+ toto_4 = (Integer) props.get("toto_4");
+ assertEquals("Assert toto - 4", toto.intValue(), 2);
+ assertEquals("Assert toto_2 - 4", toto_2.intValue(), 2);
+ assertEquals("Assert toto_3 - 4", toto_3.intValue(), 2);
+ assertEquals("Assert toto_4 - 4", toto_4.intValue(), 0);
+ //Check tata
+ props = tota.getPropsTata();
+ tata = (Integer) props.get("tata");
+ tataStr = (Integer) props.get("tataStr");
+ tataStrs = (Integer) props.get("tataStrs");
+ tata_2 = (Integer) props.get("tata_2");
+ tata_3 = (Integer) props.get("tata_3");
+ tata1 = (Integer) props.get("tata1");
+ tata1_1 = (Integer) props.get("tata1_1");
+ tata5 = (Integer) props.get("tata5");
+ tata5_1 = (Integer) props.get("tata5_1");
+ tata5_2 = (Integer) props.get("tata5_2");
+ assertEquals("Assert tata - 4", tata.intValue(), 2);
+ assertEquals("Assert tataStr - 4", tataStr.intValue(), 2);
+ assertEquals("Assert tataStrs - 4", tataStrs.intValue(), 0);
+ assertEquals("Assert tata_2 - 4", tata_2.intValue(), 2);
+ assertEquals("Assert tata_3 - 4", tata_3.intValue(), 2);
+ assertEquals("Assert tata1 - 4", tata1.intValue(), 2);
+ assertEquals("Assert tata1_1 - 4", tata1_1.intValue(), 2);
+ assertEquals("Assert tata5 - 4", tata5.intValue(), 2);
+ assertEquals("Assert tata5_1 - 4", tata5_1.intValue(), 2);
+ assertEquals("Assert tata5_2 - 4", tata5_2.intValue(), 2);
+
+ context.ungetService(ref);
+ tota = null;
+
+ tataFactory.stop();
+ assertTrue("Assert under state - 5", under.getState() == ComponentInstance.INVALID);
+ assertNull("Assert no tota service - 5", context.getServiceReference(Tota.class.getName()));
+
+ totoProv2.stop();
+ tataFactory.start();
+ assertTrue("Assert under state - 6", under.getState() == ComponentInstance.VALID);
+ assertNotNull("Assert tota service - 6", context.getServiceReference(Tota.class.getName()));
+ ref = context.getServiceReference(Tota.class.getName());
+ tota = (Tota) context.getService(ref);
+ invokeAll(tota);
+ // Check toto
+ props = tota.getProps();
+ toto = (Integer) props.get("toto");
+ toto_2 = (Integer) props.get("toto_2");
+ toto_3 = (Integer) props.get("toto_3");
+ toto_4 = (Integer) props.get("toto_4");
+ assertEquals("Assert toto - 6", toto.intValue(), 3);
+ assertEquals("Assert toto_2 - 6", toto_2.intValue(), 3);
+ assertEquals("Assert toto_3 - 6", toto_3.intValue(), 3);
+ assertEquals("Assert toto_4 - 6", toto_4.intValue(), 0);
+ //Check tata
+ props = tota.getPropsTata();
+ tata = (Integer) props.get("tata");
+ tataStr = (Integer) props.get("tataStr");
+ tataStrs = (Integer) props.get("tataStrs");
+ tata_2 = (Integer) props.get("tata_2");
+ tata_3 = (Integer) props.get("tata_3");
+ tata1 = (Integer) props.get("tata1");
+ tata1_1 = (Integer) props.get("tata1_1");
+ tata5 = (Integer) props.get("tata5");
+ tata5_1 = (Integer) props.get("tata5_1");
+ tata5_2 = (Integer) props.get("tata5_2");
+ assertEquals("Assert tata - 6", 1, tata.intValue());
+ assertEquals("Assert tataStr - 6", tataStr.intValue(), 1);
+ assertEquals("Assert tataStrs - 6", tataStrs.intValue(), 0);
+ assertEquals("Assert tata_2 - 6", tata_2.intValue(), 1);
+ assertEquals("Assert tata_3 - 6", tata_3.intValue(), 1);
+ assertEquals("Assert tata1 - 6", tata1.intValue(), 1);
+ assertEquals("Assert tata1_1 - 6", tata1_1.intValue(), 1);
+ assertEquals("Assert tata5 - 6", tata5.intValue(), 1);
+ assertEquals("Assert tata5_1 - 6", tata5_1.intValue(), 1);
+ assertEquals("Assert tata5_2 - 6", tata5_2.intValue(), 1);
+ context.ungetService(ref);
+ tota = null;
+
+ // Is arch exposed
+ assertNotNull("Test arch", Utils.getServiceReferenceByName(context, Architecture.class.getName(), "ff"));
+
+ totoProv.stop();
+
+ assertTrue("Assert under state - 7", under.getState() == ComponentInstance.INVALID);
+ assertNotNull("Test arch-2", Utils.getServiceReferenceByName(context, Architecture.class.getName(), "ff"));
+ assertNull("Assert no tota service - 7", context.getServiceReference(Tota.class.getName()));
+
+ under.dispose();
+ under = null;
+ }
+
+ private void invoke(Tota tota) {
+ tota.tata();
+
+ assertEquals("Assert invoke tataint", tota.tataInt(2), 2);
+ assertEquals("Assert invoke tataLong", tota.tataLong(2), 2);
+ assertEquals("Assert invoke tataDouble", tota.tataDouble(2), 2);
+ assertEquals("Assert invoke tataChar", tota.tataChar('a'), 'a');
+ assertTrue("Assert invoke tataBoolean", tota.tataBoolean(true));
+ assertEquals("Assert invoke tataByte", tota.tataByte((byte)2), 2);
+ assertEquals("Assert invoke tataShort", tota.tataShort((short)5), 5);
+ assertEquals("Assert invoke tataFloat", tota.tataFloat(5), 5);
+
+ }
+
+ private void invokeArrays(Tota tota) {
+
+ int[] a = new int[] {1,2,3};
+ assertEquals("Assert invoke tataint[]", tota.tataInts(a), a);
+
+ long[] b = new long[] {1,2,3};
+ assertEquals("Assert invoke tataLong[]", tota.tataLongs(b), b);
+
+ double[] c = new double[] {1,2,3};
+ assertEquals("Assert invoke tataDouble[]", tota.tataDoubles(c), c);
+
+ char[] d = new char[] {'a','b', 'c'};
+ assertEquals("Assert invoke tataChar[]", tota.tataChars(d), d);
+
+ boolean[] e = new boolean[] {true, false};
+ assertEquals("Assert invoke tataBoolean[]", tota.tataBooleans(e), e);
+
+ byte[] f = new byte[] {(byte) 1};
+ assertEquals("Assert invoke tataByte[]", tota.tataBytes(f), f);
+
+ short[] g = new short[] {(short) 1};
+ assertEquals("Assert invoke tataShort[]", tota.tataShorts(g), g);
+
+ float[] h = new float[] {5,6,7};
+ assertEquals("Assert invoke tataFloat[]", tota.tataFloats(h), h);
+
+ }
+
+ private void invokeStr(Tota tota) {
+ tota.tataStr();
+ }
+
+ private void invokeTata(Tota tota) {
+ tota.tata(1,2);
+ tota.tata("tototototo");
+ }
+
+ private void invokeTata1(Tota tota) {
+ assertEquals("Assert tata1", tota.tata1("foo"), "foo");
+ assertEquals("Assert tata1 - 2", tota.tata1(new char[] {'a','b','c'}), "abc");
+ }
+
+ private void invokeTata5(Tota tota) {
+ assertEquals("Assert tata5 -1", tota.tata5("foo",1), "foo"+1);
+ assertEquals("Assert tata5 - 2", tota.tata5(new String[] {"a","b","c"}, 1), "31");
+ assertEquals("Assert tata5 - 3", tota.tata5("foo", new int[] {1,2,3}), "foo3");
+ }
+
+ private void invokeAdd(Tota tota) {
+ assertEquals("Assert add", tota.add(1,1,1), 3);
+ }
+
+ private void invokeToto(Tota tota) {
+ tota.toto();
+ assertEquals("Assert toto", tota.toto("foo"), "foo");
+ tota.toto(1,2);
+ }
+
+ private void invokeAll(Tota tota) {
+ invoke(tota);
+ invokeArrays(tota);
+ invokeStr(tota);
+ invokeTata(tota);
+ invokeTata1(tota);
+ invokeTata5(tota);
+ invokeAdd(tota);
+ invokeToto(tota);
+ }
+
+
+}
diff --git a/ipojo/tests/tests.composite.service.providing/src/main/java/org/apache/felix/ipojo/test/composite/provides/TestComp8.java b/ipojo/tests/tests.composite.service.providing/src/main/java/org/apache/felix/ipojo/test/composite/provides/TestComp8.java
new file mode 100644
index 0000000..f9ceb09
--- /dev/null
+++ b/ipojo/tests/tests.composite.service.providing/src/main/java/org/apache/felix/ipojo/test/composite/provides/TestComp8.java
@@ -0,0 +1,365 @@
+/*
+ * 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.composite.provides;
+
+import java.util.Properties;
+
+import org.apache.felix.ipojo.ComponentFactory;
+import org.apache.felix.ipojo.ComponentInstance;
+import org.apache.felix.ipojo.Factory;
+import org.apache.felix.ipojo.architecture.Architecture;
+import org.apache.felix.ipojo.junit4osgi.OSGiTestCase;
+import org.apache.felix.ipojo.test.composite.component.TotoProvider;
+import org.apache.felix.ipojo.test.composite.component.TotoProviderGlue;
+import org.apache.felix.ipojo.test.composite.service.Tota;
+import org.apache.felix.ipojo.test.composite.util.Utils;
+import org.osgi.framework.ServiceReference;
+
+public class TestComp8 extends OSGiTestCase {
+
+ private ComponentFactory tataFactory;
+ private ComponentFactory totoFactory;
+ private ComponentFactory tataFactory2;
+
+ private ComponentInstance totoProv, totoProv2;
+ private ComponentInstance under;
+
+ public void setUp() {
+ tataFactory = (ComponentFactory) Utils.getFactoryByName(context, "tata");
+ totoFactory = (ComponentFactory) Utils.getFactoryByName(context, "toto");
+ tataFactory2 = (ComponentFactory) Utils.getFactoryByName(context, "comp-6");
+ tataFactory2.stop();
+
+ Properties props = new Properties();
+ props.put("name", "toto provider");
+ try {
+ totoProv = totoFactory.createComponentInstance(props);
+ } catch(Exception e) {
+ e.printStackTrace();
+ }
+
+ Properties props3 = new Properties();
+ props3.put("name", "toto provider 2");
+ try {
+ totoProv2 = totoFactory.createComponentInstance(props3);
+ } catch(Exception e) {
+ e.printStackTrace();
+ }
+
+ totoProv.stop();
+ totoProv2.stop();
+
+ Factory factory = Utils.getFactoryByName(context, "comp-8");
+ Properties props2 = new Properties();
+ props2.put("name", "ff");
+ try {
+ under = factory.createComponentInstance(props2);
+ } catch(Exception e) {
+ e.printStackTrace();
+ }
+ tataFactory.stop();
+
+ }
+
+ public void tearDown() {
+ tataFactory.start();
+ totoProv.dispose();
+ totoProv = null;
+ totoProv2.dispose();
+ totoProv2 = null;
+ tataFactory2.start();
+
+ // Reset counters
+ TotoProvider.toto = 0;
+ TotoProvider.toto_2 = 0;
+ TotoProvider.toto_3 = 0;
+ TotoProvider.toto_4 = 0;
+ TotoProvider.toto1 = 0;
+ TotoProviderGlue.toto = 0;
+ TotoProviderGlue.toto_2 = 0;
+ TotoProviderGlue.toto_3 = 0;
+ TotoProviderGlue.toto_4 = 0;
+ TotoProviderGlue.toto1 = 0;
+ }
+
+ public void testSimple() {
+ // Neither factory nor instance
+ assertTrue("Assert under state - 1", under.getState() == ComponentInstance.INVALID);
+ assertNull("Assert no tota service - 1", context.getServiceReference(Tota.class.getName()));
+
+ // Start the importer
+ totoProv.start();
+ assertTrue("Assert under state - 2", under.getState() == ComponentInstance.INVALID);
+ assertNull("Assert no tota service - 2", context.getServiceReference(Tota.class.getName()));
+
+ // Start the factory
+ tataFactory.start();
+ assertTrue("Assert under state - 3", under.getState() == ComponentInstance.VALID);
+ assertNotNull("Assert tota service - 3", context.getServiceReference(Tota.class.getName()));
+ ServiceReference ref = context.getServiceReference(Tota.class.getName());
+ Tota tota = (Tota) context.getService(ref);
+ invokeAll(tota);
+ // Check toto
+ Properties props = tota.getProps();
+ Integer toto = (Integer) props.get("toto");
+ Integer toto_2 = (Integer) props.get("toto_2");
+ Integer toto_3 = (Integer) props.get("toto_3");
+ Integer toto_4 = (Integer) props.get("toto_4");
+ Integer gtoto = (Integer) props.get("gtoto");
+ Integer gtoto_2 = (Integer) props.get("gtoto_2");
+ Integer gtoto_3 = (Integer) props.get("gtoto_3");
+ Integer gtoto_4 = (Integer) props.get("gtoto_4");
+ assertEquals("Assert toto - 3 ("+toto.intValue()+")", toto.intValue(), 1);
+ assertEquals("Assert toto_2 - 3", toto_2.intValue(), 1);
+ assertEquals("Assert toto_3 - 3", toto_3.intValue(), 0);
+ assertEquals("Assert toto_4 - 3", toto_4.intValue(), 0);
+ assertEquals("Assert gtoto - 3 ("+gtoto.intValue()+")", gtoto.intValue(), 1);
+ assertEquals("Assert gtoto_2 - 3", gtoto_2.intValue(), 1);
+ assertEquals("Assert gtoto_3 - 3", gtoto_3.intValue(), 1);
+ assertEquals("Assert gtoto_4 - 3", gtoto_4.intValue(), 0);
+ //Check tata
+ props = tota.getPropsTata();
+ Integer tata = (Integer) props.get("tata");
+ Integer tataStr = (Integer) props.get("tataStr");
+ Integer tataStrs = (Integer) props.get("tataStrs");
+ Integer tata_2 = (Integer) props.get("tata_2");
+ Integer tata_3 = (Integer) props.get("tata_3");
+ Integer tata1 = (Integer) props.get("tata1");
+ Integer tata1_1 = (Integer) props.get("tata1_1");
+ Integer tata5 = (Integer) props.get("tata5");
+ Integer tata5_1 = (Integer) props.get("tata5_1");
+ Integer tata5_2 = (Integer) props.get("tata5_2");
+ assertEquals("Assert tata - 3", tata.intValue(), 1);
+ assertEquals("Assert tataStr - 3", tataStr.intValue(), 1);
+ assertEquals("Assert tataStrs - 3", tataStrs.intValue(), 0);
+ assertEquals("Assert tata_2 - 3", tata_2.intValue(), 1);
+ assertEquals("Assert tata_3 - 3", tata_3.intValue(), 1);
+ assertEquals("Assert tata1 - 3", tata1.intValue(), 1);
+ assertEquals("Assert tata1_1 - 3", tata1_1.intValue(), 1);
+ assertEquals("Assert tata5 - 3", tata5.intValue(), 1);
+ assertEquals("Assert tata5_1 - 3", tata5_1.intValue(), 1);
+ assertEquals("Assert tata5_2 - 3", tata5_2.intValue(), 1);
+ context.ungetService(ref);
+ tota = null;
+
+ // Start a second import
+ totoProv2.start();
+ assertTrue("Assert under state - 4", under.getState() == ComponentInstance.VALID);
+ assertNotNull("Assert tota service - 4", context.getServiceReference(Tota.class.getName()));
+ ref = context.getServiceReference(Tota.class.getName());
+ tota = (Tota) context.getService(ref);
+ invokeAll(tota);
+ // Check toto
+ props = tota.getProps();
+ toto = (Integer) props.get("toto");
+ toto_2 = (Integer) props.get("toto_2");
+ toto_3 = (Integer) props.get("toto_3");
+ toto_4 = (Integer) props.get("toto_4");
+ gtoto = (Integer) props.get("gtoto");
+ gtoto_2 = (Integer) props.get("gtoto_2");
+ gtoto_3 = (Integer) props.get("gtoto_3");
+ gtoto_4 = (Integer) props.get("gtoto_4");
+ assertEquals("Assert toto - 4", toto.intValue(), 2);
+ assertEquals("Assert toto_2 - 4", toto_2.intValue(), 2);
+ assertEquals("Assert toto_3 - 4", toto_3.intValue(), 0);
+ assertEquals("Assert toto_4 - 4", toto_4.intValue(), 0);
+ assertEquals("Assert gtoto - 4 ("+gtoto.intValue()+")", gtoto.intValue(), 2);
+ assertEquals("Assert gtoto_2 - 4", gtoto_2.intValue(), 2);
+ assertEquals("Assert gtoto_3 - 4", gtoto_3.intValue(), 2);
+ assertEquals("Assert gtoto_4 - 4", gtoto_4.intValue(), 0);
+ //Check tata
+ props = tota.getPropsTata();
+ tata = (Integer) props.get("tata");
+ tataStr = (Integer) props.get("tataStr");
+ tataStrs = (Integer) props.get("tataStrs");
+ tata_2 = (Integer) props.get("tata_2");
+ tata_3 = (Integer) props.get("tata_3");
+ tata1 = (Integer) props.get("tata1");
+ tata1_1 = (Integer) props.get("tata1_1");
+ tata5 = (Integer) props.get("tata5");
+ tata5_1 = (Integer) props.get("tata5_1");
+ tata5_2 = (Integer) props.get("tata5_2");
+ assertEquals("Assert tata - 4", tata.intValue(), 2);
+ assertEquals("Assert tataStr - 4", tataStr.intValue(), 2);
+ assertEquals("Assert tataStrs - 4", tataStrs.intValue(), 0);
+ assertEquals("Assert tata_2 - 4", tata_2.intValue(), 2);
+ assertEquals("Assert tata_3 - 4", tata_3.intValue(), 2);
+ assertEquals("Assert tata1 - 4", tata1.intValue(), 2);
+ assertEquals("Assert tata1_1 - 4", tata1_1.intValue(), 2);
+ assertEquals("Assert tata5 - 4", tata5.intValue(), 2);
+ assertEquals("Assert tata5_1 - 4", tata5_1.intValue(), 2);
+ assertEquals("Assert tata5_2 - 4", tata5_2.intValue(), 2);
+
+ context.ungetService(ref);
+ tota = null;
+
+ tataFactory.stop();
+ assertTrue("Assert under state - 5", under.getState() == ComponentInstance.INVALID);
+ assertNull("Assert no tota service - 5", context.getServiceReference(Tota.class.getName()));
+
+ totoProv2.stop();
+ tataFactory.start();
+ assertTrue("Assert under state - 6", under.getState() == ComponentInstance.VALID);
+ assertNotNull("Assert tota service - 6", context.getServiceReference(Tota.class.getName()));
+ ref = context.getServiceReference(Tota.class.getName());
+ tota = (Tota) context.getService(ref);
+ invokeAll(tota);
+ // Check toto
+ props = tota.getProps();
+ toto = (Integer) props.get("toto");
+ toto_2 = (Integer) props.get("toto_2");
+ toto_3 = (Integer) props.get("toto_3");
+ toto_4 = (Integer) props.get("toto_4");
+ gtoto = (Integer) props.get("gtoto");
+ gtoto_2 = (Integer) props.get("gtoto_2");
+ gtoto_3 = (Integer) props.get("gtoto_3");
+ gtoto_4 = (Integer) props.get("gtoto_4");
+ assertEquals("Assert toto - 6", toto.intValue(), 3);
+ assertEquals("Assert toto_2 - 6", toto_2.intValue(), 3);
+ assertEquals("Assert toto_3 - 6", toto_3.intValue(), 0);
+ assertEquals("Assert toto_4 - 6", toto_4.intValue(), 0);
+ assertEquals("Assert gtoto - 6 ("+gtoto.intValue()+")", gtoto.intValue(), 3);
+ assertEquals("Assert gtoto_2 - 6", gtoto_2.intValue(), 3);
+ assertEquals("Assert gtoto_3 - 6", gtoto_3.intValue(), 3);
+ assertEquals("Assert gtoto_4 - 6", gtoto_4.intValue(), 0);
+ //Check tata
+ props = tota.getPropsTata();
+ tata = (Integer) props.get("tata");
+ tataStr = (Integer) props.get("tataStr");
+ tataStrs = (Integer) props.get("tataStrs");
+ tata_2 = (Integer) props.get("tata_2");
+ tata_3 = (Integer) props.get("tata_3");
+ tata1 = (Integer) props.get("tata1");
+ tata1_1 = (Integer) props.get("tata1_1");
+ tata5 = (Integer) props.get("tata5");
+ tata5_1 = (Integer) props.get("tata5_1");
+ tata5_2 = (Integer) props.get("tata5_2");
+ assertEquals("Assert tata - 6", tata.intValue(), 1);
+ assertEquals("Assert tataStr - 6", tataStr.intValue(), 1);
+ assertEquals("Assert tataStrs - 6", tataStrs.intValue(), 0);
+ assertEquals("Assert tata_2 - 6", tata_2.intValue(), 1);
+ assertEquals("Assert tata_3 - 6", tata_3.intValue(), 1);
+ assertEquals("Assert tata1 - 6", tata1.intValue(), 1);
+ assertEquals("Assert tata1_1 - 6", tata1_1.intValue(), 1);
+ assertEquals("Assert tata5 - 6", tata5.intValue(), 1);
+ assertEquals("Assert tata5_1 - 6", tata5_1.intValue(), 1);
+ assertEquals("Assert tata5_2 - 6", tata5_2.intValue(), 1);
+ context.ungetService(ref);
+ tota = null;
+
+ // Is arch exposed
+ assertNotNull("Test arch", Utils.getServiceReferenceByName(context, Architecture.class.getName(), "ff"));
+
+ totoProv.stop();
+
+ assertTrue("Assert under state - 7", under.getState() == ComponentInstance.INVALID);
+ assertNotNull("Test arch-2", Utils.getServiceReferenceByName(context, Architecture.class.getName(), "ff"));
+ assertNull("Assert no tota service - 7", context.getServiceReference(Tota.class.getName()));
+
+ under.dispose();
+ under = null;
+ }
+
+
+
+ private void invoke(Tota tota) {
+ tota.tata();
+
+ assertEquals("Assert invoke tataint", tota.tataInt(2), 2);
+ assertEquals("Assert invoke tataLong", tota.tataLong(2), 2);
+ assertEquals("Assert invoke tataDouble", tota.tataDouble(2), 2);
+ assertEquals("Assert invoke tataChar", tota.tataChar('a'), 'a');
+ assertTrue("Assert invoke tataBoolean", tota.tataBoolean(true));
+ assertEquals("Assert invoke tataByte", tota.tataByte((byte)2), 2);
+ assertEquals("Assert invoke tataShort", tota.tataShort((short)5), 5);
+ assertEquals("Assert invoke tataFloat", tota.tataFloat(5), 5);
+
+ }
+
+ private void invokeArrays(Tota tota) {
+
+ int[] a = new int[] {1,2,3};
+ assertEquals("Assert invoke tataint[]", tota.tataInts(a), a);
+
+ long[] b = new long[] {1,2,3};
+ assertEquals("Assert invoke tataLong[]", tota.tataLongs(b), b);
+
+ double[] c = new double[] {1,2,3};
+ assertEquals("Assert invoke tataDouble[]", tota.tataDoubles(c), c);
+
+ char[] d = new char[] {'a','b', 'c'};
+ assertEquals("Assert invoke tataChar[]", tota.tataChars(d), d);
+
+ boolean[] e = new boolean[] {true, false};
+ assertEquals("Assert invoke tataBoolean[]", tota.tataBooleans(e), e);
+
+ byte[] f = new byte[] {(byte) 1};
+ assertEquals("Assert invoke tataByte[]", tota.tataBytes(f), f);
+
+ short[] g = new short[] {(short) 1};
+ assertEquals("Assert invoke tataShort[]", tota.tataShorts(g), g);
+
+ float[] h = new float[] {5,6,7};
+ assertEquals("Assert invoke tataFloat[]", tota.tataFloats(h), h);
+
+ }
+
+ private void invokeStr(Tota tota) {
+ tota.tataStr();
+ }
+
+ private void invokeTata(Tota tota) {
+ tota.tata(1,2);
+ tota.tata("tototototo");
+ }
+
+ private void invokeTata1(Tota tota) {
+ assertEquals("Assert tata1", tota.tata1("foo"), "foo");
+ assertEquals("Assert tata1 - 2", tota.tata1(new char[] {'a','b','c'}), "abc");
+ }
+
+ private void invokeTata5(Tota tota) {
+ assertEquals("Assert tata5 -1", tota.tata5("foo",1), "foo"+1);
+ assertEquals("Assert tata5 - 2", tota.tata5(new String[] {"a","b","c"}, 1), "31");
+ assertEquals("Assert tata5 - 3", tota.tata5("foo", new int[] {1,2,3}), "foo3");
+ }
+
+ private void invokeAdd(Tota tota) {
+ assertEquals("Assert add", tota.add(1,1,1), 3);
+ }
+
+ private void invokeToto(Tota tota) {
+ tota.toto();
+ assertEquals("Assert toto", tota.toto("foo"), "foo");
+ tota.toto(1,2);
+ }
+
+ private void invokeAll(Tota tota) {
+ invoke(tota);
+ invokeArrays(tota);
+ invokeStr(tota);
+ invokeTata(tota);
+ invokeTata1(tota);
+ invokeTata5(tota);
+ invokeAdd(tota);
+ invokeToto(tota);
+ }
+
+
+}
diff --git a/ipojo/tests/tests.composite.service.providing/src/main/java/org/apache/felix/ipojo/test/composite/test/CompositeTest.java b/ipojo/tests/tests.composite.service.providing/src/main/java/org/apache/felix/ipojo/test/composite/test/CompositeTest.java
new file mode 100644
index 0000000..e7f73bb
--- /dev/null
+++ b/ipojo/tests/tests.composite.service.providing/src/main/java/org/apache/felix/ipojo/test/composite/test/CompositeTest.java
@@ -0,0 +1,180 @@
+/*
+ * 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.composite.test;
+
+import java.util.Properties;
+
+import org.apache.felix.ipojo.ComponentInstance;
+import org.apache.felix.ipojo.Factory;
+import org.apache.felix.ipojo.ServiceContext;
+import org.apache.felix.ipojo.junit4osgi.OSGiTestCase;
+import org.apache.felix.ipojo.test.composite.service.BazService;
+import org.apache.felix.ipojo.test.composite.service.CheckService;
+import org.apache.felix.ipojo.test.composite.service.FooService;
+import org.apache.felix.ipojo.test.composite.util.Utils;
+import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.framework.ServiceReference;
+
+public class CompositeTest extends OSGiTestCase {
+
+ public void testAPI() {
+ Factory fact1 = Utils.getFactoryByName(context, "composite.empty");
+ Properties p = new Properties();
+ p.put("name", "empty-1");
+ ComponentInstance empty = null;
+ try {
+ empty = fact1.createComponentInstance(p);
+ } catch(Exception e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ }
+
+ ServiceContext sc = Utils.getServiceContext(empty);
+
+ Factory fact2 = Utils.getFactoryByName(context, "composite.test.2");
+ Properties props2 = new Properties();
+ props2.put("name", "2"); // 2
+ Factory fact3 = Utils.getFactoryByName(context, "composite.test.3");
+ Properties props3 = new Properties();
+ props3.put("name", "3");
+ ComponentInstance comp2 = null;
+ ComponentInstance comp3 = null;
+ try {
+ comp2 = fact2.createComponentInstance(props2, sc);
+ comp3 = fact3.createComponentInstance(props3, sc);
+ } catch(Throwable e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ }
+
+ assertTrue("Test comp3", comp3.getState() == ComponentInstance.VALID);
+ assertTrue("Test comp2", comp2.getState() == ComponentInstance.VALID);
+
+ ServiceReference ref = null;
+
+ ref = Utils.getServiceReferenceByName(sc, CheckService.class.getName(), "2"); // 2
+
+ assertNotNull("Check ref", ref);
+ CheckService cs = (CheckService) sc.getService(ref);
+ assertTrue("Check invoke", cs.check());
+
+ comp3.dispose();
+ comp2.dispose();
+ empty.dispose();
+ }
+
+ public void testInstantiator() {
+ String type = "composite.instantiator";
+ Factory fact = Utils.getFactoryByName(context, type);
+ ComponentInstance ci = null;
+ Properties p = new Properties();
+ p.put("name", "mon_coeur");
+ try {
+ ci = fact.createComponentInstance(p);
+ } catch(Exception e) {
+ e.printStackTrace();
+ }
+
+ assertTrue("Check ci", ci.getState() == ComponentInstance.VALID);
+ ServiceReference ref = Utils.getServiceReferenceByName(context, BazService.class.getName(), "mon_coeur");
+ assertNotNull("Check ref",ref);
+ BazService bs = (BazService) context.getService(ref);
+ assertTrue("Check invocation", bs.foo());
+ context.ungetService(ref);
+ ref = Utils.getServiceReferenceByName(context, FooService.class.getName(), "mon_coeur");
+ assertNotNull("Check ref 2 ",ref);
+ FooService fs = (FooService) context.getService(ref);
+ assertTrue("Check invocation", fs.foo());
+ context.ungetService(ref);
+ ci.dispose();
+ }
+
+ public void testAPI2() {
+ Factory fact1 = Utils.getFactoryByName(context, "composite.empty");
+ Properties p = new Properties();
+ p.put("name", "empty-2");
+ ComponentInstance empty = null;
+ try {
+ empty = fact1.createComponentInstance(p);
+ } catch(Exception e) {
+ e.printStackTrace();
+ }
+
+ ServiceContext sc = Utils.getServiceContext(empty);
+
+ Factory fact2 = Utils.getFactoryByName(sc, "composite.test.2");
+ Properties props2 = new Properties();
+ props2.put("name", "4");
+ Factory fact3 = Utils.getFactoryByName(sc, "composite.test.3");
+ Properties props3 = new Properties();
+ props3.put("name", "5");
+ ComponentInstance comp2 = null;
+ ComponentInstance comp3 = null;
+ try {
+ comp2 = fact2.createComponentInstance(props2, sc);
+ comp3 = fact3.createComponentInstance(props3, sc);
+ } catch(Exception e) {
+ e.printStackTrace();
+ }
+
+ assertTrue("Test comp3", comp3.getState() == ComponentInstance.VALID);
+ assertTrue("Test comp2", comp2.getState() == ComponentInstance.VALID);
+
+ ServiceReference ref = null;
+
+ ref = Utils.getServiceReferenceByName(sc, CheckService.class.getName(), "4");
+
+ assertNotNull("Check ref", ref);
+ CheckService cs = (CheckService) sc.getService(ref);
+ assertTrue("Check invoke", cs.check());
+
+ comp3.dispose();
+ comp2.dispose();
+ empty.dispose();
+ }
+
+
+ public void testApplication() {
+ Factory factory = Utils.getFactoryByName(context, "composite.test.1");
+ ComponentInstance ci = null;
+ Properties props = new Properties();
+ props.put("name", "Test");
+ try {
+ ci = factory.createComponentInstance(props);
+ } catch(Exception e) {
+ fail("Cannot instantiate Test " + e.getMessage());
+ }
+
+ assertTrue("Check ci state", ci.getState() == ComponentInstance.VALID );
+
+ ServiceReference[] refs = null;
+ try {
+ refs = context.getServiceReferences(CheckService.class.getName(), "(instance.name=Test)");
+ } catch (InvalidSyntaxException e) {
+ fail("Invalid filter : " + e.getMessage());
+ }
+ assertNotNull("Check refs not null", refs);
+ CheckService cs = (CheckService) context.getService(refs[0]);
+
+ assertTrue("Check invocation", cs.check());
+ ci.dispose();
+
+ }
+
+}
diff --git a/ipojo/tests/tests.composite.service.providing/src/main/resources/metadata.xml b/ipojo/tests/tests.composite.service.providing/src/main/resources/metadata.xml
new file mode 100644
index 0000000..e544b1c
--- /dev/null
+++ b/ipojo/tests/tests.composite.service.providing/src/main/resources/metadata.xml
@@ -0,0 +1,150 @@
+<ipojo>
+ <composite name="composite.test.3" architecture="true">
+ <subservice action="instantiate"
+ specification="org.apache.felix.ipojo.test.composite.service.BazService"
+ aggregate="true" filter="(factory.name=BazProviderType)" />
+ <provides action="export"
+ specification="org.apache.felix.ipojo.test.composite.service.BazService" />
+ </composite>
+
+ <composite name="composite.test.2" architecture="true">
+ <subservice action="instantiate"
+ specification="org.apache.felix.ipojo.test.composite.service.CheckService"
+ filter="(factory.name=Baz2CheckProvider)" />
+ <provides action="export"
+ specification="org.apache.felix.ipojo.test.composite.service.CheckService" />
+ <subservice action="import"
+ specification="org.apache.felix.ipojo.test.composite.service.BazService"
+ scope="composite" />
+ </composite>
+
+ <composite name="composite.test.1" architecture="true">
+ <subservice action="instantiate"
+ specification="org.apache.felix.ipojo.test.composite.service.BazService"
+ filter="(factory.name=composite.test.3)" />
+ <subservice action="instantiate"
+ specification="org.apache.felix.ipojo.test.composite.service.CheckService"
+ filter="(factory.name=composite.test.2)" />
+ <provides action="export"
+ specification="org.apache.felix.ipojo.test.composite.service.CheckService" />
+ </composite>
+
+ <composite name="composite.instantiator" architecture="true">
+ <subservice action="instantiate"
+ specification="org.apache.felix.ipojo.test.composite.service.BazService"
+ filter="(factory.name=composite.test.3)" />
+ <subservice action="instantiate"
+ specification="org.apache.felix.ipojo.test.composite.service.FooService" />
+ <provides action="export"
+ specification="org.apache.felix.ipojo.test.composite.service.BazService" />
+ <provides action="export"
+ specification="org.apache.felix.ipojo.test.composite.service.FooService" />
+ </composite>
+
+ <!-- Test composition provides -->
+
+ <composite name="comp-0" architecture="true">
+ <subservice action="instantiate"
+ specification="org.apache.felix.ipojo.test.composite.service.Tata" />
+ <subservice action="import"
+ specification="org.apache.felix.ipojo.test.composite.service.Toto" />
+ <provides action="implement"
+ specification="org.apache.felix.ipojo.test.composite.service.Tota" />
+ </composite>
+
+ <composite name="comp-1" architecture="true">
+ <subservice action="instantiate"
+ specification="org.apache.felix.ipojo.test.composite.service.Tata" />
+ <subservice action="import"
+ specification="org.apache.felix.ipojo.test.composite.service.Toto" />
+ <provides action="implement"
+ specification="org.apache.felix.ipojo.test.composite.service.Tota">
+ <delegation method="tataInt" policy="One" />
+ <delegation method="toto1" policy="All" />
+ </provides>
+ </composite>
+
+ <composite name="comp-2" architecture="true">
+ <subservice action="instantiate"
+ specification="org.apache.felix.ipojo.test.composite.service.Tata"
+ aggregate="true" />
+ <subservice action="import"
+ specification="org.apache.felix.ipojo.test.composite.service.Toto"
+ aggregate="true" />
+ <provides action="implement"
+ specification="org.apache.felix.ipojo.test.composite.service.Tota">
+ <delegation method="tataInt" policy="One" />
+ <delegation method="toto1" policy="All" />
+ </provides>
+ </composite>
+
+ <composite name="comp-3" architecture="true">
+ <subservice action="instantiate"
+ specification="org.apache.felix.ipojo.test.composite.service.Tata" />
+ <subservice action="import"
+ specification="org.apache.felix.ipojo.test.composite.service.Toto"
+ optional="true" />
+ <provides action="implement"
+ specification="org.apache.felix.ipojo.test.composite.service.Tota">
+ </provides>
+ </composite>
+
+ <composite name="comp-4" architecture="true">
+ <subservice action="instantiate"
+ specification="org.apache.felix.ipojo.test.composite.service.Tata" />
+ <subservice action="import"
+ specification="org.apache.felix.ipojo.test.composite.service.Toto"
+ optional="true" />
+ <provides action="implement"
+ specification="org.apache.felix.ipojo.test.composite.service.Tota">
+ <delegation method="tataInt" policy="One" />
+ <delegation method="toto1" policy="All" />
+ </provides>
+ </composite>
+
+ <composite name="comp-5" architecture="true">
+ <subservice action="instantiate"
+ specification="org.apache.felix.ipojo.test.composite.service.Tata"
+ aggregate="true" />
+ <!-- <subservice action="import" specification="org.apache.felix.ipojo.test.composite.service.Toto" aggregate ="true" optional="true"/> -->
+ <provides action="implement"
+ specification="org.apache.felix.ipojo.test.composite.service.Tota">
+ <delegation method="tataInt" policy="One" />
+ <delegation method="toto1" policy="All" />
+ </provides>
+ </composite>
+
+ <composite name="comp-6" architecture="true">
+ <subservice action="instantiate"
+ specification="org.apache.felix.ipojo.test.composite.service.Tata"
+ aggregate="true" />
+ <subservice action="import"
+ specification="org.apache.felix.ipojo.test.composite.service.Toto"
+ aggregate="true" optional="true" />
+ <provides action="implement"
+ specification="org.apache.felix.ipojo.test.composite.service.Toto">
+ <delegation method="toto1" policy="All" />
+ </provides>
+ <provides action="implement"
+ specification="org.apache.felix.ipojo.test.composite.service.Tata">
+ <delegation method="tataInt" policy="One" />
+ </provides>
+ </composite>
+
+ <composite name="comp-7" architecture="true">
+ <instance component="tata" />
+ <subservice action="import"
+ specification="org.apache.felix.ipojo.test.composite.service.Toto" />
+ <provides action="implement"
+ specification="org.apache.felix.ipojo.test.composite.service.Tota" />
+ </composite>
+
+ <composite name="comp-8" architecture="true">
+ <instance component="tata" />
+ <instance component="totoglue" />
+ <subservice action="import"
+ specification="org.apache.felix.ipojo.test.composite.service.Toto" />
+ <provides action="implement"
+ specification="org.apache.felix.ipojo.test.composite.service.Tota" />
+ </composite>
+</ipojo>