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 2007/09/25 17:07:18 UTC

svn commit: r579291 [4/12] - in /felix/sandbox/clement/Tests/Suite: ./ src/ src/main/ src/main/java/ src/main/java/org/ src/main/java/org/apache/ src/main/java/org/apache/felix/ src/main/java/org/apache/felix/ipojo/ src/main/java/org/apache/felix/ipojo...

Added: felix/sandbox/clement/Tests/Suite/src/main/java/org/apache/felix/ipojo/test/scenarios/composite/infrastructure/EmptyCompositeTest.java
URL: http://svn.apache.org/viewvc/felix/sandbox/clement/Tests/Suite/src/main/java/org/apache/felix/ipojo/test/scenarios/composite/infrastructure/EmptyCompositeTest.java?rev=579291&view=auto
==============================================================================
--- felix/sandbox/clement/Tests/Suite/src/main/java/org/apache/felix/ipojo/test/scenarios/composite/infrastructure/EmptyCompositeTest.java (added)
+++ felix/sandbox/clement/Tests/Suite/src/main/java/org/apache/felix/ipojo/test/scenarios/composite/infrastructure/EmptyCompositeTest.java Tue Sep 25 08:06:53 2007
@@ -0,0 +1,210 @@
+package org.apache.felix.ipojo.test.scenarios.composite.infrastructure;
+
+import java.util.Properties;
+
+import org.apache.felix.ipojo.ComponentInstance;
+import org.apache.felix.ipojo.CompositeManager;
+import org.apache.felix.ipojo.Factory;
+import org.apache.felix.ipojo.ServiceContext;
+import org.apache.felix.ipojo.architecture.ComponentDescription;
+import org.apache.felix.ipojo.architecture.InstanceDescription;
+import org.apache.felix.ipojo.test.scenarios.util.Utils;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.InvalidSyntaxException;
+
+import fr.imag.adele.escoffier.utf.framework.TestCase;
+
+public class EmptyCompositeTest extends TestCase {
+
+	public EmptyCompositeTest(BundleContext arg0) {
+		super(arg0);
+	}
+	
+	public void testEmptyCompositeCreation() {
+		Factory factory = Utils.getFactoryByName(context, "composite.empty");
+		Properties props = new Properties();
+		props.put("name", "empty");
+		
+		ComponentInstance ci = null;
+		try {
+			ci = factory.createComponentInstance(props);
+		} catch (Exception e) {
+		    e.printStackTrace();
+			fail("Unacceptable configuration : " + e.getMessage());
+		}
+		
+		ComponentDescription cd = ci.getFactory().getComponentDescription();
+		assertEquals("Check component type name", cd.getName(), "composite.empty");
+		assertEquals("Check class name (" + cd.getClassName() + ")", cd.getClassName(), "composite");
+		assertEquals("Check offered service", cd.getprovidedServiceSpecification().length, 0);
+		assertEquals("Check configurable properties", cd.getProperties().length, 0);
+		
+		InstanceDescription id = ci.getInstanceDescription();
+		assertEquals("Check composite instance name", id.getName(), "empty");
+		assertEquals("Check composite instance state (" + id.getState() + ")", id.getState(), ComponentInstance.VALID);
+		
+		assertEquals("Check contained instance", id.getContainedInstances().length, 0);
+		
+		assertTrue("Check composite manager", ci instanceof CompositeManager);
+		CompositeManager cm = (CompositeManager) ci;
+		ServiceContext sc = cm.getServiceContext();
+		try {
+			assertEquals("Check number of factories imported", sc.getServiceReferences(Factory.class.getName(), null).length, context.getServiceReferences(Factory.class.getName(), null).length);
+		} catch (InvalidSyntaxException e) {
+			fail("Invalid filter : " + e.getMessage());
+		}
+		ci.dispose();
+	}
+	
+	public void testInstanceCreation1() {
+		Factory factory = Utils.getFactoryByName(context, "composite.empty");
+		Properties props = new Properties();
+		props.put("name", "empty");
+		
+		ComponentInstance ci = null;
+		try {
+			ci = factory.createComponentInstance(props);
+		} catch(Exception e) {
+		    e.printStackTrace();
+			fail("Unacceptable configuration : " + e.getMessage());
+		}
+		
+		assertTrue("Check composite manager", ci instanceof CompositeManager);
+		CompositeManager cm = (CompositeManager) ci;
+		ServiceContext sc = cm.getServiceContext();
+		try {
+			assertEquals("Check number of factories imported", sc.getServiceReferences(Factory.class.getName(), null).length, context.getServiceReferences(Factory.class.getName(), null).length);
+		} catch (InvalidSyntaxException e) {
+			fail("Invalid filter : " + e.getMessage());
+		}
+		
+		Properties props2 = new Properties();
+		props2.put("name", "empty2");
+		ComponentInstance ci2 = null;
+		try {
+			ci2 = factory.createComponentInstance(props2, sc);
+		} catch(Exception e) {
+		    e.printStackTrace();
+			fail("Unacceptable configuration : " + e.getMessage());
+		}
+		
+		InstanceDescription id = ci.getInstanceDescription();
+		assertEquals("Check composite instance name", id.getName(), "empty");
+		assertEquals("Check composite instance state", id.getState(), ComponentInstance.VALID);
+		assertEquals("Check contained instance", id.getContainedInstances().length, 1);
+		InstanceDescription id2 = id.getContainedInstances()[0];
+		assertEquals("Check composite instance name", id2.getName(), "empty2");
+		assertEquals("Check composite instance state", id2.getState(), ComponentInstance.VALID);
+		assertEquals("Check contained instance", id2.getContainedInstances().length, 0);
+		
+		ci2.dispose();
+		id = ci.getInstanceDescription();
+		assertEquals("Check composite instance name", id.getName(), "empty");
+		assertEquals("Check composite instance state", id.getState(), ComponentInstance.VALID);
+		assertEquals("Check contained instance", id.getContainedInstances().length, 0);
+		
+		ci.dispose();
+	}
+	
+	public void testInstanceCreation2() {
+		Factory factory = Utils.getFactoryByName(context, "composite.empty");
+		Properties props = new Properties();
+		props.put("name", "empty");
+		
+		ComponentInstance ci = null;
+		try {
+			ci = factory.createComponentInstance(props);
+		} catch(Exception e) {
+			fail("Unacceptable configuration : " + e.getMessage());
+		}
+		
+		assertTrue("Check composite manager", ci instanceof CompositeManager);
+		CompositeManager cm = (CompositeManager) ci;
+		ServiceContext sc = cm.getServiceContext();
+		try {
+			assertEquals("Check number of factories imported", sc.getServiceReferences(Factory.class.getName(), null).length, context.getServiceReferences(Factory.class.getName(), null).length);
+		} catch (InvalidSyntaxException e) {
+			fail("Invalid filter : " + e.getMessage());
+		}
+		
+		Factory factory2 = Utils.getFactoryByName(sc, "composite.empty");
+		assertNotNull("Check factory2 not null", factory2);
+		Properties props2 = new Properties();
+		props2.put("name", "empty2");
+		ComponentInstance ci2 = null;
+		try {
+			ci2 = factory2.createComponentInstance(props2);
+		} catch(Exception e) {
+			fail("Unacceptable configuration : " + e.getMessage());
+		}
+		
+		InstanceDescription id = ci.getInstanceDescription();
+		assertEquals("Check composite instance name", id.getName(), "empty");
+		assertEquals("Check composite instance state", id.getState(), ComponentInstance.VALID);
+		assertEquals("Check contained instance", id.getContainedInstances().length, 1);
+		InstanceDescription id2 = id.getContainedInstances()[0];
+		assertEquals("Check composite instance name", id2.getName(), "empty2");
+		assertEquals("Check composite instance state", id2.getState(), ComponentInstance.VALID);
+		assertEquals("Check contained instance", id2.getContainedInstances().length, 0);
+		
+		ci2.dispose();
+		id = ci.getInstanceDescription();
+		assertEquals("Check composite instance name", id.getName(), "empty");
+		assertEquals("Check composite instance state", id.getState(), ComponentInstance.VALID);
+		assertEquals("Check contained instance", id.getContainedInstances().length, 0);
+		
+		ci.dispose();
+	}
+	
+	public void testInstanceCreation3() {
+		Factory factory = Utils.getFactoryByName(context, "composite.empty");
+		Properties props = new Properties();
+		props.put("name", "empty");
+		
+		ComponentInstance ci = null;
+		try {
+			ci = factory.createComponentInstance(props);
+		} catch(Exception e) {
+			fail("Unacceptable configuration : " + e.getMessage());
+		}
+		
+		assertTrue("Check composite manager", ci instanceof CompositeManager);
+		CompositeManager cm = (CompositeManager) ci;
+		ServiceContext sc = cm.getServiceContext();
+		try {
+			assertEquals("Check number of factories imported", sc.getServiceReferences(Factory.class.getName(), null).length, context.getServiceReferences(Factory.class.getName(), null).length);
+		} catch (InvalidSyntaxException e) {
+			fail("Invalid filter : " + e.getMessage());
+		}
+		
+		Factory factory2 = Utils.getFactoryByName(sc, "composite.empty");
+		assertNotNull("Check factory2 not null", factory2);
+		Properties props2 = new Properties();
+		props2.put("name", "empty2");
+		ComponentInstance ci2 = null;
+		try {
+			ci2 = factory2.createComponentInstance(props2, sc);
+		} catch(Exception e) {
+			fail("Unacceptable configuration : " + e.getMessage());
+		}
+		
+		InstanceDescription id = ci.getInstanceDescription();
+		assertEquals("Check composite instance name", id.getName(), "empty");
+		assertEquals("Check composite instance state", id.getState(), ComponentInstance.VALID);
+		assertEquals("Check contained instance", id.getContainedInstances().length, 1);
+		InstanceDescription id2 = id.getContainedInstances()[0];
+		assertEquals("Check composite instance name", id2.getName(), "empty2");
+		assertEquals("Check composite instance state", id2.getState(), ComponentInstance.VALID);
+		assertEquals("Check contained instance", id2.getContainedInstances().length, 0);
+		
+		ci2.dispose();
+		id = ci.getInstanceDescription();
+		assertEquals("Check composite instance name", id.getName(), "empty");
+		assertEquals("Check composite instance state", id.getState(), ComponentInstance.VALID);
+		assertEquals("Check contained instance", id.getContainedInstances().length, 0);
+		
+		ci.dispose();
+	}
+
+
+}

