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() {
+ 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 },
+ 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 })));
+
+ AssertionUtils.assertEquals(new ProvidedInterfaceDescriptor[] { 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 })));
}
public void testEnvironmentApplication() {
- SubSystem environment = new Environment(_registry);
- SubSystem application = new Application(_registry);
- SystemAssembler assembler = new SystemAssembler(new SubSystem[] {
- environment, application }, new ServiceDescriptor[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);
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);
}
public void testApplicationEnvironment() {
try {
- SubSystem environment = new Environment(_registry);
- SubSystem application = new Application(_registry);
- SystemAssembler assembler = new SystemAssembler(new SubSystem[] {
- application, environment }, new ServiceDescriptor[0]);
+ Component environment = new Environment(_registry);
+ Component application = new Application(_registry);
+ SystemAssembler assembler = new SystemAssembler(new Component[] {
+ application, environment },
+ new ProvidedInterfaceDescriptor[0]);
assembler.start(_registry, new Service[0]);
} catch (SystemAssemblyException e) {
// e.printStackTrace();
}
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);
+ CompositeSystem system = new CompositeSystem("all", _registry,
+ new Component[] { environment, application },
+ new InterfaceDescriptor[0], new InterfaceDescriptor[0]);
system.start("root", new Service[0]);
- ServiceDescriptor[] required = system.getRequiredServices();
+ InterfaceDescriptor[] required = system.getRequiredServices();
assertEquals(0, required.length);
- ServiceDescriptor[] provided = system.getProvidedServices();
+ InterfaceDescriptor[] provided = system.getProvidedServices();
assertEquals(0, provided.length);
}
public void testCompositeWithWrongProvidedInfo() {
try {
- SubSystem environment = new Environment(_registry);
- SubSystem application = new Application(_registry);
- CompositeSystem system = new CompositeSystem("all", _registry,
- new SubSystem[] { environment, application },
- new ServiceDescriptor[] { new DefaultServiceDescriptor(
- String.class) }, new ServiceDescriptor[0]);
+ Component environment = new Environment(_registry);
+ Component application = new Application(_registry);
+ CompositeSystem system = new CompositeSystem(
+ "all",
+ _registry,
+ new Component[] { environment, application },
+ new InterfaceDescriptor[] { new DefaultProvidedInterfaceDescriptor(
+ "string", String.class) },
+ new DefaultRequiredInterfaceDescriptor[0]);
} catch (SystemAssemblyException e) {
return;
}
}
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) });
+ Component environment = new Environment(_registry);
+ Component application = new Application(_registry);
+ CompositeSystem system = new CompositeSystem("all", _registry,
+ new Component[] { environment, application },
+ new InterfaceDescriptor[0],
+ new InterfaceDescriptor[] { new DefaultRequiredInterfaceDescriptor(
+ "string", String.class) });
system.start("root", new Service[0]);
- ServiceDescriptor[] required = system.getRequiredServices();
+ InterfaceDescriptor[] required = system.getRequiredServices();
assertEquals(1, required.length);
- ServiceDescriptor[] provided = system.getProvidedServices();
+ InterfaceDescriptor[] provided = system.getProvidedServices();
assertEquals(0, provided.length);
}
public void testCompositeWithExternalDependencesNotProvided() {
try {
- SubSystem environment = new Environment(_registry);
- SubSystem application = new Application(_registry);
+ Component environment = new Environment(_registry);
+ Component application = new Application(_registry);
CompositeSystem system = new CompositeSystem("all", _registry,
- new SubSystem[] { application }, new ServiceDescriptor[0],
+ new Component[] { application }, new InterfaceDescriptor[0],
application.getRequiredServices());
system.start("root", new Service[0]);
} catch (SystemAssemblyException e) {
public void testCompositeWithExternalDependencesProvided() {
- SubSystem environment = new Environment(_registry);
- SubSystem application = new Application(_registry);
+ Component environment = new Environment(_registry);
+ Component application = new Application(_registry);
CompositeSystem system = new CompositeSystem("all", _registry,
- new SubSystem[] { application }, new ServiceDescriptor[0],
+ new Component[] { application }, new InterfaceDescriptor[0],
application.getRequiredServices());
Service[] envServices = environment.start("env", new Service[0]);
system.start("root", envServices);
- ServiceDescriptor[] required = system.getRequiredServices();
+ InterfaceDescriptor[] required = system.getRequiredServices();
assertEquals(2, required.length);
- ServiceDescriptor[] provided = system.getProvidedServices();
+ InterfaceDescriptor[] 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);
+ SystemAssembler assembler = new SystemAssembler(new Component[] {
+ environment1, environment2, application },
+ new ProvidedInterfaceDescriptor[0]);
+ assembler.start(_registry, new Service[0]);
+
+ } catch (SystemAssemblyException e) {
+ return;
+ }
+ fail();
+ }
+
+
}