now distinguishing between provided and required service and added
[utils] / system / general / src / test / java / org / wamblee / system / SystemAssemblerTest.java
index 1bd89ca5fb212765a7f5e78a016ed443c4f6a37f..2dba056e63197879c35e4e9e30a96c70b0516843 100644 (file)
@@ -1,33 +1,82 @@
 package org.wamblee.system;
 
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Arrays;
+
+import org.wamblee.test.AssertionUtils;
+
 import junit.framework.TestCase;
 
 public class SystemAssemblerTest extends TestCase {
-       
-       private ServiceRegistry _registry; 
-       
+
+       private ServiceRegistry _registry;
+
        @Override
        protected void setUp() throws Exception {
                super.setUp();
-               _registry = new DefaultServiceRegistry(); 
+               _registry = new DefaultServiceRegistry();
+       }
+
+       private static class MyMultiple implements Serializable, Runnable {
+               @Override
+               public void run() {
+                       // Empty
+               }
+       }
+
+       public void testFilterProvided() {
+               RequiredServiceDescriptor req1 = new DefaultRequiredServiceDescriptor(
+                               "name", Runnable.class);
+               RequiredServiceDescriptor req2 = new DefaultRequiredServiceDescriptor(
+                               "name", Serializable.class);
+               ProvidedServiceDescriptor prov1 = new DefaultProvidedServiceDescriptor(
+                               "name", Runnable.class);
+               ProvidedServiceDescriptor prov2 = new DefaultProvidedServiceDescriptor(
+                               "name", Serializable.class);
+               ProvidedServiceDescriptor prov3 = new DefaultProvidedServiceDescriptor(
+                               "name", MyMultiple.class);
+
+               AssertionUtils.assertEquals(new RequiredServiceDescriptor[] { req1 },
+                               SystemAssembler.filterRequiredServices(prov1, Arrays
+                                               .asList(new RequiredServiceDescriptor[] { req1 })));
+               AssertionUtils.assertEquals(new RequiredServiceDescriptor[] { req1 },
+                               SystemAssembler
+                                               .filterRequiredServices(prov1, Arrays
+                                                               .asList(new RequiredServiceDescriptor[] { req1,
+                                                                               req2 })));
+               AssertionUtils.assertEquals(new RequiredServiceDescriptor[] { req1,
+                               req2 }, SystemAssembler.filterRequiredServices(prov3, Arrays
+                               .asList(new RequiredServiceDescriptor[] { req1, req2 })));
+
+               AssertionUtils.assertEquals(new ProvidedServiceDescriptor[] { prov1 },
+                               SystemAssembler.filterProvidedServices(req1, Arrays
+                                               .asList(new ProvidedServiceDescriptor[] { prov1 })));
+               AssertionUtils.assertEquals(new ProvidedServiceDescriptor[] { prov1 },
+                               SystemAssembler.filterProvidedServices(req1,
+                                               Arrays.asList(new ProvidedServiceDescriptor[] { prov1,
+                                                               prov2 })));
+               AssertionUtils.assertEquals(new ProvidedServiceDescriptor[] { prov1,
+                               prov3 }, SystemAssembler.filterProvidedServices(req1, Arrays
+                               .asList(new ProvidedServiceDescriptor[] { prov1, prov3 })));
        }
 
        public void testEnvironmentApplication() {
                SubSystem environment = new Environment(_registry);
                SubSystem application = new Application(_registry);
                SystemAssembler assembler = new SystemAssembler(new SubSystem[] {
-                               environment, application }, new ServiceDescriptor[0]);
+                               environment, application }, new ProvidedServiceDescriptor[0]);
                assembler.start(_registry, new Service[0]);
                Service[] envServices = environment.getRunningServices();
                assertEquals(2, envServices.length);
                Service[] appServices = environment.getRunningServices();
                assertEquals(2, appServices.length);
                assertEquals(2, _registry.listAllServices().length);
