package org.jacorb.test.config; /* * JacORB - a free Java ORB * * Copyright (C) 2000-2014 Gerald Brose / The JacORB Team. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * */ import static org.junit.Assert.assertEquals; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.util.Properties; import org.jacorb.config.Configuration; import org.jacorb.config.JacORBConfiguration; import org.jacorb.test.harness.TestUtils; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.omg.CORBA.ORB; /** * Tests the various configuration mechanisms, properties files, and * property precedence in JacORB. * @author Alphonse Bendt * @author Andre Spiegel */ public class ConfigurationTest { private final Properties oldProps = new Properties(); @Before public void setUp() throws Exception { oldProps.putAll(System.getProperties()); } @After public void tearDown() throws Exception { System.setProperties(oldProps); } /** * Place an orb.properties file on the classpath and verify that it gets * loaded by the ORB. */ @Test public void testOrbPropertiesClasspath() throws Exception { try { createPropertiesFile("target/test-classes/orb.properties", "jacorb.connection.client.connect_timeout=33099"); Properties props = new Properties(); props.put("org.omg.CORBA.ORBClass", "org.jacorb.orb.ORB"); props.put("org.omg.CORBA.ORBSingletonClass", "org.jacorb.orb.ORBSingleton"); ORB orb = ORB.init(new String[] {}, props); int timeout = ((org.jacorb.orb.ORB) orb).getConfiguration() .getAttributeAsInteger( "jacorb.connection.client.connect_timeout", 0); assertEquals(33099, timeout); orb.destroy(); } finally { deletePropertiesFile ("target/test-classes/orb.properties"); } } @Test public void testOrbidPropertiesConfigDir() throws Exception { try { createPropertiesFile ("mytestorbid.properties", "jacorb.connection.client.connect_timeout=33098"); Properties props = new Properties(); props.put("org.omg.CORBA.ORBClass", "org.jacorb.orb.ORB"); props.put("org.omg.CORBA.ORBSingletonClass", "org.jacorb.orb.ORBSingleton"); System.setProperty("jacorb.config.dir", TestUtils .osDependentPath(TestUtils.testHome())); System.setProperty("ORBid", "mytestorbid"); ORB orb = ORB.init(new String[] {}, props); int timeout = ((org.jacorb.orb.ORB) orb).getConfiguration() .getAttributeAsInteger( "jacorb.connection.client.connect_timeout", 0); assertEquals(33098, timeout); orb.destroy(); } finally { deletePropertiesFile ("mytestorbid.properties"); } } /** * Place an orbid.properties file on the classpath and verify * that it gets loaded. */ @Test public void testOrbidPropertiesClasspath() throws Exception { try { createPropertiesFile("target/test-classes/myownorbid.properties", "jacorb.connection.client.connect_timeout=33077"); Properties props = new Properties(); props.put("org.omg.CORBA.ORBClass", "org.jacorb.orb.ORB"); props.put("org.omg.CORBA.ORBSingletonClass", "org.jacorb.orb.ORBSingleton"); System.setProperty("ORBid", "myownorbid"); ORB orb = ORB.init(new String[] {}, props); int timeout = ((org.jacorb.orb.ORB) orb).getConfiguration() .getAttributeAsInteger( "jacorb.connection.client.connect_timeout", 0); assertEquals(33077, timeout); orb.destroy(); } finally { deletePropertiesFile ("target/test-classes/myownorbid.properties"); } } /** * Get properties from a custom.props file and verify that they * have been loaded. */ @Test public void testCustomProps() throws Exception { try { createPropertiesFile("custom.properties", "jacorb.connection.client.connect_timeout=33100"); Properties props = new Properties(); props.put("org.omg.CORBA.ORBClass", "org.jacorb.orb.ORB"); props.put("org.omg.CORBA.ORBSingletonClass", "org.jacorb.orb.ORBSingleton"); System.setProperty("custom.props", getConfigFilename ("custom.properties")); ORB orb = ORB.init(new String[] {}, props); int timeout = ((org.jacorb.orb.ORB) orb).getConfiguration() .getAttributeAsInteger( "jacorb.connection.client.connect_timeout", 0); assertEquals(33100, timeout); orb.destroy(); } finally { deletePropertiesFile ("custom.properties"); } } /** * Verify that system properties end up in the JacORB configuration. */ @Test public void testSystemProperties() throws Exception { Properties props = new Properties(); props.put("org.omg.CORBA.ORBClass", "org.jacorb.orb.ORB"); props.put("org.omg.CORBA.ORBSingletonClass", "org.jacorb.orb.ORBSingleton"); System.setProperty ("jacorb.connection.client.connect_timeout", "33105"); ORB orb = ORB.init(new String[] {}, props); int timeout = ((org.jacorb.orb.ORB) orb).getConfiguration() .getAttributeAsInteger( "jacorb.connection.client.connect_timeout", 0); assertEquals(33105, timeout); } /** * Verify that ORB.init() properties end up in the JacORB configuration. */ @Test public void testOrbInitProperties() throws Exception { Properties props = new Properties(); props.put("org.omg.CORBA.ORBClass", "org.jacorb.orb.ORB"); props.put("org.omg.CORBA.ORBSingletonClass", "org.jacorb.orb.ORBSingleton"); props.put("jacorb.connection.client.connect_timeout", "33707"); ORB orb = ORB.init(new String[] {}, props); int timeout = ((org.jacorb.orb.ORB) orb).getConfiguration() .getAttributeAsInteger( "jacorb.connection.client.connect_timeout", 0); assertEquals(33707, timeout); orb.destroy(); } /** * A property is set in every conceivable way, and we verify that * the value from ORB.init() takes precedence over all the others. */ @Test public void testOrbInitPrecedence() throws Exception { try { createPropertiesFile ("target/test-classes/orb.properties", "jacorb.connection.client.connect_timeout=33700"); createPropertiesFile ("myorbid.properties", "jacorb.connection.client.connect_timeout=33701"); createPropertiesFile ("special.properties", "jacorb.connection.client.connect_timeout=33702"); createPropertiesFile ("target/test-classes/myorbid.properties", "jacorb.connection.client.connect_timeout=33703"); Properties props = new Properties(); props.put("org.omg.CORBA.ORBClass", "org.jacorb.orb.ORB"); props.put("org.omg.CORBA.ORBSingletonClass", "org.jacorb.orb.ORBSingleton"); props.put("jacorb.connection.client.connect_timeout", "33705"); System.setProperty("jacorb.config.log.verbosity", "4"); System.setProperty("jacorb.config.dir", TestUtils.testHome()); System.setProperty("ORBid", "myorbid"); System.setProperty("custom.props", getConfigFilename("special.properties")); System.setProperty("jacorb.connection.client.connect_timeout", "33704"); ORB orb = ORB.init(new String[] {}, props); int timeout = ((org.jacorb.orb.ORB) orb).getConfiguration() .getAttributeAsInteger( "jacorb.connection.client.connect_timeout", 0); assertEquals(33705, timeout); orb.destroy(); } finally { deletePropertiesFile ("target/test-classes/orb.properties"); deletePropertiesFile ("target/test-classes/myorbid.properties"); deletePropertiesFile ("myorbid.properties"); deletePropertiesFile ("special.properties"); } } /** * Check that a property specified in the System properties overrides * most other ways of specifying that property. */ @Test public void testSystemPrecedence() throws Exception { try { createPropertiesFile ("target/test-classes/orb.properties", "jacorb.connection.client.connect_timeout=33700"); createPropertiesFile ("myorbid.properties", "jacorb.connection.client.connect_timeout=33701"); createPropertiesFile ("special.properties", "jacorb.connection.client.connect_timeout=33702"); createPropertiesFile ("target/test-classes/myorbid.properties", "jacorb.connection.client.connect_timeout=33703"); Properties props = new Properties(); props.put("org.omg.CORBA.ORBClass", "org.jacorb.orb.ORB"); props.put("org.omg.CORBA.ORBSingletonClass", "org.jacorb.orb.ORBSingleton"); System.setProperty("jacorb.config.log.verbosity", "4"); System.setProperty("jacorb.config.dir", TestUtils.testHome()); System.setProperty("ORBid", "myorbid"); System.setProperty("custom.props", getConfigFilename("special.properties")); System.setProperty("jacorb.connection.client.connect_timeout", "33704"); ORB orb = ORB.init(new String[] {}, props); int timeout = ((org.jacorb.orb.ORB) orb).getConfiguration() .getAttributeAsInteger( "jacorb.connection.client.connect_timeout", 0); assertEquals(33704, timeout); orb.destroy(); } finally { deletePropertiesFile ("target/test-classes/orb.properties"); deletePropertiesFile ("myorbid.properties"); deletePropertiesFile ("special.properties"); } } /** * Check that a property specified in orbid.properties overrides * most other ways of specifying that property. */ @Test public void testOrbIdClasspathPrecedence() throws Exception { try { createPropertiesFile ("target/test-classes/orb.properties", "jacorb.connection.client.connect_timeout=33700"); createPropertiesFile ("myorbid.properties", "jacorb.connection.client.connect_timeout=33701"); createPropertiesFile ("target/test-classes/myorbid.properties", "jacorb.connection.client.connect_timeout=33703"); Properties props = new Properties(); props.put("org.omg.CORBA.ORBClass", "org.jacorb.orb.ORB"); props.put("org.omg.CORBA.ORBSingletonClass", "org.jacorb.orb.ORBSingleton"); System.setProperty("jacorb.config.log.verbosity", "4"); System.setProperty("jacorb.config.dir", TestUtils.testHome()); System.setProperty("ORBid", "myorbid"); ORB orb = ORB.init(new String[] {}, props); int timeout = ((org.jacorb.orb.ORB) orb).getConfiguration() .getAttributeAsInteger( "jacorb.connection.client.connect_timeout", 0); assertEquals(33703, timeout); orb.destroy(); } finally { deletePropertiesFile ("target/test-classes/orb.properties"); deletePropertiesFile ("myorbid.properties"); deletePropertiesFile ("target/test-classes/myorbid.properties"); } } /** * Check that a property specified in custom.props overrides * most other ways of specifying that property. */ @Test public void testCustomPropsPrecedence() throws Exception { try { createPropertiesFile ("target/test-classes/orb.properties", "jacorb.connection.client.connect_timeout=33700"); createPropertiesFile ("myorbid.properties", "jacorb.connection.client.connect_timeout=33701"); createPropertiesFile ("special.properties", "jacorb.connection.client.connect_timeout=33702"); Properties props = new Properties(); props.put("org.omg.CORBA.ORBClass", "org.jacorb.orb.ORB"); props.put("org.omg.CORBA.ORBSingletonClass", "org.jacorb.orb.ORBSingleton"); System.setProperty("jacorb.config.log.verbosity", "4"); System.setProperty("jacorb.config.dir", TestUtils.testHome()); System.setProperty("ORBid", "myorbid"); System.setProperty("custom.props", getConfigFilename("special.properties")); ORB orb = ORB.init(new String[] {}, props); int timeout = ((org.jacorb.orb.ORB) orb).getConfiguration() .getAttributeAsInteger( "jacorb.connection.client.connect_timeout", 0); assertEquals(33702, timeout); orb.destroy(); } finally { deletePropertiesFile ("target/test-classes/orb.properties"); deletePropertiesFile ("myorbid.properties"); deletePropertiesFile ("special.properties"); } } /** * Check that a property specified in orbid.properties overrides * the same property as defined in orb.properties. */ @Test public void testOrbIdConfigDirPrecedence() throws Exception { try { createPropertiesFile ("target/test-classes/orb.properties", "jacorb.connection.client.connect_timeout=33700"); createPropertiesFile ("myorbid.properties", "jacorb.connection.client.connect_timeout=33701"); Properties props = new Properties(); props.put("org.omg.CORBA.ORBClass", "org.jacorb.orb.ORB"); props.put("org.omg.CORBA.ORBSingletonClass", "org.jacorb.orb.ORBSingleton"); System.setProperty("jacorb.config.log.verbosity", "4"); System.setProperty("jacorb.config.dir", TestUtils.testHome()); System.setProperty("ORBid", "myorbid"); ORB orb = ORB.init(new String[] {}, props); int timeout = ((org.jacorb.orb.ORB) orb).getConfiguration() .getAttributeAsInteger( "jacorb.connection.client.connect_timeout", 0); assertEquals(33701, timeout); orb.destroy(); } finally { deletePropertiesFile ("target/test-classes/orb.properties"); deletePropertiesFile ("myorbid.properties"); } } @Test public void testAppletConfiguration() throws Exception { try { createPropertiesFile ("target/test-classes/orb.properties", "jacorb.connection.client.connect_timeout=33320"); createPropertiesFile ("target/test-classes/myapplet.properties", "jacorb.connection.client.connect_timeout=33321"); createPropertiesFile ("target/test-classes/applet-special.properties", "jacorb.connection.client.connect_timeout=33322"); ORB orb = ORB.init(new String[] {}, null); Properties props = new Properties(); props.put ("jacorb.config.log.verbosity", "4"); props.put ("jacorb.connection.client.connect_timeout", "33323"); props.put ("ORBid", "myapplet"); props.put ("custom.props", "applet-special.properties"); Configuration config = JacORBConfiguration.getConfiguration(props, orb, true); int timeout = config.getAttributeAsInteger( "jacorb.connection.client.connect_timeout", 0); assertEquals(33323, timeout); orb.destroy(); } finally { deletePropertiesFile ("target/test-classes/orb.properties"); deletePropertiesFile ("target/test-classes/myapplet.properties"); deletePropertiesFile ("target/test-classes/applet-special.properties"); } } /** * Verify that ORB.init() properties end up in the JacORB configuration. */ @Test public void testOrbInitSingletonProperties() throws Exception { Properties props = new Properties(); props.put("org.omg.CORBA.ORBClass", "org.jacorb.orb.ORB"); props.put("org.omg.CORBA.ORBSingletonClass", "org.jacorb.orb.ORBSingleton"); props.put("jacorb.connection.client.connect_timeout", "33707"); ORB orb = ORB.init(new String[] {}, props); int timeout = ((org.jacorb.orb.ORB) orb).getConfiguration() .getAttributeAsInteger( "jacorb.connection.client.connect_timeout", 0); assertEquals(33707, timeout); ORB singleton = ORB.init (); timeout = ((org.jacorb.orb.ORBSingleton)singleton).getConfiguration() .getAttributeAsInteger( "jacorb.connection.client.connect_timeout", 0); assertEquals(33707, timeout); orb.destroy(); } /** * Verify that properties are cached in both string and optimised * caches. */ @Test public void testCacheProperties() throws Exception { Properties props = new Properties(); props.put("org.omg.CORBA.ORBClass", "org.jacorb.orb.ORB"); props.put("org.omg.CORBA.ORBSingletonClass", "org.jacorb.orb.ORBSingleton"); props.put("jacorb.connection.client.connect_timeout", "33707"); ORB orb = ORB.init(new String[] {}, props); int timeout = ((org.jacorb.orb.ORB) orb).getConfiguration() .getAttributeAsInteger( "jacorb.connection.client.connect_timeout", 0); assertEquals(33707, timeout); timeout = Integer.valueOf ( ((org.jacorb.orb.ORB) orb).getConfiguration().getAttribute( "jacorb.connection.client.connect_timeout", "0") ); assertEquals(33707, timeout); orb.destroy(); } /** * Convenience method for creating an os-dependent filename relative * to the test home directory. */ private String getConfigFilename (String name) { return TestUtils.osDependentPath ( TestUtils.testHome() + "/" + name ); } private void createPropertiesFile (String name, String content) throws IOException { File file = new File(TestUtils.testHome(), name); File parent = file.getParentFile(); parent.mkdirs(); PrintWriter out = new PrintWriter (new FileWriter (file)); out.println (content); out.close(); } private void deletePropertiesFile (String name) { File f = new File(TestUtils.testHome(), name); f.delete(); } }