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 {
15 protected void setUp() throws Exception {
19 private static class MyMultiple implements Serializable, Runnable {
26 public void testFilterProvided() {
27 RequiredInterface req1 = new DefaultRequiredInterfaceDescriptor("name",
29 RequiredInterface req2 = new DefaultRequiredInterfaceDescriptor("name",
31 ProvidedInterface prov1 = new DefaultProvidedInterfaceDescriptor(
32 "name", Runnable.class);
33 ProvidedInterface prov2 = new DefaultProvidedInterfaceDescriptor(
34 "name", Serializable.class);
35 ProvidedInterface prov3 = new DefaultProvidedInterfaceDescriptor(
36 "name", MyMultiple.class);
38 AssertionUtils.assertEquals(new RequiredInterface[] { req1 },
39 SystemAssembler.filterRequiredServices(prov1, Arrays
40 .asList(new RequiredInterface[] { req1 })));
41 AssertionUtils.assertEquals(new RequiredInterface[] { req1 },
42 SystemAssembler.filterRequiredServices(prov1, Arrays
43 .asList(new RequiredInterface[] { req1, req2 })));
44 AssertionUtils.assertEquals(new RequiredInterface[] { req1, req2 },
45 SystemAssembler.filterRequiredServices(prov3, Arrays
46 .asList(new RequiredInterface[] { req1, req2 })));
48 AssertionUtils.assertEquals(new ProvidedInterface[] { prov1 },
49 SystemAssembler.filterProvidedServices(req1, Arrays
50 .asList(new ProvidedInterface[] { prov1 })));
51 AssertionUtils.assertEquals(new ProvidedInterface[] { prov1 },
52 SystemAssembler.filterProvidedServices(req1, Arrays
53 .asList(new ProvidedInterface[] { prov1, prov2 })));
54 AssertionUtils.assertEquals(new ProvidedInterface[] { prov1, prov3 },
55 SystemAssembler.filterProvidedServices(req1, Arrays
56 .asList(new ProvidedInterface[] { prov1, prov3 })));
59 public void testEnvironmentApplication() {
60 Component environment = new Environment();
61 Component application = new Application();
62 SystemAssembler assembler = new SystemAssembler(new Component[] {
63 environment, application }, new ProvidedInterface[0]);
65 ProvidedInterface[] envServices = environment.getRunningServices();
66 assertEquals(2, envServices.length);
67 ProvidedInterface[] appServices = environment.getRunningServices();
68 assertEquals(2, appServices.length);
70 // TODO test stopping!!!!!!
75 public void testApplicationEnvironment() {
77 Component environment = new Environment();
78 Component application = new Application();
79 SystemAssembler assembler = new SystemAssembler(new Component[] {
80 application, environment }, new ProvidedInterface[0]);
82 } catch (SystemAssemblyException e) {
83 // e.printStackTrace();
89 public void testComposite() {
90 Component environment = new Environment();
91 Component application = new Application();
92 assertEquals(Status.NOT_STARTED, environment.getStatus());
93 assertEquals(Status.NOT_STARTED, application.getStatus());
94 Container system = new Container("all", new Component[] { environment,
95 application }, new ProvidedInterface[0],
96 new RequiredInterface[0]);
97 assertEquals(Status.NOT_STARTED, system.getStatus());
99 RequiredInterface[] required = system.getRequiredServices();
100 assertEquals(0, required.length);
101 ProvidedInterface[] provided = system.getProvidedServices();
102 assertEquals(0, provided.length);
103 assertEquals(Status.RUNNING, environment.getStatus());
104 assertEquals(Status.RUNNING, application.getStatus());
105 assertEquals(Status.RUNNING, system.getStatus());
108 assertEquals(Status.STOPPED, environment.getStatus());
109 assertEquals(Status.STOPPED, application.getStatus());
110 assertEquals(Status.STOPPED, system.getStatus());
113 public void testCompositeWithWrongProvidedInfo() {
115 Component environment = new Environment();
116 Component application = new Application();
117 Container system = new Container(
119 new Component[] { environment, application },
120 new ProvidedInterface[] { new DefaultProvidedInterfaceDescriptor(
121 "string", String.class) },
122 new DefaultRequiredInterfaceDescriptor[0]);
123 } catch (SystemAssemblyException e) {
129 public void testCompositeRequiredInterfaceNotProvided() {
131 Component environment = new Environment();
132 Component application = new Application();
133 Container system = new Container(
135 new Component[] { environment, application },
136 new ProvidedInterface[0],
137 new RequiredInterface[] { new DefaultRequiredInterfaceDescriptor(
138 "string", String.class) });
139 system.start("root");
140 } catch (SystemAssemblyException e) {
146 public void testCompositeWithSuperfluousRequiredInfo() {
147 Component environment = new Environment();
148 Component application = new Application();
149 Container system = new Container(
151 new Component[] { environment, application },
152 new ProvidedInterface[0],
153 new RequiredInterface[] { new DefaultRequiredInterfaceDescriptor(
154 "string", String.class) });
155 system.getRequiredServices()[0].setProvider(
156 new DefaultProvidedInterfaceDescriptor("hallo", String.class));
157 system.start("root");
158 RequiredInterface[] required = system.getRequiredServices();
159 assertEquals(1, required.length);
160 ProvidedInterface[] provided = system.getProvidedServices();
161 assertEquals(0, provided.length);
164 public void testCompositeWithExternalDependencesNotProvided() {
166 Component environment = new Environment();
167 Component application = new Application();
168 Container system = new Container("all",
169 new Component[] { application }, new ProvidedInterface[0],
170 application.getRequiredServices());
171 system.start("root");
172 } catch (SystemAssemblyException e) {
179 public void testCompositeWithExternalDependencesProvided() {
181 Component environment = new Environment();
182 Component application = new Application();
183 Container system = new Container("all",
184 new Component[] { application }, new ProvidedInterface[0],
185 application.getRequiredServices());
186 environment.start("env");
187 system.getRequiredServices()[0].setProvider(environment.getProvidedServices()[0]);
188 system.getRequiredServices()[1].setProvider(environment.getProvidedServices()[1]);
190 system.start("root");
191 RequiredInterface[] required = system.getRequiredServices();
192 assertEquals(2, required.length);
193 ProvidedInterface[] provided = system.getProvidedServices();
194 assertEquals(0, provided.length);
198 public void testAmbiguousInterfaces() {
200 Component environment1 = new Environment();
201 Component environment2 = new Environment();
202 Component application = new Application();
203 SystemAssembler assembler = new SystemAssembler(new Component[] {
204 environment1, environment2, application },
205 new ProvidedInterface[0]);
208 } catch (SystemAssemblyException e) {
214 public void testIncompleteRequirements() {
216 Component application = new Application();
217 Container system = new Container("all",
218 new Component[] { application }, new ProvidedInterface[0],
219 new RequiredInterface[0]);
220 system.start("root");
221 } catch (SystemAssemblyException e) {