You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by cl...@apache.org on 2008/01/28 00:21:37 UTC

svn commit: r615675 [5/21] - in /felix/sandbox/clement/ipojo: ./ annotations/ ant/ arch/ core/ core/src/main/java/org/apache/felix/ipojo/handlers/configuration/ core/src/main/java/org/apache/felix/ipojo/handlers/dependency/ core/src/main/java/org/apach...

Added: felix/sandbox/clement/ipojo/tests/tests.composite/src/main/java/org/apache/felix/ipojo/test/composite/instantiator/SimpleInstantiation.java
URL: http://svn.apache.org/viewvc/felix/sandbox/clement/ipojo/tests/tests.composite/src/main/java/org/apache/felix/ipojo/test/composite/instantiator/SimpleInstantiation.java?rev=615675&view=auto
==============================================================================
--- felix/sandbox/clement/ipojo/tests/tests.composite/src/main/java/org/apache/felix/ipojo/test/composite/instantiator/SimpleInstantiation.java (added)
+++ felix/sandbox/clement/ipojo/tests/tests.composite/src/main/java/org/apache/felix/ipojo/test/composite/instantiator/SimpleInstantiation.java Sun Jan 27 15:21:24 2008
@@ -0,0 +1,256 @@
+package org.apache.felix.ipojo.test.composite.instantiator;
+
+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.ServiceContext;
+import org.apache.felix.ipojo.architecture.Architecture;
+import org.apache.felix.ipojo.architecture.InstanceDescription;
+import org.apache.felix.ipojo.junit4osgi.OSGiTestCase;
+import org.apache.felix.ipojo.test.composite.util.Utils;
+import org.apache.felix.ipojo.test.scenarios.service.BarService;
+import org.osgi.framework.ServiceReference;
+
+public class SimpleInstantiation extends OSGiTestCase {
+
+	private ComponentFactory bar1Factory;
+	private ComponentInstance empty;
+	
+	public void setUp() {
+		bar1Factory = (ComponentFactory) Utils.getFactoryByName(context, "composite.bar.1");
+		Factory fact = Utils.getFactoryByName(context, "composite.empty");
+		Properties props = new Properties();
+		props.put("name", "empty-X");
+		try {
+			empty = fact.createComponentInstance(props);
+		} catch(Exception e) {
+			fail("Cannot create the empty composite : " + e.getMessage());
+		}
+	}
+	
+	public void tearDown() {
+		empty.dispose();
+		empty = null;
+	}
+	
+	public void testCreation() {
+		Properties props = new Properties();
+		props.put("name", "under");
+		ComponentInstance under = null;
+		try {
+			under = bar1Factory.createComponentInstance(props);
+		} catch(Exception e) {
+		    e.printStackTrace();
+			fail("Cannot instantiate under : " + e.getMessage());
+		}
+		assertTrue("Check instance validity", under.getState() == ComponentInstance.VALID);
+		under.dispose();
+	}
+	
+	public void testServiceAvailability() {
+		Properties props = new Properties();
+		props.put("name", "under");
+		ComponentInstance under = null;
+		try {
+			under = bar1Factory.createComponentInstance(props);
+		} catch(Exception e) {
+			fail("Cannot instantiate under : " + e.getMessage());
+		}	
+		assertTrue("Check instance validity", under.getState() == ComponentInstance.VALID);
+		ServiceContext sc = Utils.getServiceContext(under);
+		assertNotNull("Check service availability", sc.getServiceReference(BarService.class.getName()));
+		
+		under.dispose();
+	}
+	
+	public void testCreationLevel2() {
+		ServiceContext sc = Utils.getServiceContext(empty);
+		Properties props = new Properties();
+		props.put("name", "under");
+		ComponentInstance under = null;
+		try {
+			under = bar1Factory.createComponentInstance(props, sc);
+		} catch(Exception e) {
+			fail("Cannot instantiate under : " + e.getMessage());
+		}
+		assertTrue("Check instance validity", under.getState() == ComponentInstance.VALID);
+		under.dispose();
+	}
+	
+	public void testServiceAvailabilityLevel2() {
+		ServiceContext sc = Utils.getServiceContext(empty);
+		Properties props = new Properties();
+		props.put("name", "under-X");
+		ComponentInstance under = null;
+		try {
+			under = bar1Factory.createComponentInstance(props, sc);
+		} catch(Exception e) {
+			fail("Cannot instantiate under : " + e.getMessage());
+		}	
+		assertTrue("Check instance validity", under.getState() == ComponentInstance.VALID);
+		ServiceContext sc2 = Utils.getServiceContext(under);
+		assertNotNull("Check service availability", sc2.getServiceReference(BarService.class.getName()));
+		
+		under.dispose();
+	}
+	
+	public void testFactoryManagement() {
+		Properties props = new Properties();
+		props.put("name", "under");
+		ComponentInstance under = null;
+		try {
+			under = bar1Factory.createComponentInstance(props);
+		} catch(Exception e) {
+			fail("Cannot instantiate under : " + e.getMessage());
+		}
+		assertTrue("Check instance validity - 1", under.getState() == ComponentInstance.VALID);
+		
+		ComponentFactory fact1 = (ComponentFactory) Utils.getFactoryByName(context, "FooBarProviderType-1");
+		ComponentFactory fact2 = (ComponentFactory) Utils.getFactoryByName(context, "FooBarProviderType-2");
+		ComponentFactory fact3 = (ComponentFactory) Utils.getFactoryByName(context, "FooBarProviderType-3");
+		
+		fact1.stop();
+		assertTrue("Check instance validity - 2", under.getState() == ComponentInstance.VALID);
+		
+		fact2.stop();
+		assertTrue("Check instance validity - 3", under.getState() == ComponentInstance.VALID);
+		
+		fact3.stop();
+		assertTrue("Check instance invalidity", under.getState() == ComponentInstance.INVALID);
+		
+		fact1.start();
+		assertTrue("Check instance validity - 4", under.getState() == ComponentInstance.VALID);
+		
+		under.dispose();
+		fact2.start();
+		fact3.start();
+	}
+	
+	public void testFactoryManagementLevel2() {
+		ServiceContext sc = Utils.getServiceContext(empty);
+		Properties props = new Properties();
+		props.put("name", "under");
+		ComponentInstance under = null;
+		try {
+			under = bar1Factory.createComponentInstance(props, sc);
+		} catch(Exception e) {
+			fail("Cannot instantiate under : " + e.getMessage());
+		}
+		assertTrue("Check instance validity - 1", under.getState() == ComponentInstance.VALID);
+		
+		ComponentFactory fact1 = (ComponentFactory) Utils.getFactoryByName(context, "FooBarProviderType-1");
+		ComponentFactory fact2 = (ComponentFactory) Utils.getFactoryByName(context, "FooBarProviderType-2");
+		ComponentFactory fact3 = (ComponentFactory) Utils.getFactoryByName(context, "FooBarProviderType-3");
+		
+		fact1.stop();
+		assertTrue("Check instance validity - 2", under.getState() == ComponentInstance.VALID);
+		
+		fact2.stop();
+		assertTrue("Check instance validity - 3", under.getState() == ComponentInstance.VALID);
+		
+		fact3.stop();
+		assertTrue("Check instance invalidity", under.getState() == ComponentInstance.INVALID);
+		
+		fact1.start();
+		assertTrue("Check instance validity - 4", under.getState() == ComponentInstance.VALID);
+		
+		under.dispose();
+		fact2.start();
+		fact3.start();
+	}
+	
+	public void testArchitecture() {
+		Properties props = new Properties();
+		props.put("name", "under");
+		ComponentInstance under = null;
+		try {
+			under = bar1Factory.createComponentInstance(props);
+		} catch(Exception e) {
+			fail("Cannot instantiate under : " + e.getMessage());
+		}
+		ServiceReference ref = Utils.getServiceReferenceByName(context, Architecture.class.getName(), "under");
+		assertNotNull("Check architecture availability", ref);
+		Architecture arch = (Architecture) context.getService(ref);
+		InstanceDescription id = arch.getInstanceDescription();
+		
+		assertTrue("Check instance validity - 1", id.getState() == ComponentInstance.VALID);
+		InstanceDescription[] contained = id.getContainedInstances();
+		assertEquals("Check contained instances count", contained.length, 1);
+		assertEquals("Check that no object are created" , id.getCreatedObjects().length, 0);
+		assertEquals("Check instance name" , id.getName(), "under");
+		assertEquals("Check component type name" , id.getComponentDescription().getName(), "composite.bar.1");
+		
+		ComponentFactory fact1 = (ComponentFactory) Utils.getFactoryByName(context, "FooBarProviderType-1");
+		ComponentFactory fact2 = (ComponentFactory) Utils.getFactoryByName(context, "FooBarProviderType-2");
+		ComponentFactory fact3 = (ComponentFactory) Utils.getFactoryByName(context, "FooBarProviderType-3");
+		
+		fact1.stop();
+		assertTrue("Check instance validity - 2", under.getState() == ComponentInstance.VALID);
+		ref = Utils.getServiceReferenceByName(context, Architecture.class.getName(), "under");
+		assertNotNull("Check architecture availability", ref);
+		arch = (Architecture) context.getService(ref);
+		id = arch.getInstanceDescription();
+		assertTrue("Check instance validity - 1", id.getState() == ComponentInstance.VALID);
+		contained = id.getContainedInstances();
+		assertEquals("Check contained instances count", contained.length, 1);
+		assertEquals("Check that no object are created" , id.getCreatedObjects().length, 0);
+		assertEquals("Check instance name" , id.getName(), "under");
+		assertEquals("Check component type name" , id.getComponentDescription().getName(), "composite.bar.1");
+		
+		fact2.stop();
+		assertTrue("Check instance validity - 3", under.getState() == ComponentInstance.VALID);
+		ref = Utils.getServiceReferenceByName(context, Architecture.class.getName(), "under");
+		assertNotNull("Check architecture availability", ref);
+		arch = (Architecture) context.getService(ref);
+		id = arch.getInstanceDescription();
+		assertTrue("Check instance validity - 1", id.getState() == ComponentInstance.VALID);
+		contained = id.getContainedInstances();
+		assertEquals("Check contained instances count", contained.length, 1);
+		assertEquals("Check that no object are created" , id.getCreatedObjects().length, 0);
+		assertEquals("Check instance name" , id.getName(), "under");
+		assertEquals("Check component type name" , id.getComponentDescription().getName(), "composite.bar.1");
+
+		fact3.stop();
+		assertTrue("Check instance invalidity", under.getState() == ComponentInstance.INVALID);
+		ref = Utils.getServiceReferenceByName(context, Architecture.class.getName(), "under");
+		assertNotNull("Check architecture availability", ref);
+		arch = (Architecture) context.getService(ref);
+		id = arch.getInstanceDescription();
+		assertTrue("Check instance validity - 1", id.getState() == ComponentInstance.INVALID);
+		contained = id.getContainedInstances();
+		assertEquals("Check contained instances count", contained.length, 0);
+		assertEquals("Check that no object are created" , id.getCreatedObjects().length, 0);
+		assertEquals("Check instance name" , id.getName(), "under");
+		assertEquals("Check component type name" , id.getComponentDescription().getName(), "composite.bar.1");
+
+		fact1.start();
+		assertTrue("Check instance validity - 4", under.getState() == ComponentInstance.VALID);
+		ref = Utils.getServiceReferenceByName(context, Architecture.class.getName(), "under");
+		assertNotNull("Check architecture availability", ref);
+		arch = (Architecture) context.getService(ref);
+		id = arch.getInstanceDescription();
+		assertTrue("Check instance validity - 1", id.getState() == ComponentInstance.VALID);
+		contained = id.getContainedInstances();
+		assertEquals("Check contained instances count", contained.length, 1);
+		assertEquals("Check that no object are created" , id.getCreatedObjects().length, 0);
+		assertEquals("Check instance name" , id.getName(), "under");
+		assertEquals("Check component type name" , id.getComponentDescription().getName(), "composite.bar.1");
+
+		under.dispose();
+		fact2.start();
+		fact3.start();
+	}
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+
+}

