diff options
author | Aidan Skinner <aidan@apache.org> | 2009-04-23 16:07:43 +0000 |
---|---|---|
committer | Aidan Skinner <aidan@apache.org> | 2009-04-23 16:07:43 +0000 |
commit | 9a8b1019f111c597ceebdc1f40d4d92bdaa284c9 (patch) | |
tree | 3bc5bbbf6f3de3c781fabe11dc5f1955930af89c | |
parent | b40f766f9cb0345fe1b2a9b0cadec11eeb647e58 (diff) | |
download | qpid-python-9a8b1019f111c597ceebdc1f40d4d92bdaa284c9.tar.gz |
QPID-1826: Ensure that server-wide configuration variables in virtualhosts.xml are honored. Add sample-flattened parse tree from M4 and test to ensure that values are parsed appropriately.
git-svn-id: https://svn.apache.org/repos/asf/qpid/branches/0.5-release@767952 13f79535-47bb-0310-9956-ffa450edef68
5 files changed, 298 insertions, 54 deletions
diff --git a/qpid/java/broker/etc/persistent_config-config-test.xml b/qpid/java/broker/etc/persistent_config-config-test.xml new file mode 100644 index 0000000000..258f54397d --- /dev/null +++ b/qpid/java/broker/etc/persistent_config-config-test.xml @@ -0,0 +1,93 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!-- + - + - Licensed to the Apache Software Foundation (ASF) under one + - or more contributor license agreements. See the NOTICE 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. + - + + This is an example config using the BDBMessageStore available from + the Red Hat Messaging project at etp.108.redhat.com and distributed under GPL. + --> + +<broker> + <work>${QPID_WORK}</work> + <conf>${QPID_HOME}/etc</conf> + <passwordDir>${conf}</passwordDir> + <connector> + <transport>nio</transport> + <port>5672</port> + <socketReceiveBuffer>32768</socketReceiveBuffer> + <socketSendBuffer>32768</socketSendBuffer> + </connector> + <management> + <enabled>false</enabled> + <jmxport>8999</jmxport> + </management> + <advanced> + <filterchain enableExecutorPool="true"/> + <enablePooledAllocator>false</enablePooledAllocator> + <enableDirectBuffers>false</enableDirectBuffers> + <framesize>65535</framesize> + <compressBufferOnQueue>false</compressBufferOnQueue> + </advanced> + + <security> + <principal-databases> + <principal-database> + <name>passwordfile</name> + <class>org.apache.qpid.server.security.auth.database.PlainPasswordFilePrincipalDatabase</class> + <attributes> + <attribute> + <name>passwordFile</name> + <value>${passwordDir}/passwd</value> + </attribute> + </attributes> + </principal-database> + </principal-databases> + + <access> + <class>org.apache.qpid.server.security.access.plugins.AllowAll</class> + </access> + <jmx> + <access>${passwordDir}/jmxremote.access</access> + <principal-database>passwordfile</principal-database> + </jmx> + </security> + + <virtualhosts> + <virtualhost> + <name>dev-only</name> + <dev-only> + <store> + <class>org.apache.qpid.server.store.MemoryMessageStore</class> + <environment-path>${work}/bdbstore/dev-only-store</environment-path> + </store> + </dev-only> + </virtualhost> + </virtualhosts> + <heartbeat> + <delay>0</delay> + <timeoutFactor>2.0</timeoutFactor> + </heartbeat> + <queue> + <auto_register>true</auto_register> + </queue> + + <virtualhosts>${conf}/virtualhosts-config-test.xml</virtualhosts> +</broker> + + diff --git a/qpid/java/broker/etc/sample-parsed-config.xml b/qpid/java/broker/etc/sample-parsed-config.xml new file mode 100644 index 0000000000..6c4366a84a --- /dev/null +++ b/qpid/java/broker/etc/sample-parsed-config.xml @@ -0,0 +1,76 @@ +<?xml version="1.0" encoding="UTF-8"?> +<configuration> +<work>${QPID_WORK}</work> +<conf>${QPID_HOME}/etc</conf> +<passwordDir>${conf}</passwordDir> +<connector> +<transport>nio</transport> +<port>5672</port> +<socketReceiveBuffer>32768</socketReceiveBuffer> +<socketSendBuffer>32768</socketSendBuffer> +</connector> +<management> +<enabled>false</enabled> +<jmxport>8999</jmxport> +</management> +<advanced> +<filterchain enableExecutorPool="true"/> +<enablePooledAllocator>false</enablePooledAllocator> +<enableDirectBuffers>false</enableDirectBuffers> +<framesize>65535</framesize> +<compressBufferOnQueue>false</compressBufferOnQueue> +</advanced> +<security> +<principal-databases> +<principal-database> +<name>passwordfile</name> +<class>org.apache.qpid.server.security.auth.database.PlainPasswordFilePrincipalDatabase</class> +<attributes> +<attribute> +<name>passwordFile</name> +<value>${passwordDir}/passwd</value> +</attribute> +</attributes> +</principal-database> +</principal-databases> +<access> +<class>org.apache.qpid.server.security.access.plugins.AllowAll</class> +</access> +<jmx> +<access>${passwordDir}/jmxremote.access</access> +<principal-database>passwordfile</principal-database> +</jmx> +</security> +<virtualhosts>${conf}/virtualhosts-config-test.xml<virtualhost> +<name>dev-only</name> +<dev-only> +<store> +<class>org.apache.qpid.server.store.MemoryMessageStore</class> +<environment-path>${work}/bdbstore/dev-only-store</environment-path> +</store> +</dev-only> +</virtualhost> +</virtualhosts> +<heartbeat> +<delay>0</delay> +<timeoutFactor>2.0</timeoutFactor> +</heartbeat> +<queue> +<auto_register>true</auto_register> +</queue> +<default>dev-only</default> +<virtualhost> +<name>dev-only</name> +<dev-only> +<queues> +<exchange>amq.direct</exchange> +<maximumQueueDepth>102400</maximumQueueDepth> +<maximumMessageSize>20480</maximumMessageSize> +<maximumMessageAge>60000</maximumMessageAge> +<queue> +<name>dev-queue</name> +</queue> +</queues> +</dev-only> +</virtualhost> +</configuration> diff --git a/qpid/java/broker/etc/virtualhosts-config-test.xml b/qpid/java/broker/etc/virtualhosts-config-test.xml new file mode 100644 index 0000000000..168aa074da --- /dev/null +++ b/qpid/java/broker/etc/virtualhosts-config-test.xml @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!-- + - + - Licensed to the Apache Software Foundation (ASF) under one + - or more contributor license agreements. See the NOTICE 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. + - + --> +<virtualhosts> + <default>dev-only</default> + <virtualhost> + <name>dev-only</name> + <dev-only> + <queues> + <exchange>amq.direct</exchange> + <!-- Small defaults for development --> + <maximumQueueDepth>102400</maximumQueueDepth> <!-- 100k --> + <maximumMessageSize>20480</maximumMessageSize> <!-- 20kb --> + <maximumMessageAge>60000</maximumMessageAge> <!-- 1 mins --> + + <queue> + <name>dev-queue</name> + </queue> + </queues> + </dev-only> + </virtualhost> +</virtualhosts> diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/ServerConfiguration.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/ServerConfiguration.java index 24add696b3..9d7936f0c6 100644 --- a/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/ServerConfiguration.java +++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/ServerConfiguration.java @@ -47,7 +47,7 @@ import sun.misc.SignalHandler; public class ServerConfiguration implements SignalHandler { - private static Configuration _config; + private Configuration _config; private static final int DEFAULT_FRAME_SIZE = 65536; private static final int DEFAULT_BUFFER_READ_LIMIT_SIZE = 262144; @@ -113,11 +113,11 @@ public class ServerConfiguration implements SignalHandler public ServerConfiguration(Configuration conf) throws ConfigurationException { - _config = conf; + setConfig(conf); substituteEnvironmentVariables(); - _jmxPort = _config.getInt("management.jmxport", 8999); + _jmxPort = getConfig().getInt("management.jmxport", 8999); _securityConfiguration = new SecurityConfiguration(conf.subset("security")); setupVirtualHosts(conf); @@ -150,6 +150,13 @@ public class ServerConfiguration implements SignalHandler VirtualHostConfiguration vhostConfig = new VirtualHostConfiguration(name, conf.subset("virtualhosts.virtualhost."+name)); _virtualHosts.put(vhostConfig.getName(), vhostConfig); } + // Grab things other than the virtualhosts themselves + Iterator keys = vhostConfiguration.getKeys(); + while (keys.hasNext()) + { + String key = (String) keys.next(); + conf.setProperty(key, vhostConfiguration.getProperty(key)); + } } } } @@ -161,7 +168,7 @@ public class ServerConfiguration implements SignalHandler String val = System.getenv(var.getKey()); if (val != null) { - _config.setProperty(var.getValue(), val); + getConfig().setProperty(var.getValue(), val); } } } @@ -246,6 +253,16 @@ public class ServerConfiguration implements SignalHandler } } + public void setConfig(Configuration _config) + { + this._config = _config; + } + + public Configuration getConfig() + { + return _config; + } + public String getQpidWork() { return System.getProperty("QPID_WORK", System.getProperty("java.io.tmpdir")); @@ -263,7 +280,7 @@ public class ServerConfiguration implements SignalHandler public boolean getPlatformMbeanserver() { - return _config.getBoolean("management.platform-mbeanserver", true); + return getConfig().getBoolean("management.platform-mbeanserver", true); } public String[] getVirtualHosts() @@ -273,7 +290,7 @@ public class ServerConfiguration implements SignalHandler public String getPluginDirectory() { - return _config.getString("plugin-directory"); + return getConfig().getString("plugin-directory"); } public VirtualHostConfiguration getVirtualHostConfig(String name) @@ -283,84 +300,84 @@ public class ServerConfiguration implements SignalHandler public List<String> getPrincipalDatabaseNames() { - return _config.getList("security.principal-databases.principal-database.name"); + return getConfig().getList("security.principal-databases.principal-database.name"); } public List<String> getPrincipalDatabaseClass() { - return _config.getList("security.principal-databases.principal-database.class"); + return getConfig().getList("security.principal-databases.principal-database.class"); } public List<String> getPrincipalDatabaseAttributeNames(int index) { String name = "security.principal-databases.principal-database(" + index + ")." + "attributes.attribute.name"; - return _config.getList(name); + return getConfig().getList(name); } public List<String> getPrincipalDatabaseAttributeValues(int index) { String name = "security.principal-databases.principal-database(" + index + ")." + "attributes.attribute.value"; - return _config.getList(name); + return getConfig().getList(name); } public List<String> getManagementPrincipalDBs() { - return _config.getList("security.jmx.principal-database"); + return getConfig().getList("security.jmx.principal-database"); } public List<String> getManagementAccessList() { - return _config.getList("security.jmx.access"); + return getConfig().getList("security.jmx.access"); } public int getFrameSize() { - return _config.getInt("advanced.framesize", DEFAULT_FRAME_SIZE); + return getConfig().getInt("advanced.framesize", DEFAULT_FRAME_SIZE); } public boolean getProtectIOEnabled() { - return _config.getBoolean("broker.connector.protectio.enabled", false); + return getConfig().getBoolean("broker.connector.protectio.enabled", false); } public int getBufferReadLimit() { - return _config.getInt("broker.connector.protectio.readBufferLimitSize", DEFAULT_BUFFER_READ_LIMIT_SIZE); + return getConfig().getInt("broker.connector.protectio.readBufferLimitSize", DEFAULT_BUFFER_READ_LIMIT_SIZE); } public int getBufferWriteLimit() { - return _config.getInt("broker.connector.protectio.writeBufferLimitSize", DEFAULT_BUFFER_WRITE_LIMIT_SIZE); + return getConfig().getInt("broker.connector.protectio.writeBufferLimitSize", DEFAULT_BUFFER_WRITE_LIMIT_SIZE); } public boolean getSynchedClocks() { - return _config.getBoolean("advanced.synced-clocks", false); + return getConfig().getBoolean("advanced.synced-clocks", false); } public boolean getMsgAuth() { - return _config.getBoolean("security.msg-auth", false); + return getConfig().getBoolean("security.msg-auth", false); } public String getJMXPrincipalDatabase() { - return _config.getString("security.jmx.principal-database"); + return getConfig().getString("security.jmx.principal-database"); } public String getManagementKeyStorePath() { - return _config.getString("management.ssl.keyStorePath", null); + return getConfig().getString("management.ssl.keyStorePath", null); } public boolean getManagementSSLEnabled() { - return _config.getBoolean("management.ssl.enabled", true); + return getConfig().getBoolean("management.ssl.enabled", true); } public String getManagementKeyStorePassword() { - return _config.getString("management.ssl.keyStorePassword"); + return getConfig().getString("management.ssl.keyStorePassword"); } public SecurityConfiguration getSecurityConfiguration() @@ -370,158 +387,158 @@ public class ServerConfiguration implements SignalHandler public boolean getQueueAutoRegister() { - return _config.getBoolean("queue.auto_register", true); + return getConfig().getBoolean("queue.auto_register", true); } public boolean getManagementEnabled() { - return _config.getBoolean("management.enabled", true); + return getConfig().getBoolean("management.enabled", true); } public void setManagementEnabled(boolean enabled) { - _config.setProperty("management.enabled", enabled); + getConfig().setProperty("management.enabled", enabled); } public int getHeartBeatDelay() { - return _config.getInt("heartbeat.delay", 5); + return getConfig().getInt("heartbeat.delay", 5); } public double getHeartBeatTimeout() { - return _config.getDouble("heartbeat.timeoutFactor", 2.0); + return getConfig().getDouble("heartbeat.timeoutFactor", 2.0); } public int getDeliveryPoolSize() { - return _config.getInt("delivery.poolsize", 0); + return getConfig().getInt("delivery.poolsize", 0); } public long getMaximumMessageAge() { - return _config.getLong("maximumMessageAge", 0); + return getConfig().getLong("maximumMessageAge", 0); } public long getMaximumMessageCount() { - return _config.getLong("maximumMessageCount", 0); + return getConfig().getLong("maximumMessageCount", 0); } public long getMaximumQueueDepth() { - return _config.getLong("maximumQueueDepth", 0); + return getConfig().getLong("maximumQueueDepth", 0); } public long getMaximumMessageSize() { - return _config.getLong("maximumMessageSize", 0); + return getConfig().getLong("maximumMessageSize", 0); } public long getMinimumAlertRepeatGap() { - return _config.getLong("minimumAlertRepeatGap", 0); + return getConfig().getLong("minimumAlertRepeatGap", 0); } public int getProcessors() { - return _config.getInt("connector.processors", 4); + return getConfig().getInt("connector.processors", 4); } public int getPort() { - return _config.getInt("connector.port", DEFAULT_PORT); + return getConfig().getInt("connector.port", DEFAULT_PORT); } public String getBind() { - return _config.getString("connector.bind", "wildcard"); + return getConfig().getString("connector.bind", "wildcard"); } public int getReceiveBufferSize() { - return _config.getInt("connector.socketReceiveBuffer", 32767); + return getConfig().getInt("connector.socketReceiveBuffer", 32767); } public int getWriteBufferSize() { - return _config.getInt("connector.socketWriteBuffer", 32767); + return getConfig().getInt("connector.socketWriteBuffer", 32767); } public boolean getTcpNoDelay() { - return _config.getBoolean("connector.tcpNoDelay", true); + return getConfig().getBoolean("connector.tcpNoDelay", true); } public boolean getEnableExecutorPool() { - return _config.getBoolean("advanced.filterchain[@enableExecutorPool]", false); + return getConfig().getBoolean("advanced.filterchain[@enableExecutorPool]", false); } public boolean getEnablePooledAllocator() { - return _config.getBoolean("advanced.enablePooledAllocator", false); + return getConfig().getBoolean("advanced.enablePooledAllocator", false); } public boolean getEnableDirectBuffers() { - return _config.getBoolean("advanced.enableDirectBuffers", false); + return getConfig().getBoolean("advanced.enableDirectBuffers", false); } public boolean getEnableSSL() { - return _config.getBoolean("connector.ssl.enabled", false); + return getConfig().getBoolean("connector.ssl.enabled", false); } public boolean getSSLOnly() { - return _config.getBoolean("connector.ssl.sslOnly", true); + return getConfig().getBoolean("connector.ssl.sslOnly", true); } public int getSSLPort() { - return _config.getInt("connector.ssl.port", DEFAUL_SSL_PORT); + return getConfig().getInt("connector.ssl.port", DEFAUL_SSL_PORT); } public String getKeystorePath() { - return _config.getString("connector.ssl.keystorePath", "none"); + return getConfig().getString("connector.ssl.keystorePath", "none"); } public String getKeystorePassword() { - return _config.getString("connector.ssl.keystorePassword", "none"); + return getConfig().getString("connector.ssl.keystorePassword", "none"); } public String getCertType() { - return _config.getString("connector.ssl.certType", "SunX509"); + return getConfig().getString("connector.ssl.certType", "SunX509"); } public boolean getQpidNIO() { - return _config.getBoolean("connector.qpidnio", false); + return getConfig().getBoolean("connector.qpidnio", false); } public boolean getUseBiasedWrites() { - return _config.getBoolean("advanced.useWriteBiasedPool", false); + return getConfig().getBoolean("advanced.useWriteBiasedPool", false); } public String getDefaultVirtualHost() { - return _config.getString("virtualhosts.default"); + return getConfig().getString("virtualhosts.default"); } public void setHousekeepingExpiredMessageCheckPeriod(long value) { - _config.setProperty("housekeeping.expiredMessageCheckPeriod", value); + getConfig().setProperty("housekeeping.expiredMessageCheckPeriod", value); } public long getHousekeepingCheckPeriod() { - return _config.getLong("housekeeping.checkPeriod", - _config.getLong("housekeeping.expiredMessageCheckPeriod", + return getConfig().getLong("housekeeping.checkPeriod", + getConfig().getLong("housekeeping.expiredMessageCheckPeriod", DEFAULT_HOUSEKEEPING_PERIOD)); } } diff --git a/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/ServerConfigurationTest.java b/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/ServerConfigurationTest.java index 0152fc5122..fabd4ce923 100644 --- a/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/ServerConfigurationTest.java +++ b/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/ServerConfigurationTest.java @@ -24,8 +24,10 @@ import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.RandomAccessFile; +import java.util.Iterator; import java.util.List; +import org.apache.commons.configuration.Configuration; import org.apache.commons.configuration.ConfigurationException; import org.apache.commons.configuration.PropertiesConfiguration; import org.apache.commons.configuration.SystemConfiguration; @@ -924,4 +926,20 @@ public class ServerConfigurationTest extends TestCase assertFalse(reg.getAccessManager().authoriseConnect(session, virtualHost)); } + public void testnewParserOutputVsOldParserOutput() throws ConfigurationException + { + String configDir = System.getProperty("QPID_HOME")+"/etc"; + + XMLConfiguration oldConfig = new XMLConfiguration(configDir +"/sample-parsed-config.xml"); + Configuration newConfig = new ServerConfiguration(new File(configDir+"/persistent_config-config-test.xml")).getConfig(); + + Iterator xmlKeys = oldConfig.getKeys(); + while (xmlKeys.hasNext()) + { + String key = (String) xmlKeys.next(); + assertEquals("Incorrect value for "+key, oldConfig.getProperty(key), newConfig.getProperty(key)); + } + } + + } |