/* * Copyright (c) 2009-2012 Clark & Parsia, LLC. <http://www.clarkparsia.com> * * 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 com.clarkparsia.empire; import org.junit.runners.Parameterized; import org.junit.runner.RunWith; import org.junit.Test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertFalse; import java.util.Collection; import java.util.Arrays; import java.util.HashMap; import java.util.Map; import java.io.StringReader; import java.io.IOException; import java.io.FileInputStream; import com.clarkparsia.empire.config.io.ConfigReader; import com.clarkparsia.empire.config.io.impl.PropertiesConfigReader; import com.clarkparsia.empire.config.io.impl.XmlConfigReader; import com.clarkparsia.empire.config.EmpireConfiguration; import com.clarkparsia.empire.util.EmpireAnnotationProvider; import com.clarkparsia.empire.util.PropertiesAnnotationProvider; /** * <p>Test class for configuration related items</p> * * @author Michael Grove * @since 0.6.4 * @version 0.6.4 */ @RunWith(Parameterized.class) public class TestConfig { private ConfigReader mReader; private String mConfigFile; public TestConfig(ConfigReader theReader, String theConfig) { mReader = theReader; mConfigFile = theConfig; } @Parameterized.Parameters public static Collection configurations() { return Arrays.asList(new Object[][] { { new PropertiesConfigReader(), getProperiesFormatConfig() }, { new XmlConfigReader(), getXmlFormatConfig() } }); } private static String getXmlFormatConfig() { return "<empire>\n" + " <annotationProvider>com.clarkparsia.empire.util.PropertiesAnnotationProvider</annotationProvider>\n" + " <foo>bar</foo>\n" + " <baz>biz</baz>\n" + "\n" + " <unit>\n" + " <name>context1</name>\n" + " <factory>com.clarkparsia.empire.sesame.RepositoryDataSourceFactory</factory>\n" + " <url>http://localhost:8080/openrdf-sesame/</url>\n" + " <repo>mem-rdf-db</repo>\n" + " </unit>\n" + "\n" + " <unit>\n" + " <name>context2</name>\n" + " <factory>jena-test</factory>\n" + " <files>foo, bar, baz</files>\n" + " </unit>\n" + "</empire>"; } private static String getProperiesFormatConfig() { return "annotation.provider = com.clarkparsia.empire.util.PropertiesAnnotationProvider\n" + "foo=bar\n" + "baz=biz\n" + "\n" + "0.name = context1\n" + "0.factory = com.clarkparsia.empire.sesame.RepositoryDataSourceFactory\n" + "0.url = http://localhost:8080/openrdf-sesame/\n" + "0.repo = mem-rdf-db\n" + "\n" + "1.name = context2\n" + "1.factory = jena-test\n" + "1.files = foo, bar, baz\n"; } @Test public void testReader() throws IOException, EmpireException { EmpireConfiguration aConfig = mReader.read(new StringReader(getConfigFile())); assertTrue(aConfig != null); assertTrue(aConfig.getAnnotationProvider() != null); assertEquals(aConfig.getAnnotationProvider(), PropertiesAnnotationProvider.class); assertTrue(aConfig.hasUnit("context1")); assertTrue(aConfig.hasUnit("context2")); assertFalse(aConfig.hasUnit("context3")); assertEquals(aConfig.get("foo"), "bar"); assertEquals(aConfig.get("baz"), "biz"); assertTrue(aConfig.get("cheese") == null); assertEquals(aConfig.getUnitConfig("context1").get("factory"),"com.clarkparsia.empire.sesame.RepositoryDataSourceFactory"); assertEquals(aConfig.getUnitConfig("context1").get("url"), "http://localhost:8080/openrdf-sesame/"); assertEquals(aConfig.getUnitConfig("context1").get("repo"), "mem-rdf-db"); assertEquals(aConfig.getUnitConfig("context2").get("factory"), "jena-test"); assertEquals(aConfig.getUnitConfig("context2").get("files"), "foo, bar, baz"); } @Test(expected=IOException.class) public void testInvalidFileFormat() throws IOException, EmpireException { mReader.read(new StringReader(getInvalidConfigFile())); } @Test(expected=IOException.class) public void testInvalidIOReader() throws IOException, EmpireException { mReader.read(new FileInputStream("not a valid file")); } @Test public void testEmpireConfigFile() { Map<String, String> aGeneralConfig = new HashMap<String, String>(); Map<String, Map<String, String>> aUnitsConfig = new HashMap<String, Map<String, String>>(); Map<String, String> aUnit = new HashMap<String, String>(); aUnit.put("property", "value"); aUnit.put("property2", "value2"); aGeneralConfig.put("a", "foo"); aGeneralConfig.put("b", "bar"); aGeneralConfig.put("c", "baz"); aUnitsConfig.put("unit1", aUnit); EmpireConfiguration aConfig = new EmpireConfiguration(aGeneralConfig, aUnitsConfig); aConfig.setAnnotationProvider(EmpireAnnotationProvider.class); assertEquals(aConfig.getAnnotationProvider(), EmpireAnnotationProvider.class); assertEquals(aConfig.get("a"), aGeneralConfig.get("a")); assertEquals(aConfig.get("b"), aGeneralConfig.get("b")); assertTrue(aConfig.get("d") == null); assertTrue(aConfig.hasUnit("unit1")); assertFalse(aConfig.hasUnit("not a unit")); assertEquals(aConfig.getUnitConfig("unit1"), aUnit); assertTrue(aConfig.getUnitConfig("asdf") == null); // TODO: test binding installation } private String getInvalidConfigFile() { return new StringBuffer().append('\\').append('u').append("u3456").toString(); } private String getConfigFile() { return mConfigFile; } }