/* * Copyright 2007 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.wamblee.system.spring; import java.io.IOException; import java.util.HashMap; import java.util.Map; import java.util.Properties; import junit.framework.TestCase; import org.wamblee.io.ClassPathResource; import org.wamblee.system.DefaultProvidedInterface; import org.wamblee.system.DefaultRequiredInterface; import org.wamblee.system.ProvidedInterface; import org.wamblee.system.RequiredInterface; import org.wamblee.system.SystemAssemblyException; public class SpringComponentTest 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 static final String HELLO_SERVICE_SPRING_WITH_PROPERTIES_XML = "test.org.wamblee.system.springWithProperties.xml"; private static final String PROPERTY_FILE = "test.org.wamblee.system.spring.properties"; @Override protected void setUp() throws Exception { super.setUp(); } public void testBlackboxSystem() { SpringComponent system = new SpringComponent("system", new String[] { HELLO_SERVICE_SPRING_XML }, new HashMap(), new HashMap()); system.start("Hello"); ProvidedInterface[] services = system.getRunningServices(); assertEquals(0, services.length); system.stop(); } public void testOneProvidedService() { Map provided = new HashMap(); provided.put("helloService", new DefaultProvidedInterface( "hello", HelloService.class)); SpringComponent system = new SpringComponent("system", new String[] { HELLO_SERVICE_SPRING_XML }, provided, new HashMap()); system.start("Hello"); ProvidedInterface[] services = system.getRunningServices(); assertEquals(1, services.length); assertTrue(services[0].getImplementation() instanceof HelloService); assertEquals("Hello world!", ((HelloService)services[0].getImplementation()) .say()); system.stop(); } public void testWithProperties() throws IOException { Map provided = new HashMap(); provided.put("helloService", new DefaultProvidedInterface( "hello", HelloService.class)); SpringComponent system = new SpringComponent("system", new String[] { HELLO_SERVICE_SPRING_WITH_PROPERTIES_XML }, provided, new HashMap()); Properties props = new Properties(); props.load(new ClassPathResource(PROPERTY_FILE).getInputStream()); system.addProperties(props); system.start("Hello"); ProvidedInterface[] services = system.getRunningServices(); assertEquals("Property Value", ((HelloService)services[0].getImplementation()).say()); } public void testWithMissingRequirement() { try { SpringComponent system = new SpringComponent("system", new String[] { HELLO_SERVICE_SPRING_WITH_REQS_XML }, new HashMap(), new HashMap()); system.start("Bla"); } catch (SystemAssemblyException e) { //e.printStackTrace(); return; } fail(); } public void testWithRequirement() { Map required = new HashMap(); required.put(new DefaultRequiredInterface("hello", HelloService.class), "helloService"); SpringComponent system = new SpringComponent("system", new String[] { HELLO_SERVICE_SPRING_WITH_REQS_XML }, new HashMap(), required); HelloService helloObject = new HelloService("ladida"); ProvidedInterface helloService = new DefaultProvidedInterface("hello", HelloService.class); helloService.publish(helloObject); system.getRequiredServices()[0].setProvider(helloService); system.start("Bla"); system.stop(); } public void testWithRequirementAndProvidedService() { Map required = new HashMap(); required.put(new DefaultRequiredInterface("hello", HelloService.class), "helloService"); Map provided = new HashMap(); provided.put("blaService", new DefaultProvidedInterface("bla", BlaService.class)); SpringComponent system = new SpringComponent("system", new String[] { HELLO_SERVICE_SPRING_WITH_REQS_XML }, provided, required); HelloService helloObject = new HelloService("ladida"); ProvidedInterface helloService = new DefaultProvidedInterface("hello", HelloService.class); helloService.publish(helloObject); system.getRequiredServices()[0].setProvider(helloService); system.start("Bla"); ProvidedInterface started = system.getProvidedServices()[0]; assertNotNull(started.getImplementation()); assertTrue(started.getImplementation() instanceof BlaService); assertEquals("ladida", ((BlaService)started.getImplementation()).execute()); system.stop(); } }