-               
+
                environment.stop();
                assertEquals(0, _registry.listAllServices().length);
-               
-               application.stop(); 
+
+               application.stop();
                assertEquals(0, _registry.listAllServices().length);
        }
 
@@ -36,7 +85,8 @@ public class SystemAssemblerTest extends TestCase {
                        SubSystem environment = new Environment(_registry);
                        SubSystem application = new Application(_registry);
                        SystemAssembler assembler = new SystemAssembler(new SubSystem[] {
-                                       application, environment }, new ServiceDescriptor[0]);
+                                       application, environment },
+                                       new ProvidedServiceDescriptor[0]);
                        assembler.start(_registry, new Service[0]);
                } catch (SystemAssemblyException e) {
                        // e.printStackTrace();
@@ -48,9 +98,9 @@ public class SystemAssemblerTest extends TestCase {
        public void testComposite() {
                SubSystem environment = new Environment(_registry);
                SubSystem application = new Application(_registry);
-               CompositeSystem system = new CompositeSystem("all", _registry, new SubSystem[] {
-                               environment, application }, new ServiceDescriptor[0],
-                               new ServiceDescriptor[0]);
+               CompositeSystem system = new CompositeSystem("all", _registry,
+                               new SubSystem[] { environment, application },
+                               new ServiceDescriptor[0], new ServiceDescriptor[0]);
                system.start("root", new Service[0]);
                ServiceDescriptor[] required = system.getRequiredServices();
                assertEquals(0, required.length);
@@ -62,10 +112,13 @@ public class SystemAssemblerTest extends TestCase {
                try {
                        SubSystem environment = new Environment(_registry);
                        SubSystem application = new Application(_registry);
-                       CompositeSystem system = new CompositeSystem("all", _registry,
+                       CompositeSystem system = new CompositeSystem(
+                                       "all",
+                                       _registry,
                                        new SubSystem[] { environment, application },
-                                       new ServiceDescriptor[] { new DefaultServiceDescriptor(
-                                                       String.class) }, new ServiceDescriptor[0]);
+                                       new ServiceDescriptor[] { new DefaultProvidedServiceDescriptor(
+                                                       "string", String.class) },
+                                       new DefaultRequiredServiceDescriptor[0]);
                } catch (SystemAssemblyException e) {
                        return;
                }
@@ -75,10 +128,11 @@ public class SystemAssemblerTest extends TestCase {
        public void testCompositeWithSuperfluousRequiredInfo() {
                SubSystem environment = new Environment(_registry);
                SubSystem application = new Application(_registry);
-               CompositeSystem system = new CompositeSystem("all", _registry,new SubSystem[] {
-                               environment, application }, new ServiceDescriptor[0],
-                               new ServiceDescriptor[] { new DefaultServiceDescriptor(
-                                               String.class) });
+               CompositeSystem system = new CompositeSystem("all", _registry,
+                               new SubSystem[] { environment, application },
+                               new ServiceDescriptor[0],
+                               new ServiceDescriptor[] { new DefaultRequiredServiceDescriptor(
+                                               "string", String.class) });
                system.start("root", new Service[0]);
                ServiceDescriptor[] required = system.getRequiredServices();
                assertEquals(1, required.length);
@@ -117,4 +171,19 @@ public class SystemAssemblerTest extends TestCase {
 
        }
 
+       public void testAmbiguousInterfaces() {
+               try {
+                       SubSystem environment1 = new Environment(_registry);
+                       SubSystem environment2 = new Environment(_registry);
+                       SubSystem application = new Application(_registry);
+                       SystemAssembler assembler = new SystemAssembler(new SubSystem[] {
+                                       environment1, environment2, application },
+                                       new ProvidedServiceDescriptor[0]);
+                       assembler.start(_registry, new Service[0]);
+               } catch (SystemAssemblyException e) {
+                       return;
+               }
+               fail();
+       }
+
 }