Added: felix/sandbox/clement/Tests/Suite/src/main/java/org/apache/felix/ipojo/test/scenarios/composite/infrastructure/FactoryManagementTest.java
URL: http://svn.apache.org/viewvc/felix/sandbox/clement/Tests/Suite/src/main/java/org/apache/felix/ipojo/test/scenarios/composite/infrastructure/FactoryManagementTest.java?rev=579291&view=auto
==============================================================================
--- felix/sandbox/clement/Tests/Suite/src/main/java/org/apache/felix/ipojo/test/scenarios/composite/infrastructure/FactoryManagementTest.java (added)
+++ felix/sandbox/clement/Tests/Suite/src/main/java/org/apache/felix/ipojo/test/scenarios/composite/infrastructure/FactoryManagementTest.java Tue Sep 25 08:06:53 2007
@@ -0,0 +1,245 @@
+package org.apache.felix.ipojo.test.scenarios.composite.infrastructure;
+
+import java.util.Dictionary;
+import java.util.List;
+import java.util.Properties;
+
+import org.apache.felix.ipojo.ComponentInstance;
+import org.apache.felix.ipojo.Factory;
+import org.apache.felix.ipojo.FactoryStateListener;
+import org.apache.felix.ipojo.ServiceContext;
+import org.apache.felix.ipojo.UnacceptableConfiguration;
+import org.apache.felix.ipojo.architecture.ComponentDescription;
+import org.apache.felix.ipojo.metadata.Element;
+import org.apache.felix.ipojo.test.scenarios.service.CheckService;
+import org.apache.felix.ipojo.test.scenarios.util.Utils;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
+import org.osgi.framework.ServiceRegistration;
+
+import fr.imag.adele.escoffier.utf.framework.TestCase;
+
+public class FactoryManagementTest extends TestCase {
+	
+	private FakeFactory fake1 = new FakeFactory("fake");
+	private FakeFactory fake2 = new FakeFactory("fake2");
+	
+	private Factory emptyFactory;
+	private ComponentInstance empty;
+
+	public FactoryManagementTest(BundleContext arg0) {
+		super(arg0);
+	}
+	
+	private class FakeFactory implements Factory {
+		
+		private String m_name;
+		public FakeFactory(String name) { m_name = name; } 
+
+		public ComponentInstance createComponentInstance(Dictionary arg0) throws UnacceptableConfiguration { return null; }
+		public ComponentInstance createComponentInstance(Dictionary arg0, ServiceContext arg1) throws UnacceptableConfiguration { return null; }
+		public Element getDescription() { return null; }
+		public String getName() { return m_name; }
+		public boolean isAcceptable(Dictionary arg0) { return false; }
+		public void reconfigure(Dictionary arg0) throws UnacceptableConfiguration {	}
+        public void addFactoryStateListener(FactoryStateListener arg0) { }
+        public List getMissingHandlers() { return null;  }
+        public List getRequiredHandlers() { return null;  }
+        public void removeFactoryStateListener(FactoryStateListener arg0) { }
+        public ComponentDescription getComponentDescription() { return null; }
+	}
+	
+	public void setUp() {
+		emptyFactory = Utils.getFactoryByName(context, "composite.empty");
+		Properties props = new Properties();
+		props.put("name", "empty-1");
+		try {
+			empty = emptyFactory.createComponentInstance(props);
+		} catch (Exception e) { fail("Cannot create empty instance " + e.getMessage()); }
+	}
+	
+	public void tearDown() {
+		empty.dispose();
+		empty = null;
+	}
+	
+	public void testOneLevelExposition() {
+		ServiceReference[] parentsFactoryReferences = Utils.getServiceReferences(context, Factory.class.getName(), null);
+		ServiceContext sc = Utils.getServiceContext(empty);
+		ServiceReference[] internalFactoryReferences = Utils.getServiceReferences(sc, Factory.class.getName(), null);
+		
+		assertEquals("Check the number of available factories", parentsFactoryReferences.length, internalFactoryReferences.length);
+		
+		for(int i = 0; i < parentsFactoryReferences.length; i++) {
+			Factory factory = (Factory) context.getService(parentsFactoryReferences[i]);
+			assertTrue("Check the avaibility of " + factory.getName(), isExposed(factory, internalFactoryReferences, sc));
+		}
+	}
+	
+	public void testTwoLevelExposition() {
+		ServiceReference[] parentsFactoryReferences = Utils.getServiceReferences(context, Factory.class.getName(), null);
+		ServiceContext sc1 = Utils.getServiceContext(empty);
+		ServiceReference[] Level1FactoryReferences = Utils.getServiceReferences(sc1, Factory.class.getName(), null);
+		
+		Factory fact = Utils.getFactoryByName(sc1, "composite.empty");
+		Properties p = new Properties();
+		p.put("name", "empty2");
+		ComponentInstance empty2 = null;
+		try {
+			empty2 = fact.createComponentInstance(p);
+		} catch (Exception e) {
+			fail("Cannot instantiate empty2 instance : " + e.getMessage());
+		}
+		
+		ServiceContext sc2 = Utils.getServiceContext(empty2);
+		ServiceReference[] Level2FactoryReferences = Utils.getServiceReferences(sc2, Factory.class.getName(), null);
+		
+		assertEquals("Check the number of available factories - 1", parentsFactoryReferences.length, Level1FactoryReferences.length);
+		assertEquals("Check the number of available factories - 2", parentsFactoryReferences.length, Level2FactoryReferences.length);
+		assertEquals("Check the number of available factories - 3", Level1FactoryReferences.length, Level2FactoryReferences.length);
+		
+		for(int i = 0; i < Level1FactoryReferences.length; i++) {
+			Factory factory = (Factory) context.getService(parentsFactoryReferences[i]);
+			assertTrue("Check the avaibility of " + factory.getName(), isExposed(factory, Level2FactoryReferences, sc2));
+		}
+		
+		empty2.dispose();
+	}
+	
+	public void testDynamism() {
+		ServiceReference[] parentsFactoryReferences = Utils.getServiceReferences(context, Factory.class.getName(), null);
+		ServiceContext sc1 = Utils.getServiceContext(empty);
+		ServiceReference[] Level1FactoryReferences = Utils.getServiceReferences(sc1, Factory.class.getName(), null);
+		
+		Factory fact = Utils.getFactoryByName(sc1, "composite.empty");
+		Properties p = new Properties();
+		p.put("name", "empty2");
+		ComponentInstance empty2 = null;
+		try {
+			empty2 = fact.createComponentInstance(p);
+		} catch (Exception e) {
+			fail("Cannot instantiate empty2 instance : " + e.getMessage());
+		}
+		
+		ServiceContext sc2 = Utils.getServiceContext(empty2);
+		ServiceReference[] Level2FactoryReferences = Utils.getServiceReferences(sc2, Factory.class.getName(), null);
+		
+		assertEquals("Check the number of available factories - 1", parentsFactoryReferences.length, Level1FactoryReferences.length);
+		assertEquals("Check the number of available factories - 2", parentsFactoryReferences.length, Level2FactoryReferences.length);
+		assertEquals("Check the number of available factories - 3", Level1FactoryReferences.length, Level2FactoryReferences.length);
+		
+		for(int i = 0; i < Level1FactoryReferences.length; i++) {
+			Factory factory = (Factory) context.getService(parentsFactoryReferences[i]);
+			assertTrue("Check the avaibility of " + factory.getName(), isExposed(factory, Level2FactoryReferences, sc2));
+		}
+		
+		// Publish fake1
+		ServiceRegistration reg1 = context.registerService(Factory.class.getName(), fake1, null);
+		
+		parentsFactoryReferences = Utils.getServiceReferences(context, Factory.class.getName(), null);
+		sc1 = Utils.getServiceContext(empty);
+		Level1FactoryReferences = Utils.getServiceReferences(sc1, Factory.class.getName(), null);
+		sc2 = Utils.getServiceContext(empty2);
+		Level2FactoryReferences = Utils.getServiceReferences(sc2, Factory.class.getName(), null);
+		
+		assertEquals("Check the number of available factories - 1.1", parentsFactoryReferences.length, Level1FactoryReferences.length);
+		assertEquals("Check the number of available factories - 1.2", parentsFactoryReferences.length, Level2FactoryReferences.length);
+		assertEquals("Check the number of available factories - 1.3", Level1FactoryReferences.length, Level2FactoryReferences.length);
+		
+		// 	Publish fake2
+		ServiceRegistration reg2 = context.registerService(Factory.class.getName(), fake2, null);
+		
+		parentsFactoryReferences = Utils.getServiceReferences(context, Factory.class.getName(), null);
+		sc1 = Utils.getServiceContext(empty);
+		Level1FactoryReferences = Utils.getServiceReferences(sc1, Factory.class.getName(), null);
+		sc2 = Utils.getServiceContext(empty2);
+		Level2FactoryReferences = Utils.getServiceReferences(sc2, Factory.class.getName(), null);
+		
+		assertEquals("Check the number of available factories - 1.1", parentsFactoryReferences.length, Level1FactoryReferences.length);
+		assertEquals("Check the number of available factories - 1.2", parentsFactoryReferences.length, Level2FactoryReferences.length);
+		assertEquals("Check the number of available factories - 1.3", Level1FactoryReferences.length, Level2FactoryReferences.length);
+		
+		reg1.unregister();
+		
+		parentsFactoryReferences = Utils.getServiceReferences(context, Factory.class.getName(), null);
+		sc1 = Utils.getServiceContext(empty);
+		Level1FactoryReferences = Utils.getServiceReferences(sc1, Factory.class.getName(), null);
+		sc2 = Utils.getServiceContext(empty2);
+		Level2FactoryReferences = Utils.getServiceReferences(sc2, Factory.class.getName(), null);
+		
+		assertEquals("Check the number of available factories - 1.1", parentsFactoryReferences.length, Level1FactoryReferences.length);
+		assertEquals("Check the number of available factories - 1.2", parentsFactoryReferences.length, Level2FactoryReferences.length);
+		assertEquals("Check the number of available factories - 1.3", Level1FactoryReferences.length, Level2FactoryReferences.length);
+		
+		reg2.unregister();
+		
+		parentsFactoryReferences = Utils.getServiceReferences(context, Factory.class.getName(), null);
+		sc1 = Utils.getServiceContext(empty);
+		Level1FactoryReferences = Utils.getServiceReferences(sc1, Factory.class.getName(), null);
+		sc2 = Utils.getServiceContext(empty2);
+		Level2FactoryReferences = Utils.getServiceReferences(sc2, Factory.class.getName(), null);
+		
+		assertEquals("Check the number of available factories - 1.1", parentsFactoryReferences.length, Level1FactoryReferences.length);
+		assertEquals("Check the number of available factories - 1.2", parentsFactoryReferences.length, Level2FactoryReferences.length);
+		assertEquals("Check the number of available factories - 1.3", Level1FactoryReferences.length, Level2FactoryReferences.length);
+		
+		empty2.dispose();
+	}
+	
+	public void testInvocation() {
+		ServiceContext sc1 = Utils.getServiceContext(empty);		
+		Factory fact = Utils.getFactoryByName(sc1, "composite.empty");
+		Properties p = new Properties();
+		p.put("name", "empty2");
+		ComponentInstance empty2 = null;
+		try {
+			empty2 = fact.createComponentInstance(p);
+		} catch (Exception e) {
+			fail("Cannot instantiate empty2 instance : " + e.getMessage());
+		}
+		
+		ServiceContext sc2 = Utils.getServiceContext(empty2);
+		
+		Factory fact1 = Utils.getFactoryByName(sc2, "SimpleCheckServiceProvider");
+		Properties props = new Properties();
+		props.put("name", "client");
+		ComponentInstance client = null;
+		try {
+			client = fact1.createComponentInstance(props);
+		} catch (Exception e) { fail("Cannot instantiate the client : " + e.getMessage()); }
+		
+		Factory fact2 = Utils.getFactoryByName(sc2, "FooProviderType-1");
+		Properties props2 = new Properties();
+		props2.put("name", "provider");
+		ComponentInstance provider = null;
+		try {
+			provider = fact2.createComponentInstance(props2);
+		} catch (Exception e) {
+			fail("Cannot instantiate the provider : " + e.getMessage());
+		}
+		
+		ServiceReference ref = sc2.getServiceReference(CheckService.class.getName());
+		CheckService check = (CheckService) sc2.getService(ref);
+		
+		assertTrue("Check invocation", check.check());
+		client.dispose();
+		provider.dispose();
+		empty2.dispose();
+	}
+	
+	
+	
+	
+	private boolean isExposed(Factory fact, ServiceReference[] refs, ServiceContext sc) {
+		for(int i = 0; i < refs.length; i++) {
+			Factory f = (Factory) sc.getService(refs[i]);
+			if(fact.getName().equals(f.getName())) {
+				sc.ungetService(refs[i]);
+				return true; 
+			}
+			sc.ungetService(refs[i]);
+		}
+		return false;
+	}
+
+}

