1 package org.wamblee.system;
3 import java.io.Serializable;
4 import java.util.ArrayList;
5 import java.util.Arrays;
7 import org.wamblee.system.Component.Status;
8 import org.wamblee.test.AssertionUtils;
10 import junit.framework.TestCase;
12 public class SystemAssemblerTest extends TestCase {
14 private ServiceRegistry _registry;
17 protected void setUp() throws Exception {
19 _registry = new DefaultServiceRegistry();
22 private static class MyMultiple implements Serializable, Runnable {
29 public void testFilterProvided() {
30 RequiredInterfaceDescriptor req1 = new DefaultRequiredInterfaceDescriptor(
31 "name", Runnable.class);
32 RequiredInterfaceDescriptor req2 = new DefaultRequiredInterfaceDescriptor(
33 "name", Serializable.class);
34 ProvidedInterfaceDescriptor prov1 = new DefaultProvidedInterfaceDescriptor(
35 "name", Runnable.class);
36 ProvidedInterfaceDescriptor prov2 = new DefaultProvidedInterfaceDescriptor(
37 "name", Serializable.class);
38 ProvidedInterfaceDescriptor prov3 = new DefaultProvidedInterfaceDescriptor(
39 "name", MyMultiple.class);
41 AssertionUtils.assertEquals(new RequiredInterfaceDescriptor[] { req1 },
42 SystemAssembler.filterRequiredServices(prov1, Arrays
43 .asList(new RequiredInterfaceDescriptor[] { req1 })));
44 AssertionUtils.assertEquals(new RequiredInterfaceDescriptor[] { req1 },
46 .filterRequiredServices(prov1, Arrays
47 .asList(new RequiredInterfaceDescriptor[] { req1,
49 AssertionUtils.assertEquals(new RequiredInterfaceDescriptor[] { req1,
50 req2 }, SystemAssembler.filterRequiredServices(prov3, Arrays
51 .asList(new RequiredInterfaceDescriptor[] { req1, req2 })));
53 AssertionUtils.assertEquals(new ProvidedInterfaceDescriptor[] { prov1 },
54 SystemAssembler.filterProvidedServices(req1, Arrays
55 .asList(new ProvidedInterfaceDescriptor[] { prov1 })));
56 AssertionUtils.assertEquals(new ProvidedInterfaceDescriptor[] { prov1 },
57 SystemAssembler.filterProvidedServices(req1,
58 Arrays.asList(new ProvidedInterfaceDescriptor[] { prov1,
60 AssertionUtils.assertEquals(new ProvidedInterfaceDescriptor[] { prov1,
61 prov3 }, SystemAssembler.filterProvidedServices(req1, Arrays
62 .asList(new ProvidedInterfaceDescriptor[] { prov1, prov3 })));
65 public void testEnvironmentApplication() {
66 Component environment = new Environment(_registry);
67 Component application = new Application(_registry);
68 SystemAssembler assembler = new SystemAssembler(new Component[] {
69 environment, application }, new ProvidedInterfaceDescriptor[0]);
70 assembler.start(_registry, new Service[0]);
71 Service[] envServices = environment.getRunningServices();
72 assertEquals(2, envServices.length);
73 Service[] appServices = environment.getRunningServices();
74 assertEquals(2, appServices.length);
75 assertEquals(2, _registry.listAllServices().length);
78 assertEquals(0, _registry.listAllServices().length);
81 assertEquals(0, _registry.listAllServices().length);
84 public void testApplicationEnvironment() {
86 Component environment = new Environment(_registry);
87 Component application = new Application(_registry);
88 SystemAssembler assembler = new SystemAssembler(new Component[] {
89 application, environment },
90 new ProvidedInterfaceDescriptor[0]);
91 assembler.start(_registry, new Service[0]);
92 } catch (SystemAssemblyException e) {
93 // e.printStackTrace();
99 public void testComposite() {
100 Component environment = new Environment(_registry);
101 Component application = new Application(_registry);
102 assertEquals(Status.NOT_STARTED, environment.getStatus());
103 assertEquals(Status.NOT_STARTED, application.getStatus());
104 CompositeComponent system = new CompositeComponent("all", _registry,
105 new Component[] { environment, application },
106 new InterfaceDescriptor[0], new InterfaceDescriptor[0]);
107 assertEquals(Status.NOT_STARTED, system.getStatus());
108 system.start("root", new Service[0]);
109 InterfaceDescriptor[] required = system.getRequiredServices();
110 assertEquals(0, required.length);
111 InterfaceDescriptor[] provided = system.getProvidedServices();
112 assertEquals(0, provided.length);
113 assertEquals(Status.RUNNING, environment.getStatus());
114 assertEquals(Status.RUNNING, application.getStatus());
115 assertEquals(Status.RUNNING, system.getStatus());
118 assertEquals(Status.STOPPED, environment.getStatus());
119 assertEquals(Status.STOPPED, application.getStatus());
120 assertEquals(Status.STOPPED, system.getStatus());
123 public void testCompositeWithWrongProvidedInfo() {
125 Component environment = new Environment(_registry);
126 Component application = new Application(_registry);
127 CompositeComponent system = new CompositeComponent(
130 new Component[] { environment, application },
131 new InterfaceDescriptor[] { new DefaultProvidedInterfaceDescriptor(
132 "string", String.class) },
133 new DefaultRequiredInterfaceDescriptor[0]);
134 } catch (SystemAssemblyException e) {
140 public void testCompositeWithSuperfluousRequiredInfo() {
141 Component environment = new Environment(_registry);
142 Component application = new Application(_registry);
143 CompositeComponent system = new CompositeComponent("all", _registry,
144 new Component[] { environment, application },
145 new InterfaceDescriptor[0],
146 new InterfaceDescriptor[] { new DefaultRequiredInterfaceDescriptor(
147 "string", String.class) });
148 system.start("root", new Service[0]);
149 InterfaceDescriptor[] required = system.getRequiredServices();
150 assertEquals(1, required.length);
151 InterfaceDescriptor[] provided = system.getProvidedServices();
152 assertEquals(0, provided.length);
155 public void testCompositeWithExternalDependencesNotProvided() {
157 Component environment = new Environment(_registry);
158 Component application = new Application(_registry);
159 CompositeComponent system = new CompositeComponent("all", _registry,
160 new Component[] { application }, new InterfaceDescriptor[0],
161 application.getRequiredServices());
162 system.start("root", new Service[0]);
163 } catch (SystemAssemblyException e) {
170 public void testCompositeWithExternalDependencesProvided() {
172 Component environment = new Environment(_registry);
173 Component application = new Application(_registry);
174 CompositeComponent system = new CompositeComponent("all", _registry,
175 new Component[] { application }, new InterfaceDescriptor[0],
176 application.getRequiredServices());
177 Service[] envServices = environment.start("env", new Service[0]);
178 system.start("root", envServices);
179 InterfaceDescriptor[] required = system.getRequiredServices();
180 assertEquals(2, required.length);
181 InterfaceDescriptor[] provided = system.getProvidedServices();
182 assertEquals(0, provided.length);
186 public void testAmbiguousInterfaces() {
188 Component environment1 = new Environment(_registry);
189 Component environment2 = new Environment(_registry);
190 Component application = new Application(_registry);
191 SystemAssembler assembler = new SystemAssembler(new Component[] {
192 environment1, environment2, application },
193 new ProvidedInterfaceDescriptor[0]);
194 assembler.start(_registry, new Service[0]);
196 } catch (SystemAssemblyException e) {