+package org.wamblee.system.spring;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import junit.framework.TestCase;
+
+import org.wamblee.system.DefaultServiceDescriptor;
+import org.wamblee.system.DefaultServiceRegistry;
+import org.wamblee.system.Service;
+import org.wamblee.system.ServiceDescriptor;
+import org.wamblee.system.ServiceRegistry;
+import org.wamblee.system.SystemAssemblyException;
+
+public class SpringSystemTest extends TestCase {
+
+ private static final String HELLO_SERVICE_SPRING_XML = "test.org.wamblee.system.spring.xml";
+ private static final String HELLO_SERVICE_SPRING_WITH_REQS_XML = "test.org.wamblee.system.springWithRequirements.xml";
+
+ private ServiceRegistry _registry;
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ _registry = new DefaultServiceRegistry();
+ }
+
+ public void testBlackboxSystem() {
+ SpringSystem system = new SpringSystem("system", _registry,
+ new String[] { HELLO_SERVICE_SPRING_XML },
+ new HashMap<String, ServiceDescriptor>(),
+ new HashMap<ServiceDescriptor, String>());
+ system.start("Hello", new Service[0]);
+ Service[] services = system.getRunningServices();
+ assertEquals(0, services.length);
+
+ system.stop();
+ }
+
+ public void testOneProvidedService() {
+ Map<String, ServiceDescriptor> provided = new HashMap<String, ServiceDescriptor>();
+ provided.put("helloService", new DefaultServiceDescriptor(
+ HelloService.class));
+
+ SpringSystem system = new SpringSystem("system", _registry,
+ new String[] { HELLO_SERVICE_SPRING_XML }, provided,
+ new HashMap<ServiceDescriptor, String>());
+ system.start("Hello", new Service[0]);
+ Service[] services = system.getRunningServices();
+ assertEquals(1, services.length);
+ assertTrue(services[0].reference(HelloService.class) instanceof HelloService);
+ assertEquals("Hello world!", services[0].reference(HelloService.class)
+ .say());
+ system.stop();
+ }
+
+ public void testWithMissingRequiremnt() {
+ try {
+ SpringSystem system = new SpringSystem("system", _registry,
+ new String[] { HELLO_SERVICE_SPRING_WITH_REQS_XML },
+ new HashMap<String, ServiceDescriptor>(),
+ new HashMap<ServiceDescriptor, String>());
+ system.start("Bla", new Service[0]);
+ } catch (SystemAssemblyException e) {
+ //e.printStackTrace();
+ return;
+ }
+ fail();
+ }
+
+ public void testWithRequirement() {
+ Map<ServiceDescriptor, String> required = new HashMap<ServiceDescriptor, String>();
+ required.put(new DefaultServiceDescriptor(HelloService.class),
+ "helloService");
+ SpringSystem system = new SpringSystem("system", _registry,
+ new String[] { HELLO_SERVICE_SPRING_WITH_REQS_XML },
+ new HashMap<String, ServiceDescriptor>(), required);
+
+ HelloService helloObject = new HelloService("ladida");
+ Service helloService = _registry.register(new DefaultServiceDescriptor(HelloService.class), helloObject);
+ system.start("Bla", new Service[] { helloService } );
+ system.stop();
+ }
+
+ public void testWithRequirementAndProvidedService() {
+ Map<ServiceDescriptor, String> required = new HashMap<ServiceDescriptor, String>();
+ required.put(new DefaultServiceDescriptor(HelloService.class),
+ "helloService");
+ Map<String,ServiceDescriptor> provided = new HashMap<String, ServiceDescriptor>();
+ provided.put("blaService", new DefaultServiceDescriptor(
+ BlaService.class));
+
+ SpringSystem system = new SpringSystem("system", _registry,
+ new String[] { HELLO_SERVICE_SPRING_WITH_REQS_XML },
+ provided, required);
+
+ HelloService helloObject = new HelloService("ladida");
+ Service helloService = _registry.register(new DefaultServiceDescriptor(HelloService.class), helloObject);
+ Service[] services = system.start("Bla", new Service[] { helloService } );
+ assertEquals(1, services.length);
+
+ assertTrue(services[0].reference(BlaService.class) instanceof BlaService);
+ assertEquals("ladida", services[0].reference(BlaService.class)
+ .execute());
+ system.stop();
+ }
+
+}