X-Git-Url: http://wamblee.org/gitweb/?a=blobdiff_plain;f=system%2Fgeneral%2Fsrc%2Ftest%2Fjava%2Forg%2Fwamblee%2Fsystem%2FSystemAssemblerTest.java;h=c67529b875b6a7e1819ce30b4e25427a16659696;hb=6f8bb575523e672b9f8797e543f7c59d15db7253;hp=df08998e4b7351b2b1cd82963da44efa32b9b4e5;hpb=e055966cbba51cbf35546dbc50f29516cf6e304f;p=utils diff --git a/system/general/src/test/java/org/wamblee/system/SystemAssemblerTest.java b/system/general/src/test/java/org/wamblee/system/SystemAssemblerTest.java index df08998e..c67529b8 100644 --- a/system/general/src/test/java/org/wamblee/system/SystemAssemblerTest.java +++ b/system/general/src/test/java/org/wamblee/system/SystemAssemblerTest.java @@ -1,3 +1,18 @@ +/* + * Copyright 2007 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package org.wamblee.system; import java.io.Serializable; @@ -6,17 +21,18 @@ import java.util.Arrays; import org.wamblee.system.Component.Status; import org.wamblee.test.AssertionUtils; +import org.wamblee.test.EventTracker; import junit.framework.TestCase; public class SystemAssemblerTest extends TestCase { - private ServiceRegistry _registry; + private EventTracker _tracker; @Override protected void setUp() throws Exception { super.setUp(); - _registry = new DefaultServiceRegistry(); + _tracker = new EventTracker(); } private static class MyMultiple implements Serializable, Runnable { @@ -27,69 +43,61 @@ public class SystemAssemblerTest extends TestCase { } public void testFilterProvided() { - RequiredInterfaceDescriptor req1 = new DefaultRequiredInterfaceDescriptor( - "name", Runnable.class); - RequiredInterfaceDescriptor req2 = new DefaultRequiredInterfaceDescriptor( - "name", Serializable.class); - ProvidedInterfaceDescriptor prov1 = new DefaultProvidedInterfaceDescriptor( - "name", Runnable.class); - ProvidedInterfaceDescriptor prov2 = new DefaultProvidedInterfaceDescriptor( - "name", Serializable.class); - ProvidedInterfaceDescriptor prov3 = new DefaultProvidedInterfaceDescriptor( - "name", MyMultiple.class); - - AssertionUtils.assertEquals(new RequiredInterfaceDescriptor[] { req1 }, + RequiredInterface req1 = new DefaultRequiredInterface("name", + Runnable.class); + RequiredInterface req2 = new DefaultRequiredInterface("name", + Serializable.class); + ProvidedInterface prov1 = new DefaultProvidedInterface("name", + Runnable.class); + ProvidedInterface prov2 = new DefaultProvidedInterface("name", + Serializable.class); + ProvidedInterface prov3 = new DefaultProvidedInterface("name", + MyMultiple.class); + + AssertionUtils.assertEquals(new RequiredInterface[] { req1 }, + SystemAssembler.filterRequiredServices(prov1, Arrays + .asList(new RequiredInterface[] { req1 }))); + AssertionUtils.assertEquals(new RequiredInterface[] { req1 }, SystemAssembler.filterRequiredServices(prov1, Arrays - .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 RequiredInterfaceDescriptor[] { req1, req2 }))); + .asList(new RequiredInterface[] { req1, req2 }))); + AssertionUtils.assertEquals(new RequiredInterface[] { req1, req2 }, + SystemAssembler.filterRequiredServices(prov3, Arrays + .asList(new RequiredInterface[] { req1, req2 }))); - AssertionUtils.assertEquals( - new ProvidedInterfaceDescriptor[] { prov1 }, + AssertionUtils.assertEquals(new ProvidedInterface[] { prov1 }, SystemAssembler.filterProvidedServices(req1, Arrays - .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 ProvidedInterfaceDescriptor[] { prov1, prov3 }))); + .asList(new ProvidedInterface[] { prov1 }))); + AssertionUtils.assertEquals(new ProvidedInterface[] { prov1 }, + SystemAssembler.filterProvidedServices(req1, Arrays + .asList(new ProvidedInterface[] { prov1, prov2 }))); + AssertionUtils.assertEquals(new ProvidedInterface[] { prov1, prov3 }, + SystemAssembler.filterProvidedServices(req1, Arrays + .asList(new ProvidedInterface[] { prov1, prov3 }))); } public void testEnvironmentApplication() { - Component environment = new Environment(_registry); - Component application = new Application(_registry); + Component environment = new Environment(_tracker); + Component application = new Application(_tracker); SystemAssembler assembler = new SystemAssembler(new Component[] { - environment, application }, new ProvidedInterfaceDescriptor[0]); - assembler.start(_registry, new Service[0]); - Service[] envServices = environment.getRunningServices(); + environment, application }, new ProvidedInterface[0]); + assembler.start(); + AssertionUtils.assertEquals(new String[] { "start.environment", + "start.application" }, _tracker.getEvents( + Thread.currentThread()).toArray(new String[0])); + ProvidedInterface[] envServices = environment.getRunningServices(); assertEquals(2, envServices.length); - Service[] appServices = environment.getRunningServices(); + ProvidedInterface[] appServices = environment.getRunningServices(); assertEquals(2, appServices.length); - assertEquals(2, _registry.listAllServices().length); - - environment.stop(); - assertEquals(0, _registry.listAllServices().length); - - application.stop(); - assertEquals(0, _registry.listAllServices().length); + } public void testApplicationEnvironment() { try { - Component environment = new Environment(_registry); - Component application = new Application(_registry); + Component environment = new Environment(); + Component application = new Application(); SystemAssembler assembler = new SystemAssembler(new Component[] { - application, environment }, - new ProvidedInterfaceDescriptor[0]); - assembler.start(_registry, new Service[0]); + application, environment }, new ProvidedInterface[0]); + assembler.start(); } catch (SystemAssemblyException e) { // e.printStackTrace(); return; @@ -98,40 +106,66 @@ public class SystemAssemblerTest extends TestCase { } public void testComposite() { - Component environment = new Environment(_registry); - Component application = new Application(_registry); + Component environment = new Environment(_tracker); + Component application = new Application(_tracker); + assertEquals(0, _tracker.getEventCount()); 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]); + + Container system = new Container("all", new Component[] { environment, + application }, new ProvidedInterface[0], + new RequiredInterface[0]); assertEquals(Status.NOT_STARTED, system.getStatus()); - system.start("root", new Service[0]); - InterfaceDescriptor[] required = system.getRequiredServices(); + system.start("root"); + RequiredInterface[] required = system.getRequiredServices(); assertEquals(0, required.length); - InterfaceDescriptor[] provided = system.getProvidedServices(); + ProvidedInterface[] provided = system.getProvidedServices(); assertEquals(0, provided.length); assertEquals(Status.RUNNING, environment.getStatus()); assertEquals(Status.RUNNING, application.getStatus()); assertEquals(Status.RUNNING, system.getStatus()); - + + AssertionUtils.assertEquals( + new String[] { "start.environment", "start.application" }, + _tracker.getEvents(Thread.currentThread()).toArray(new String[0])); + _tracker.clear(); + system.stop(); assertEquals(Status.STOPPED, environment.getStatus()); assertEquals(Status.STOPPED, application.getStatus()); assertEquals(Status.STOPPED, system.getStatus()); + + AssertionUtils.assertEquals( + new String[] { "stop.application", "stop.environment" }, + _tracker.getEvents(Thread.currentThread()).toArray(new String[0])); + + } public void testCompositeWithWrongProvidedInfo() { try { - Component environment = new Environment(_registry); - Component application = new Application(_registry); - Container system = new Container( - "all", - _registry, - new Component[] { environment, application }, - new ProvidedInterfaceDescriptor[] { new DefaultProvidedInterfaceDescriptor( + Component environment = new Environment(); + Component application = new Application(); + Container system = new Container("all", new Component[] { + environment, application }, + new ProvidedInterface[] { new DefaultProvidedInterface( "string", String.class) }, - new DefaultRequiredInterfaceDescriptor[0]); + new DefaultRequiredInterface[0]); + } catch (SystemAssemblyException e) { + return; + } + fail(); + } + + public void testCompositeRequiredInterfaceNotProvided() { + try { + Component environment = new Environment(); + Component application = new Application(); + Container system = new Container("all", new Component[] { + environment, application }, new ProvidedInterface[0], + new RequiredInterface[] { new DefaultRequiredInterface( + "string", String.class) }); + system.start("root"); } catch (SystemAssemblyException e) { return; } @@ -139,31 +173,29 @@ public class SystemAssemblerTest extends TestCase { } public void testCompositeWithSuperfluousRequiredInfo() { - 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( + Component environment = new Environment(); + Component application = new Application(); + Container system = new Container("all", new Component[] { environment, + application }, new ProvidedInterface[0], + new RequiredInterface[] { new DefaultRequiredInterface( "string", String.class) }); - system.start("root", new Service[0]); - RequiredInterfaceDescriptor[] required = system.getRequiredServices(); + system.getRequiredServices()[0] + .setProvider(new DefaultProvidedInterface("hallo", String.class)); + system.start("root"); + RequiredInterface[] required = system.getRequiredServices(); assertEquals(1, required.length); - ProvidedInterfaceDescriptor[] provided = system.getProvidedServices(); + ProvidedInterface[] provided = system.getProvidedServices(); assertEquals(0, provided.length); } public void testCompositeWithExternalDependencesNotProvided() { try { - 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]); + Component environment = new Environment(); + Component application = new Application(); + Container system = new Container("all", + new Component[] { application }, new ProvidedInterface[0], + application.getRequiredServices()); + system.start("root"); } catch (SystemAssemblyException e) { return; } @@ -173,30 +205,34 @@ public class SystemAssemblerTest extends TestCase { public void testCompositeWithExternalDependencesProvided() { - 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); - RequiredInterfaceDescriptor[] required = system.getRequiredServices(); + Component environment = new Environment(); + Component application = new Application(); + Container system = new Container("all", + new Component[] { application }, new ProvidedInterface[0], + application.getRequiredServices()); + environment.start("env"); + system.getRequiredServices()[0].setProvider(environment + .getProvidedServices()[0]); + system.getRequiredServices()[1].setProvider(environment + .getProvidedServices()[1]); + + system.start("root"); + RequiredInterface[] required = system.getRequiredServices(); assertEquals(2, required.length); - ProvidedInterfaceDescriptor[] provided = system.getProvidedServices(); + ProvidedInterface[] provided = system.getProvidedServices(); assertEquals(0, provided.length); } public void testAmbiguousInterfaces() { try { - Component environment1 = new Environment(_registry); - Component environment2 = new Environment(_registry); - Component application = new Application(_registry); + Component environment1 = new Environment(); + Component environment2 = new Environment(); + Component application = new Application(); SystemAssembler assembler = new SystemAssembler(new Component[] { environment1, environment2, application }, - new ProvidedInterfaceDescriptor[0]); - assembler.start(_registry, new Service[0]); + new ProvidedInterface[0]); + assembler.start(); } catch (SystemAssemblyException e) { return; @@ -206,12 +242,11 @@ public class SystemAssemblerTest extends TestCase { 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]); + Component application = new Application(); + Container system = new Container("all", + new Component[] { application }, new ProvidedInterface[0], + new RequiredInterface[0]); + system.start("root"); } catch (SystemAssemblyException e) { return; }