1 package org.wamblee.system;
3 import java.io.Serializable;
4 import java.util.ArrayList;
5 import java.util.Arrays;
7 import org.wamblee.test.AssertionUtils;
9 import junit.framework.TestCase;
11 public class SystemAssemblerTest extends TestCase {
13 private ServiceRegistry _registry;
16 protected void setUp() throws Exception {
18 _registry = new DefaultServiceRegistry();
21 private static class MyMultiple implements Serializable, Runnable {
28 public void testFilterProvided() {
29 RequiredServiceDescriptor req1 = new DefaultRequiredServiceDescriptor(
30 "name", Runnable.class);
31 RequiredServiceDescriptor req2 = new DefaultRequiredServiceDescriptor(
32 "name", Serializable.class);
33 ProvidedServiceDescriptor prov1 = new DefaultProvidedServiceDescriptor(
34 "name", Runnable.class);
35 ProvidedServiceDescriptor prov2 = new DefaultProvidedServiceDescriptor(
36 "name", Serializable.class);
37 ProvidedServiceDescriptor prov3 = new DefaultProvidedServiceDescriptor(
38 "name", MyMultiple.class);
40 AssertionUtils.assertEquals(new RequiredServiceDescriptor[] { req1 },
41 SystemAssembler.filterRequiredServices(prov1, Arrays
42 .asList(new RequiredServiceDescriptor[] { req1 })));
43 AssertionUtils.assertEquals(new RequiredServiceDescriptor[] { req1 },
45 .filterRequiredServices(prov1, Arrays
46 .asList(new RequiredServiceDescriptor[] { req1,
48 AssertionUtils.assertEquals(new RequiredServiceDescriptor[] { req1,
49 req2 }, SystemAssembler.filterRequiredServices(prov3, Arrays
50 .asList(new RequiredServiceDescriptor[] { req1, req2 })));
52 AssertionUtils.assertEquals(new ProvidedServiceDescriptor[] { prov1 },
53 SystemAssembler.filterProvidedServices(req1, Arrays
54 .asList(new ProvidedServiceDescriptor[] { prov1 })));
55 AssertionUtils.assertEquals(new ProvidedServiceDescriptor[] { prov1 },
56 SystemAssembler.filterProvidedServices(req1,
57 Arrays.asList(new ProvidedServiceDescriptor[] { prov1,
59 AssertionUtils.assertEquals(new ProvidedServiceDescriptor[] { prov1,
60 prov3 }, SystemAssembler.filterProvidedServices(req1, Arrays
61 .asList(new ProvidedServiceDescriptor[] { prov1, prov3 })));
64 public void testEnvironmentApplication() {
65 SubSystem environment = new Environment(_registry);
66 SubSystem application = new Application(_registry);
67 SystemAssembler assembler = new SystemAssembler(new SubSystem[] {
68 environment, application }, new ProvidedServiceDescriptor[0]);
69 assembler.start(_registry, new Service[0]);
70 Service[] envServices = environment.getRunningServices();
71 assertEquals(2, envServices.length);
72 Service[] appServices = environment.getRunningServices();
73 assertEquals(2, appServices.length);
74 assertEquals(2, _registry.listAllServices().length);
77 assertEquals(0, _registry.listAllServices().length);
80 assertEquals(0, _registry.listAllServices().length);
83 public void testApplicationEnvironment() {
85 SubSystem environment = new Environment(_registry);
86 SubSystem application = new Application(_registry);
87 SystemAssembler assembler = new SystemAssembler(new SubSystem[] {
88 application, environment },
89 new ProvidedServiceDescriptor[0]);
90 assembler.start(_registry, new Service[0]);
91 } catch (SystemAssemblyException e) {
92 // e.printStackTrace();
98 public void testComposite() {
99 SubSystem environment = new Environment(_registry);
100 SubSystem application = new Application(_registry);
101 CompositeSystem system = new CompositeSystem("all", _registry,
102 new SubSystem[] { environment, application },
103 new ServiceDescriptor[0], new ServiceDescriptor[0]);
104 system.start("root", new Service[0]);
105 ServiceDescriptor[] required = system.getRequiredServices();
106 assertEquals(0, required.length);
107 ServiceDescriptor[] provided = system.getProvidedServices();
108 assertEquals(0, provided.length);
111 public void testCompositeWithWrongProvidedInfo() {
113 SubSystem environment = new Environment(_registry);
114 SubSystem application = new Application(_registry);
115 CompositeSystem system = new CompositeSystem(
118 new SubSystem[] { environment, application },
119 new ServiceDescriptor[] { new DefaultProvidedServiceDescriptor(
120 "string", String.class) },
121 new DefaultRequiredServiceDescriptor[0]);
122 } catch (SystemAssemblyException e) {
128 public void testCompositeWithSuperfluousRequiredInfo() {
129 SubSystem environment = new Environment(_registry);
130 SubSystem application = new Application(_registry);
131 CompositeSystem system = new CompositeSystem("all", _registry,
132 new SubSystem[] { environment, application },
133 new ServiceDescriptor[0],
134 new ServiceDescriptor[] { new DefaultRequiredServiceDescriptor(
135 "string", String.class) });
136 system.start("root", new Service[0]);
137 ServiceDescriptor[] required = system.getRequiredServices();
138 assertEquals(1, required.length);
139 ServiceDescriptor[] provided = system.getProvidedServices();
140 assertEquals(0, provided.length);
143 public void testCompositeWithExternalDependencesNotProvided() {
145 SubSystem environment = new Environment(_registry);
146 SubSystem application = new Application(_registry);
147 CompositeSystem system = new CompositeSystem("all", _registry,
148 new SubSystem[] { application }, new ServiceDescriptor[0],
149 application.getRequiredServices());
150 system.start("root", new Service[0]);
151 } catch (SystemAssemblyException e) {
158 public void testCompositeWithExternalDependencesProvided() {
160 SubSystem environment = new Environment(_registry);
161 SubSystem application = new Application(_registry);
162 CompositeSystem system = new CompositeSystem("all", _registry,
163 new SubSystem[] { application }, new ServiceDescriptor[0],
164 application.getRequiredServices());
165 Service[] envServices = environment.start("env", new Service[0]);
166 system.start("root", envServices);
167 ServiceDescriptor[] required = system.getRequiredServices();
168 assertEquals(2, required.length);
169 ServiceDescriptor[] provided = system.getProvidedServices();
170 assertEquals(0, provided.length);
174 public void testAmbiguousInterfaces() {
176 SubSystem environment1 = new Environment(_registry);
177 SubSystem environment2 = new Environment(_registry);
178 SubSystem application = new Application(_registry);
179 SystemAssembler assembler = new SystemAssembler(new SubSystem[] {
180 environment1, environment2, application },
181 new ProvidedServiceDescriptor[0]);
182 assembler.start(_registry, new Service[0]);
183 } catch (SystemAssemblyException e) {