Propchange: felix/sandbox/clement/ipojo/tests/tests.composite/src/main/java/org/apache/felix/ipojo/test/composite/provides/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Sun Jan 27 15:21:24 2008
@@ -0,0 +1,6 @@
+target*
+bin*
+.settings*
+.classpath
+.project
+.checkstyle

Added: felix/sandbox/clement/ipojo/tests/tests.composite/src/main/java/org/apache/felix/ipojo/test/composite/provides/ProvidesTestSuite.java
URL: http://svn.apache.org/viewvc/felix/sandbox/clement/ipojo/tests/tests.composite/src/main/java/org/apache/felix/ipojo/test/composite/provides/ProvidesTestSuite.java?rev=615675&view=auto
==============================================================================
--- felix/sandbox/clement/ipojo/tests/tests.composite/src/main/java/org/apache/felix/ipojo/test/composite/provides/ProvidesTestSuite.java (added)
+++ felix/sandbox/clement/ipojo/tests/tests.composite/src/main/java/org/apache/felix/ipojo/test/composite/provides/ProvidesTestSuite.java Sun Jan 27 15:21:24 2008
@@ -0,0 +1,25 @@
+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("Compiste 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;
+    }
+
+}

Added: felix/sandbox/clement/ipojo/tests/tests.composite/src/main/java/org/apache/felix/ipojo/test/composite/provides/TestComp0.java
URL: http://svn.apache.org/viewvc/felix/sandbox/clement/ipojo/tests/tests.composite/src/main/java/org/apache/felix/ipojo/test/composite/provides/TestComp0.java?rev=615675&view=auto
==============================================================================
--- felix/sandbox/clement/ipojo/tests/tests.composite/src/main/java/org/apache/felix/ipojo/test/composite/provides/TestComp0.java (added)
+++ felix/sandbox/clement/ipojo/tests/tests.composite/src/main/java/org/apache/felix/ipojo/test/composite/provides/TestComp0.java Sun Jan 27 15:21:24 2008
@@ -0,0 +1,320 @@
+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) {
+            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);
+    }
+    
+
+}

