/** * The contents of this file are subject to the license and copyright * detailed in the LICENSE and NOTICE files at the root of the source * tree and available online at * * http://www.dspace.org/license/ */ package org.dspace.servicemanager.config; import static org.junit.Assert.*; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Properties; import org.junit.After; import org.junit.Before; import org.junit.Test; /** * Testing the config service * * @author Aaron Zeckoski (azeckoski @ gmail.com) */ public class DSpaceConfigurationServiceTest { DSpaceConfigurationService configurationService; @Before public void init() { configurationService = new DSpaceConfigurationService(); List<DSpaceConfig> l = new ArrayList<DSpaceConfig>(); l.add( new DSpaceConfig("service.name", "DSpace") ); l.add( new DSpaceConfig("sample.array", "itemA,itemB,itemC") ); l.add( new DSpaceConfig("sample.number", "123") ); l.add( new DSpaceConfig("sample.boolean", "true") ); l.add( new DSpaceConfig("aaronz", "Aaron Zeckoski") ); l.add( new DSpaceConfig("current.user", "${aaronz}") ); l.add( new DSpaceConfig("test.key1", "This is a value") ); l.add( new DSpaceConfig("test.key2", "This is key1=${test.key1}") ); configurationService.loadConfiguration(l, true); l = null; } @After public void tearDown() { configurationService = null; } /** * Test method for {@link org.dspace.servicemanager.config.DSpaceConfigurationService#replaceVariables(java.util.Map)}. */ @Test(timeout=10000) public void testReplaceVariables() { List<DSpaceConfig> l = new ArrayList<DSpaceConfig>(); l.add( new DSpaceConfig("service.name", "DSpace") ); l.add( new DSpaceConfig("aaronz", "Aaron Zeckoski") ); l.add( new DSpaceConfig("current.user", "${aaronz}") ); l.add( new DSpaceConfig("test.key1", "This is a value") ); l.add( new DSpaceConfig("test.key2", "This is key1=${test.key1}") ); l.add( new DSpaceConfig("test.key3", "This is key2=${test.key2}") ); int dirIdx = l.size(); l.add( new DSpaceConfig("circular", "${circular}")); int indirIdx = l.size(); l.add( new DSpaceConfig("indirect.circular", "${circular} square")); Map<String, DSpaceConfig> configMap = new HashMap<String, DSpaceConfig>(); for (DSpaceConfig config : l) { configMap.put(config.getKey(), config); } configurationService.replaceVariables(configMap); assertEquals("all configuration list members should be map members", l.size(), configMap.size()); assertEquals("DSpace", configMap.get("service.name").getValue()); assertEquals("Aaron Zeckoski", configMap.get("aaronz").getValue()); assertEquals("Aaron Zeckoski", configMap.get("current.user").getValue()); assertEquals("This is a value", configMap.get("test.key1").getValue()); assertEquals("This is key1=This is a value", configMap.get("test.key2").getValue()); assertEquals("This is key2=This is key1=This is a value", configMap.get("test.key3").getValue()); assertEquals("Direct circular reference should not be replaced", configMap.get("circular").getValue(), l.get(dirIdx).getValue()); assertEquals("Indirect circular reference should not be replaced", configMap.get("indirect.circular").getValue(), l.get(indirIdx).getValue()); //trash the references l = null; configMap = null; } /** * Test method for {@link org.dspace.servicemanager.config.DSpaceConfigurationService#getAllProperties()}. */ @Test public void testGetAllProperties() { Map<String, String> props = configurationService.getAllProperties(); assertNotNull(props); assertEquals(8, props.size()); assertNotNull(props.get("service.name")); assertEquals("DSpace", props.get("service.name")); //trash the references props = null; } /** * Test method for {@link org.dspace.servicemanager.config.DSpaceConfigurationService#getProperties()}. */ @Test public void testGetProperties() { Properties props = configurationService.getProperties(); assertNotNull(props); assertEquals(8, props.size()); assertNotNull(props.get("service.name")); assertEquals("DSpace", props.get("service.name")); //trash the references props = null; } /** * Test method for {@link org.dspace.servicemanager.config.DSpaceConfigurationService#getProperty(java.lang.String)}. */ @Test public void testGetProperty() { String prop = configurationService.getProperty("service.name"); assertNotNull(prop); assertEquals("DSpace", prop); prop = configurationService.getProperty("XXXXX"); assertNull(prop); prop = null; } /** * Test method for {@link org.dspace.servicemanager.config.DSpaceConfigurationService#getPropertyAsType(java.lang.String, java.lang.Class)}. */ @Test public void testGetPropertyAsTypeStringClassOfT() { String prop = configurationService.getPropertyAsType("service.name", String.class); assertNotNull(prop); assertEquals("DSpace", prop); String[] array = configurationService.getPropertyAsType("sample.array", String[].class); assertNotNull(array); assertEquals("itemA", array[0]); assertEquals("itemB", array[1]); assertEquals("itemC", array[2]); Integer number = configurationService.getPropertyAsType("sample.number", Integer.class); assertNotNull(number); assertEquals(new Integer(123), number); Boolean bool = configurationService.getPropertyAsType("sample.boolean", Boolean.class); assertNotNull(bool); assertEquals(Boolean.TRUE, bool); assertEquals(123, (int) configurationService.getPropertyAsType("sample.number", int.class) ); assertEquals(true, (boolean) configurationService.getPropertyAsType("sample.boolean", boolean.class) ); prop = configurationService.getPropertyAsType("XXXXX", String.class); assertNull(prop); prop = null; } /** * Test method for {@link org.dspace.servicemanager.config.DSpaceConfigurationService#getPropertyAsType(java.lang.String, java.lang.Object)}. */ @Test public void testGetPropertyAsTypeStringT() { String prop = configurationService.getPropertyAsType("service.name", "DeeSpace"); assertNotNull(prop); assertEquals("DSpace", prop); String[] array = configurationService.getPropertyAsType("sample.array", new String[] {"A","B"}); assertNotNull(array); assertEquals("itemA", array[0]); assertEquals("itemB", array[1]); assertEquals("itemC", array[2]); Integer number = configurationService.getPropertyAsType("sample.number", new Integer(12345)); assertNotNull(number); assertEquals(new Integer(123), number); Boolean bool = configurationService.getPropertyAsType("sample.boolean", Boolean.FALSE); assertNotNull(bool); assertEquals(Boolean.TRUE, bool); boolean b = configurationService.getPropertyAsType("sample.boolean", false); assertTrue(b); prop = configurationService.getPropertyAsType("XXXXX", "XXX"); assertEquals("XXX", prop); prop = null; } @Test public void testGetPropertyAsTypeStringTBoolean() { String prop = configurationService.getProperty("service.fake.thing"); assertNull(prop); prop = configurationService.getPropertyAsType("service.fake.thing", "Fakey", false); assertNotNull(prop); assertEquals("Fakey", prop); prop = configurationService.getProperty("service.fake.thing"); assertNull(prop); prop = configurationService.getPropertyAsType("service.fake.thing", "Fakey", true); assertNotNull(prop); assertEquals("Fakey", prop); prop = configurationService.getProperty("service.fake.thing"); assertNotNull(prop); assertEquals("Fakey", prop); prop = null; } @Test public void testSetProperty() { String prop = configurationService.getProperty("newOne"); assertNull(prop); boolean changed = configurationService.setProperty("newOne", "1111111"); assertTrue(changed); prop = configurationService.getProperty("newOne"); assertNotNull(prop); assertEquals("1111111", prop); prop = configurationService.getProperty("newBool"); assertNull(prop); changed = configurationService.setProperty("newBool", true); assertTrue(changed); prop = configurationService.getProperty("newBool"); assertNotNull(prop); assertEquals("true", prop); changed = configurationService.setProperty("newBool", true); assertFalse(changed); changed = configurationService.setProperty("newBool", null); assertTrue(changed); prop = configurationService.getProperty("newBool"); assertNull(prop); prop = null; } /** * Test method for {@link org.dspace.servicemanager.config.DSpaceConfigurationService#getConfiguration()}. */ @Test public void testGetConfiguration() { assertNotNull( configurationService.getConfiguration() ); assertEquals(8, configurationService.getConfiguration().size() ); } /** * Test method for {@link org.dspace.servicemanager.config.DSpaceConfigurationService#loadConfig(java.lang.String, java.lang.String)}. */ @Test public void testLoadConfig() { assertEquals(8, configurationService.getConfiguration().size()); configurationService.loadConfig("newA", "A"); assertEquals(9, configurationService.getConfiguration().size()); assertEquals("A", configurationService.getProperty("newA")); configurationService.loadConfig("newB", "service is ${service.name}"); assertEquals(10, configurationService.getConfiguration().size()); assertEquals("service is DSpace", configurationService.getProperty("newB")); configurationService.loadConfig("newA", "aaronz"); assertEquals(10, configurationService.getConfiguration().size()); assertEquals("aaronz", configurationService.getProperty("newA")); } /** * Test method for {@link org.dspace.servicemanager.config.DSpaceConfigurationService#clear()}. */ @Test public void testClear() { configurationService.clear(); assertEquals(0, configurationService.getAllProperties().size()); } /** * Tests the ability of the system to properly extract system properties into the configuration */ @Test public void testGetPropertiesFromSystem() { DSpaceConfigurationService dscs = new DSpaceConfigurationService(); int size = dscs.getConfiguration().size(); System.setProperty("dspace.az.system.config", "Hello"); System.setProperty("not.dspace", "Adios"); dscs = new DSpaceConfigurationService(); assertEquals(size + 1, dscs.getConfiguration().size()); assertEquals("Hello", dscs.getProperty("az.system.config")); dscs.clear(); dscs = null; } }