blob: a90ee42b3e2c45073f80e54c4435669f9c279ae1 [file] [log] [blame]
// Licensed to the Apache Software Foundation (ASF) under one or more contributor
// license agreements. See the NOTICE.txt file distributed with this work for
// additional information regarding copyright ownership. The ASF licenses this
// file to you 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.apache.oodt.commons;
import java.io.*;
import java.net.MalformedURLException;
import java.util.*;
import junit.framework.*;
import org.w3c.dom.*;
import org.xml.sax.*;
/** Unit test the {@link Configuration} class.
*
* @author Kelly
*/
public class ConfigurationTest extends TestCase {
/** Construct the test case for the {@link Configuration} class. */
public ConfigurationTest(String name) {
super(name);
}
protected void setUp() throws Exception {
// Create a temporary test configuration file.
tmpFile = File.createTempFile("conf", ".xml");
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(tmpFile));
byte[] doc = TEST_DOC.getBytes();
out.write(doc, 0, doc.length);
out.close();
oldValue = System.getProperty(Configuration.ENTITY_DIRS_PROP);
System.setProperty(Configuration.ENTITY_DIRS_PROP, "/dir/1,/dir/2");
}
protected void tearDown() throws Exception {
// Nuke the temporary test configuration file.
tmpFile.delete();
if (oldValue == null)
System.getProperties().remove(Configuration.ENTITY_DIRS_PROP);
else
System.setProperty(Configuration.ENTITY_DIRS_PROP, oldValue);
}
/** Test the various property methods. */
public void testConfiguration() throws IOException, SAXException, MalformedURLException {
Configuration c = new Configuration(tmpFile.toURL());
Properties props = new Properties();
props.setProperty("globalKey1", "preset-value");
c.mergeProperties(props);
assertEquals("preset-value", props.getProperty("globalKey1"));
assertEquals("globalValue2", props.getProperty("globalKey2"));
assertEquals("http://testhost.test.domain:12345", c.getWebServerBaseURL());
assertEquals("http://testhost.test.domain:12345/ns.ior", c.getNameServerURL());
assertEquals(42, c.getNameServerStateFrequency());
assertEquals(4, c.getEntityRefDirs().size());
assertTrue(c.getEntityRefDirs().contains("/dir/one"));
assertTrue(c.getEntityRefDirs().contains("/dir/two"));
assertTrue(c.getEntityRefDirs().contains("/dir/1"));
assertTrue(c.getEntityRefDirs().contains("/dir/2"));
assertEquals("/dir/1,/dir/2,/dir/one,/dir/two", System.getProperty(Configuration.ENTITY_DIRS_PROP));
Collection servers = c.getExecServerConfigs();
assertEquals(2, servers.size());
for (Iterator each = servers.iterator(); each.hasNext();) {
ExecServerConfig esc = (ExecServerConfig) each.next();
if (esc.getClassName().equals("test.Class1")) {
assertEquals("Name1", esc.getObjectKey());
assertEquals(1, esc.getProperties().size());
} else if (esc.getClassName().equals("test.Class2")) {
assertEquals("Name2", esc.getObjectKey());
assertEquals(3, esc.getProperties().size());
for (Iterator i = esc.getProperties().entrySet().iterator(); i.hasNext();) {
Map.Entry entry = (Map.Entry) i.next();
if (entry.getKey().equals("localKey1"))
assertEquals("localKey2", entry.getValue());
else if (entry.getKey().equals("globalKey2"))
assertEquals("local-override", entry.getValue());
else if (entry.getKey().equals("org.apache.oodt.commons.Configuration.url"))
; // This one's OK.
else fail("Unknown local property \"" + entry.getKey() + "\" in exec server");
}
} else fail("Unknown ExecServerConfig \"" + esc.getClassName() + "\" in servers from Configuration");
}
}
/** The temporary test configuration file. */
private File tmpFile;
/** Old value of the {@link Configuration#ENTITY_DIRS_PROP} system property. */
public String oldValue;
private static final String TEST_DOC = "<?xml version=\"1.0\"?>\n<!DOCTYPE configuration PUBLIC \"-//JPL//DTD EDA Configuration 1.0//EN\" \"http://enterprise.jpl.nasa.gov/dtd/configuration.dtd\">\n<configuration><webServer><host>testhost.test.domain</host><port>12345</port></webServer><nameServer stateFrequency=\"42\"><iiop><version>1.2</version><host>testhost.test.domain</host><port>12345</port><objectKey>TestService</objectKey></iiop></nameServer><xml><entityRef><dir>/dir/one</dir><dir>/dir/two</dir></entityRef></xml><properties><key>globalKey1</key><value>globalValue1</value><key>globalKey2</key><value>globalValue2</value></properties><programs><execServer><class>test.Class1</class><objectKey>Name1</objectKey></execServer><execServer><class>test.Class2</class><objectKey>Name2</objectKey><properties><key>localKey1</key><value>localKey2</value><key>globalKey2</key><value>local-override</value></properties></execServer></programs></configuration>";
}