Added: felix/sandbox/clement/Tests/Suite/src/main/java/org/apache/felix/ipojo/test/scenarios/composite/infrastructure/InfrastructureTestSuite.java
URL: http://svn.apache.org/viewvc/felix/sandbox/clement/Tests/Suite/src/main/java/org/apache/felix/ipojo/test/scenarios/composite/infrastructure/InfrastructureTestSuite.java?rev=579291&view=auto
==============================================================================
--- felix/sandbox/clement/Tests/Suite/src/main/java/org/apache/felix/ipojo/test/scenarios/composite/infrastructure/InfrastructureTestSuite.java (added)
+++ felix/sandbox/clement/Tests/Suite/src/main/java/org/apache/felix/ipojo/test/scenarios/composite/infrastructure/InfrastructureTestSuite.java Tue Sep 25 08:06:53 2007
@@ -0,0 +1,25 @@
+package org.apache.felix.ipojo.test.scenarios.composite.infrastructure;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.osgi.framework.BundleContext;
+
+import fr.imag.adele.escoffier.utf.framework.TestSuite;
+
+public class InfrastructureTestSuite extends TestSuite {
+
+	public InfrastructureTestSuite(BundleContext arg0) {
+		super(arg0);
+	}
+
+	public List suite() {
+		List l = new ArrayList();
+		l.add(new ServiceRegistryTest(context));
+		l.add(new EmptyCompositeTest(context));
+		l.add(new FactoryManagementTest(context));
+		l.add(new ServiceRangeTest(context));
+		return l;
+	}
+
+}

