diff options
author | Robert Gemmell <robbie@apache.org> | 2013-05-03 11:08:28 +0000 |
---|---|---|
committer | Robert Gemmell <robbie@apache.org> | 2013-05-03 11:08:28 +0000 |
commit | b162949c9fd2b4d2ac6ea455ed538eec5b1909fb (patch) | |
tree | b44312bf1a17a26eeb01d325b06c6c264a50d771 | |
parent | 7ee66edb2e18127a12994f559520933f7a811a4b (diff) | |
download | qpid-python-b162949c9fd2b4d2ac6ea455ed538eec5b1909fb.tar.gz |
QPID-4809: add support for setting configuration properties through the command line and BrokerOptions that can be used by the broker configuration store to resolve variables in the config, use this to supply the default port number values.
Povides chance to alter the ports when first starting the broker and using the initial config file to populate the config store.
merged from trunk r1478696
git-svn-id: https://svn.apache.org/repos/asf/qpid/branches/0.22@1478725 13f79535-47bb-0310-9956-ffa450edef68
16 files changed, 230 insertions, 48 deletions
diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/Broker.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/Broker.java index dd0fde5f7a..25322c7a71 100644 --- a/qpid/java/broker/src/main/java/org/apache/qpid/server/Broker.java +++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/Broker.java @@ -124,7 +124,8 @@ public class Broker } BrokerConfigurationStoreCreator storeCreator = new BrokerConfigurationStoreCreator(); - ConfigurationEntryStore store = storeCreator.createStore(storeLocation, storeType, options.getInitialConfigurationLocation(), options.isOverwriteConfigurationStore()); + ConfigurationEntryStore store = storeCreator.createStore(storeLocation, storeType, options.getInitialConfigurationLocation(), + options.isOverwriteConfigurationStore(), options.getConfigProperties()); if (options.isManagementMode()) { diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/BrokerOptions.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/BrokerOptions.java index 5c2a8fd090..3ba4ae6e91 100644 --- a/qpid/java/broker/src/main/java/org/apache/qpid/server/BrokerOptions.java +++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/BrokerOptions.java @@ -21,6 +21,10 @@ package org.apache.qpid.server; import java.io.File; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import org.apache.qpid.server.configuration.BrokerProperties; import org.apache.qpid.server.configuration.ConfigurationEntryStore; @@ -29,6 +33,16 @@ import org.apache.qpid.server.util.StringUtil; public class BrokerOptions { + public static final String QPID_AMQP_PORT = "qpid.amqp_port"; + public static final String QPID_HTTP_PORT = "qpid.http_port"; + public static final String QPID_RMI_PORT = "qpid.rmi_port"; + public static final String QPID_JMX_PORT = "qpid.jmx_port"; + + public static final String DEFAULT_AMQP_PORT_NUMBER = "5672"; + public static final String DEFAULT_HTTP_PORT_NUMBER = "8080"; + public static final String DEFAULT_RMI_PORT_NUMBER = "8999"; + public static final String DEFAULT_JMX_PORT_NUMBER = "9099"; + public static final String DEFAULT_INITIAL_CONFIG_NAME = "initial-config.json"; public static final String DEFAULT_STORE_TYPE = "json"; public static final String DEFAULT_CONFIG_NAME_PREFIX = "config"; @@ -55,6 +69,7 @@ public class BrokerOptions private String _workingDir; private boolean _skipLoggingConfiguration; private boolean _overwriteConfigurationStore; + private Map<String, String> _configProperties = new HashMap<String,String>(); public String getLogConfigFile() { @@ -289,4 +304,41 @@ public class BrokerOptions { _skipLoggingConfiguration = skipLoggingConfiguration; } + + /** + * Sets the named configuration property to the given value. + * + * Passing a null value causes removal of a previous value, and restores any default there may have been. + */ + public void setConfigProperty(String name, String value) + { + if(value == null) + { + _configProperties.remove(name); + } + else + { + _configProperties.put(name, value); + } + } + + /** + * Get an un-editable copy of the configuration properties, representing + * the user-configured values as well as any defaults for properties + * not otherwise configured. + * + * Subsequent property changes are not reflected in this map. + */ + public Map<String,String> getConfigProperties() + { + ConcurrentHashMap<String, String> properties = new ConcurrentHashMap<String,String>(); + properties.putAll(_configProperties); + + properties.putIfAbsent(QPID_AMQP_PORT, String.valueOf(DEFAULT_AMQP_PORT_NUMBER)); + properties.putIfAbsent(QPID_HTTP_PORT, String.valueOf(DEFAULT_HTTP_PORT_NUMBER)); + properties.putIfAbsent(QPID_RMI_PORT, String.valueOf(DEFAULT_RMI_PORT_NUMBER)); + properties.putIfAbsent(QPID_JMX_PORT, String.valueOf(DEFAULT_JMX_PORT_NUMBER)); + + return Collections.unmodifiableMap(properties); + } } diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/Main.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/Main.java index 46612613dd..03514939ec 100644 --- a/qpid/java/broker/src/main/java/org/apache/qpid/server/Main.java +++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/Main.java @@ -60,6 +60,10 @@ public class Main " optionally specified file path, or as " + BrokerOptions.DEFAULT_INITIAL_CONFIG_NAME + " in the current directory") .withLongOpt("create-initial-config").create("cic"); + private static final Option OPTION_CONFIGURATION_PROPERTY = OptionBuilder.withArgName("name=value").hasArg() + .withDescription("set a configuration property to use when resolving variables in the broker configuration store, with format 'name=value'") + .withLongOpt("config-property").create("prop"); + private static final Option OPTION_LOG_CONFIG_FILE = OptionBuilder.withArgName("file").hasArg() .withDescription("use the specified log4j xml configuration file. By " @@ -103,6 +107,7 @@ public class Main OPTIONS.addOption(OPTION_MM_CONNECTOR_PORT); OPTIONS.addOption(OPTION_MM_HTTP_PORT); OPTIONS.addOption(OPTION_MM_PASSWORD); + OPTIONS.addOption(OPTION_CONFIGURATION_PROPERTY); } protected CommandLine _commandLine; @@ -210,6 +215,28 @@ public class Main } else { + String[] configPropPairs = _commandLine.getOptionValues(OPTION_CONFIGURATION_PROPERTY.getOpt()); + if(configPropPairs != null && configPropPairs.length > 0) + { + for(String s : configPropPairs) + { + int firstEquals = s.indexOf("="); + if(firstEquals == -1) + { + throw new IllegalArgumentException("Configuration property argument is not of the format name=value: " + s); + } + String name = s.substring(0, firstEquals); + String value = s.substring(firstEquals + 1); + + if(name.equals("")) + { + throw new IllegalArgumentException("Configuration property argument is not of the format name=value: " + s); + } + + options.setConfigProperty(name, value); + } + } + String configurationStore = _commandLine.getOptionValue(OPTION_CONFIGURATION_STORE_PATH.getOpt()); if (configurationStore != null) { diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/BrokerConfigurationStoreCreator.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/BrokerConfigurationStoreCreator.java index 8ce74ff334..999602bc2d 100644 --- a/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/BrokerConfigurationStoreCreator.java +++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/BrokerConfigurationStoreCreator.java @@ -61,17 +61,18 @@ public class BrokerConfigurationStoreCreator * @param storeType store type * @param initialConfigLocation initial store location * @param overwrite whether to overwrite an existing configuration store with the initial configuration + * @param configProperties a map of configuration properties the store can use to resolve configuration variables * @throws IllegalConfigurationException if store type is unknown */ - public ConfigurationEntryStore createStore(String storeLocation, String storeType, String initialConfigLocation, boolean overwrite) + public ConfigurationEntryStore createStore(String storeLocation, String storeType, String initialConfigLocation, boolean overwrite, Map<String, String> configProperties) { - ConfigurationEntryStore initialStore = new MemoryConfigurationEntryStore(initialConfigLocation, null); + ConfigurationEntryStore initialStore = new MemoryConfigurationEntryStore(initialConfigLocation, null, configProperties); ConfigurationStoreFactory factory = _factories.get(storeType.toLowerCase()); if (factory == null) { throw new IllegalConfigurationException("Unknown store type: " + storeType); } - return factory.createStore(storeLocation, initialStore, overwrite); + return factory.createStore(storeLocation, initialStore, overwrite, configProperties); } public Collection<String> getStoreTypes() diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/store/JsonConfigurationEntryStore.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/store/JsonConfigurationEntryStore.java index 5f7e68b62a..cec75e5015 100644 --- a/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/store/JsonConfigurationEntryStore.java +++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/store/JsonConfigurationEntryStore.java @@ -1,6 +1,7 @@ package org.apache.qpid.server.configuration.store; import java.io.File; +import java.util.Collections; import java.util.HashMap; import java.util.Map; import java.util.UUID; @@ -15,14 +16,9 @@ public class JsonConfigurationEntryStore extends MemoryConfigurationEntryStore private File _storeFile; - public JsonConfigurationEntryStore(String storeLocation, ConfigurationEntryStore initialStore) + public JsonConfigurationEntryStore(String storeLocation, ConfigurationEntryStore initialStore, boolean overwrite, Map<String, String> configProperties) { - this(storeLocation, initialStore, false); - } - - public JsonConfigurationEntryStore(String storeLocation, ConfigurationEntryStore initialStore, boolean overwrite) - { - super(); + super(configProperties); _storeFile = new File(storeLocation); if(_storeFile.isDirectory()) diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/store/MemoryConfigurationEntryStore.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/store/MemoryConfigurationEntryStore.java index 6ee26c0726..24e0e3bbff 100644 --- a/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/store/MemoryConfigurationEntryStore.java +++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/store/MemoryConfigurationEntryStore.java @@ -48,6 +48,7 @@ import org.apache.qpid.server.model.ConfiguredObject; import org.apache.qpid.server.model.Model; import org.apache.qpid.server.model.UUIDGenerator; import org.apache.qpid.util.Strings; +import org.apache.qpid.util.Strings.ChainedResolver; import org.codehaus.jackson.JsonGenerationException; import org.codehaus.jackson.JsonNode; import org.codehaus.jackson.JsonParser; @@ -77,18 +78,22 @@ public class MemoryConfigurationEntryStore implements ConfigurationEntryStore private boolean _generatedObjectIdDuringLoad; - protected MemoryConfigurationEntryStore() + private ChainedResolver _resolver; + + protected MemoryConfigurationEntryStore(Map<String, String> configProperties) { _objectMapper = new ObjectMapper(); _objectMapper.configure(SerializationConfig.Feature.INDENT_OUTPUT, true); _objectMapper.configure(JsonParser.Feature.ALLOW_COMMENTS, true); _entries = new HashMap<UUID, ConfigurationEntry>(); _relationshipClasses = buildRelationshipClassMap(); + _resolver = new Strings.ChainedResolver(Strings.SYSTEM_RESOLVER, + new Strings.MapResolver(configProperties)); } - MemoryConfigurationEntryStore(String json) + MemoryConfigurationEntryStore(String json, Map<String, String> configProperties) { - this(); + this(configProperties); if (json == null || "".equals(json)) { createRootEntry(); @@ -99,9 +104,9 @@ public class MemoryConfigurationEntryStore implements ConfigurationEntryStore } } - public MemoryConfigurationEntryStore(String initialStoreLocation, ConfigurationEntryStore initialStore) + public MemoryConfigurationEntryStore(String initialStoreLocation, ConfigurationEntryStore initialStore, Map<String, String> configProperties) { - this(); + this(configProperties); if (initialStore == null && (initialStoreLocation == null || "".equals(initialStoreLocation) )) { throw new IllegalConfigurationException("Cannot instantiate the memory broker store as neither initial store nor initial store location is provided"); @@ -609,7 +614,7 @@ public class MemoryConfigurationEntryStore implements ConfigurationEntryStore } else { - return Strings.expand(node.asText()); + return Strings.expand(node.asText(), _resolver); } } else if (node.isArray()) diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/store/factory/JsonConfigurationStoreFactory.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/store/factory/JsonConfigurationStoreFactory.java index 7c7d3e2071..d4e0a23b1b 100644 --- a/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/store/factory/JsonConfigurationStoreFactory.java +++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/store/factory/JsonConfigurationStoreFactory.java @@ -20,6 +20,8 @@ */ package org.apache.qpid.server.configuration.store.factory; +import java.util.Map; + import org.apache.qpid.server.configuration.ConfigurationEntryStore; import org.apache.qpid.server.configuration.store.JsonConfigurationEntryStore; import org.apache.qpid.server.plugin.ConfigurationStoreFactory; @@ -27,9 +29,9 @@ import org.apache.qpid.server.plugin.ConfigurationStoreFactory; public class JsonConfigurationStoreFactory implements ConfigurationStoreFactory { @Override - public ConfigurationEntryStore createStore(String storeLocation, ConfigurationEntryStore initialStore, boolean overwrite) + public ConfigurationEntryStore createStore(String storeLocation, ConfigurationEntryStore initialStore, boolean overwrite, Map<String, String> configProperties) { - return new JsonConfigurationEntryStore(storeLocation, initialStore, overwrite); + return new JsonConfigurationEntryStore(storeLocation, initialStore, overwrite, configProperties); } @Override @@ -37,5 +39,4 @@ public class JsonConfigurationStoreFactory implements ConfigurationStoreFactory { return JsonConfigurationEntryStore.STORE_TYPE; } - } diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/store/factory/MemoryConfigurationStoreFactory.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/store/factory/MemoryConfigurationStoreFactory.java index ed952ff475..fd52b2c93e 100644 --- a/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/store/factory/MemoryConfigurationStoreFactory.java +++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/store/factory/MemoryConfigurationStoreFactory.java @@ -20,6 +20,8 @@ */ package org.apache.qpid.server.configuration.store.factory; +import java.util.Map; + import org.apache.qpid.server.configuration.ConfigurationEntryStore; import org.apache.qpid.server.configuration.store.MemoryConfigurationEntryStore; import org.apache.qpid.server.plugin.ConfigurationStoreFactory; @@ -27,9 +29,9 @@ import org.apache.qpid.server.plugin.ConfigurationStoreFactory; public class MemoryConfigurationStoreFactory implements ConfigurationStoreFactory { @Override - public ConfigurationEntryStore createStore(String storeLocation, ConfigurationEntryStore initialStore, boolean overwrite) + public ConfigurationEntryStore createStore(String storeLocation, ConfigurationEntryStore initialStore, boolean overwrite, Map<String, String> configProperties) { - return new MemoryConfigurationEntryStore(null, initialStore); + return new MemoryConfigurationEntryStore(null, initialStore, configProperties); } @Override @@ -37,5 +39,4 @@ public class MemoryConfigurationStoreFactory implements ConfigurationStoreFacto { return MemoryConfigurationEntryStore.STORE_TYPE; } - } diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/plugin/ConfigurationStoreFactory.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/plugin/ConfigurationStoreFactory.java index c451ae2adc..d964578cb7 100644 --- a/qpid/java/broker/src/main/java/org/apache/qpid/server/plugin/ConfigurationStoreFactory.java +++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/plugin/ConfigurationStoreFactory.java @@ -20,6 +20,8 @@ */ package org.apache.qpid.server.plugin; +import java.util.Map; + import org.apache.qpid.server.configuration.ConfigurationEntryStore; import org.apache.qpid.server.configuration.IllegalConfigurationException; @@ -39,7 +41,8 @@ public interface ConfigurationStoreFactory * @param storeLocation store location * @param initialStore initial store * @param overwrite overwrite existing store with initial store + * @param configProperties a map of configuration properties the store can use to resolve configuration variables * @throws IllegalConfigurationException if store cannot be opened in the given location */ - public ConfigurationEntryStore createStore(String storeLocation, ConfigurationEntryStore initialStore, boolean overwrite); + public ConfigurationEntryStore createStore(String storeLocation, ConfigurationEntryStore initialStore, boolean overwrite, Map<String, String> configProperties); } diff --git a/qpid/java/broker/src/main/resources/initial-config.json b/qpid/java/broker/src/main/resources/initial-config.json index f8b724d351..e510c34178 100644 --- a/qpid/java/broker/src/main/resources/initial-config.json +++ b/qpid/java/broker/src/main/resources/initial-config.json @@ -29,20 +29,20 @@ } ], "ports" : [ { "name" : "AMQP", - "port" : 5672, + "port" : "${qpid.amqp_port}", "authenticationProvider" : "passwordFile" }, { "name" : "HTTP", - "port" : 8080, + "port" : "${qpid.http_port}", "authenticationProvider" : "passwordFile", "protocols" : [ "HTTP" ] }, { "name" : "RMI_REGISTRY", - "port" : 8999, + "port" : "${qpid.rmi_port}", "protocols" : [ "RMI" ] }, { "name" : "JMX_CONNECTOR", - "port" : 9099, + "port" : "${qpid.jmx_port}", "authenticationProvider" : "passwordFile", "protocols" : [ "JMX_RMI" ] }], diff --git a/qpid/java/broker/src/test/java/org/apache/qpid/server/BrokerOptionsTest.java b/qpid/java/broker/src/test/java/org/apache/qpid/server/BrokerOptionsTest.java index 08031c36a4..4b7c99baf1 100644 --- a/qpid/java/broker/src/test/java/org/apache/qpid/server/BrokerOptionsTest.java +++ b/qpid/java/broker/src/test/java/org/apache/qpid/server/BrokerOptionsTest.java @@ -21,6 +21,7 @@ package org.apache.qpid.server; import java.io.File; +import java.util.Map; import org.apache.qpid.test.utils.QpidTestCase; @@ -226,4 +227,47 @@ public class BrokerOptionsTest extends QpidTestCase _options.setManagementModePassword("test"); assertEquals("Unexpected management mode password", "test", _options.getManagementModePassword()); } + + public void testGetDefaultConfigProperties() + { + Map<String,String> props = _options.getConfigProperties(); + + assertEquals("unexpected number of entries", 4, props.keySet().size()); + + assertEquals(BrokerOptions.DEFAULT_AMQP_PORT_NUMBER, props.get(BrokerOptions.QPID_AMQP_PORT)); + assertEquals(BrokerOptions.DEFAULT_HTTP_PORT_NUMBER, props.get(BrokerOptions.QPID_HTTP_PORT)); + assertEquals(BrokerOptions.DEFAULT_RMI_PORT_NUMBER, props.get(BrokerOptions.QPID_RMI_PORT)); + assertEquals(BrokerOptions.DEFAULT_JMX_PORT_NUMBER, props.get(BrokerOptions.QPID_JMX_PORT)); + } + + public void testSetDefaultConfigProperties() + { + String oldPort = BrokerOptions.DEFAULT_AMQP_PORT_NUMBER; + String newPort = "12345"; + + _options.setConfigProperty(BrokerOptions.QPID_AMQP_PORT, newPort); + Map<String,String> props = _options.getConfigProperties(); + assertEquals("unexpected number of entries", 4, props.keySet().size()); + assertEquals(newPort, props.get(BrokerOptions.QPID_AMQP_PORT)); + assertEquals(BrokerOptions.DEFAULT_HTTP_PORT_NUMBER, props.get(BrokerOptions.QPID_HTTP_PORT)); + assertEquals(BrokerOptions.DEFAULT_RMI_PORT_NUMBER, props.get(BrokerOptions.QPID_RMI_PORT)); + assertEquals(BrokerOptions.DEFAULT_JMX_PORT_NUMBER, props.get(BrokerOptions.QPID_JMX_PORT)); + + _options.setConfigProperty(BrokerOptions.QPID_AMQP_PORT, null); + props = _options.getConfigProperties(); + assertEquals("unexpected number of entries", 4, props.keySet().size()); + assertEquals(oldPort, props.get(BrokerOptions.QPID_AMQP_PORT)); + assertEquals(BrokerOptions.DEFAULT_HTTP_PORT_NUMBER, props.get(BrokerOptions.QPID_HTTP_PORT)); + assertEquals(BrokerOptions.DEFAULT_RMI_PORT_NUMBER, props.get(BrokerOptions.QPID_RMI_PORT)); + assertEquals(BrokerOptions.DEFAULT_JMX_PORT_NUMBER, props.get(BrokerOptions.QPID_JMX_PORT)); + + _options.setConfigProperty("name", "value"); + props = _options.getConfigProperties(); + assertEquals("unexpected number of entries", 5, props.keySet().size()); + assertEquals(oldPort, props.get(BrokerOptions.QPID_AMQP_PORT)); + assertEquals(BrokerOptions.DEFAULT_HTTP_PORT_NUMBER, props.get(BrokerOptions.QPID_HTTP_PORT)); + assertEquals(BrokerOptions.DEFAULT_RMI_PORT_NUMBER, props.get(BrokerOptions.QPID_RMI_PORT)); + assertEquals(BrokerOptions.DEFAULT_JMX_PORT_NUMBER, props.get(BrokerOptions.QPID_JMX_PORT)); + assertEquals("value", props.get("name")); + } } diff --git a/qpid/java/broker/src/test/java/org/apache/qpid/server/MainTest.java b/qpid/java/broker/src/test/java/org/apache/qpid/server/MainTest.java index d7579e2b2a..7e451fca86 100644 --- a/qpid/java/broker/src/test/java/org/apache/qpid/server/MainTest.java +++ b/qpid/java/broker/src/test/java/org/apache/qpid/server/MainTest.java @@ -21,6 +21,7 @@ package org.apache.qpid.server; import java.io.File; +import java.util.Map; import org.apache.commons.cli.CommandLine; import org.apache.qpid.server.configuration.BrokerProperties; @@ -33,6 +34,8 @@ import org.apache.qpid.test.utils.QpidTestCase; */ public class MainTest extends QpidTestCase { + private Exception _startupException; + public void testNoOptionsSpecified() { BrokerOptions options = startDummyMain(""); @@ -193,6 +196,40 @@ public class MainTest extends QpidTestCase assertNotNull(options.getManagementModePassword()); } + public void testSetConfigProperties() + { + //short name + String newPort = "12345"; + BrokerOptions options = startDummyMain("-prop name=value -prop " + BrokerOptions.QPID_AMQP_PORT + "=" + newPort); + + Map<String, String> props = options.getConfigProperties(); + + assertEquals(newPort, props.get(BrokerOptions.QPID_AMQP_PORT)); + assertEquals("value", props.get("name")); + + //long name + newPort = "678910"; + options = startDummyMain("--config-property name2=value2 --config-property " + BrokerOptions.QPID_AMQP_PORT + "=" + newPort); + + props = options.getConfigProperties(); + + assertEquals(newPort, props.get(BrokerOptions.QPID_AMQP_PORT)); + assertEquals("value2", props.get("name2")); + } + + public void testSetConfigPropertiesInvalidFormat() + { + //missing equals + startDummyMain("-prop namevalue"); + assertTrue("expected exception did not occur", + _startupException instanceof IllegalArgumentException); + + //no name specified + startDummyMain("-prop =value"); + assertTrue("expected exception did not occur", + _startupException instanceof IllegalArgumentException); + } + private BrokerOptions startDummyMain(String commandLine) { return (new TestMain(commandLine.split("\\s"))).getOptions(); @@ -208,6 +245,19 @@ public class MainTest extends QpidTestCase } @Override + protected void execute() + { + try + { + super.execute(); + } + catch(Exception re) + { + MainTest.this._startupException = re; + } + } + + @Override protected void startBroker(BrokerOptions options) { _options = options; diff --git a/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/BrokerConfigurationStoreCreatorTest.java b/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/BrokerConfigurationStoreCreatorTest.java index 7555a5632c..8fc7d99246 100644 --- a/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/BrokerConfigurationStoreCreatorTest.java +++ b/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/BrokerConfigurationStoreCreatorTest.java @@ -22,6 +22,7 @@ package org.apache.qpid.server.configuration; import java.io.File; import java.io.StringWriter; +import java.util.Collections; import java.util.HashMap; import java.util.Map; import java.util.Set; @@ -73,11 +74,11 @@ public class BrokerConfigurationStoreCreatorTest extends QpidTestCase public void testCreateJsonStore() { - ConfigurationEntryStore store = _storeCreator.createStore(_userStoreLocation.getAbsolutePath(), "json", BrokerOptions.DEFAULT_INITIAL_CONFIG_LOCATION, false); + ConfigurationEntryStore store = _storeCreator.createStore(_userStoreLocation.getAbsolutePath(), "json", BrokerOptions.DEFAULT_INITIAL_CONFIG_LOCATION, false, new BrokerOptions().getConfigProperties()); assertNotNull("Store was not created", store); assertTrue("File should exists", _userStoreLocation.exists()); assertTrue("File size should be greater than 0", _userStoreLocation.length() > 0); - JsonConfigurationEntryStore jsonStore = new JsonConfigurationEntryStore(_userStoreLocation.getAbsolutePath(), null); + JsonConfigurationEntryStore jsonStore = new JsonConfigurationEntryStore(_userStoreLocation.getAbsolutePath(), null, false, Collections.<String,String>emptyMap()); Set<UUID> childrenIds = jsonStore.getRootEntry().getChildrenIds(); assertFalse("Unexpected children: " + childrenIds, childrenIds.isEmpty()); } @@ -112,11 +113,11 @@ public class BrokerConfigurationStoreCreatorTest extends QpidTestCase File _initialStoreFile = TestFileUtils.createTempFile(this, ".json", brokerJson); - ConfigurationEntryStore store = _storeCreator.createStore(_userStoreLocation.getAbsolutePath(), "json", _initialStoreFile.getAbsolutePath(), false); + ConfigurationEntryStore store = _storeCreator.createStore(_userStoreLocation.getAbsolutePath(), "json", _initialStoreFile.getAbsolutePath(), false, Collections.<String,String>emptyMap()); assertNotNull("Store was not created", store); assertTrue("File should exists", _userStoreLocation.exists()); assertTrue("File size should be greater than 0", _userStoreLocation.length() > 0); - JsonConfigurationEntryStore jsonStore = new JsonConfigurationEntryStore(_userStoreLocation.getAbsolutePath(), null); + JsonConfigurationEntryStore jsonStore = new JsonConfigurationEntryStore(_userStoreLocation.getAbsolutePath(), null, false, Collections.<String,String>emptyMap()); ConfigurationEntry entry = jsonStore.getRootEntry(); assertEquals("Unexpected root id", testBrokerId, entry.getId()); Map<String, Object> attributes = entry.getAttributes(); @@ -128,13 +129,13 @@ public class BrokerConfigurationStoreCreatorTest extends QpidTestCase if(overwrite) { - ConfigurationEntryStore overwrittenStore = _storeCreator.createStore(_userStoreLocation.getAbsolutePath(), "json", BrokerOptions.DEFAULT_INITIAL_CONFIG_LOCATION, true); + ConfigurationEntryStore overwrittenStore = _storeCreator.createStore(_userStoreLocation.getAbsolutePath(), "json", BrokerOptions.DEFAULT_INITIAL_CONFIG_LOCATION, true, new BrokerOptions().getConfigProperties()); assertNotNull("Store was not created", overwrittenStore); assertTrue("File should exists", _userStoreLocation.exists()); assertTrue("File size should be greater than 0", _userStoreLocation.length() > 0); //check the contents reflect the test store content having been overwritten with the default store - JsonConfigurationEntryStore reopenedOverwrittenStore = new JsonConfigurationEntryStore(_userStoreLocation.getAbsolutePath(), null, false); + JsonConfigurationEntryStore reopenedOverwrittenStore = new JsonConfigurationEntryStore(_userStoreLocation.getAbsolutePath(), null, false, Collections.<String,String>emptyMap()); entry = reopenedOverwrittenStore.getRootEntry(); assertFalse("Root id did not change, store content was not overwritten", testBrokerId.equals(entry.getId())); attributes = entry.getAttributes(); @@ -150,7 +151,7 @@ public class BrokerConfigurationStoreCreatorTest extends QpidTestCase { try { - _storeCreator.createStore(_userStoreLocation.getAbsolutePath(), "derby", null, false); + _storeCreator.createStore(_userStoreLocation.getAbsolutePath(), "other", null, false, Collections.<String,String>emptyMap()); fail("Store is not yet supported"); } catch(IllegalConfigurationException e) diff --git a/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/store/JsonConfigurationEntryStoreTest.java b/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/store/JsonConfigurationEntryStoreTest.java index b30508ee0b..9ee93a345f 100644 --- a/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/store/JsonConfigurationEntryStoreTest.java +++ b/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/store/JsonConfigurationEntryStoreTest.java @@ -42,7 +42,7 @@ public class JsonConfigurationEntryStoreTest extends ConfigurationEntryStoreTest protected ConfigurationEntryStore createStore(UUID brokerId, Map<String, Object> brokerAttributes) throws Exception { _storeFile = createStoreFile(brokerId, brokerAttributes); - JsonConfigurationEntryStore store = new JsonConfigurationEntryStore(_storeFile.getAbsolutePath(), null); + JsonConfigurationEntryStore store = new JsonConfigurationEntryStore(_storeFile.getAbsolutePath(), null, false, Collections.<String,String>emptyMap()); return store; } @@ -83,7 +83,7 @@ public class JsonConfigurationEntryStoreTest extends ConfigurationEntryStoreTest attributes, brokerConfigEntry.getChildrenIds(), store); store.save(updatedBrokerEntry); - JsonConfigurationEntryStore store2 = new JsonConfigurationEntryStore(_storeFile.getAbsolutePath(), null); + JsonConfigurationEntryStore store2 = new JsonConfigurationEntryStore(_storeFile.getAbsolutePath(), null, false, Collections.<String,String>emptyMap()); assertEquals("Unresolved default virtualhost value", defaultVhost, store2.getRootEntry().getAttributes().get(Broker.DEFAULT_VIRTUAL_HOST)); } @@ -93,7 +93,7 @@ public class JsonConfigurationEntryStoreTest extends ConfigurationEntryStoreTest File file = TestFileUtils.createTempFile(this, ".json"); try { - new JsonConfigurationEntryStore(file.getAbsolutePath(), null); + new JsonConfigurationEntryStore(file.getAbsolutePath(), null, false, Collections.<String,String>emptyMap()); fail("Cannot create a new store without initial store"); } catch(IllegalConfigurationException e) @@ -109,7 +109,7 @@ public class JsonConfigurationEntryStoreTest extends ConfigurationEntryStoreTest brokerAttributes.put(Broker.NAME, getTestName()); File file = createStoreFile(brokerId, brokerAttributes); - JsonConfigurationEntryStore store = new JsonConfigurationEntryStore(file.getAbsolutePath(), null); + JsonConfigurationEntryStore store = new JsonConfigurationEntryStore(file.getAbsolutePath(), null, false, Collections.<String,String>emptyMap()); ConfigurationEntry root = store.getRootEntry(); assertNotNull("Root entry is not found", root); assertEquals("Unexpected root entry", brokerId, root.getId()); @@ -127,10 +127,10 @@ public class JsonConfigurationEntryStoreTest extends ConfigurationEntryStoreTest brokerAttributes.put(Broker.NAME, getTestName()); File initialStoreFile = createStoreFile(brokerId, brokerAttributes); - JsonConfigurationEntryStore initialStore = new JsonConfigurationEntryStore(initialStoreFile.getAbsolutePath(), null); + JsonConfigurationEntryStore initialStore = new JsonConfigurationEntryStore(initialStoreFile.getAbsolutePath(), null, false, Collections.<String,String>emptyMap()); File storeFile = TestFileUtils.createTempFile(this, ".json"); - JsonConfigurationEntryStore store = new JsonConfigurationEntryStore(storeFile.getAbsolutePath(), initialStore); + JsonConfigurationEntryStore store = new JsonConfigurationEntryStore(storeFile.getAbsolutePath(), initialStore, false, Collections.<String,String>emptyMap()); ConfigurationEntry root = store.getRootEntry(); assertNotNull("Root entry is not found", root); diff --git a/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/store/MemoryConfigurationEntryStoreTest.java b/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/store/MemoryConfigurationEntryStoreTest.java index 314e673c08..1ed8433034 100644 --- a/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/store/MemoryConfigurationEntryStoreTest.java +++ b/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/store/MemoryConfigurationEntryStoreTest.java @@ -24,7 +24,7 @@ public class MemoryConfigurationEntryStoreTest extends ConfigurationEntryStoreTe broker.putAll(brokerAttributes); ObjectMapper mapper = new ObjectMapper(); - return new MemoryConfigurationEntryStore(mapper.writeValueAsString(broker)); + return new MemoryConfigurationEntryStore(mapper.writeValueAsString(broker), Collections.<String,String>emptyMap()); } @Override @@ -38,7 +38,7 @@ public class MemoryConfigurationEntryStoreTest extends ConfigurationEntryStoreTe { try { - new MemoryConfigurationEntryStore(null, null); + new MemoryConfigurationEntryStore(null, null, Collections.<String,String>emptyMap()); fail("Cannot create a memory store without either initial store or path to an initial store file"); } catch(IllegalConfigurationException e) @@ -49,7 +49,7 @@ public class MemoryConfigurationEntryStoreTest extends ConfigurationEntryStoreTe public void testCreateWithNullJson() { - MemoryConfigurationEntryStore store = new MemoryConfigurationEntryStore(null); + MemoryConfigurationEntryStore store = new MemoryConfigurationEntryStore(null, Collections.<String,String>emptyMap()); ConfigurationEntry root = store.getRootEntry(); assertNotNull("Root entry is not found", root); @@ -61,7 +61,7 @@ public class MemoryConfigurationEntryStoreTest extends ConfigurationEntryStoreTe Map<String, Object> brokerAttributes = new HashMap<String, Object>(); brokerAttributes.put(Broker.NAME, getTestName()); MemoryConfigurationEntryStore initialStoreFile = (MemoryConfigurationEntryStore)createStore(brokerId, brokerAttributes); - MemoryConfigurationEntryStore store = new MemoryConfigurationEntryStore(null, initialStoreFile); + MemoryConfigurationEntryStore store = new MemoryConfigurationEntryStore(null, initialStoreFile, Collections.<String,String>emptyMap()); ConfigurationEntry root = store.getRootEntry(); assertNotNull("Root entry is not found", root); @@ -82,11 +82,11 @@ public class MemoryConfigurationEntryStoreTest extends ConfigurationEntryStoreTe setTestSystemProperty("QPID_HOME", TMP_FOLDER); setTestSystemProperty("QPID_WORK", TMP_FOLDER + File.separator + "work"); } - MemoryConfigurationEntryStore initialStore = new MemoryConfigurationEntryStore(BrokerOptions.DEFAULT_INITIAL_CONFIG_LOCATION, null); + MemoryConfigurationEntryStore initialStore = new MemoryConfigurationEntryStore(BrokerOptions.DEFAULT_INITIAL_CONFIG_LOCATION, null, new BrokerOptions().getConfigProperties()); ConfigurationEntry initialStoreRoot = initialStore.getRootEntry(); assertNotNull("Initial store root entry is not found", initialStoreRoot); - MemoryConfigurationEntryStore store = new MemoryConfigurationEntryStore(null, initialStore); + MemoryConfigurationEntryStore store = new MemoryConfigurationEntryStore(null, initialStore, Collections.<String,String>emptyMap()); ConfigurationEntry root = store.getRootEntry(); assertNotNull("Root entry is not found", root); diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/test/utils/TestBrokerConfiguration.java b/qpid/java/systests/src/main/java/org/apache/qpid/test/utils/TestBrokerConfiguration.java index a91c9bb752..9cb1e6dfcb 100644 --- a/qpid/java/systests/src/main/java/org/apache/qpid/test/utils/TestBrokerConfiguration.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/test/utils/TestBrokerConfiguration.java @@ -70,7 +70,7 @@ public class TestBrokerConfiguration public TestBrokerConfiguration(String storeType, String intialStoreLocation) { - _store = new MemoryConfigurationEntryStore(intialStoreLocation, null); + _store = new MemoryConfigurationEntryStore(intialStoreLocation, null, Collections.<String,String>emptyMap()); } public boolean setBrokerAttribute(String name, Object value) |