Added: felix/sandbox/clement/ipojo/tests/tests.composite/src/main/java/org/apache/felix/ipojo/test/composite/provides/TestComp1.java
URL: http://svn.apache.org/viewvc/felix/sandbox/clement/ipojo/tests/tests.composite/src/main/java/org/apache/felix/ipojo/test/composite/provides/TestComp1.java?rev=615675&view=auto
==============================================================================
--- felix/sandbox/clement/ipojo/tests/tests.composite/src/main/java/org/apache/felix/ipojo/test/composite/provides/TestComp1.java (added)
+++ felix/sandbox/clement/ipojo/tests/tests.composite/src/main/java/org/apache/felix/ipojo/test/composite/provides/TestComp1.java Sun Jan 27 15:21:24 2008
@@ -0,0 +1,319 @@
+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);
+    }
+    
+
+}

Added: felix/sandbox/clement/ipojo/tests/tests.composite/src/main/java/org/apache/felix/ipojo/test/composite/provides/TestComp2.java
URL: http://svn.apache.org/viewvc/felix/sandbox/clement/ipojo/tests/tests.composite/src/main/java/org/apache/felix/ipojo/test/composite/provides/TestComp2.java?rev=615675&view=auto
==============================================================================
--- felix/sandbox/clement/ipojo/tests/tests.composite/src/main/java/org/apache/felix/ipojo/test/composite/provides/TestComp2.java (added)
+++ felix/sandbox/clement/ipojo/tests/tests.composite/src/main/java/org/apache/felix/ipojo/test/composite/provides/TestComp2.java Sun Jan 27 15:21:24 2008
@@ -0,0 +1,214 @@
+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);
+    }
+    
+
+}