Added: felix/sandbox/clement/Tests/Suite/src/main/java/org/apache/felix/ipojo/test/scenarios/composite/infrastructure/ServiceRangeTest.java
URL: http://svn.apache.org/viewvc/felix/sandbox/clement/Tests/Suite/src/main/java/org/apache/felix/ipojo/test/scenarios/composite/infrastructure/ServiceRangeTest.java?rev=579291&view=auto
==============================================================================
--- felix/sandbox/clement/Tests/Suite/src/main/java/org/apache/felix/ipojo/test/scenarios/composite/infrastructure/ServiceRangeTest.java (added)
+++ felix/sandbox/clement/Tests/Suite/src/main/java/org/apache/felix/ipojo/test/scenarios/composite/infrastructure/ServiceRangeTest.java Tue Sep 25 08:06:53 2007
@@ -0,0 +1,469 @@
+package org.apache.felix.ipojo.test.scenarios.composite.infrastructure;
+
+import java.util.Properties;
+
+import org.apache.felix.ipojo.ComponentInstance;
+import org.apache.felix.ipojo.Factory;
+import org.apache.felix.ipojo.ServiceContext;
+import org.apache.felix.ipojo.test.scenarios.service.CheckService;
+import org.apache.felix.ipojo.test.scenarios.service.FooService;
+import org.apache.felix.ipojo.test.scenarios.util.Utils;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.framework.ServiceReference;
+
+import fr.imag.adele.escoffier.utf.framework.TestCase;
+
+public class ServiceRangeTest extends TestCase {
+	
+	private Factory emptyFactory;
+	private ComponentInstance empty;
+
+	public ServiceRangeTest(BundleContext arg0) {
+		super(arg0);
+	}
+	
+	public void setUp() {
+		emptyFactory = Utils.getFactoryByName(context, "composite.empty");
+		Properties props = new Properties();
+		props.put("name", "empty-1");
+		try {
+			empty = emptyFactory.createComponentInstance(props);
+		} catch(Exception e) { fail("Cannot create empty instance " + e.getMessage()); }
+	}
+	
+	public void tearDown() {
+		empty.dispose();
+		empty = null;
+	}
+	
+	public void testLevelOne1() {
+		ServiceContext sc2 = Utils.getServiceContext(empty);
+		
+		Factory fact1 = Utils.getFactoryByName(sc2, "SimpleCheckServiceProvider");
+		Properties props = new Properties();
+		props.put("name", "client");
+		ComponentInstance client = null;
+		try {
+			client = fact1.createComponentInstance(props);
+		} catch(Exception e) { fail("Cannot instantiate the client : " + e.getMessage()); }
+		
+		Factory fact2 = Utils.getFactoryByName(sc2, "FooProviderType-1");
+		Properties props2 = new Properties();
+		props2.put("name", "provider");
+		ComponentInstance provider = null;
+		try {
+			provider = fact2.createComponentInstance(props2);
+		} catch(Exception e) {
+			fail("Cannot instantiate the provider : " + e.getMessage());
+		}
+		
+		ServiceReference ref = sc2.getServiceReference(CheckService.class.getName());
+		CheckService check = (CheckService) sc2.getService(ref);
+		
+		assertTrue("Check invocation", check.check());
+		
+		sc2.ungetService(ref);
+		
+		// Check visibility 
+		assertNotNull("Check foo service visible inside the composite", sc2.getServiceReference(FooService.class.getName()));
+		assertNotNull("Check check service visible inside the composite", sc2.getServiceReference(CheckService.class.getName()));
+		// Check invisibilty
+		assertNull("Check foo service invisible inside the context", context.getServiceReference(FooService.class.getName()));
+		try {
+			assertNull("Check check service invisible inside the context", context.getServiceReferences(CheckService.class.getName(), "(instance.name=client)"));
+		} catch (InvalidSyntaxException e) {
+			fail("Invalid filter : " + e);
+		}
+		
+		provider.dispose();
+		client.dispose();
+		 
+		assertNull("Check foo service invisible inside the composite", sc2.getServiceReference(FooService.class.getName()));
+		assertNull("Check check service invisible inside the composite", sc2.getServiceReference(CheckService.class.getName()));
+		assertNull("Check foo service invisible from the context", context.getServiceReference(FooService.class.getName()));
+		try {
+			assertNull("Check check service invisible inside the context", context.getServiceReferences(CheckService.class.getName(), "(instance.name=client)"));
+		} catch (InvalidSyntaxException e) {
+			fail("Invalid filter : " + e);
+		}
+	}
+	
+	public void testLevelOne2() {
+		ServiceContext sc2 = Utils.getServiceContext(empty);
+		
+		Factory fact1 = Utils.getFactoryByName(sc2, "SimpleCheckServiceProvider");
+		Properties props = new Properties();
+		props.put("name", "client");
+		ComponentInstance client = null;
+		try {
+			client = fact1.createComponentInstance(props, sc2);
+		} catch(Exception e) { fail("Cannot instantiate the client : " + e.getMessage()); }
+		
+		Factory fact2 = Utils.getFactoryByName(sc2, "FooProviderType-1");
+		Properties props2 = new Properties();
+		props2.put("name", "provider");
+		ComponentInstance provider = null;
+		try {
+			provider = fact2.createComponentInstance(props2, sc2);
+		} catch(Exception e) {
+			fail("Cannot instantiate the provider : " + e.getMessage());
+		}
+		
+		ServiceReference ref = sc2.getServiceReference(CheckService.class.getName());
+		CheckService check = (CheckService) sc2.getService(ref);
+		
+		assertTrue("Check invocation", check.check());
+		
+		sc2.ungetService(ref);
+		
+		// Check visibility 
+		assertNotNull("Check foo service visible inside the composite", sc2.getServiceReference(FooService.class.getName()));
+		assertNotNull("Check check service visible inside the composite", sc2.getServiceReference(CheckService.class.getName()));
+		// Check invisibilty
+		assertNull("Check foo service invisible inside the context", context.getServiceReference(FooService.class.getName()));
+		try {
+			assertNull("Check check service invisible inside the context", context.getServiceReferences(CheckService.class.getName(), "(instance.name=client)"));
+		} catch (InvalidSyntaxException e) {
+			fail("Invalid filter : " + e);
+		}
+		
+		client.dispose();
+		provider.dispose();
+		 
+		assertNull("Check foo service visible inside the composite 2", sc2.getServiceReference(FooService.class.getName()));
+		assertNull("Check check service visible inside the composite 2", sc2.getServiceReference(CheckService.class.getName()));
+		assertNull("Check foo service invisible inside the global", context.getServiceReference(FooService.class.getName()));
+		try {
+			assertNull("Check check service invisible inside the context", context.getServiceReferences(CheckService.class.getName(), "(instance.name=client)"));
+		} catch (InvalidSyntaxException e) {
+			fail("Invalid filter : " + e);
+		}
+	}
+	
+	public void testLevelOne3() {
+		ServiceContext sc2 = Utils.getServiceContext(empty);
+		
+		Factory fact1 = Utils.getFactoryByName(context, "SimpleCheckServiceProvider");
+		Properties props = new Properties();
+		props.put("name", "client");
+		ComponentInstance client = null;
+		try {
+			client = fact1.createComponentInstance(props, sc2);
+		} catch(Exception e) { fail("Cannot instantiate the client : " + e.getMessage()); }
+		
+		Factory fact2 = Utils.getFactoryByName(context, "FooProviderType-1");
+		Properties props2 = new Properties();
+		props2.put("name", "provider");
+		ComponentInstance provider = null;
+		try {
+			provider = fact2.createComponentInstance(props2, sc2);
+		} catch(Exception e) {
+			fail("Cannot instantiate the provider : " + e.getMessage());
+		}
+		
+		ServiceReference ref = sc2.getServiceReference(CheckService.class.getName());
+		CheckService check = (CheckService) sc2.getService(ref);
+		
+		assertTrue("Check invocation", check.check());
+		
+		sc2.ungetService(ref);
+		
+		// Check visibility 
+		assertNotNull("Check foo service visible inside the composite", sc2.getServiceReference(FooService.class.getName()));
+		assertNotNull("Check check service visible inside the composite", sc2.getServiceReference(CheckService.class.getName()));
+		// Check invisibilty
+		assertNull("Check foo service invisible inside the context", context.getServiceReference(FooService.class.getName()));
+		try {
+			assertNull("Check check service invisible inside the context", context.getServiceReferences(CheckService.class.getName(), "(instance.name=client)"));
+		} catch (InvalidSyntaxException e) {
+			fail("Invalid filter : " + e);
+		}
+		
+		client.dispose();
+		provider.dispose();
+		 
+		assertNull("Check foo service visible inside the composite 2", sc2.getServiceReference(FooService.class.getName()));
+		assertNull("Check check service visible inside the composite 2", sc2.getServiceReference(CheckService.class.getName()));
+		assertNull("Check foo service invisible inside the global", context.getServiceReference(FooService.class.getName()));
+		try {
+			assertNull("Check check service invisible inside the context", context.getServiceReferences(CheckService.class.getName(), "(instance.name=client)"));
+		} catch (InvalidSyntaxException e) {
+			fail("Invalid filter : " + e);
+		}
+	}
+	
+	public void testLevelTwo1() {
+		ServiceContext sc1 = Utils.getServiceContext(empty);		
+		Factory fact = Utils.getFactoryByName(sc1, "composite.empty");
+		Properties p = new Properties();
+		p.put("name", "empty2");
+		ComponentInstance empty2 = null;
+		try {
+			empty2 = fact.createComponentInstance(p);
+		} catch(Exception e) {
+			fail("Cannot instantiate empty2 instance : " + e.getMessage());
+		}
+		
+		ServiceContext sc2 = Utils.getServiceContext(empty2);
+		
+		Factory fact1 = Utils.getFactoryByName(sc2, "SimpleCheckServiceProvider");
+		Properties props = new Properties();
+		props.put("name", "client");
+		ComponentInstance client = null;
+		try {
+			client = fact1.createComponentInstance(props);
+		} catch(Exception e) { fail("Cannot instantiate the client : " + e.getMessage()); }
+		
+		Factory fact2 = Utils.getFactoryByName(sc2, "FooProviderType-1");
+		Properties props2 = new Properties();
+		props2.put("name", "provider");
+		ComponentInstance provider = null;
+		try {
+			provider = fact2.createComponentInstance(props2);
+		} catch(Exception e) {
+			fail("Cannot instantiate the provider : " + e.getMessage());
+		}
+		
+		ServiceReference ref = sc2.getServiceReference(CheckService.class.getName());
+		CheckService check = (CheckService) sc2.getService(ref);
+		
+		assertTrue("Check invocation", check.check());
+		
+		sc2.ungetService(ref);
+		
+		//	Check visibility 
+		assertNotNull("Check foo service visible inside the composite 2", sc2.getServiceReference(FooService.class.getName()));
+		assertNotNull("Check check service visible inside the composite 2", sc2.getServiceReference(CheckService.class.getName()));
+		// Check invisibilty
+		assertNull("Check foo service invisible inside the composite 1", sc1.getServiceReference(FooService.class.getName()));
+		assertNull("Check check service invisible inside the composite 1", sc1.getServiceReference(CheckService.class.getName()));
+		assertNull("Check foo service invisible inside the global", context.getServiceReference(FooService.class.getName()));
+		try {
+			assertNull("Check check service invisible inside the context", context.getServiceReferences(CheckService.class.getName(), "(instance.name=client)"));
+		} catch (InvalidSyntaxException e) {
+			fail("Invalid filter : " + e);
+		}
+		
+		client.dispose();
+		provider.dispose();
+		 
+		assertNull("Check foo service visible inside the composite 2", sc2.getServiceReference(FooService.class.getName()));
+		assertNull("Check check service visible inside the composite 2", sc2.getServiceReference(CheckService.class.getName()));
+		assertNull("Check foo service invisible inside the composite 1", sc1.getServiceReference(FooService.class.getName()));
+		assertNull("Check check service invisible inside the composite 1", sc1.getServiceReference(CheckService.class.getName()));
+		assertNull("Check foo service invisible inside the global", context.getServiceReference(FooService.class.getName()));
+		try {
+			assertNull("Check check service invisible inside the context", context.getServiceReferences(CheckService.class.getName(), "(instance.name=client)"));
+		} catch (InvalidSyntaxException e) {
+			fail("Invalid filter : " + e);
+		}
+		empty2.dispose();
+	}
+	
+	public void testLevelTwo2() {
+		ServiceContext sc1 = Utils.getServiceContext(empty);		
+		Factory fact = Utils.getFactoryByName(sc1, "composite.empty");
+		Properties p = new Properties();
+		p.put("name", "empty2");
+		ComponentInstance empty2 = null;
+		try {
+			empty2 = fact.createComponentInstance(p);
+		} catch(Exception e) {
+			fail("Cannot instantiate empty2 instance : " + e.getMessage());
+		}
+		
+		ServiceContext sc2 = Utils.getServiceContext(empty2);
+		
+		Factory fact1 = Utils.getFactoryByName(sc1, "SimpleCheckServiceProvider");
+		Properties props = new Properties();
+		props.put("name", "client");
+		ComponentInstance client = null;
+		try {
+			client = fact1.createComponentInstance(props, sc2);
+		} catch(Exception e) { fail("Cannot instantiate the client : " + e.getMessage()); }
+		
+		Factory fact2 = Utils.getFactoryByName(sc1, "FooProviderType-1");
+		Properties props2 = new Properties();
+		props2.put("name", "provider");
+		ComponentInstance provider = null;
+		try {
+			provider = fact2.createComponentInstance(props2, sc2);
+		} catch(Exception e) {
+			fail("Cannot instantiate the provider : " + e.getMessage());
+		}
+		
+		ServiceReference ref = sc2.getServiceReference(CheckService.class.getName());
+		CheckService check = (CheckService) sc2.getService(ref);
+		
+		assertTrue("Check invocation", check.check());
+		
+		sc2.ungetService(ref);
+		
+		//	Check visibility 
+		assertNotNull("Check foo service visible inside the composite 2", sc2.getServiceReference(FooService.class.getName()));
+		assertNotNull("Check check service visible inside the composite 2", sc2.getServiceReference(CheckService.class.getName()));
+		// Check invisibilty
+		assertNull("Check foo service invisible inside the composite 1", sc1.getServiceReference(FooService.class.getName()));
+		assertNull("Check check service invisible inside the composite 1", sc1.getServiceReference(CheckService.class.getName()));
+		assertNull("Check foo service invisible inside the global", context.getServiceReference(FooService.class.getName()));
+		try {
+			assertNull("Check check service invisible inside the context", context.getServiceReferences(CheckService.class.getName(), "(instance.name=client)"));
+		} catch (InvalidSyntaxException e) {
+			fail("Invalid filter : " + e);
+		}
+		
+		client.dispose();
+		provider.dispose();
+		 
+		assertNull("Check foo service visible inside the composite 2", sc2.getServiceReference(FooService.class.getName()));
+		assertNull("Check check service visible inside the composite 2", sc2.getServiceReference(CheckService.class.getName()));
+		assertNull("Check foo service invisible inside the composite 1", sc1.getServiceReference(FooService.class.getName()));
+		assertNull("Check check service invisible inside the composite 1", sc1.getServiceReference(CheckService.class.getName()));
+		assertNull("Check foo service invisible inside the global", context.getServiceReference(FooService.class.getName()));
+		try {
+			assertNull("Check check service invisible inside the context", context.getServiceReferences(CheckService.class.getName(), "(instance.name=client)"));
+		} catch (InvalidSyntaxException e) {
+			fail("Invalid filter : " + e);
+		}
+		empty2.dispose();
+	}
+	
+	public void testLevelTwo3() {
+		ServiceContext sc1 = Utils.getServiceContext(empty);		
+		Factory fact = Utils.getFactoryByName(sc1, "composite.empty");
+		Properties p = new Properties();
+		p.put("name", "empty2");
+		ComponentInstance empty2 = null;
+		try {
+			empty2 = fact.createComponentInstance(p);
+		} catch(Exception e) {
+			fail("Cannot instantiate empty2 instance : " + e.getMessage());
+		}
+		
+		ServiceContext sc2 = Utils.getServiceContext(empty2);
+		
+		Factory fact1 = Utils.getFactoryByName(context, "SimpleCheckServiceProvider");
+		Properties props = new Properties();
+		props.put("name", "client");
+		ComponentInstance client = null;
+		try {
+			client = fact1.createComponentInstance(props, sc2);
+		} catch(Exception e) { fail("Cannot instantiate the client : " + e.getMessage()); }
+		
+		Factory fact2 = Utils.getFactoryByName(context, "FooProviderType-1");
+		Properties props2 = new Properties();
+		props2.put("name", "provider");
+		ComponentInstance provider = null;
+		try {
+			provider = fact2.createComponentInstance(props2, sc2);
+		} catch(Exception e) {
+			fail("Cannot instantiate the provider : " + e.getMessage());
+		}
+		
+		ServiceReference ref = sc2.getServiceReference(CheckService.class.getName());
+		CheckService check = (CheckService) sc2.getService(ref);
+		
+		assertTrue("Check invocation", check.check());
+		
+		sc2.ungetService(ref);
+		
+		//	Check visibility 
+		assertNotNull("Check foo service visible inside the composite 2", sc2.getServiceReference(FooService.class.getName()));
+		assertNotNull("Check check service visible inside the composite 2", sc2.getServiceReference(CheckService.class.getName()));
+		// Check invisibilty
+		assertNull("Check foo service invisible inside the composite 1", sc1.getServiceReference(FooService.class.getName()));
+		assertNull("Check check service invisible inside the composite 1", sc1.getServiceReference(CheckService.class.getName()));
+		assertNull("Check foo service invisible inside the global", context.getServiceReference(FooService.class.getName()));
+		try {
+			assertNull("Check check service invisible inside the context", context.getServiceReferences(CheckService.class.getName(), "(instance.name=client)"));
+		} catch (InvalidSyntaxException e) {
+			fail("Invalid filter : " + e);
+		}
+		
+		client.dispose();
+		provider.dispose();
+		 
+		assertNull("Check foo service visible inside the composite 2", sc2.getServiceReference(FooService.class.getName()));
+		assertNull("Check check service visible inside the composite 2", sc2.getServiceReference(CheckService.class.getName()));
+		assertNull("Check foo service invisible inside the composite 1", sc1.getServiceReference(FooService.class.getName()));
+		assertNull("Check check service invisible inside the composite 1", sc1.getServiceReference(CheckService.class.getName()));
+		assertNull("Check foo service invisible inside the global", context.getServiceReference(FooService.class.getName()));
+		try {
+			assertNull("Check check service invisible inside the context", context.getServiceReferences(CheckService.class.getName(), "(instance.name=client)"));
+		} catch (InvalidSyntaxException e) {
+			fail("Invalid filter : " + e);
+		}
+		empty2.dispose();
+	}
+	
+	public void testLevelTwo4() {
+		ServiceContext sc1 = Utils.getServiceContext(empty);		
+		Factory fact = Utils.getFactoryByName(sc1, "composite.empty");
+		Properties p = new Properties();
+		p.put("name", "empty2");
+		ComponentInstance empty2 = null;
+		try {
+			empty2 = fact.createComponentInstance(p);
+		} catch(Exception e) {
+			fail("Cannot instantiate empty2 instance : " + e.getMessage());
+		}
+		
+		ServiceContext sc2 = Utils.getServiceContext(empty2);
+		
+		Factory fact1 = Utils.getFactoryByName(sc2, "SimpleCheckServiceProvider");
+		Properties props = new Properties();
+		props.put("name", "client");
+		ComponentInstance client = null;
+		try {
+			client = fact1.createComponentInstance(props, sc2);
+		} catch(Exception e) { fail("Cannot instantiate the client : " + e.getMessage()); }
+		
+		Factory fact2 = Utils.getFactoryByName(sc2, "FooProviderType-1");
+		Properties props2 = new Properties();
+		props2.put("name", "provider");
+		ComponentInstance provider = null;
+		try {
+			provider = fact2.createComponentInstance(props2, sc2);
+		} catch(Exception e) {
+			fail("Cannot instantiate the provider : " + e.getMessage());
+		}
+		
+		ServiceReference ref = sc2.getServiceReference(CheckService.class.getName());
+		CheckService check = (CheckService) sc2.getService(ref);
+		
+		assertTrue("Check invocation", check.check());
+		
+		sc2.ungetService(ref);
+		
+		//	Check visibility 
+		assertNotNull("Check foo service visible inside the composite 2", sc2.getServiceReference(FooService.class.getName()));
+		assertNotNull("Check check service visible inside the composite 2", sc2.getServiceReference(CheckService.class.getName()));
+		// Check invisibilty
+		assertNull("Check foo service invisible inside the composite 1", sc1.getServiceReference(FooService.class.getName()));
+		assertNull("Check check service invisible inside the composite 1", sc1.getServiceReference(CheckService.class.getName()));
+		assertNull("Check foo service invisible inside the global", context.getServiceReference(FooService.class.getName()));
+		try {
+			assertNull("Check check service invisible inside the context", context.getServiceReferences(CheckService.class.getName(), "(instance.name=client)"));
+		} catch (InvalidSyntaxException e) {
+			fail("Invalid filter : " + e);
+		}
+		
+		client.dispose();
+		provider.dispose();
+		 
+		assertNull("Check foo service visible inside the composite 2", sc2.getServiceReference(FooService.class.getName()));
+		assertNull("Check check service visible inside the composite 2", sc2.getServiceReference(CheckService.class.getName()));
+		assertNull("Check foo service invisible inside the composite 1", sc1.getServiceReference(FooService.class.getName()));
+		assertNull("Check check service invisible inside the composite 1", sc1.getServiceReference(CheckService.class.getName()));
+		assertNull("Check foo service invisible inside the global", context.getServiceReference(FooService.class.getName()));
+		try {
+			assertNull("Check check service invisible inside the context", context.getServiceReferences(CheckService.class.getName(), "(instance.name=client)"));
+		} catch (InvalidSyntaxException e) {
+			fail("Invalid filter : " + e);
+		}
+		empty2.dispose();
+	}
+	
+	
+}

