felix-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From clem...@apache.org
Subject svn commit: r1450158 [9/9] - in /felix/trunk/ipojo/runtime/composite-it: ./ src/ src/it/ src/it/ipojo-composite-import-export-test/ src/it/ipojo-composite-import-export-test/src/ src/it/ipojo-composite-import-export-test/src/main/ src/it/ipojo-composit...
Date Tue, 26 Feb 2013 13:02:40 GMT
Added: felix/trunk/ipojo/runtime/composite-it/src/it/ipojo-composite-service-providing-test/src/test/java/org/apache/felix/ipojo/runtime/core/providing/TestComp3.java
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/runtime/composite-it/src/it/ipojo-composite-service-providing-test/src/test/java/org/apache/felix/ipojo/runtime/core/providing/TestComp3.java?rev=1450158&view=auto
==============================================================================
--- felix/trunk/ipojo/runtime/composite-it/src/it/ipojo-composite-service-providing-test/src/test/java/org/apache/felix/ipojo/runtime/core/providing/TestComp3.java (added)
+++ felix/trunk/ipojo/runtime/composite-it/src/it/ipojo-composite-service-providing-test/src/test/java/org/apache/felix/ipojo/runtime/core/providing/TestComp3.java Tue Feb 26 13:02:34 2013
@@ -0,0 +1,271 @@
+/* 
+ * 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.runtime.core.providing;
+
+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.runtime.core.Common;
+import org.apache.felix.ipojo.runtime.core.components.TotoProvider;
+import org.apache.felix.ipojo.runtime.core.services.Tota;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.osgi.framework.ServiceReference;
+
+import java.util.Properties;
+
+import static org.junit.Assert.*;
+
+public class TestComp3 extends Common {
+
+    private ComponentFactory tataFactory;
+    private ComponentFactory totoFactory;
+    private ComponentInstance totoProv, totoProv2;
+    private ComponentInstance under;
+    private ComponentFactory tataFactory2;
+
+    @Before
+    public void setUp() {
+        tataFactory = (ComponentFactory) ipojoHelper.getFactory("tata");
+        totoFactory = (ComponentFactory) ipojoHelper.getFactory("toto");
+        tataFactory2 = (ComponentFactory) ipojoHelper.getFactory("comp-6");
+        tataFactory2.stop();
+        tataFactory.stop();
+
+        Properties props = new Properties();
+        props.put("instance.name", "toto provider");
+        try {
+            totoProv = totoFactory.createComponentInstance(props);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        Properties props3 = new Properties();
+        props3.put("instance.name", "toto provider 2");
+        try {
+            totoProv2 = totoFactory.createComponentInstance(props3);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        totoProv.stop();
+        totoProv2.stop();
+
+        Factory factory = ipojoHelper.getFactory("comp-3");
+        Properties props2 = new Properties();
+        props2.put("instance.name", "ff");
+        try {
+            under = factory.createComponentInstance(props2);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+    }
+
+    @After
+    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;
+    }
+
+    @Test
+    public void testSimple() {
+        // Neither factory nor instance
+        assertTrue("Assert under state - 1", under.getState() == ComponentInstance.INVALID);
+        assertNull("Assert no tota service - 1", getContext().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", getContext().getServiceReference(Tota.class.getName()));
+
+        // Start the factory
+        tataFactory.start();
+        assertTrue("Assert under state - 3", under.getState() == ComponentInstance.VALID);
+        assertNotNull("Assert tota service - 3", getContext().getServiceReference(Tota.class.getName()));
+        ServiceReference ref = getContext().getServiceReference(Tota.class.getName());
+        Tota tota = (Tota) getContext().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);
+
+        getContext().ungetService(ref);
+        tota = null;
+
+        // Start a second import
+        totoProv2.start();
+        assertTrue("Assert under state - 4", under.getState() == ComponentInstance.VALID);
+        assertNotNull("Assert tota service - 4", getContext().getServiceReference(Tota.class.getName()));
+        ref = getContext().getServiceReference(Tota.class.getName());
+        tota = (Tota) getContext().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);
+        getContext().ungetService(ref);
+        tota = null;
+
+        // Stop the factory
+        tataFactory.stop();
+        assertTrue("Assert under state - 5", under.getState() == ComponentInstance.INVALID);
+        assertNull("Assert no tota service - 5", getContext().getServiceReference(Tota.class.getName()));
+
+        totoProv2.stop();
+        totoProv.stop();
+        tataFactory.start();
+        assertTrue("Assert under state - 6", under.getState() == ComponentInstance.VALID);
+        assertNotNull("Assert tota service - 6", getContext().getServiceReference(Tota.class.getName()));
+        ref = getContext().getServiceReference(Tota.class.getName());
+        tota = (Tota) getContext().getService(ref);
+        invokeAllOpt(tota);
+        //Check tata
+        props = tota.getPropsTata();
+        tata = (Integer) props.get("tata");
+        assertEquals("Assert tata - 4", tata.intValue(), 1);
+        getContext().ungetService(ref);
+        tota = null;
+
+        // Is arch exposed
+        assertNotNull("Test arch", ipojoHelper.getServiceReferenceByName(Architecture.class.getName(), "ff"));
+
+        tataFactory.stop();
+
+        assertTrue("Assert under state - 7", under.getState() == ComponentInstance.INVALID);
+        assertNotNull("Test arch-2", ipojoHelper.getServiceReferenceByName(Architecture.class.getName(), "ff"));
+        assertNull("Assert no tota service - 7", getContext().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, 0);
+        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, 0);
+
+    }
+
+    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) {
+        }
+    }
+
+
+}

Added: felix/trunk/ipojo/runtime/composite-it/src/it/ipojo-composite-service-providing-test/src/test/java/org/apache/felix/ipojo/runtime/core/providing/TestComp4.java
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/runtime/composite-it/src/it/ipojo-composite-service-providing-test/src/test/java/org/apache/felix/ipojo/runtime/core/providing/TestComp4.java?rev=1450158&view=auto
==============================================================================
--- felix/trunk/ipojo/runtime/composite-it/src/it/ipojo-composite-service-providing-test/src/test/java/org/apache/felix/ipojo/runtime/core/providing/TestComp4.java (added)
+++ felix/trunk/ipojo/runtime/composite-it/src/it/ipojo-composite-service-providing-test/src/test/java/org/apache/felix/ipojo/runtime/core/providing/TestComp4.java Tue Feb 26 13:02:34 2013
@@ -0,0 +1,270 @@
+/* 
+ * 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.runtime.core.providing;
+
+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.runtime.core.Common;
+import org.apache.felix.ipojo.runtime.core.components.TotoProvider;
+import org.apache.felix.ipojo.runtime.core.services.Tota;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.osgi.framework.ServiceReference;
+
+import java.util.Properties;
+
+import static org.junit.Assert.*;
+
+public class TestComp4 extends Common {
+
+    private ComponentFactory tataFactory;
+    private ComponentFactory totoFactory;
+    private ComponentInstance totoProv, totoProv2;
+    private ComponentInstance under;
+    private ComponentFactory tataFactory2;
+
+    @Before
+    public void setUp() {
+        tataFactory = (ComponentFactory) ipojoHelper.getFactory("tata");
+        totoFactory = (ComponentFactory) ipojoHelper.getFactory("toto");
+        tataFactory2 = (ComponentFactory) ipojoHelper.getFactory("comp-6");
+        tataFactory2.stop();
+        tataFactory.stop();
+
+        Properties props = new Properties();
+        props.put("instance.name", "toto provider");
+        try {
+            totoProv = totoFactory.createComponentInstance(props);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        Properties props3 = new Properties();
+        props3.put("instance.name", "toto provider 2");
+        try {
+            totoProv2 = totoFactory.createComponentInstance(props3);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        totoProv.stop();
+        totoProv2.stop();
+
+        Factory factory = ipojoHelper.getFactory("comp-4");
+        Properties props2 = new Properties();
+        props2.put("instance.name", "ff");
+        try {
+            under = factory.createComponentInstance(props2);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+    }
+
+    @After
+    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;
+    }
+
+    @Test
+    public void testSimple() {
+        // Neither factory nor instance
+        assertTrue("Assert under state - 1", under.getState() == ComponentInstance.INVALID);
+        assertNull("Assert no tota service - 1", getContext().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", getContext().getServiceReference(Tota.class.getName()));
+
+        // Start the factory
+        tataFactory.start();
+        assertTrue("Assert under state - 3", under.getState() == ComponentInstance.VALID);
+        assertNotNull("Assert tota service - 3", getContext().getServiceReference(Tota.class.getName()));
+        ServiceReference ref = getContext().getServiceReference(Tota.class.getName());
+        Tota tota = (Tota) getContext().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);
+        getContext().ungetService(ref);
+        tota = null;
+
+        // Start a second import
+        totoProv2.start();
+        assertTrue("Assert under state - 4", under.getState() == ComponentInstance.VALID);
+        assertNotNull("Assert tota service - 4", getContext().getServiceReference(Tota.class.getName()));
+        ref = getContext().getServiceReference(Tota.class.getName());
+        tota = (Tota) getContext().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);
+        getContext().ungetService(ref);
+        tota = null;
+
+        // Stop the factory
+        tataFactory.stop();
+        assertTrue("Assert under state - 5", under.getState() == ComponentInstance.INVALID);
+        assertNull("Assert no tota service - 5", getContext().getServiceReference(Tota.class.getName()));
+
+        totoProv2.stop();
+        totoProv.stop();
+        tataFactory.start();
+        assertTrue("Assert under state - 6", under.getState() == ComponentInstance.VALID);
+        assertNotNull("Assert tota service - 6", getContext().getServiceReference(Tota.class.getName()));
+        ref = getContext().getServiceReference(Tota.class.getName());
+        tota = (Tota) getContext().getService(ref);
+        invokeAllOpt(tota);
+        // Check tata
+        props = tota.getPropsTata();
+        tata = (Integer) props.get("tata");
+        assertEquals("Assert tata - 6", tata.intValue(), 1);
+        getContext().ungetService(ref);
+        tota = null;
+
+        // Is arch exposed
+        assertNotNull("Test arch", ipojoHelper.getServiceReferenceByName(Architecture.class.getName(), "ff"));
+
+        tataFactory.stop();
+
+        assertTrue("Assert under state - 7", under.getState() == ComponentInstance.INVALID);
+        assertNotNull("Test arch-2", ipojoHelper.getServiceReferenceByName(Architecture.class.getName(), "ff"));
+        assertNull("Assert no tota service - 7", getContext().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, 0);
+        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, 0);
+
+    }
+
+    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) {
+        }
+    }
+
+
+}

Added: felix/trunk/ipojo/runtime/composite-it/src/it/ipojo-composite-service-providing-test/src/test/java/org/apache/felix/ipojo/runtime/core/providing/TestComp5.java
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/runtime/composite-it/src/it/ipojo-composite-service-providing-test/src/test/java/org/apache/felix/ipojo/runtime/core/providing/TestComp5.java?rev=1450158&view=auto
==============================================================================
--- felix/trunk/ipojo/runtime/composite-it/src/it/ipojo-composite-service-providing-test/src/test/java/org/apache/felix/ipojo/runtime/core/providing/TestComp5.java (added)
+++ felix/trunk/ipojo/runtime/composite-it/src/it/ipojo-composite-service-providing-test/src/test/java/org/apache/felix/ipojo/runtime/core/providing/TestComp5.java Tue Feb 26 13:02:34 2013
@@ -0,0 +1,272 @@
+/* 
+ * 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.runtime.core.providing;
+
+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.runtime.core.Common;
+import org.apache.felix.ipojo.runtime.core.components.TotoProvider;
+import org.apache.felix.ipojo.runtime.core.services.Tota;
+import static org.junit.Assert.*;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.osgi.framework.ServiceReference;
+
+import java.util.Properties;
+
+public class TestComp5 extends Common {
+
+    private ComponentFactory tataFactory;
+    private ComponentFactory totoFactory;
+    
+    private ComponentInstance totoProv, totoProv2;
+    private ComponentInstance under;
+	private ComponentFactory tataFactory2;
+
+    @Before
+    public void setUp() {
+        tataFactory = (ComponentFactory) ipojoHelper.getFactory("tata");
+        totoFactory = (ComponentFactory) ipojoHelper.getFactory("toto");
+        tataFactory2 = (ComponentFactory) ipojoHelper.getFactory("comp-6");
+        tataFactory2.stop();
+        tataFactory.stop();
+        
+        Properties props = new Properties();
+        props.put("instance.name","toto provider");
+        try {
+            totoProv = totoFactory.createComponentInstance(props);
+        } catch(Exception e) {
+            e.printStackTrace();
+        }
+        
+        Properties props3 = new Properties();
+        props3.put("instance.name","toto provider 2");
+        try {
+            totoProv2 = totoFactory.createComponentInstance(props3);
+        } catch(Exception e) {
+            e.printStackTrace();
+        }
+        
+        totoProv.stop();
+        totoProv2.stop();
+        
+        Factory factory = ipojoHelper.getFactory("comp-5");
+        Properties props2 = new Properties();
+        props2.put("instance.name","ff");
+        try {
+            under = factory.createComponentInstance(props2);
+        } catch(Exception e) {
+            e.printStackTrace();
+            fail("Cannot create an instance from comp-5 : " + e.getMessage());
+        }
+         
+    }
+    
+    @After
+    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;
+    }
+    
+    @Test
+    public void testSimple() {
+        // Neither factory nor instance
+        assertTrue("Assert under state - 1", under.getState() == ComponentInstance.INVALID);
+        assertNull("Assert no tota service - 1", getContext().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", getContext().getServiceReference(Tota.class.getName()));
+        
+        // Start the factory
+        tataFactory.start();
+        assertTrue("Assert under state - 3", under.getState() == ComponentInstance.VALID);
+        assertNotNull("Assert tota service - 3", getContext().getServiceReference(Tota.class.getName()));
+        ServiceReference ref = getContext().getServiceReference(Tota.class.getName());
+        Tota tota = (Tota) getContext().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);
+        getContext().ungetService(ref);
+        tota = null;
+        
+        // Start a second import
+        totoProv2.start();
+        assertTrue("Assert under state - 4", under.getState() == ComponentInstance.VALID);
+        assertNotNull("Assert tota service - 4", getContext().getServiceReference(Tota.class.getName()));
+        ref = getContext().getServiceReference(Tota.class.getName());
+        tota = (Tota) getContext().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);
+        getContext().ungetService(ref);
+        tota = null;
+        
+        // Stop the factory
+        tataFactory.stop();
+        assertTrue("Assert under state - 5", under.getState() == ComponentInstance.INVALID);
+        assertNull("Assert no tota service - 5", getContext().getServiceReference(Tota.class.getName()));
+        
+        totoProv2.stop();
+        totoProv.stop();
+        tataFactory.start();
+        assertTrue("Assert under state - 6", under.getState() == ComponentInstance.VALID);
+        assertNotNull("Assert tota service - 6", getContext().getServiceReference(Tota.class.getName()));
+        ref = getContext().getServiceReference(Tota.class.getName());
+        tota = (Tota) getContext().getService(ref);
+        invokeAllOpt(tota);
+        //Check tata
+        props = tota.getPropsTata();
+        tata = (Integer) props.get("tata");
+        assertEquals("Assert tata - 6", tata.intValue(), 1);
+        getContext().ungetService(ref);
+        tota = null;
+        
+        // Is arch exposed
+        assertNotNull("Test arch", ipojoHelper.getServiceReferenceByName( Architecture.class.getName(), "ff"));
+        
+        tataFactory.stop();
+        
+        assertTrue("Assert under state - 7", under.getState() == ComponentInstance.INVALID);
+        assertNotNull("Test arch-2", ipojoHelper.getServiceReferenceByName( Architecture.class.getName(), "ff"));
+        assertNull("Assert no tota service - 7", getContext().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, 0);
+        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, 0);
+        
+    }
+    
+    
+    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) { }
+    }
+    
+
+}

Added: felix/trunk/ipojo/runtime/composite-it/src/it/ipojo-composite-service-providing-test/src/test/java/org/apache/felix/ipojo/runtime/core/providing/TestComp6.java
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/runtime/composite-it/src/it/ipojo-composite-service-providing-test/src/test/java/org/apache/felix/ipojo/runtime/core/providing/TestComp6.java?rev=1450158&view=auto
==============================================================================
--- felix/trunk/ipojo/runtime/composite-it/src/it/ipojo-composite-service-providing-test/src/test/java/org/apache/felix/ipojo/runtime/core/providing/TestComp6.java (added)
+++ felix/trunk/ipojo/runtime/composite-it/src/it/ipojo-composite-service-providing-test/src/test/java/org/apache/felix/ipojo/runtime/core/providing/TestComp6.java Tue Feb 26 13:02:34 2013
@@ -0,0 +1,293 @@
+/* 
+ * 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.runtime.core.providing;
+
+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.runtime.core.Common;
+import org.apache.felix.ipojo.runtime.core.components.TotoProvider;
+import org.apache.felix.ipojo.runtime.core.services.Tata;
+import org.apache.felix.ipojo.runtime.core.services.Toto;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.osgi.framework.ServiceReference;
+
+import java.util.Properties;
+
+import static org.junit.Assert.*;
+
+public class TestComp6 extends Common {
+
+    private ComponentFactory tataFactory;
+    private ComponentFactory totoFactory;
+    private ComponentInstance totoProv, totoProv2;
+    private ComponentInstance under;
+
+    @Before
+    public void setUp() {
+        tataFactory = (ComponentFactory) ipojoHelper.getFactory("tata");
+        totoFactory = (ComponentFactory) ipojoHelper.getFactory("toto");
+
+        tataFactory.stop();
+
+        Properties props = new Properties();
+        props.put("instance.name", "toto provider");
+        try {
+            totoProv = totoFactory.createComponentInstance(props);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        Properties props3 = new Properties();
+        props3.put("instance.name", "toto provider 2");
+        try {
+            totoProv2 = totoFactory.createComponentInstance(props3);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        totoProv.stop();
+        totoProv2.stop();
+
+        Factory factory = ipojoHelper.getFactory("comp-6");
+        Properties props2 = new Properties();
+        props2.put("instance.name", "ff");
+        try {
+            under = factory.createComponentInstance(props2);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+    }
+
+    @After
+    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;
+    }
+
+    @Test
+    public void testSimple() {
+        // Neither factory nor instance
+        assertTrue("Assert under state - 1", under.getState() == ComponentInstance.INVALID);
+        ServiceReference refToto = ipojoHelper.getServiceReferenceByName(Toto.class.getName(), "ff");
+        ServiceReference refTata = ipojoHelper.getServiceReferenceByName(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 = ipojoHelper.getServiceReferenceByName(Toto.class.getName(), "ff");
+        refTata = ipojoHelper.getServiceReferenceByName(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 = ipojoHelper.getServiceReferenceByName(Toto.class.getName(), "ff");
+        refTata = ipojoHelper.getServiceReferenceByName(Tata.class.getName(), "ff");
+        assertNotNull("Assert toto service - 3", refToto);
+        assertNotNull("Assert tata service - 3", refTata);
+        Toto toto = (Toto) getContext().getService(refToto);
+        Tata tata = (Tata) getContext().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);
+
+        getContext().ungetService(refToto);
+        getContext().ungetService(refTata);
+        toto = null;
+        tata = null;
+
+        // Start a second import
+        totoProv2.start();
+        assertTrue("Assert under state - 4", under.getState() == ComponentInstance.VALID);
+        refToto = ipojoHelper.getServiceReferenceByName(Toto.class.getName(), "ff");
+        refTata = ipojoHelper.getServiceReferenceByName(Tata.class.getName(), "ff");
+        assertNotNull("Assert toto service - 4", refToto);
+        assertNotNull("Assert tata service - 4", refTata);
+
+        toto = (Toto) getContext().getService(refToto);
+        tata = (Tata) getContext().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);
+        getContext().ungetService(refToto);
+        getContext().ungetService(refTata);
+        toto = null;
+        tata = null;
+
+        // Stop the factory
+        tataFactory.stop();
+        assertTrue("Assert under state - 5", under.getState() == ComponentInstance.INVALID);
+        refToto = ipojoHelper.getServiceReferenceByName(Toto.class.getName(), "ff");
+        refTata = ipojoHelper.getServiceReferenceByName(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 = ipojoHelper.getServiceReferenceByName(Toto.class.getName(), "ff");
+        refTata = ipojoHelper.getServiceReferenceByName(Tata.class.getName(), "ff");
+        assertNotNull("Assert toto service - 6", refToto);
+        assertNotNull("Assert tata service - 6", refTata);
+        toto = (Toto) getContext().getService(refToto);
+        tata = (Tata) getContext().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);
+        getContext().ungetService(refToto);
+        getContext().ungetService(refTata);
+        toto = null;
+        tata = null;
+
+        // Is arch exposed
+        assertNotNull("Test arch", ipojoHelper.getServiceReferenceByName(Architecture.class.getName(), "ff"));
+
+        tataFactory.stop();
+
+        assertTrue("Assert under state - 7", under.getState() == ComponentInstance.INVALID);
+        assertNotNull("Test arch-2", ipojoHelper.getServiceReferenceByName(Architecture.class.getName(), "ff"));
+        refToto = ipojoHelper.getServiceReferenceByName(Toto.class.getName(), "ff");
+        refTata = ipojoHelper.getServiceReferenceByName(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, 0);
+        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, 0);
+
+    }
+
+    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) {
+        }
+    }
+
+
+}

Added: felix/trunk/ipojo/runtime/composite-it/src/it/ipojo-composite-service-providing-test/src/test/java/org/apache/felix/ipojo/runtime/core/providing/TestComp7.java
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/runtime/composite-it/src/it/ipojo-composite-service-providing-test/src/test/java/org/apache/felix/ipojo/runtime/core/providing/TestComp7.java?rev=1450158&view=auto
==============================================================================
--- felix/trunk/ipojo/runtime/composite-it/src/it/ipojo-composite-service-providing-test/src/test/java/org/apache/felix/ipojo/runtime/core/providing/TestComp7.java (added)
+++ felix/trunk/ipojo/runtime/composite-it/src/it/ipojo-composite-service-providing-test/src/test/java/org/apache/felix/ipojo/runtime/core/providing/TestComp7.java Tue Feb 26 13:02:34 2013
@@ -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.runtime.core.providing;
+
+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.runtime.core.Common;
+import org.apache.felix.ipojo.runtime.core.components.TotoProvider;
+import org.apache.felix.ipojo.runtime.core.services.Tota;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.osgi.framework.ServiceReference;
+
+import java.util.Properties;
+
+import static org.junit.Assert.*;
+
+public class TestComp7 extends Common {
+
+    private ComponentFactory tataFactory;
+    private ComponentFactory totoFactory;
+    private ComponentFactory tataFactory2;
+    private ComponentInstance totoProv, totoProv2;
+    private ComponentInstance under;
+
+    @Before
+    public void setUp() {
+        tataFactory = (ComponentFactory) ipojoHelper.getFactory("tata");
+        totoFactory = (ComponentFactory) ipojoHelper.getFactory("toto");
+        tataFactory2 = (ComponentFactory) ipojoHelper.getFactory("comp-6");
+        tataFactory2.stop();
+
+        Properties props = new Properties();
+        props.put("instance.name", "toto provider");
+        try {
+            totoProv = totoFactory.createComponentInstance(props);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        Properties props3 = new Properties();
+        props3.put("instance.name", "toto provider 2");
+        try {
+            totoProv2 = totoFactory.createComponentInstance(props3);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        totoProv.stop();
+        totoProv2.stop();
+
+        Factory factory = ipojoHelper.getFactory("comp-7");
+        Properties props2 = new Properties();
+        props2.put("instance.name", "ff");
+        try {
+            under = factory.createComponentInstance(props2);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        tataFactory.stop();
+
+    }
+
+    @After
+    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;
+    }
+
+    @Test
+    public void testSimple() {
+        // Neither factory nor instance
+        assertTrue("Assert under state - 1", under.getState() == ComponentInstance.INVALID);
+        assertNull("Assert no tota service - 1", getContext().getServiceReference(Tota.class.getName()));
+
+        // Start the importer
+        totoProv.start();
+        assertTrue("Assert under state - 2", under.getState() == ComponentInstance.INVALID);
+        assertNull("Assert no tota service - 2", getContext().getServiceReference(Tota.class.getName()));
+
+        // Start the factory
+        tataFactory.start();
+        assertTrue("Assert under state - 3", under.getState() == ComponentInstance.VALID);
+        assertNotNull("Assert tota service - 3", getContext().getServiceReference(Tota.class.getName()));
+        ServiceReference ref = getContext().getServiceReference(Tota.class.getName());
+        Tota tota = (Tota) getContext().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);
+        getContext().ungetService(ref);
+        tota = null;
+
+        // Start a second import
+        totoProv2.start();
+        assertTrue("Assert under state - 4", under.getState() == ComponentInstance.VALID);
+        assertNotNull("Assert tota service - 4", getContext().getServiceReference(Tota.class.getName()));
+        ref = getContext().getServiceReference(Tota.class.getName());
+        tota = (Tota) getContext().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);
+
+        getContext().ungetService(ref);
+        tota = null;
+
+        tataFactory.stop();
+        assertTrue("Assert under state - 5", under.getState() == ComponentInstance.INVALID);
+        assertNull("Assert no tota service - 5", getContext().getServiceReference(Tota.class.getName()));
+
+        totoProv2.stop();
+        tataFactory.start();
+        assertTrue("Assert under state - 6", under.getState() == ComponentInstance.VALID);
+        assertNotNull("Assert tota service - 6", getContext().getServiceReference(Tota.class.getName()));
+        ref = getContext().getServiceReference(Tota.class.getName());
+        tota = (Tota) getContext().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);
+        getContext().ungetService(ref);
+        tota = null;
+
+        // Is arch exposed
+        assertNotNull("Test arch", ipojoHelper.getServiceReferenceByName(Architecture.class.getName(), "ff"));
+
+        totoProv.stop();
+
+        assertTrue("Assert under state - 7", under.getState() == ComponentInstance.INVALID);
+        assertNotNull("Test arch-2", ipojoHelper.getServiceReferenceByName(Architecture.class.getName(), "ff"));
+        assertNull("Assert no tota service - 7", getContext().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, 0);
+        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, 0);
+
+    }
+
+    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);
+    }
+
+
+}

Added: felix/trunk/ipojo/runtime/composite-it/src/it/ipojo-composite-service-providing-test/src/test/java/org/apache/felix/ipojo/runtime/core/providing/TestComp8.java
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/runtime/composite-it/src/it/ipojo-composite-service-providing-test/src/test/java/org/apache/felix/ipojo/runtime/core/providing/TestComp8.java?rev=1450158&view=auto
==============================================================================
--- felix/trunk/ipojo/runtime/composite-it/src/it/ipojo-composite-service-providing-test/src/test/java/org/apache/felix/ipojo/runtime/core/providing/TestComp8.java (added)
+++ felix/trunk/ipojo/runtime/composite-it/src/it/ipojo-composite-service-providing-test/src/test/java/org/apache/felix/ipojo/runtime/core/providing/TestComp8.java Tue Feb 26 13:02:34 2013
@@ -0,0 +1,369 @@
+/* 
+ * 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.runtime.core.providing;
+
+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.runtime.core.Common;
+import org.apache.felix.ipojo.runtime.core.components.TotoProvider;
+import org.apache.felix.ipojo.runtime.core.components.TotoProviderGlue;
+import org.apache.felix.ipojo.runtime.core.services.Tota;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.osgi.framework.ServiceReference;
+
+import java.util.Properties;
+
+import static org.junit.Assert.*;
+
+public class TestComp8 extends Common {
+
+    private ComponentFactory tataFactory;
+    private ComponentFactory totoFactory;
+    private ComponentFactory tataFactory2;
+    private ComponentInstance totoProv, totoProv2;
+    private ComponentInstance under;
+
+    @Before
+    public void setUp() {
+        tataFactory = (ComponentFactory) ipojoHelper.getFactory("tata");
+        totoFactory = (ComponentFactory) ipojoHelper.getFactory("toto");
+        tataFactory2 = (ComponentFactory) ipojoHelper.getFactory("comp-6");
+        tataFactory2.stop();
+
+        Properties props = new Properties();
+        props.put("instance.name", "toto provider");
+        try {
+            totoProv = totoFactory.createComponentInstance(props);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        Properties props3 = new Properties();
+        props3.put("instance.name", "toto provider 2");
+        try {
+            totoProv2 = totoFactory.createComponentInstance(props3);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        totoProv.stop();
+        totoProv2.stop();
+
+        Factory factory = ipojoHelper.getFactory("comp-8");
+        Properties props2 = new Properties();
+        props2.put("instance.name", "ff");
+        try {
+            under = factory.createComponentInstance(props2);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        tataFactory.stop();
+
+    }
+
+    @After
+    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;
+    }
+
+    @Test
+    public void testSimple() {
+        // Neither factory nor instance
+        assertTrue("Assert under state - 1", under.getState() == ComponentInstance.INVALID);
+        assertNull("Assert no tota service - 1", getContext().getServiceReference(Tota.class.getName()));
+
+        // Start the importer
+        totoProv.start();
+        assertTrue("Assert under state - 2", under.getState() == ComponentInstance.INVALID);
+        assertNull("Assert no tota service - 2", getContext().getServiceReference(Tota.class.getName()));
+
+        // Start the factory
+        tataFactory.start();
+        assertTrue("Assert under state - 3", under.getState() == ComponentInstance.VALID);
+        assertNotNull("Assert tota service - 3", getContext().getServiceReference(Tota.class.getName()));
+        ServiceReference ref = getContext().getServiceReference(Tota.class.getName());
+        Tota tota = (Tota) getContext().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);
+        getContext().ungetService(ref);
+        tota = null;
+
+        // Start a second import
+        totoProv2.start();
+        assertTrue("Assert under state - 4", under.getState() == ComponentInstance.VALID);
+        assertNotNull("Assert tota service - 4", getContext().getServiceReference(Tota.class.getName()));
+        ref = getContext().getServiceReference(Tota.class.getName());
+        tota = (Tota) getContext().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);
+
+        getContext().ungetService(ref);
+        tota = null;
+
+        tataFactory.stop();
+        assertTrue("Assert under state - 5", under.getState() == ComponentInstance.INVALID);
+        assertNull("Assert no tota service - 5", getContext().getServiceReference(Tota.class.getName()));
+
+        totoProv2.stop();
+        tataFactory.start();
+        assertTrue("Assert under state - 6", under.getState() == ComponentInstance.VALID);
+        assertNotNull("Assert tota service - 6", getContext().getServiceReference(Tota.class.getName()));
+        ref = getContext().getServiceReference(Tota.class.getName());
+        tota = (Tota) getContext().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);
+        getContext().ungetService(ref);
+        tota = null;
+
+        // Is arch exposed
+        assertNotNull("Test arch", ipojoHelper.getServiceReferenceByName(Architecture.class.getName(), "ff"));
+
+        totoProv.stop();
+
+        assertTrue("Assert under state - 7", under.getState() == ComponentInstance.INVALID);
+        assertNotNull("Test arch-2", ipojoHelper.getServiceReferenceByName(Architecture.class.getName(), "ff"));
+        assertNull("Assert no tota service - 7", getContext().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, 0);
+        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, 0);
+
+    }
+
+    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);
+    }
+
+
+}



Mime
View raw message