Added: felix/sandbox/clement/ipojo/tests/tests.composite/src/main/java/org/apache/felix/ipojo/test/composite/provides/TestComp3.java
URL: http://svn.apache.org/viewvc/felix/sandbox/clement/ipojo/tests/tests.composite/src/main/java/org/apache/felix/ipojo/test/composite/provides/TestComp3.java?rev=615675&view=auto
==============================================================================
--- felix/sandbox/clement/ipojo/tests/tests.composite/src/main/java/org/apache/felix/ipojo/test/composite/provides/TestComp3.java (added)
+++ felix/sandbox/clement/ipojo/tests/tests.composite/src/main/java/org/apache/felix/ipojo/test/composite/provides/TestComp3.java Sun Jan 27 15:21:24 2008
@@ -0,0 +1,244 @@
+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) { }
+    }
+    
+
+}

Added: felix/sandbox/clement/ipojo/tests/tests.composite/src/main/java/org/apache/felix/ipojo/test/composite/provides/TestComp4.java
URL: http://svn.apache.org/viewvc/felix/sandbox/clement/ipojo/tests/tests.composite/src/main/java/org/apache/felix/ipojo/test/composite/provides/TestComp4.java?rev=615675&view=auto
==============================================================================
--- felix/sandbox/clement/ipojo/tests/tests.composite/src/main/java/org/apache/felix/ipojo/test/composite/provides/TestComp4.java (added)
+++ felix/sandbox/clement/ipojo/tests/tests.composite/src/main/java/org/apache/felix/ipojo/test/composite/provides/TestComp4.java Sun Jan 27 15:21:24 2008
@@ -0,0 +1,243 @@
+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) { }
+    }
+    
+
+}

Added: felix/sandbox/clement/ipojo/tests/tests.composite/src/main/java/org/apache/felix/ipojo/test/composite/provides/TestComp5.java
URL: http://svn.apache.org/viewvc/felix/sandbox/clement/ipojo/tests/tests.composite/src/main/java/org/apache/felix/ipojo/test/composite/provides/TestComp5.java?rev=615675&view=auto
==============================================================================
--- felix/sandbox/clement/ipojo/tests/tests.composite/src/main/java/org/apache/felix/ipojo/test/composite/provides/TestComp5.java (added)
+++ felix/sandbox/clement/ipojo/tests/tests.composite/src/main/java/org/apache/felix/ipojo/test/composite/provides/TestComp5.java Sun Jan 27 15:21:24 2008
@@ -0,0 +1,247 @@
+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) { }
+    }
+    
+
+}