Added: felix/sandbox/clement/Tests/Suite/src/main/java/org/apache/felix/ipojo/test/scenarios/composite/infrastructure/ServiceRegistryTest.java
URL: http://svn.apache.org/viewvc/felix/sandbox/clement/Tests/Suite/src/main/java/org/apache/felix/ipojo/test/scenarios/composite/infrastructure/ServiceRegistryTest.java?rev=579291&view=auto
==============================================================================
--- felix/sandbox/clement/Tests/Suite/src/main/java/org/apache/felix/ipojo/test/scenarios/composite/infrastructure/ServiceRegistryTest.java (added)
+++ felix/sandbox/clement/Tests/Suite/src/main/java/org/apache/felix/ipojo/test/scenarios/composite/infrastructure/ServiceRegistryTest.java Tue Sep 25 08:06:53 2007
@@ -0,0 +1,241 @@
+package org.apache.felix.ipojo.test.scenarios.composite.infrastructure;
+
+import java.util.Dictionary;
+import java.util.Properties;
+
+import org.apache.felix.ipojo.ComponentFactory;
+import org.apache.felix.ipojo.ComponentInstance;
+import org.apache.felix.ipojo.InstanceStateListener;
+import org.apache.felix.ipojo.architecture.ComponentDescription;
+import org.apache.felix.ipojo.architecture.InstanceDescription;
+import org.apache.felix.ipojo.composite.ServiceRegistry;
+import org.apache.felix.ipojo.test.scenarios.service.BarService;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.framework.ServiceEvent;
+import org.osgi.framework.ServiceListener;
+import org.osgi.framework.ServiceReference;
+import org.osgi.framework.ServiceRegistration;
+
+import fr.imag.adele.escoffier.utf.framework.AssertionFailed;
+import fr.imag.adele.escoffier.utf.framework.TestCase;
+
+public class ServiceRegistryTest extends TestCase {
+
+	public ServiceRegistryTest(BundleContext arg0) {
+		super(arg0);
+	}
+	
+	private class svcListener implements ServiceListener {
+		public int registration = 0;
+		public int unregistration = 0;
+		public int modification = 0;
+		public void serviceChanged(ServiceEvent ev) {
+			if(ev.getType() == ServiceEvent.REGISTERED) { registration++; }
+			if(ev.getType() == ServiceEvent.UNREGISTERING) { unregistration++; }
+			if(ev.getType() == ServiceEvent.MODIFIED) { modification++; }
+		}
+	}
+	
+	private class barProvider implements BarService {
+
+		public boolean bar() { return true; }
+
+		public Properties getProps() { return null; }
+
+	}
+	
+	private class FakeComponent implements ComponentInstance {
+
+		public ComponentDescription getComponentDescription() {
+			return null;
+		}
+
+		public BundleContext getContext() {
+			return null;
+		}
+
+		public ComponentFactory getFactory() {
+			return null;
+		}
+
+		public InstanceDescription getInstanceDescription() {
+			return null;
+		}
+
+		public String getInstanceName() {
+			return null;
+		}
+
+		public int getState() {
+			return 0;
+		}
+
+		public boolean isStarted() {
+			return false;
+		}
+
+		public void reconfigure(Dictionary dictionary) { }
+
+		public void start() { }
+
+		public void stop() { }
+		
+		public void dispose() { }
+
+		public void addInstanceStateListener(InstanceStateListener arg0) { }
+
+		public void removeInstanceStateListener(InstanceStateListener arg0) { }
+		
+	}
+	
+	public void testRegistrationAndListener() {
+		ComponentInstance im = new FakeComponent();
+		ComponentInstance im2 = new FakeComponent();
+		ServiceRegistry registry = new ServiceRegistry(context);
+		assertNotNull("Assert registry not null", registry);
+		svcListener all = new svcListener();
+		try {
+			assertNull("Check that there is no available service", registry.getServiceReferences(null, null));
+		} catch (AssertionFailed e) { fail("Cannot query the registry : " + e.getMessage()); } 
+		  catch (InvalidSyntaxException e) { fail("Cannot query the registry : " + e.getMessage()); }
+		registry.addServiceListener(all);
+		
+		ServiceRegistration reg1 = registry.registerService(im, BarService.class.getName(), new barProvider(), null);
+		
+		try {
+			assertEquals("Check number of registred service", 1, registry.getServiceReferences(null, null).length);
+		} catch (AssertionFailed e) { fail("Cannot query the registry : " + e.getMessage()); } 
+		  catch (InvalidSyntaxException e) { fail("Cannot query the registry : " + e.getMessage()); 
+		 }
+	
+	    ServiceRegistration reg2 = registry.registerService(im2, BarService.class.getName(), new barProvider(), null);
+			
+	   try {
+			assertEquals("Check number of registred service", 2, registry.getServiceReferences(null, null).length);
+		} catch (AssertionFailed e) { fail("Cannot query the registry : " + e.getMessage()); } 
+		  catch (InvalidSyntaxException e) { fail("Cannot query the registry : " + e.getMessage()); }
+	    
+		assertEquals("Check the number of registration", 2, all.registration);
+		
+		Properties props = new Properties();
+		props.put("foo", "bar");
+		reg1.setProperties(props);
+		assertEquals("Check the number of modification", 1, all.modification);
+		
+		reg1.unregister();
+		assertEquals("Check the number of unregistration", 1, all.unregistration);
+		
+		reg2.setProperties(props);
+		assertEquals("Check the number of modification", 2, all.modification);
+		
+		reg2.unregister();
+		assertEquals("Check the number of unregistration", 2, all.unregistration);
+		
+		registry.removeServiceListener(all);
+	}
+	
+	public void testRegistrationAndFilter() {
+		ComponentInstance im = new FakeComponent();
+		ComponentInstance im2 = new FakeComponent();
+		ServiceRegistry registry = new ServiceRegistry(context);
+		svcListener filtered = new svcListener();
+		
+		try {
+			assertNull("Check that there is no available service", registry.getServiceReferences(null, null));
+		} catch (AssertionFailed e) { fail("Cannot query the registry : " + e.getMessage()); } 
+		  catch (InvalidSyntaxException e) { fail("Cannot query the registry : " + e.getMessage()); }
+		  
+		registry.addServiceListener(filtered, "(foo=bar)");
+		
+		Properties props = new Properties();
+		props.put("foo", "bar");
+		ServiceRegistration reg1 = registry.registerService(im, BarService.class.getName(), new barProvider(), props);
+		
+		try {
+			assertEquals("Check number of registred service", 1, registry.getServiceReferences(null, null).length);
+		} catch (AssertionFailed e) { fail("Cannot query the registry : " + e.getMessage()); } 
+		  catch (InvalidSyntaxException e) { fail("Cannot query the registry : " + e.getMessage()); }
+		  
+	  ServiceRegistration reg2 = registry.registerService(im2, BarService.class.getName(), new barProvider(), null);
+			
+	   try {
+			assertEquals("Check number of registred service", 2, registry.getServiceReferences(null, null).length);
+		} catch (AssertionFailed e) { fail("Cannot query the registry : " + e.getMessage()); } 
+		  catch (InvalidSyntaxException e) { fail("Cannot query the registry : " + e.getMessage()); }
+			  
+		assertEquals("Check the number of registration", 1, filtered.registration);
+		
+		reg2.setProperties(props);
+		assertEquals("Check the number of modification", 1, filtered.modification);
+		// Follow the OSGi semantics of filters
+		
+		reg1.unregister();
+		reg2.unregister();
+		assertEquals("Check the number of unregistration", 2, filtered.unregistration);
+		registry.removeServiceListener(filtered);
+	}
+	
+	public void testGetService() {
+		ComponentInstance im = new FakeComponent();
+		ComponentInstance im2 = new FakeComponent();
+		ServiceRegistry registry = new ServiceRegistry(context);
+		
+		try {
+			assertNull("Check that there is no available service", registry.getServiceReferences(null, null));
+		} catch (AssertionFailed e) { fail("Cannot query the registry : " + e.getMessage()); } 
+		  catch (InvalidSyntaxException e) { fail("Cannot query the registry : " + e.getMessage()); }
+		
+		Properties props = new Properties();
+		props.put("foo", "bar");
+		ServiceRegistration reg1 = registry.registerService(im, BarService.class.getName(), new barProvider(), props);
+		
+		ServiceReference ref = registry.getServiceReference(BarService.class.getName());
+		assertNotNull("Check ref not null", ref);
+		assertEquals("Test property", ref.getProperty("foo"), "bar");
+		BarService bar = (BarService) registry.getService(im2, ref);
+		assertTrue("Test invocation", bar.bar());
+		
+		reg1.unregister();
+		ref = registry.getServiceReference(BarService.class.getName());
+		assertNull("Check ref null", ref);
+	}
+	
+	public void testGetFilteredService() {
+		ComponentInstance im = new FakeComponent();
+		ComponentInstance im2 = new FakeComponent();
+		ServiceRegistry registry = new ServiceRegistry(context);
+		
+		try {
+			assertNull("Check that there is no available service", registry.getServiceReferences(null, null));
+		} catch (AssertionFailed e) { fail("Cannot query the registry : " + e.getMessage()); } 
+		  catch (InvalidSyntaxException e) { fail("Cannot query the registry : " + e.getMessage()); }
+		
+		Properties props = new Properties();
+		props.put("foo", "bar");
+		ServiceRegistration reg1 = registry.registerService(im, BarService.class.getName(), new barProvider(), props);
+		ServiceRegistration reg2 = registry.registerService(im2, BarService.class.getName(), new barProvider(), null);
+		
+		ServiceReference[] ref = null;
+		try {
+			ref = registry.getServiceReferences(BarService.class.getName(), "(foo=bar)");
+		} catch (InvalidSyntaxException e) { fail("Registry query fail : " + e.getMessage()); }
+		assertNotNull("Check ref not null", ref);
+		assertEquals("Check ref count", ref.length, 1);
+		assertEquals("Test property", ref[0].getProperty("foo"), "bar");
+		BarService bar = (BarService) registry.getService(im2, ref[0]);
+		assertTrue("Test invocation", bar.bar());
+		
+		ref = null;
+		reg1.unregister();
+		try {
+			ref = registry.getServiceReferences(BarService.class.getName(), "(bar=foo)");
+		} catch (InvalidSyntaxException e) { fail("Registry query fail : " + e.getMessage()); }
+		assertNull("Check ref null", ref);
+		
+		reg2.unregister();
+	}
+	
+	
+
+}

