1 16 17 package org.apache.commons.configuration; 18 19 import java.io.File ; 20 import java.io.FileWriter ; 21 import java.util.Collection ; 22 import java.net.URL ; 23 24 import junit.framework.TestCase; 25 26 import org.xml.sax.SAXParseException ; 27 28 33 public class TestConfigurationFactory extends TestCase 34 { 35 36 private File digesterRules = new File ("conf/digesterRules.xml"); 37 private File testDigesterFile = 38 new File ("conf/testDigesterConfiguration.xml"); 39 private File testDigesterFileReverseOrder = 40 new File ("conf/testDigesterConfigurationReverseOrder.xml"); 41 private File testDigesterFileNamespaceAware = 42 new File ("conf/testDigesterConfigurationNamespaceAware.xml"); 43 private File testDigesterFileBasePath = 44 new File ("conf/testDigesterConfigurationBasePath.xml"); 45 private File testDigesterFileEnhanced = 46 new File ("conf/testDigesterConfiguration2.xml"); 47 private File testDigesterFileComplete = 48 new File ("conf/testDigesterConfiguration3.xml"); 49 private File testDigesterFileOptional = 50 new File ("conf/testDigesterOptionalConfiguration.xml"); 51 private File testDigesterFileOptionalEx = 52 new File ("conf/testDigesterOptionalConfigurationEx.xml"); 53 54 private File testDigesterBadXML = new File ("conf/testDigesterBadXML.xml"); 55 56 private String testBasePath = new File ("conf").getAbsolutePath(); 57 58 private File testProperties = new File ("conf/test.properties"); 59 private File testAbsConfig = new File ("target/testAbsConfig.xml"); 60 61 private Configuration configuration; 62 private CompositeConfiguration compositeConfiguration; 63 private ConfigurationFactory factory; 64 65 public void setUp() throws Exception 66 { 67 System.setProperty("java.naming.factory.initial", "org.apache.commons.configuration.MockStaticMemoryInitialContextFactory"); 68 factory = new ConfigurationFactory(); 69 } 70 71 public void testJNDI() throws Exception 72 { 73 JNDIConfiguration jndiConfiguration = new JNDIConfiguration(); 74 Object o = jndiConfiguration.getProperty("test.boolean"); 75 assertNotNull(o); 76 assertEquals("true", o.toString()); 77 } 78 79 public void testLoadingConfiguration() throws Exception 80 { 81 factory.setConfigurationFileName( 82 testDigesterFile.toString()); 83 84 compositeConfiguration = 85 (CompositeConfiguration) factory.getConfiguration(); 86 87 assertEquals( 88 "Verify how many configs", 89 3, 90 compositeConfiguration.getNumberOfConfigurations()); 91 assertEquals( 92 PropertiesConfiguration.class, 93 compositeConfiguration.getConfiguration(0).getClass()); 94 PropertiesConfiguration pc = 95 (PropertiesConfiguration) compositeConfiguration.getConfiguration( 96 0); 97 98 assertNotNull( 99 "Make sure we have a fileName:" + pc.getFileName(), 100 pc.getFileName()); 101 102 assertTrue( 103 "Make sure we have loades our key", 104 compositeConfiguration.getBoolean("test.boolean")); 105 assertEquals( 106 "I'm complex!", 107 compositeConfiguration.getProperty( 108 "element2.subelement.subsubelement")); 109 110 configuration = compositeConfiguration; 111 assertEquals( 112 "I'm complex!", 113 configuration.getProperty("element2.subelement.subsubelement")); 114 } 115 116 public void testLoadingConfigurationReverseOrder() throws Exception 117 { 118 factory.setConfigurationFileName( 119 testDigesterFileReverseOrder.toString()); 120 121 configuration = factory.getConfiguration(); 122 123 assertEquals("8", configuration.getProperty("test.short")); 124 125 factory.setConfigurationFileName(testDigesterFile.toString()); 126 127 configuration = factory.getConfiguration(); 128 assertEquals("1", configuration.getProperty("test.short")); 129 } 130 131 public void testLoadingConfigurationWithRulesXML() throws Exception 132 { 133 factory.setConfigurationFileName(testDigesterFile.toString()); 134 factory.setDigesterRules(digesterRules.toURL()); 135 136 compositeConfiguration = (CompositeConfiguration) factory.getConfiguration(); 137 138 assertEquals( 139 "Verify how many configs", 140 3, 141 compositeConfiguration.getNumberOfConfigurations()); 142 143 assertEquals( 144 PropertiesConfiguration.class, 145 compositeConfiguration.getConfiguration(0).getClass()); 146 147 PropertiesConfiguration pc = 148 (PropertiesConfiguration) compositeConfiguration.getConfiguration( 149 0); 150 assertNotNull( 151 "Make sure we have a fileName:" + pc.getFileName(), 152 pc.getFileName()); 153 assertTrue( 154 "Make sure we have loaded our key", 155 pc.getBoolean("test.boolean")); 156 157 assertTrue( 158 "Make sure we have loaded our key", 159 compositeConfiguration.getBoolean("test.boolean")); 160 161 assertEquals( 162 "I'm complex!", 163 compositeConfiguration.getProperty( 164 "element2.subelement.subsubelement")); 165 166 configuration = compositeConfiguration; 167 assertEquals( 168 "I'm complex!", 169 configuration.getProperty("element2.subelement.subsubelement")); 170 } 171 172 public void testLoadingConfigurationNamespaceAware() throws Exception 173 { 174 factory.setConfigurationFileName(testDigesterFileNamespaceAware.toString()); 175 factory.setDigesterRuleNamespaceURI("namespace-one"); 177 178 checkCompositeConfiguration(); 179 } 180 181 public void testLoadingConfigurationBasePath() throws Exception 182 { 183 factory.setConfigurationFileName(testDigesterFileBasePath.toString()); 184 185 factory.setBasePath(testBasePath); 186 187 190 checkCompositeConfiguration(); 191 } 192 193 public void testLoadingAdditional() throws Exception 194 { 195 factory.setConfigurationFileName(testDigesterFileEnhanced.toString()); 196 factory.setBasePath(null); 197 checkUnionConfig(); 198 } 199 200 public void testLoadingURL() throws Exception 201 { 202 factory.setConfigurationURL(testDigesterFileEnhanced.toURL()); 203 checkUnionConfig(); 204 } 205 206 public void testLoadingFromJAR() throws Exception 207 { 208 URL url = Thread.currentThread().getContextClassLoader().getResource("config-jar.xml"); 209 assertNotNull("config-jar.xml not found on the classpath", url); 210 factory.setConfigurationURL(url); 211 212 Configuration conf = factory.getConfiguration(); 213 assertFalse("The configuration is empty", conf.isEmpty()); 214 } 215 216 public void testThrowingConfigurationInitializationException() throws Exception 217 { 218 factory.setConfigurationFileName(testDigesterBadXML.toString()); 219 try 220 { 221 factory.getConfiguration(); 222 fail("Should have throw an Exception"); 223 } 224 catch (ConfigurationException cle) 225 { 226 assertTrue(cle.getCause() instanceof SAXParseException ); 227 } 228 } 229 230 public void testAllConfiguration() throws Exception 232 { 233 factory.setConfigurationURL(testDigesterFileComplete.toURL()); 234 Configuration config = factory.getConfiguration(); 235 assertFalse(config.isEmpty()); 236 assertTrue(config instanceof CompositeConfiguration); 237 CompositeConfiguration cc = (CompositeConfiguration) config; 238 assertTrue(cc.getNumberOfConfigurations() > 1); 239 242 assertNotNull(config.getProperty("tables.table(0).fields.field(2).name")); 243 assertNotNull(config.getProperty("element2.subelement.subsubelement")); 244 assertEquals("value", config.getProperty("element3")); 245 assertEquals("foo", config.getProperty("element3[@name]")); 246 assertNotNull(config.getProperty("mail.account.user")); 247 248 assertNotNull(config.getProperty("test.onlyinjndi")); 250 assertTrue(config.getBoolean("test.onlyinjndi")); 251 252 Configuration subset = config.subset("test"); 253 assertNotNull(subset.getProperty("onlyinjndi")); 254 assertTrue(subset.getBoolean("onlyinjndi")); 255 256 assertNotNull(config.getProperty("java.version")); 258 assertEquals(System.getProperty("java.version"), config.getString("java.version")); 259 } 260 261 public void testOptionalConfigurations() throws Exception 263 { 264 factory.setConfigurationURL(testDigesterFileOptional.toURL()); 265 Configuration config = factory.getConfiguration(); 266 assertTrue(config.getBoolean("test.boolean")); 267 assertEquals("value", config.getProperty("element")); 268 269 factory.setConfigurationURL(testDigesterFileOptionalEx.toURL()); 270 try 271 { 272 config = factory.getConfiguration(); 273 fail("Unexisting properties loaded!"); 274 } 275 catch(ConfigurationException cex) 276 { 277 } 279 } 280 281 public void testLoadAbsolutePath() throws Exception 283 { 284 try 285 { 286 FileWriter out = null; 287 try 288 { 289 out = new FileWriter (testAbsConfig); 290 out.write("<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>"); 291 out.write("<configuration>"); 292 out.write("<properties fileName=\""); 293 out.write(testProperties.getAbsolutePath()); 294 out.write("\"/>"); 295 out.write("</configuration>"); 296 } 297 finally 298 { 299 if (out != null) 300 { 301 out.close(); 302 } 303 } 304 305 factory.setConfigurationFileName(testAbsConfig.toString()); 306 Configuration config = factory.getConfiguration(); 307 assertTrue(config.getBoolean("configuration.loaded")); 308 } 309 finally 310 { 311 if (testAbsConfig.exists()) 312 { 313 testAbsConfig.delete(); 314 } 315 } 316 } 317 318 private void checkUnionConfig() throws Exception 319 { 320 compositeConfiguration = (CompositeConfiguration) factory.getConfiguration(); 321 assertEquals( 322 "Verify how many configs", 323 3, 324 compositeConfiguration.getNumberOfConfigurations()); 325 326 Object prop = compositeConfiguration.getProperty("tables.table.name"); 328 assertTrue(prop instanceof Collection ); 329 assertEquals(3, ((Collection ) prop).size()); 330 assertEquals( 331 "users", 332 compositeConfiguration.getProperty("tables.table(0).name")); 333 assertEquals( 334 "documents", 335 compositeConfiguration.getProperty("tables.table(1).name")); 336 assertEquals( 337 "tasks", 338 compositeConfiguration.getProperty("tables.table(2).name")); 339 340 prop = 341 compositeConfiguration.getProperty( 342 "tables.table.fields.field.name"); 343 assertTrue(prop instanceof Collection ); 344 assertEquals(17, ((Collection ) prop).size()); 345 346 assertEquals( 347 "smtp.mydomain.org", 348 compositeConfiguration.getString("mail.host.smtp")); 349 assertEquals( 350 "pop3.mydomain.org", 351 compositeConfiguration.getString("mail.host.pop")); 352 353 assertEquals( 355 "masterOfPost", 356 compositeConfiguration.getString("mail.account.user")); 357 assertEquals( 358 "topsecret", 359 compositeConfiguration.getString("mail.account.psswd")); 360 361 assertEquals( 363 "enhanced factory", 364 compositeConfiguration.getString("test.configuration")); 365 } 366 367 private void checkCompositeConfiguration() throws Exception 368 { 369 compositeConfiguration = (CompositeConfiguration) factory.getConfiguration(); 370 371 assertEquals( 372 "Verify how many configs", 373 2, 374 compositeConfiguration.getNumberOfConfigurations()); 375 376 assertEquals( 377 PropertiesConfiguration.class, 378 compositeConfiguration.getConfiguration(0).getClass()); 379 380 PropertiesConfiguration pc = 381 (PropertiesConfiguration) compositeConfiguration.getConfiguration( 382 0); 383 assertNotNull( 384 "Make sure we have a fileName:" + pc.getFileName(), 385 pc.getFileName()); 386 assertTrue( 387 "Make sure we have loaded our key", 388 pc.getBoolean("test.boolean")); 389 390 assertTrue( 391 "Make sure we have loaded our key", 392 compositeConfiguration.getBoolean("test.boolean")); 393 394 395 Object property = compositeConfiguration.getProperty( 396 "element2.subelement.subsubelement"); 397 assertNull("Should have returned a null", property); 398 } 399 } 400 | Popular Tags |