ProvidedInterfaceDescriptor no longer extends InterfaceDescriptor.
[utils] / system / general / src / test / java / org / wamblee / system / SystemAssemblerTest.java
index 2dba056e63197879c35e4e9e30a96c70b0516843..810ff4c7d4cfcdeebd990866e60006e2c0ed1f27 100644 (file)
@@ -4,6 +4,7 @@ import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Arrays;
 
+import org.wamblee.system.Component.Status;
 import org.wamblee.test.AssertionUtils;
 
 import junit.framework.TestCase;
@@ -26,46 +27,47 @@ public class SystemAssemblerTest extends TestCase {
        }
 
        public void testFilterProvided() {
-               RequiredServiceDescriptor req1 = new DefaultRequiredServiceDescriptor(
+               RequiredInterfaceDescriptor req1 = new DefaultRequiredInterfaceDescriptor(
                                "name", Runnable.class);
-               RequiredServiceDescriptor req2 = new DefaultRequiredServiceDescriptor(
+               RequiredInterfaceDescriptor req2 = new DefaultRequiredInterfaceDescriptor(
                                "name", Serializable.class);
-               ProvidedServiceDescriptor prov1 = new DefaultProvidedServiceDescriptor(
+               ProvidedInterfaceDescriptor prov1 = new AbstractProvidedInterfaceDescriptor(
                                "name", Runnable.class);
-               ProvidedServiceDescriptor prov2 = new DefaultProvidedServiceDescriptor(
+               ProvidedInterfaceDescriptor prov2 = new AbstractProvidedInterfaceDescriptor(
                                "name", Serializable.class);
-               ProvidedServiceDescriptor prov3 = new DefaultProvidedServiceDescriptor(
+               ProvidedInterfaceDescriptor prov3 = new AbstractProvidedInterfaceDescriptor(
                                "name", MyMultiple.class);
 
-               AssertionUtils.assertEquals(new RequiredServiceDescriptor[] { req1 },
+               AssertionUtils.assertEquals(new RequiredInterfaceDescriptor[] { 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,
+                                               .asList(new RequiredInterfaceDescriptor[] { req1 })));
+               AssertionUtils.assertEquals(new RequiredInterfaceDescriptor[] { req1 },
+                               SystemAssembler.filterRequiredServices(prov1,
+                                               Arrays.asList(new RequiredInterfaceDescriptor[] { req1,
+                                                               req2 })));
+               AssertionUtils.assertEquals(new RequiredInterfaceDescriptor[] { req1,
                                req2 }, SystemAssembler.filterRequiredServices(prov3, Arrays
-                               .asList(new RequiredServiceDescriptor[] { req1, req2 })));
+                               .asList(new RequiredInterfaceDescriptor[] { req1, req2 })));
 
-               AssertionUtils.assertEquals(new ProvidedServiceDescriptor[] { prov1 },
+               AssertionUtils.assertEquals(
+                               new ProvidedInterfaceDescriptor[] { 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,
+                                               .asList(new ProvidedInterfaceDescriptor[] { prov1 })));
+               AssertionUtils.assertEquals(
+                               new ProvidedInterfaceDescriptor[] { prov1 }, SystemAssembler
+                                               .filterProvidedServices(req1, Arrays
+                                                               .asList(new ProvidedInterfaceDescriptor[] {
+                                                                               prov1, prov2 })));
+               AssertionUtils.assertEquals(new ProvidedInterfaceDescriptor[] { prov1,
                                prov3 }, SystemAssembler.filterProvidedServices(req1, Arrays
-                               .asList(new ProvidedServiceDescriptor[] { prov1, prov3 })));
+                               .asList(new ProvidedInterfaceDescriptor[] { prov1, prov3 })));
        }
 
        public void testEnvironmentApplication() {
-               SubSystem environment = new Environment(_registry);
-               SubSystem application = new Application(_registry);
-               SystemAssembler assembler = new SystemAssembler(new SubSystem[] {
-                               environment, application }, new ProvidedServiceDescriptor[0]);
+               Component environment = new Environment(_registry);
+               Component application = new Application(_registry);
+               SystemAssembler assembler = new SystemAssembler(new Component[] {
+                               environment, application }, new ProvidedInterfaceDescriptor[0]);
                assembler.start(_registry, new Service[0]);
                Service[] envServices = environment.getRunningServices();
                assertEquals(2, envServices.length);
@@ -82,11 +84,11 @@ public class SystemAssemblerTest extends TestCase {
 
        public void testApplicationEnvironment() {
                try {
-                       SubSystem environment = new Environment(_registry);
-                       SubSystem application = new Application(_registry);
-                       SystemAssembler assembler = new SystemAssembler(new SubSystem[] {
+                       Component environment = new Environment(_registry);
+                       Component application = new Application(_registry);
+                       SystemAssembler assembler = new SystemAssembler(new Component[] {
                                        application, environment },
-                                       new ProvidedServiceDescriptor[0]);
+                                       new ProvidedInterfaceDescriptor[0]);
                        assembler.start(_registry, new Service[0]);
                } catch (SystemAssemblyException e) {
                        // e.printStackTrace();
@@ -96,29 +98,40 @@ 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]);
+               Component environment = new Environment(_registry);
+               Component application = new Application(_registry);
+               assertEquals(Status.NOT_STARTED, environment.getStatus());
+               assertEquals(Status.NOT_STARTED, application.getStatus());
+               Container system = new Container("all", _registry, new Component[] {
+                               environment, application }, new ProvidedInterfaceDescriptor[0],
+                               new RequiredInterfaceDescriptor[0]);
+               assertEquals(Status.NOT_STARTED, system.getStatus());
                system.start("root", new Service[0]);
-               ServiceDescriptor[] required = system.getRequiredServices();
+               RequiredInterfaceDescriptor[] required = system.getRequiredServices();
                assertEquals(0, required.length);
-               ServiceDescriptor[] provided = system.getProvidedServices();
+               ProvidedInterfaceDescriptor[] provided = system.getProvidedServices();
                assertEquals(0, provided.length);
+               assertEquals(Status.RUNNING, environment.getStatus());
+               assertEquals(Status.RUNNING, application.getStatus());
+               assertEquals(Status.RUNNING, system.getStatus());
+
+               system.stop();
+               assertEquals(Status.STOPPED, environment.getStatus());
+               assertEquals(Status.STOPPED, application.getStatus());
+               assertEquals(Status.STOPPED, system.getStatus());
        }
 
        public void testCompositeWithWrongProvidedInfo() {
                try {
-                       SubSystem environment = new Environment(_registry);
-                       SubSystem application = new Application(_registry);
-                       CompositeSystem system = new CompositeSystem(
+                       Component environment = new Environment(_registry);
+                       Component application = new Application(_registry);
+                       Container system = new Container(
                                        "all",
                                        _registry,
-                                       new SubSystem[] { environment, application },
-                                       new ServiceDescriptor[] { new DefaultProvidedServiceDescriptor(
+                                       new Component[] { environment, application },
+                                       new ProvidedInterfaceDescriptor[] { new AbstractProvidedInterfaceDescriptor(
                                                        "string", String.class) },
-                                       new DefaultRequiredServiceDescriptor[0]);
+                                       new DefaultRequiredInterfaceDescriptor[0]);
                } catch (SystemAssemblyException e) {
                        return;
                }
@@ -126,27 +139,30 @@ 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 DefaultRequiredServiceDescriptor(
+               Component environment = new Environment(_registry);
+               Component application = new Application(_registry);
+               Container system = new Container(
+                               "all",
+                               _registry,
+                               new Component[] { environment, application },
+                               new ProvidedInterfaceDescriptor[0],
+                               new RequiredInterfaceDescriptor[] { new DefaultRequiredInterfaceDescriptor(
                                                "string", String.class) });
                system.start("root", new Service[0]);
-               ServiceDescriptor[] required = system.getRequiredServices();
+               RequiredInterfaceDescriptor[] required = system.getRequiredServices();
                assertEquals(1, required.length);
-               ServiceDescriptor[] provided = system.getProvidedServices();
+               ProvidedInterfaceDescriptor[] provided = system.getProvidedServices();
                assertEquals(0, provided.length);
        }
 
        public void testCompositeWithExternalDependencesNotProvided() {
                try {
-                       SubSystem environment = new Environment(_registry);
-                       SubSystem application = new Application(_registry);
-                       CompositeSystem system = new CompositeSystem("all", _registry,
-                                       new SubSystem[] { application }, new ServiceDescriptor[0],
-                                       application.getRequiredServices());
+                       Component environment = new Environment(_registry);
+                       Component application = new Application(_registry);
+                       Container system = new Container("all", _registry,
+                                       new Component[] { application },
+                                       new ProvidedInterfaceDescriptor[0], application
+                                                       .getRequiredServices());
                        system.start("root", new Service[0]);
                } catch (SystemAssemblyException e) {
                        return;
@@ -157,29 +173,45 @@ public class SystemAssemblerTest extends TestCase {
 
        public void testCompositeWithExternalDependencesProvided() {
 
-               SubSystem environment = new Environment(_registry);
-               SubSystem application = new Application(_registry);
-               CompositeSystem system = new CompositeSystem("all", _registry,
-                               new SubSystem[] { application }, new ServiceDescriptor[0],
-                               application.getRequiredServices());
+               Component environment = new Environment(_registry);
+               Component application = new Application(_registry);
+               Container system = new Container("all", _registry,
+                               new Component[] { application },
+                               new ProvidedInterfaceDescriptor[0], application
+                                               .getRequiredServices());
                Service[] envServices = environment.start("env", new Service[0]);
                system.start("root", envServices);
-               ServiceDescriptor[] required = system.getRequiredServices();
+               RequiredInterfaceDescriptor[] required = system.getRequiredServices();
                assertEquals(2, required.length);
-               ServiceDescriptor[] provided = system.getProvidedServices();
+               ProvidedInterfaceDescriptor[] provided = system.getProvidedServices();
                assertEquals(0, provided.length);
 
        }
 
        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[] {
+                       Component environment1 = new Environment(_registry);
+                       Component environment2 = new Environment(_registry);
+                       Component application = new Application(_registry);
+                       SystemAssembler assembler = new SystemAssembler(new Component[] {
                                        environment1, environment2, application },
-                                       new ProvidedServiceDescriptor[0]);
+                                       new ProvidedInterfaceDescriptor[0]);
                        assembler.start(_registry, new Service[0]);
+
+               } catch (SystemAssemblyException e) {
+                       return;
+               }
+               fail();
+       }
+
+       public void testIncompleteRequirements() {
+               try {
+                       Component application = new Application(_registry);
+                       Container system = new Container("all", _registry,
+                                       new Component[] { application },
+                                       new ProvidedInterfaceDescriptor[0],
+                                       new RequiredInterfaceDescriptor[0]);
+                       system.start("root", new Service[0]);
                } catch (SystemAssemblyException e) {
                        return;
                }