Added: felix/sandbox/clement/Tests/Suite/src/main/java/org/apache/felix/ipojo/test/scenarios/composite/instance/SimpleInstance.java
URL: http://svn.apache.org/viewvc/felix/sandbox/clement/Tests/Suite/src/main/java/org/apache/felix/ipojo/test/scenarios/composite/instance/SimpleInstance.java?rev=579291&view=auto
==============================================================================
--- felix/sandbox/clement/Tests/Suite/src/main/java/org/apache/felix/ipojo/test/scenarios/composite/instance/SimpleInstance.java (added)
+++ felix/sandbox/clement/Tests/Suite/src/main/java/org/apache/felix/ipojo/test/scenarios/composite/instance/SimpleInstance.java Tue Sep 25 08:06:53 2007
@@ -0,0 +1,250 @@
+package org.apache.felix.ipojo.test.scenarios.composite.instance;
+
+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.test.scenarios.service.FooService;
+import org.apache.felix.ipojo.test.scenarios.util.Utils;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
+
+public class SimpleInstance extends fr.imag.adele.escoffier.utf.framework.TestCase {
+
+	private ComponentFactory fooFactory1, fooFactory2;
+    private ComponentFactory compoFactory;
+	private ComponentInstance empty;
+	
+	public SimpleInstance(BundleContext arg0) {
+		super(arg0);
+	}
+	
+	public void setUp() {
+        fooFactory1 = (ComponentFactory) Utils.getFactoryByName(context, "FooProviderType-1");
+        fooFactory2 = (ComponentFactory) Utils.getFactoryByName(context, "FooProviderType-Dyn2");
+        compoFactory = (ComponentFactory) Utils.getFactoryByName(context, "composite.inst.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 = compoFactory.createComponentInstance(props);
+		} catch(Exception e) {
+			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 = compoFactory.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(FooService.class.getName()));
+        assertEquals("Check service provider", Utils.getServiceReferences(sc, FooService.class.getName(), null).length, 2);
+		
+		under.dispose();
+	}
+	
+	public void testCreationLevel2() {
+		ServiceContext sc = Utils.getServiceContext(empty);
+		Properties props = new Properties();
+		props.put("name", "under");
+		ComponentInstance under = null;
+		try {
+			under = compoFactory.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 = compoFactory.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(FooService.class.getName()));
+        assertEquals("Check service providers", Utils.getServiceReferences(sc2, FooService.class.getName(), null).length, 2);
+		
+		under.dispose();
+	}
+	
+	public void testFactoryManagement() {
+		Properties props = new Properties();
+		props.put("name", "under");
+		ComponentInstance under = null;
+		try {
+			under = compoFactory.createComponentInstance(props);
+		} catch(Exception e) {
+			fail("Cannot instantiate under : " + e.getMessage());
+		}
+		assertTrue("Check instance validity - 1", under.getState() == ComponentInstance.VALID);
+		
+		fooFactory1.stop();
+		assertTrue("Check instance invalidity - 2", under.getState() == ComponentInstance.INVALID);
+        
+        fooFactory1.start();
+		assertTrue("Check instance validity - 3", under.getState() == ComponentInstance.VALID);
+        
+		fooFactory2.stop();
+        assertTrue("Check instance invalidity", under.getState() == ComponentInstance.INVALID);
+		
+		fooFactory2.start();
+		assertTrue("Check instance validity - 4", under.getState() == ComponentInstance.VALID);
+		
+		under.dispose();
+		fooFactory1.start();
+		fooFactory2.start();
+	}
+	
+	public void testFactoryManagementLevel2() {
+		ServiceContext sc = Utils.getServiceContext(empty);
+		Properties props = new Properties();
+		props.put("name", "under");
+		ComponentInstance under = null;
+		try {
+			under = compoFactory.createComponentInstance(props, sc);
+		} catch(Exception e) {
+			fail("Cannot instantiate under : " + e.getMessage());
+		}
+		assertTrue("Check instance validity - 1", under.getState() == ComponentInstance.VALID);
+		
+		assertTrue("Check instance validity - 1", under.getState() == ComponentInstance.VALID);
+        
+        fooFactory1.stop();
+        assertTrue("Check instance invalidity - 2", under.getState() == ComponentInstance.INVALID);
+        
+        fooFactory1.start();
+        assertTrue("Check instance validity - 3", under.getState() == ComponentInstance.VALID);
+        
+        fooFactory2.stop();
+        assertTrue("Check instance invalidity", under.getState() == ComponentInstance.INVALID);
+        
+        fooFactory2.start();
+        assertTrue("Check instance validity - 4", under.getState() == ComponentInstance.VALID);
+        
+        under.dispose();
+        fooFactory1.start();
+        fooFactory2.start();
+	}
+	
+	public void atestArchitecture() { //TODO : to reactive
+		Properties props = new Properties();
+		props.put("name", "under");
+		ComponentInstance under = null;
+		try {
+			under = compoFactory.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 + ")", 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();
+	}
+
+}

Added: felix/sandbox/clement/Tests/Suite/src/main/java/org/apache/felix/ipojo/test/scenarios/composite/instantiator/ConfigurableInstantiation.java
URL: http://svn.apache.org/viewvc/felix/sandbox/clement/Tests/Suite/src/main/java/org/apache/felix/ipojo/test/scenarios/composite/instantiator/ConfigurableInstantiation.java?rev=579291&view=auto
==============================================================================
--- felix/sandbox/clement/Tests/Suite/src/main/java/org/apache/felix/ipojo/test/scenarios/composite/instantiator/ConfigurableInstantiation.java (added)
+++ felix/sandbox/clement/Tests/Suite/src/main/java/org/apache/felix/ipojo/test/scenarios/composite/instantiator/ConfigurableInstantiation.java Tue Sep 25 08:06:53 2007
@@ -0,0 +1,87 @@
+package org.apache.felix.ipojo.test.scenarios.composite.instantiator;
+
+import java.util.Properties;
+
+import org.apache.felix.ipojo.ComponentFactory;
+import org.apache.felix.ipojo.ComponentInstance;
+import org.apache.felix.ipojo.ServiceContext;
+import org.apache.felix.ipojo.test.scenarios.service.FooService;
+import org.apache.felix.ipojo.test.scenarios.util.Utils;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
+
+public class ConfigurableInstantiation extends fr.imag.adele.escoffier.utf.framework.TestCase {
+
+	private ComponentFactory acceptF;
+	private ComponentFactory refuse1F;
+	private ComponentFactory refuse2F;
+	
+	public ConfigurableInstantiation(BundleContext arg0) {
+		super(arg0);
+	}
+	
+	public void setUp() {
+		acceptF = (ComponentFactory) Utils.getFactoryByName(context, "composite.bar.5-accept");
+		refuse1F = (ComponentFactory) Utils.getFactoryByName(context, "composite.bar.5-refuse1");
+		refuse2F = (ComponentFactory) Utils.getFactoryByName(context, "composite.bar.5-refuse2");
+		
+	}
+	
+	public void tearDown() { }
+	
+	public void testAccept() {
+		Properties props = new Properties();
+		props.put("name", "under");
+		ComponentInstance under = null;
+		try {
+			under = acceptF.createComponentInstance(props);
+		} catch(Exception e) {
+			fail("Cannot instantiate under : " + e.getMessage());
+		}
+		assertTrue("Check instance validity", under.getState() == ComponentInstance.VALID);
+		ServiceContext sc = Utils.getServiceContext(under);
+		ServiceReference ref = sc.getServiceReference(FooService.class.getName());
+		assertNotNull("Check refs not null", ref);
+		FooService foo = (FooService) sc.getService(ref);
+		Properties p = foo.fooProps();
+		boolean b = ((Boolean) p.get("boolProp")).booleanValue();
+		String s = (String) p.get("strProp");
+		int i = ( (Integer) p.get("intProp")).intValue();
+		assertTrue("Test boolean", b);
+		assertEquals("Test string", s, "foo");
+		
+		assertEquals("Test int", i, 5); // The code fix to 5.
+		under.dispose();
+	}
+	
+	public void testRefuse1() {
+		Properties props = new Properties();
+		props.put("name", "under-ref1");
+		ComponentInstance under = null;
+		try {
+			under = refuse1F.createComponentInstance(props);
+		} catch(Exception e) {
+			fail("Cannot instantiate under : " + e.getMessage());
+		}
+		
+		assertTrue("Check that under is not valid", under.getState() == ComponentInstance.INVALID);
+        
+        under.dispose();
+	}
+	
+	public void testRefuse2() {
+		Properties props = new Properties();
+		props.put("name", "under-ref2");
+		ComponentInstance under = null;
+		try {
+			under = refuse2F.createComponentInstance(props);
+		} catch(Exception e) {
+			fail("Cannot instantiate under : " + e.getMessage());
+		}
+		
+		assertTrue("Check that under is not valid", under.getState() == ComponentInstance.INVALID);
+        
+        under.dispose();
+	}
+	
+}

Added: felix/sandbox/clement/Tests/Suite/src/main/java/org/apache/felix/ipojo/test/scenarios/composite/instantiator/InstantiatorTestSuite.java
URL: http://svn.apache.org/viewvc/felix/sandbox/clement/Tests/Suite/src/main/java/org/apache/felix/ipojo/test/scenarios/composite/instantiator/InstantiatorTestSuite.java?rev=579291&view=auto
==============================================================================
--- felix/sandbox/clement/Tests/Suite/src/main/java/org/apache/felix/ipojo/test/scenarios/composite/instantiator/InstantiatorTestSuite.java (added)
+++ felix/sandbox/clement/Tests/Suite/src/main/java/org/apache/felix/ipojo/test/scenarios/composite/instantiator/InstantiatorTestSuite.java Tue Sep 25 08:06:53 2007
@@ -0,0 +1,26 @@
+package org.apache.felix.ipojo.test.scenarios.composite.instantiator;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.osgi.framework.BundleContext;
+
+import fr.imag.adele.escoffier.utf.framework.TestSuite;
+
+public class InstantiatorTestSuite extends TestSuite {
+
+	public InstantiatorTestSuite(BundleContext arg0) {
+		super(arg0);
+	}
+
+	public List suite() {
+		List l = new ArrayList();
+		l.add(new SimpleInstantiation(context));
+		l.add(new OptionalInstantiation(context));
+		l.add(new MultipleInstantiation(context));
+		l.add(new OptionalMultipleInstantiation(context));
+		l.add(new ConfigurableInstantiation(context));
+		return l;
+	}
+
+}

Added: felix/sandbox/clement/Tests/Suite/src/main/java/org/apache/felix/ipojo/test/scenarios/composite/instantiator/MultipleInstantiation.java
URL: http://svn.apache.org/viewvc/felix/sandbox/clement/Tests/Suite/src/main/java/org/apache/felix/ipojo/test/scenarios/composite/instantiator/MultipleInstantiation.java?rev=579291&view=auto
==============================================================================
--- felix/sandbox/clement/Tests/Suite/src/main/java/org/apache/felix/ipojo/test/scenarios/composite/instantiator/MultipleInstantiation.java (added)
+++ felix/sandbox/clement/Tests/Suite/src/main/java/org/apache/felix/ipojo/test/scenarios/composite/instantiator/MultipleInstantiation.java Tue Sep 25 08:06:53 2007
@@ -0,0 +1,274 @@
+package org.apache.felix.ipojo.test.scenarios.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.test.scenarios.service.BarService;
+import org.apache.felix.ipojo.test.scenarios.util.Utils;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
+
+public class MultipleInstantiation extends fr.imag.adele.escoffier.utf.framework.TestCase {
+
+	private ComponentFactory bar2Factory;
+	private ComponentInstance empty;
+	
+	public MultipleInstantiation(BundleContext arg0) {
+		super(arg0);
+	}
+	
+	public void setUp() {
+		bar2Factory = (ComponentFactory) Utils.getFactoryByName(context, "composite.bar.2");
+		Factory fact = Utils.getFactoryByName(context, "composite.empty");
+		Properties props = new Properties();
+		props.put("name", "empty");
+		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 = bar2Factory.createComponentInstance(props);
+		} catch(Exception e) {
+			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 = bar2Factory.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()));
+		int count = Utils.getServiceReferences(sc, BarService.class.getName(), null).length;
+		assertEquals("Check service provider number : " + count, count, 3);
+		
+		under.dispose();
+	}
+	
+	public void testCreationLevel2() {
+		ServiceContext sc = Utils.getServiceContext(empty);
+		Properties props = new Properties();
+		props.put("name", "under");
+		ComponentInstance under = null;
+		try {
+			under = bar2Factory.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");
+		ComponentInstance under = null;
+		try {
+			under = bar2Factory.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()));
+		assertEquals("Check service provider number", Utils.getServiceReferences(sc2, BarService.class.getName(), null).length, 3);
+		
+		under.dispose();
+	}
+	
+	public void testFactoryManagement() {
+		Properties props = new Properties();
+		props.put("name", "under");
+		ComponentInstance under = null;
+		try {
+			under = bar2Factory.createComponentInstance(props);
+		} catch(Exception e) {
+			fail("Cannot instantiate under : " + e.getMessage());
+		}
+		ServiceContext sc = Utils.getServiceContext(under);
+		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);
+		assertEquals("Check service provider number", Utils.getServiceReferences(sc, BarService.class.getName(), null).length, 2);
+		
+		fact2.stop();
+		assertTrue("Check instance validity - 3", under.getState() == ComponentInstance.VALID);
+		assertEquals("Check service provider number", Utils.getServiceReferences(sc, BarService.class.getName(), null).length, 1);
+		
+		fact3.stop();
+		assertTrue("Check instance invalidity", under.getState() == ComponentInstance.INVALID);
+		assertEquals("Check service provider number", Utils.getServiceReferences(sc, BarService.class.getName(), null).length, 0);
+		
+		fact1.start();
+		assertEquals("Check service provider number", Utils.getServiceReferences(sc, BarService.class.getName(), null).length, 1);
+		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 = bar2Factory.createComponentInstance(props, sc);
+		} catch(Exception e) {
+			fail("Cannot instantiate under : " + e.getMessage());
+		}
+		assertTrue("Check instance validity - 1", under.getState() == ComponentInstance.VALID);
+		ServiceContext sc2 = Utils.getServiceContext(under);
+		
+		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);
+		assertEquals("Check service provider number", Utils.getServiceReferences(sc2, BarService.class.getName(), null).length, 2);
+		
+		fact2.stop();
+		assertTrue("Check instance validity - 3", under.getState() == ComponentInstance.VALID);
+		assertEquals("Check service provider number", Utils.getServiceReferences(sc2, BarService.class.getName(), null).length, 1);
+		
+		fact3.stop();
+		assertTrue("Check instance invalidity", under.getState() == ComponentInstance.INVALID);
+		assertEquals("Check service provider number", Utils.getServiceReferences(sc2, BarService.class.getName(), null).length, 0);
+		
+		fact1.start();
+		assertTrue("Check instance validity - 4", under.getState() == ComponentInstance.VALID);
+		assertEquals("Check service provider number", Utils.getServiceReferences(sc2, BarService.class.getName(), null).length, 1);
+		
+		under.dispose();
+		fact2.start();
+		fact3.start();
+	}
+	public void testArchitecture() {
+		Properties props = new Properties();
+		props.put("name", "under");
+		ComponentInstance under = null;
+		try {
+			under = bar2Factory.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, 3);
+		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.2");
+		
+		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, 2);
+		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.2");
+		
+		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.2");
+
+		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.2");
+
+		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.2");
+
+		context.ungetService(ref);
+		under.dispose();
+		fact2.start();
+		fact3.start();
+	}
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+
+}