/* * Copyright 2013 Robert von Burg <eitch@eitchnet.ch> * * 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 li.strolch.runtime.configuration; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import java.io.File; import org.junit.Test; import li.strolch.RuntimeMock; import li.strolch.agent.api.StrolchAgent; import li.strolch.agent.api.StrolchBootstrapper; import li.strolch.utils.helper.FileHelper; @SuppressWarnings("nls") public class ConfigurationParserTest { public static StrolchConfiguration parseConfiguration(Class<?> clazz, String env) { File rootSrcPath = new File("src/test/resources/configtest"); File rootDstPath = new File("target/" + clazz.getSimpleName()); if (rootDstPath.exists() && !FileHelper.deleteFile(rootDstPath, true)) { throw new RuntimeException("Could not delete existing target " + rootDstPath); } StrolchAgent agent = new StrolchBootstrapper(RuntimeMock.getAppVersion()).setupByCopyingRoot(env, rootSrcPath, rootDstPath); return agent.getStrolchConfiguration(); } @Test public void shouldParseConfigurationFileForDevEnv() { StrolchConfiguration strolchConfiguration = parseConfiguration(ConfigurationParserTest.class, "dev"); assertNotNull("Should have created a configuration object", strolchConfiguration); // <Runtime> // <applicationName>StrolchRuntimeTest</applicationName> // <Properties> // <verbose>true</verbose> // </Properties> // </Runtime> RuntimeConfiguration runtimeConfiguration = strolchConfiguration.getRuntimeConfiguration(); assertNotNull("Should have created a runtime configuration", runtimeConfiguration); assertEquals("StrolchRuntimeTest", runtimeConfiguration.getApplicationName()); assertEquals("dev", runtimeConfiguration.getEnvironment()); assertEquals(true, runtimeConfiguration.getBoolean("verbose", null)); // <Component> // <name>ServiceHandler</name> // <api>li.strolch.service.ServiceHandler</api> // <impl>li.strolch.service.SimpleServiceHandler</impl> // <Properties> // </Properties> // </Component> ComponentConfiguration serviceHandlerConfiguration = strolchConfiguration .getComponentConfiguration("ServiceHandler"); assertNotNull("Should have created a ServiceHandler Configuration", serviceHandlerConfiguration); assertEquals("ServiceHandler", serviceHandlerConfiguration.getName()); assertEquals("li.strolch.runtime.configuration.model.ServiceHandlerTest", serviceHandlerConfiguration.getApi()); assertEquals("li.strolch.runtime.configuration.model.ServiceHandlerTestImpl", serviceHandlerConfiguration.getImpl()); assertEquals(0, serviceHandlerConfiguration.getPropertyKeys().size()); // <Component> // <name>PrivilegeHandler</name> // <api>li.strolch.runtime.privilege.DefaultStrolchPrivilegeHandler</api> // <impl>li.strolch.runtime.privilege.DefaultStrolchPrivilegeHandler</impl> // <depends>PersistenceHandler</depends> // <Properties> // <privilegeConfigFile>PrivilegeConfig.xml</privilegeConfigFile> // </Properties> // </Component> ComponentConfiguration privilegeHandlerConfiguration = strolchConfiguration .getComponentConfiguration("PrivilegeHandler"); assertNotNull("Should have created a PrivilegeHandler Configuration", privilegeHandlerConfiguration); assertEquals("PrivilegeHandler", privilegeHandlerConfiguration.getName()); assertEquals("li.strolch.runtime.privilege.DefaultStrolchPrivilegeHandler", privilegeHandlerConfiguration.getApi()); assertEquals("li.strolch.runtime.privilege.DefaultStrolchPrivilegeHandler", privilegeHandlerConfiguration.getImpl()); assertEquals(1, privilegeHandlerConfiguration.getPropertyKeys().size()); assertEquals(1, privilegeHandlerConfiguration.getDependencies().size()); assertTrue(privilegeHandlerConfiguration.getDependencies().contains("PersistenceHandler")); assertEquals("PrivilegeConfig.xml", privilegeHandlerConfiguration.getString("privilegeConfigFile", null)); // <Component> // <name>ResourceGeneratorHandler</name> // <api>li.strolch.runtime.configuration.model.ResourceGeneratorHandlerTest</api> // <impl>li.strolch.runtime.configuration.model.ResourceGeneratorHandlerTestImpl</impl> // <Properties> // <verbose>true</verbose> // </Properties> // </Component> ComponentConfiguration persistenceHandlerConfiguration = strolchConfiguration .getComponentConfiguration("ResourceGeneratorHandler"); assertNotNull("Should have created a ResourceGeneratorHandler Configuration", persistenceHandlerConfiguration); assertEquals("ResourceGeneratorHandler", persistenceHandlerConfiguration.getName()); assertEquals("li.strolch.runtime.configuration.model.ResourceGeneratorHandlerTest", persistenceHandlerConfiguration.getApi()); assertEquals("li.strolch.runtime.configuration.model.ResourceGeneratorHandlerTestImpl", persistenceHandlerConfiguration.getImpl()); assertEquals(1, persistenceHandlerConfiguration.getPropertyKeys().size()); assertEquals(true, persistenceHandlerConfiguration.getBoolean("verbose", null)); // <env id="global"> // <Component> // <name>RealmHandler</name> // <api>li.strolch.agent.api.RealmHandler</api> // <impl>li.strolch.agent.impl.DefaultRealmHandler</impl> // </Component> // <env id="dev"> // <Component> // <name>RealmHandler</name> // <Properties> // <foo>bar</foo> // </Properties> // </Component> ComponentConfiguration realmHandlerConfiguration = strolchConfiguration .getComponentConfiguration("RealmHandler"); assertNotNull("Should have created a RealmHandler Configuration", realmHandlerConfiguration); assertEquals("RealmHandler", realmHandlerConfiguration.getName()); assertEquals("li.strolch.agent.api.RealmHandler", realmHandlerConfiguration.getApi()); assertEquals("li.strolch.agent.impl.DefaultRealmHandler", realmHandlerConfiguration.getImpl()); assertEquals(2, realmHandlerConfiguration.getPropertyKeys().size()); assertEquals("EMPTY", realmHandlerConfiguration.getString("dataStoreMode", null)); assertEquals("bar", realmHandlerConfiguration.getString("foo", null)); // <Component> // <name>AdditionalServiceHandler</name> // <api>li.strolch.service.api.ServiceHandler</api> // <impl>li.strolch.service.SimpleServiceHandler</impl> // <Properties> // <foo>bar</foo> // </Properties> // </Component> // </env> ComponentConfiguration additionalServiceHandlerConfiguration = strolchConfiguration .getComponentConfiguration("AdditionalServiceHandler"); assertNotNull("Should have created a AdditionalServiceHandler Configuration", additionalServiceHandlerConfiguration); assertEquals("AdditionalServiceHandler", additionalServiceHandlerConfiguration.getName()); assertEquals("li.strolch.runtime.configuration.model.ServiceHandlerTest", additionalServiceHandlerConfiguration.getApi()); assertEquals("li.strolch.runtime.configuration.model.ServiceHandlerTestImpl", additionalServiceHandlerConfiguration.getImpl()); assertEquals(1, additionalServiceHandlerConfiguration.getPropertyKeys().size()); assertEquals("bar", additionalServiceHandlerConfiguration.getString("foo", null)); } @Test public void shouldParseConfigurationFileForTestEnv() { StrolchConfiguration strolchConfiguration = parseConfiguration(ConfigurationParserTest.class, "test"); assertNotNull("Should have created a configuration object", strolchConfiguration); RuntimeConfiguration runtimeConfiguration = strolchConfiguration.getRuntimeConfiguration(); assertNotNull("Should have created a runtime configuration", runtimeConfiguration); assertEquals("StrolchRuntimeTest", runtimeConfiguration.getApplicationName()); assertEquals("test", runtimeConfiguration.getEnvironment()); assertEquals(true, runtimeConfiguration.getBoolean("verbose", null)); // <env id="global"> // <Component> // <name>RealmHandler</name> // <api>li.strolch.agent.api.RealmHandler</api> // <impl>li.strolch.agent.impl.DefaultRealmHandler</impl> // </Component> // <env id="test"> // <Component> // <name>RealmHandler</name> // <Properties> // <foo>noob</foo> // </Properties> // </Component> ComponentConfiguration realmHandlerConfiguration = strolchConfiguration .getComponentConfiguration("RealmHandler"); assertNotNull("Should have created a RealmHandler Configuration", realmHandlerConfiguration); assertEquals("RealmHandler", realmHandlerConfiguration.getName()); assertEquals("li.strolch.agent.api.RealmHandler", realmHandlerConfiguration.getApi()); assertEquals("li.strolch.agent.impl.DefaultRealmHandler", realmHandlerConfiguration.getImpl()); assertEquals(2, realmHandlerConfiguration.getPropertyKeys().size()); assertEquals("EMPTY", realmHandlerConfiguration.getString("dataStoreMode", null)); assertEquals("noob", realmHandlerConfiguration.getString("foo", null)); // <Component> // <name>ServiceHandler</name> // <api>li.strolch.service.api.ServiceHandler</api> // <impl>li.strolch.service.YetAnotherServiceHandler</impl> // <depends>RealmHandler</depends> // <Properties> // <bar>foo</bar> // </Properties> // </Component> ComponentConfiguration serviceHandlerConfiguration = strolchConfiguration .getComponentConfiguration("ServiceHandler"); assertNotNull("Should have created a ServiceHandler Configuration", serviceHandlerConfiguration); assertEquals("ServiceHandler", serviceHandlerConfiguration.getName()); assertEquals("li.strolch.runtime.configuration.model.ServiceHandlerTest", serviceHandlerConfiguration.getApi()); assertEquals("li.strolch.runtime.configuration.model.ServiceHandlerTestImpl2", serviceHandlerConfiguration.getImpl()); assertEquals(2, serviceHandlerConfiguration.getDependencies().size()); assertTrue(serviceHandlerConfiguration.getDependencies().contains("RealmHandler")); assertTrue(serviceHandlerConfiguration.getDependencies().contains("PrivilegeHandler")); assertEquals(1, serviceHandlerConfiguration.getPropertyKeys().size()); assertEquals("foo", serviceHandlerConfiguration.getString("bar", null)); } }