diff options
| author | Martin Ritchie <ritchiem@apache.org> | 2010-05-21 21:09:15 +0000 |
|---|---|---|
| committer | Martin Ritchie <ritchiem@apache.org> | 2010-05-21 21:09:15 +0000 |
| commit | 832964c70974c9b668aaa17773d22b75228552a7 (patch) | |
| tree | 687f362a106a17fb6ce2d726ce8fe548c5eb0577 /java | |
| parent | d48db423414765a4eb0ec8e530f899355b68ed1a (diff) | |
| download | qpid-python-832964c70974c9b668aaa17773d22b75228552a7.tar.gz | |
QPID-1447 : Complete SCDPolicyConfiguration Testing
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@947176 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'java')
10 files changed, 504 insertions, 154 deletions
diff --git a/java/broker-plugins/experimental/slowconsumerdetection/src/main/java/org/apache/qpid/server/configuration/plugin/SlowConsumerDetectionConfiguration.java b/java/broker-plugins/experimental/slowconsumerdetection/src/main/java/org/apache/qpid/server/configuration/plugin/SlowConsumerDetectionConfiguration.java index 3c87ca08b2..90bd3206e1 100644 --- a/java/broker-plugins/experimental/slowconsumerdetection/src/main/java/org/apache/qpid/server/configuration/plugin/SlowConsumerDetectionConfiguration.java +++ b/java/broker-plugins/experimental/slowconsumerdetection/src/main/java/org/apache/qpid/server/configuration/plugin/SlowConsumerDetectionConfiguration.java @@ -56,7 +56,7 @@ public class SlowConsumerDetectionConfiguration extends ConfigurationPlugin public long getDelay() { - return _configuration.getLong("delay", 10); + return getLongValue("delay", 10); } public TimeUnit getTimeUnit() diff --git a/java/broker-plugins/experimental/slowconsumerdetection/src/main/java/org/apache/qpid/server/configuration/plugin/SlowConsumerDetectionPolicyConfiguration.java b/java/broker-plugins/experimental/slowconsumerdetection/src/main/java/org/apache/qpid/server/configuration/plugin/SlowConsumerDetectionPolicyConfiguration.java index 482168930b..b6a4ab3cbf 100644 --- a/java/broker-plugins/experimental/slowconsumerdetection/src/main/java/org/apache/qpid/server/configuration/plugin/SlowConsumerDetectionPolicyConfiguration.java +++ b/java/broker-plugins/experimental/slowconsumerdetection/src/main/java/org/apache/qpid/server/configuration/plugin/SlowConsumerDetectionPolicyConfiguration.java @@ -56,7 +56,7 @@ public class SlowConsumerDetectionPolicyConfiguration extends ConfigurationPlugi public String getPolicyName() { - return _configuration.getString("name"); + return getStringValue("name"); } public void setConfiguration(String path, Configuration configuration) throws ConfigurationException diff --git a/java/broker-plugins/experimental/slowconsumerdetection/src/main/java/org/apache/qpid/server/configuration/plugin/SlowConsumerDetectionQueueConfiguration.java b/java/broker-plugins/experimental/slowconsumerdetection/src/main/java/org/apache/qpid/server/configuration/plugin/SlowConsumerDetectionQueueConfiguration.java index ce3393ae70..5f1e0c00b9 100644 --- a/java/broker-plugins/experimental/slowconsumerdetection/src/main/java/org/apache/qpid/server/configuration/plugin/SlowConsumerDetectionQueueConfiguration.java +++ b/java/broker-plugins/experimental/slowconsumerdetection/src/main/java/org/apache/qpid/server/configuration/plugin/SlowConsumerDetectionQueueConfiguration.java @@ -60,19 +60,19 @@ public class SlowConsumerDetectionQueueConfiguration extends ConfigurationPlugin "messageCount"}; } - public int getMessageAge() + public long getMessageAge() { - return (int) getConfigurationValue("messageAge"); + return getLongValue("messageAge"); } public long getDepth() { - return getConfigurationValue("depth"); + return getLongValue("depth"); } public long getMessageCount() { - return getConfigurationValue("messageCount"); + return getLongValue("messageCount"); } public SlowConsumerPolicyPlugin getPolicy() @@ -85,7 +85,16 @@ public class SlowConsumerDetectionQueueConfiguration extends ConfigurationPlugin { super.setConfiguration(path, configuration); - SlowConsumerDetectionPolicyConfiguration policyConfig = getConfiguration(SlowConsumerDetectionPolicyConfiguration.class); + if (!containsPositiveLong("messageAge") && + !containsPositiveLong("depth") && + !containsPositiveLong("messageCount")) + { + throw new ConfigurationException("At least one configuration property" + + "('messageAge','depth' or 'messageCount') must be specified."); + } + + SlowConsumerDetectionPolicyConfiguration policyConfig = + getConfiguration(SlowConsumerDetectionPolicyConfiguration.class); PluginManager pluginManager = ApplicationRegistry.getInstance().getPluginManager(); Map<String, SlowConsumerPolicyPluginFactory> factories = @@ -93,7 +102,8 @@ public class SlowConsumerDetectionQueueConfiguration extends ConfigurationPlugin if (policyConfig == null) { - throw new ConfigurationException("No Slow Consumer Policy specified at:" + path + ". Known Policies:" + factories.keySet()); + throw new ConfigurationException("No Slow Consumer Policy specified at:'" + + path + "'. Known Policies:" + factories.keySet()); } if (_logger.isDebugEnabled()) @@ -125,16 +135,4 @@ public class SlowConsumerDetectionQueueConfiguration extends ConfigurationPlugin _policyPlugin = pluginFactory.newInstance(policyConfig); } - private long getConfigurationValue(String property) - { - // The _configuration we are given is a munged configurated - // so the queue will already have queue-queues munging - - // we then need to ensure that the TopicsConfiguration - // and TopicConfiguration classes correctly munge their configuration: - // queue-queues -> topic-topics - - return _configuration.getLong(property, 0); - } - } diff --git a/java/broker-plugins/experimental/slowconsumerdetection/src/main/java/org/apache/qpid/server/virtualhost/plugin/policies/TopicDeletePolicyConfiguration.java b/java/broker-plugins/experimental/slowconsumerdetection/src/main/java/org/apache/qpid/server/virtualhost/plugin/policies/TopicDeletePolicyConfiguration.java index 30c1b05b4e..27c214097a 100644 --- a/java/broker-plugins/experimental/slowconsumerdetection/src/main/java/org/apache/qpid/server/virtualhost/plugin/policies/TopicDeletePolicyConfiguration.java +++ b/java/broker-plugins/experimental/slowconsumerdetection/src/main/java/org/apache/qpid/server/virtualhost/plugin/policies/TopicDeletePolicyConfiguration.java @@ -57,7 +57,7 @@ public class TopicDeletePolicyConfiguration extends ConfigurationPlugin public boolean deletePersistent() { // If we don't have configuration then we don't deletePersistent Queues - return (_configuration != null && _configuration.containsKey("delete-persistent")); + return (hasConfiguration() && contains("delete-persistent")); } } diff --git a/java/broker-plugins/experimental/slowconsumerdetection/src/test/java/org/apache/qpid/server/virtualhost/plugin/SlowConsumerDetectionPolicyConfigurationTest.java b/java/broker-plugins/experimental/slowconsumerdetection/src/test/java/org/apache/qpid/server/virtualhost/plugin/SlowConsumerDetectionPolicyConfigurationTest.java new file mode 100644 index 0000000000..9e0fd7bb2f --- /dev/null +++ b/java/broker-plugins/experimental/slowconsumerdetection/src/test/java/org/apache/qpid/server/virtualhost/plugin/SlowConsumerDetectionPolicyConfigurationTest.java @@ -0,0 +1,78 @@ +/* + * + * 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. + * + */ +package org.apache.qpid.server.virtualhost.plugin; + +import junit.framework.TestCase; +import org.apache.commons.configuration.CompositeConfiguration; +import org.apache.commons.configuration.ConfigurationException; +import org.apache.commons.configuration.XMLConfiguration; +import org.apache.qpid.server.configuration.plugin.SlowConsumerDetectionPolicyConfiguration; + +public class SlowConsumerDetectionPolicyConfigurationTest extends TestCase +{ + + public void testConfigLoadingValidConfig() + { + SlowConsumerDetectionPolicyConfiguration config = new SlowConsumerDetectionPolicyConfiguration(); + + XMLConfiguration xmlconfig = new XMLConfiguration(); + + xmlconfig.addProperty("name", "TestPolicy"); + + // Create a CompositeConfiguration as this is what the broker uses + CompositeConfiguration composite = new CompositeConfiguration(); + composite.addConfiguration(xmlconfig); + + try + { + config.setConfiguration("", composite); + } + catch (ConfigurationException e) + { + e.printStackTrace(); + fail(e.getMessage()); + } + } + + public void testConfigLoadingInValidConfig() + { + SlowConsumerDetectionPolicyConfiguration config = new SlowConsumerDetectionPolicyConfiguration(); + + XMLConfiguration xmlconfig = new XMLConfiguration(); + + + // Create a CompositeConfiguration as this is what the broker uses + CompositeConfiguration composite = new CompositeConfiguration(); + composite.addConfiguration(xmlconfig); + + try + { + config.setConfiguration("", composite); + fail("Config is invalid so won't validate."); + } + catch (ConfigurationException e) + { + e.printStackTrace(); + assertEquals("Exception message not as expected.", "No Slow consumer policy defined.", e.getMessage()); + } + } + +} diff --git a/java/broker/src/main/java/org/apache/qpid/server/configuration/QueueConfiguration.java b/java/broker/src/main/java/org/apache/qpid/server/configuration/QueueConfiguration.java index 1812f657d5..ee68143a2d 100644 --- a/java/broker/src/main/java/org/apache/qpid/server/configuration/QueueConfiguration.java +++ b/java/broker/src/main/java/org/apache/qpid/server/configuration/QueueConfiguration.java @@ -31,8 +31,6 @@ import org.apache.qpid.server.configuration.plugins.ConfigurationPlugin; public class QueueConfiguration extends ConfigurationPlugin { - - private Configuration _config; private String _name; private VirtualHostConfiguration _vHostConfig; @@ -44,7 +42,6 @@ public class QueueConfiguration extends ConfigurationPlugin CompositeConfiguration mungedConf = new CompositeConfiguration(); mungedConf.addConfiguration(_vHostConfig.getConfig().subset("queues.queue." + name)); mungedConf.addConfiguration(_vHostConfig.getConfig().subset("queues")); - _config = mungedConf; setConfiguration("virtualhosts.virtualhost.queues.queue", mungedConf); } @@ -78,42 +75,42 @@ public class QueueConfiguration extends ConfigurationPlugin public boolean getDurable() { - return _config.getBoolean("durable" ,false); + return getBooleanValue("durable"); } public boolean getExclusive() { - return _config.getBoolean("exclusive" ,false); + return getBooleanValue("exclusive"); } public boolean getAutoDelete() { - return _config.getBoolean("autodelete", false); + return getBooleanValue("autodelete"); } public String getOwner() { - return _config.getString("owner", null); + return getStringValue("owner", null); } public boolean getPriority() { - return _config.getBoolean("priority", false); + return getBooleanValue("priority"); } public int getPriorities() { - return _config.getInt("priorities", -1); + return getIntValue("priorities", -1); } public String getExchange() { - return _config.getString("exchange", null); + return getStringValue("exchange", null); } public List getRoutingKeys() { - return _config.getList("routingKey"); + return getListValue("routingKey"); } public String getName() @@ -123,46 +120,46 @@ public class QueueConfiguration extends ConfigurationPlugin public int getMaximumMessageAge() { - return _config.getInt("maximumMessageAge", _vHostConfig.getMaximumMessageAge()); + return getIntValue("maximumMessageAge", _vHostConfig.getMaximumMessageAge()); } public long getMaximumQueueDepth() { - return _config.getLong("maximumQueueDepth", _vHostConfig.getMaximumQueueDepth()); + return getLongValue("maximumQueueDepth", _vHostConfig.getMaximumQueueDepth()); } public long getMaximumMessageSize() { - return _config.getLong("maximumMessageSize", _vHostConfig.getMaximumMessageSize()); + return getLongValue("maximumMessageSize", _vHostConfig.getMaximumMessageSize()); } public long getMaximumMessageCount() { - return _config.getLong("maximumMessageCount", _vHostConfig.getMaximumMessageCount()); + return getLongValue("maximumMessageCount", _vHostConfig.getMaximumMessageCount()); } public long getMinimumAlertRepeatGap() { - return _config.getLong("minimumAlertRepeatGap", _vHostConfig.getMinimumAlertRepeatGap()); + return getLongValue("minimumAlertRepeatGap", _vHostConfig.getMinimumAlertRepeatGap()); } public long getCapacity() { - return _config.getLong("capacity", _vHostConfig.getCapacity()); + return getLongValue("capacity", _vHostConfig.getCapacity()); } public long getFlowResumeCapacity() { - return _config.getLong("flowResumeCapacity", _vHostConfig.getFlowResumeCapacity()); + return getLongValue("flowResumeCapacity", _vHostConfig.getFlowResumeCapacity()); } public boolean isLVQ() { - return _config.getBoolean("lvq", false); + return getBooleanValue("lvq"); } public String getLVQKey() { - return _config.getString("lvqKey", null); + return getStringValue("lvqKey", null); } } diff --git a/java/broker/src/main/java/org/apache/qpid/server/configuration/ServerConfiguration.java b/java/broker/src/main/java/org/apache/qpid/server/configuration/ServerConfiguration.java index 96b2e26f3c..fe399669fd 100644 --- a/java/broker/src/main/java/org/apache/qpid/server/configuration/ServerConfiguration.java +++ b/java/broker/src/main/java/org/apache/qpid/server/configuration/ServerConfiguration.java @@ -287,7 +287,7 @@ public class ServerConfiguration extends ConfigurationPlugin implements SignalHa public boolean getStatusUpdatesEnabled() { // Retrieve the setting from configuration but default to on. - String value = getConfig().getString(STATUS_UPDATES, DEFAULT_STATUS_UPDATES); + String value = getStringValue(STATUS_UPDATES, DEFAULT_STATUS_UPDATES); return value.equalsIgnoreCase("on"); } @@ -300,7 +300,7 @@ public class ServerConfiguration extends ConfigurationPlugin implements SignalHa public Locale getLocale() { - String localeString = getConfig().getString(ADVANCED_LOCALE); + String localeString = getStringValue(ADVANCED_LOCALE); // Expecting locale of format langauge_country_variant // If the configuration does not have a defined locale use the JVM default @@ -430,12 +430,12 @@ public class ServerConfiguration extends ConfigurationPlugin implements SignalHa public int getJMXManagementPort() { - return getConfig().getInt("management.jmxport", DEFAULT_JMXPORT); + return getIntValue("management.jmxport", DEFAULT_JMXPORT); } public boolean getUseCustomRMISocketFactory() { - return getConfig().getBoolean(MGMT_CUSTOM_REGISTRY_SOCKET, true); + return getBooleanValue(MGMT_CUSTOM_REGISTRY_SOCKET, true); } public void setUseCustomRMISocketFactory(boolean bool) @@ -445,7 +445,7 @@ public class ServerConfiguration extends ConfigurationPlugin implements SignalHa public boolean getPlatformMbeanserver() { - return getConfig().getBoolean("management.platform-mbeanserver", true); + return getBooleanValue("management.platform-mbeanserver", true); } public String[] getVirtualHosts() @@ -455,7 +455,7 @@ public class ServerConfiguration extends ConfigurationPlugin implements SignalHa public String getPluginDirectory() { - return getConfig().getString("plugin-directory"); + return getStringValue("plugin-directory"); } public VirtualHostConfiguration getVirtualHostConfig(String name) @@ -470,84 +470,84 @@ public class ServerConfiguration extends ConfigurationPlugin implements SignalHa public List<String> getPrincipalDatabaseNames() { - return getConfig().getList("security.principal-databases.principal-database.name"); + return getListValue("security.principal-databases.principal-database.name"); } public List<String> getPrincipalDatabaseClass() { - return getConfig().getList("security.principal-databases.principal-database.class"); + return getListValue("security.principal-databases.principal-database.class"); } public List<String> getPrincipalDatabaseAttributeNames(int index) { String name = "security.principal-databases.principal-database(" + index + ")." + "attributes.attribute.name"; - return getConfig().getList(name); + return getListValue(name); } public List<String> getPrincipalDatabaseAttributeValues(int index) { String name = "security.principal-databases.principal-database(" + index + ")." + "attributes.attribute.value"; - return getConfig().getList(name); + return getListValue(name); } public List<String> getManagementPrincipalDBs() { - return getConfig().getList("security.jmx.principal-database"); + return getListValue("security.jmx.principal-database"); } public List<String> getManagementAccessList() { - return getConfig().getList("security.jmx.access"); + return getListValue("security.jmx.access"); } public int getFrameSize() { - return getConfig().getInt("advanced.framesize", DEFAULT_FRAME_SIZE); + return getIntValue("advanced.framesize", DEFAULT_FRAME_SIZE); } public boolean getProtectIOEnabled() { - return getConfig().getBoolean(CONNECTOR_PROTECTIO_ENABLED, DEFAULT_BROKER_CONNECTOR_PROTECTIO_ENABLED); + return getBooleanValue(CONNECTOR_PROTECTIO_ENABLED, DEFAULT_BROKER_CONNECTOR_PROTECTIO_ENABLED); } public int getBufferReadLimit() { - return getConfig().getInt(CONNECTOR_PROTECTIO_READ_BUFFER_LIMIT_SIZE, DEFAULT_BUFFER_READ_LIMIT_SIZE); + return getIntValue(CONNECTOR_PROTECTIO_READ_BUFFER_LIMIT_SIZE, DEFAULT_BUFFER_READ_LIMIT_SIZE); } public int getBufferWriteLimit() { - return getConfig().getInt(CONNECTOR_PROTECTIO_WRITE_BUFFER_LIMIT_SIZE, DEFAULT_BUFFER_WRITE_LIMIT_SIZE); + return getIntValue(CONNECTOR_PROTECTIO_WRITE_BUFFER_LIMIT_SIZE, DEFAULT_BUFFER_WRITE_LIMIT_SIZE); } public boolean getSynchedClocks() { - return getConfig().getBoolean("advanced.synced-clocks", false); + return getBooleanValue("advanced.synced-clocks"); } public boolean getMsgAuth() { - return getConfig().getBoolean("security.msg-auth", false); + return getBooleanValue("security.msg-auth"); } public String getJMXPrincipalDatabase() { - return getConfig().getString("security.jmx.principal-database"); + return getStringValue("security.jmx.principal-database"); } public String getManagementKeyStorePath() { - return getConfig().getString("management.ssl.keyStorePath", null); + return getStringValue("management.ssl.keyStorePath"); } public boolean getManagementSSLEnabled() { - return getConfig().getBoolean("management.ssl.enabled", true); + return getBooleanValue("management.ssl.enabled", true); } public String getManagementKeyStorePassword() { - return getConfig().getString("management.ssl.keyStorePassword"); + return getStringValue("management.ssl.keyStorePassword"); } public SecurityConfiguration getSecurityConfiguration() @@ -557,12 +557,12 @@ public class ServerConfiguration extends ConfigurationPlugin implements SignalHa public boolean getQueueAutoRegister() { - return getConfig().getBoolean("queue.auto_register", true); + return getBooleanValue("queue.auto_register", true); } public boolean getManagementEnabled() { - return getConfig().getBoolean("management.enabled", true); + return getBooleanValue("management.enabled", true); } public void setManagementEnabled(boolean enabled) @@ -572,162 +572,162 @@ public class ServerConfiguration extends ConfigurationPlugin implements SignalHa public int getHeartBeatDelay() { - return getConfig().getInt("heartbeat.delay", 5); + return getIntValue("heartbeat.delay", 5); } public double getHeartBeatTimeout() { - return getConfig().getDouble("heartbeat.timeoutFactor", 2.0); + return getDoubleValue("heartbeat.timeoutFactor", 2.0); } public int getDeliveryPoolSize() { - return getConfig().getInt("delivery.poolsize", 0); + return getIntValue("delivery.poolsize"); } public long getMaximumMessageAge() { - return getConfig().getLong("maximumMessageAge", 0); + return getLongValue("maximumMessageAge"); } public long getMaximumMessageCount() { - return getConfig().getLong("maximumMessageCount", 0); + return getLongValue("maximumMessageCount"); } public long getMaximumQueueDepth() { - return getConfig().getLong("maximumQueueDepth", 0); + return getLongValue("maximumQueueDepth"); } public long getMaximumMessageSize() { - return getConfig().getLong("maximumMessageSize", 0); + return getLongValue("maximumMessageSize"); } public long getMinimumAlertRepeatGap() { - return getConfig().getLong("minimumAlertRepeatGap", 0); + return getLongValue("minimumAlertRepeatGap"); } public long getCapacity() { - return getConfig().getLong("capacity", 0L); + return getLongValue("capacity"); } public long getFlowResumeCapacity() { - return getConfig().getLong("flowResumeCapacity", getCapacity()); + return getLongValue("flowResumeCapacity", getCapacity()); } public int getProcessors() { - return getConfig().getInt("connector.processors", 4); + return getIntValue("connector.processors", 4); } public List getPorts() { - return getConfig().getList("connector.port", Collections.singletonList(DEFAULT_PORT)); + return getListValue("connector.port", Collections.singletonList(DEFAULT_PORT)); } public List getPortExclude010() { - return getConfig().getList("connector.non010port", Collections.EMPTY_LIST); + return getListValue("connector.non010port"); } public List getPortExclude091() { - return getConfig().getList("connector.non091port", Collections.EMPTY_LIST); + return getListValue("connector.non091port"); } public List getPortExclude09() { - return getConfig().getList("connector.non09port", Collections.EMPTY_LIST); + return getListValue("connector.non09port"); } public List getPortExclude08() { - return getConfig().getList("connector.non08port", Collections.EMPTY_LIST); + return getListValue("connector.non08port"); } public String getBind() { - return getConfig().getString("connector.bind", "wildcard"); + return getStringValue("connector.bind", "wildcard"); } public int getReceiveBufferSize() { - return getConfig().getInt("connector.socketReceiveBuffer", 32767); + return getIntValue("connector.socketReceiveBuffer", 32767); } public int getWriteBufferSize() { - return getConfig().getInt("connector.socketWriteBuffer", 32767); + return getIntValue("connector.socketWriteBuffer", 32767); } public boolean getTcpNoDelay() { - return getConfig().getBoolean("connector.tcpNoDelay", true); + return getBooleanValue("connector.tcpNoDelay", true); } public boolean getEnableExecutorPool() { - return getConfig().getBoolean("advanced.filterchain[@enableExecutorPool]", false); + return getBooleanValue("advanced.filterchain[@enableExecutorPool]"); } public boolean getEnablePooledAllocator() { - return getConfig().getBoolean("advanced.enablePooledAllocator", false); + return getBooleanValue("advanced.enablePooledAllocator"); } public boolean getEnableDirectBuffers() { - return getConfig().getBoolean("advanced.enableDirectBuffers", false); + return getBooleanValue("advanced.enableDirectBuffers"); } public boolean getEnableSSL() { - return getConfig().getBoolean("connector.ssl.enabled", false); + return getBooleanValue("connector.ssl.enabled"); } public boolean getSSLOnly() { - return getConfig().getBoolean("connector.ssl.sslOnly", false); + return getBooleanValue("connector.ssl.sslOnly"); } public int getSSLPort() { - return getConfig().getInt("connector.ssl.port", DEFAULT_SSL_PORT); + return getIntValue("connector.ssl.port", DEFAULT_SSL_PORT); } public String getKeystorePath() { - return getConfig().getString("connector.ssl.keystorePath", "none"); + return getStringValue("connector.ssl.keystorePath", "none"); } public String getKeystorePassword() { - return getConfig().getString("connector.ssl.keystorePassword", "none"); + return getStringValue("connector.ssl.keystorePassword", "none"); } public String getCertType() { - return getConfig().getString("connector.ssl.certType", "SunX509"); + return getStringValue("connector.ssl.certType", "SunX509"); } public boolean getQpidNIO() { - return getConfig().getBoolean("connector.qpidnio", false); + return getBooleanValue("connector.qpidnio"); } public boolean getUseBiasedWrites() { - return getConfig().getBoolean("advanced.useWriteBiasedPool", false); + return getBooleanValue("advanced.useWriteBiasedPool"); } public String getDefaultVirtualHost() { - return getConfig().getString("virtualhosts.default"); + return getStringValue("virtualhosts.default"); } public void setDefaultVirtualHost(String vhost) @@ -742,8 +742,8 @@ public class ServerConfiguration extends ConfigurationPlugin implements SignalHa public long getHousekeepingCheckPeriod() { - return getConfig().getLong("housekeeping.checkPeriod", - getConfig().getLong("housekeeping.expiredMessageCheckPeriod", + return getLongValue("housekeeping.checkPeriod", + getLongValue("housekeeping.expiredMessageCheckPeriod", DEFAULT_HOUSEKEEPING_PERIOD)); } @@ -760,7 +760,7 @@ public class ServerConfiguration extends ConfigurationPlugin implements SignalHa public Boolean getTcpNoDelay() { // Can't call parent getTcpNoDelay since it just calls this one - return getConfig().getBoolean("connector.tcpNoDelay", true); + return getBooleanValue("connector.tcpNoDelay", true); } public Integer getSoTimeout() diff --git a/java/broker/src/main/java/org/apache/qpid/server/configuration/VirtualHostConfiguration.java b/java/broker/src/main/java/org/apache/qpid/server/configuration/VirtualHostConfiguration.java index d3e5921e79..ca1f25952e 100644 --- a/java/broker/src/main/java/org/apache/qpid/server/configuration/VirtualHostConfiguration.java +++ b/java/broker/src/main/java/org/apache/qpid/server/configuration/VirtualHostConfiguration.java @@ -37,14 +37,12 @@ import java.util.HashSet; public class VirtualHostConfiguration extends ConfigurationPlugin { - private Configuration _config; private String _name; private Map<String, QueueConfiguration> _queues = new HashMap<String, QueueConfiguration>(); private Map<String, ExchangeConfiguration> _exchanges = new HashMap<String, ExchangeConfiguration>(); public VirtualHostConfiguration(String name, Configuration config) throws ConfigurationException { - _config = config; _name = name; setConfiguration(config); } @@ -59,7 +57,7 @@ public class VirtualHostConfiguration extends ConfigurationPlugin { super.setConfiguration("virtualhosts.virtualhost",config); - Iterator i = _config.getList("queues.queue.name").iterator(); + Iterator i = getListValue("queues.queue.name").iterator(); while (i.hasNext()) { @@ -67,13 +65,13 @@ public class VirtualHostConfiguration extends ConfigurationPlugin _queues.put(queueName, new QueueConfiguration(queueName, this)); } - i = _config.getList("exchanges.exchange.name").iterator(); + i = getListValue("exchanges.exchange.name").iterator(); int count = 0; while (i.hasNext()) { CompositeConfiguration mungedConf = new CompositeConfiguration(); mungedConf.addConfiguration(config.subset("exchanges.exchange(" + count++ + ")")); - mungedConf.addConfiguration(_config.subset("exchanges")); + mungedConf.addConfiguration(_configuration.subset("exchanges")); String exchName = (String) i.next(); _exchanges.put(exchName, new ExchangeConfiguration(exchName, mungedConf)); } @@ -86,42 +84,42 @@ public class VirtualHostConfiguration extends ConfigurationPlugin public long getHousekeepingExpiredMessageCheckPeriod() { - return _config.getLong("housekeeping.expiredMessageCheckPeriod", ApplicationRegistry.getInstance().getConfiguration().getHousekeepingCheckPeriod()); + return getLongValue("housekeeping.expiredMessageCheckPeriod", ApplicationRegistry.getInstance().getConfiguration().getHousekeepingCheckPeriod()); } public String getAuthenticationDatabase() { - return _config.getString("security.authentication.name"); + return getStringValue("security.authentication.name"); } public List getCustomExchanges() { - return _config.getList("custom-exchanges.class-name"); + return getListValue("custom-exchanges.class-name"); } public SecurityConfiguration getSecurityConfiguration() { - return new SecurityConfiguration(_config.subset("security")); + return new SecurityConfiguration(_configuration.subset("security")); } public Configuration getStoreConfiguration() { - return _config.subset("store"); + return _configuration.subset("store"); } public String getMessageStoreClass() { - return _config.getString("store.class", MemoryMessageStore.class.getName()); + return getStringValue("store.class", MemoryMessageStore.class.getName()); } public void setMessageStoreClass(String storeClass) { - _config.setProperty("store.class", storeClass); + _configuration.setProperty("store.class", storeClass); } public List getExchanges() { - return _config.getList("exchanges.exchange.name"); + return getListValue("exchanges.exchange.name"); } public String[] getQueueNames() @@ -158,47 +156,47 @@ public class VirtualHostConfiguration extends ConfigurationPlugin public long getMemoryUsageMaximum() { - return _config.getLong("queues.maximumMemoryUsage", 0); + return getLongValue("queues.maximumMemoryUsage"); } public long getMemoryUsageMinimum() { - return _config.getLong("queues.minimumMemoryUsage", 0); + return getLongValue("queues.minimumMemoryUsage"); } public int getMaximumMessageAge() { - return _config.getInt("queues.maximumMessageAge", 0); + return getIntValue("queues.maximumMessageAge"); } public Long getMaximumQueueDepth() { - return _config.getLong("queues.maximumQueueDepth", 0); + return getLongValue("queues.maximumQueueDepth"); } public Long getMaximumMessageSize() { - return _config.getLong("queues.maximumMessageSize", 0); + return getLongValue("queues.maximumMessageSize"); } public Long getMaximumMessageCount() { - return _config.getLong("queues.maximumMessageCount", 0); + return getLongValue("queues.maximumMessageCount"); } public Long getMinimumAlertRepeatGap() { - return _config.getLong("queues.minimumAlertRepeatGap", 0); + return getLongValue("queues.minimumAlertRepeatGap"); } public long getCapacity() { - return _config.getLong("queues.capacity", 0l); + return getLongValue("queues.capacity"); } public long getFlowResumeCapacity() { - return _config.getLong("queues.flowResumeCapacity", getCapacity()); + return getLongValue("queues.flowResumeCapacity", getCapacity()); } public String[] getElementsProcessed() @@ -210,6 +208,6 @@ public class VirtualHostConfiguration extends ConfigurationPlugin public int getHouseKeepingThreadCount() { - return _config.getInt("housekeeping.poolSize", Runtime.getRuntime().availableProcessors()); + return getIntValue("housekeeping.poolSize", Runtime.getRuntime().availableProcessors()); } } diff --git a/java/broker/src/main/java/org/apache/qpid/server/configuration/plugins/ConfigurationPlugin.java b/java/broker/src/main/java/org/apache/qpid/server/configuration/plugins/ConfigurationPlugin.java index df4a7da4bf..e6306b70d5 100644 --- a/java/broker/src/main/java/org/apache/qpid/server/configuration/plugins/ConfigurationPlugin.java +++ b/java/broker/src/main/java/org/apache/qpid/server/configuration/plugins/ConfigurationPlugin.java @@ -22,14 +22,19 @@ package org.apache.qpid.server.configuration.plugins; import org.apache.commons.configuration.Configuration; import org.apache.commons.configuration.ConfigurationException; +import org.apache.commons.configuration.ConversionException; +import org.apache.log4j.Logger; import org.apache.qpid.server.configuration.ConfigurationManager; import org.apache.qpid.server.registry.ApplicationRegistry; -import org.apache.log4j.Logger; +import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; +import java.util.List; import java.util.Map; +import java.util.NoSuchElementException; import java.util.Set; public abstract class ConfigurationPlugin @@ -44,14 +49,14 @@ public abstract class ConfigurationPlugin /** * The Elements that this Plugin can process. * i.e. - * For a Queues plugin that would be a list containing: - * queue - the queue entries - * the alerting values for defaults - * exchange - the default exchange - * durable - set the default durablity - * etc + * For a Queues plugin that would be a list containing: + * queue - the queue entries + * the alerting values for defaults + * exchange - the default exchange + * durable - set the default durablity + * etc * - * @return + * @return */ abstract public String[] getElementsProcessed(); @@ -96,13 +101,12 @@ public abstract class ConfigurationPlugin elementNameIndex = element.indexOf("["); if (elementNameIndex > 0) { - element = element.substring(0,elementNameIndex).trim(); + element = element.substring(0, elementNameIndex).trim(); } elements.add(element); } - //Remove the items we already expect in the configuration for (String tag : getElementsProcessed()) { @@ -114,7 +118,7 @@ public abstract class ConfigurationPlugin // configuration they don't have to. int bracketIndex = tag.indexOf("["); if (bracketIndex != -1) - { + { tag = tag.substring(bracketIndex + 1, tag.length()); } @@ -128,7 +132,7 @@ public abstract class ConfigurationPlugin _logger.info("Elements to lookup:" + path); for (String tag : elements) { - _logger.info("Tag:'"+tag+"'"); + _logger.info("Tag:'" + tag + "'"); } } } @@ -138,15 +142,14 @@ public abstract class ConfigurationPlugin { ConfigurationManager configurationManager = ApplicationRegistry.getInstance().getConfigurationManager(); - String configurationElement = path +"."+ element; + String configurationElement = path + "." + element; ConfigurationPlugin elementHandler = configurationManager. getConfigurationPlugin(configurationElement, configuration.subset(element)); - if (elementHandler == null) { - _logger.warn("Unused configuration element: '" + configurationElement+"'"); + _logger.warn("Unused configuration element: '" + configurationElement + "'"); } else { @@ -154,6 +157,180 @@ public abstract class ConfigurationPlugin } } } + + protected boolean hasConfiguration() + { + return _configuration != null; + } + + /// Getters + + protected double getDoubleValue(String property) + { + return getDoubleValue(property, 0.0); + } + + protected double getDoubleValue(String property, double defaultValue) + { + return _configuration.getDouble(property, defaultValue); + } + + + protected long getLongValue(String property) + { + return getLongValue(property, 0); + } + + protected long getLongValue(String property, long defaultValue) + { + return _configuration.getLong(property, defaultValue); + } + + protected int getIntValue(String property) + { + return getIntValue(property, 0); + } + + protected int getIntValue(String property, int defaultValue) + { + return _configuration.getInt(property, defaultValue); + } + + protected String getStringValue(String property) + { + return getStringValue(property, null); + } + + protected String getStringValue(String property, String defaultValue) + { + return _configuration.getString(property, defaultValue); + } + + protected boolean getBooleanValue(String property) + { + return getBooleanValue(property, false); + } + + protected boolean getBooleanValue(String property, boolean defaultValue) + { + return _configuration.getBoolean(property, defaultValue); + } + + protected List getListValue(String property) + { + return getListValue(property, Collections.EMPTY_LIST); + } + + protected List getListValue(String property, List defaultValue) + { + return _configuration.getList(property, defaultValue); + } + + + + /// Validation Helpers + + protected boolean contains(String property) + { + return _configuration.getProperty(property) != null; + } + + + /** + * Provide mechanism to validate Configuration contains a Postiive Long Value + * + * @param property + * + * @throws ConfigurationException + */ + protected void validatePositiveLong(String property) throws ConfigurationException + { + try + { + if (!containsPositiveLong(property)) + { + throw new ConfigurationException(this.getClass().getSimpleName() + + ": '" + property + + "' must be a Positive Long value."); + } + } + catch (Exception e) + { + Throwable last = e; + + // Find the first cause + if (e instanceof ConversionException) + { + Throwable t = e.getCause(); + while (t != null) + { + last = t; + t = last.getCause(); + } + } + + throw new ConfigurationException(this.getClass().getSimpleName() + + ": unable to configure invalid " + + property + ":" + + _configuration.getString(property), + last); + } + } + + protected boolean containsLong(String property) + { + try + { + _configuration.getLong(property); + return true; + } + catch (NoSuchElementException e) + { + return false; + } + } + + protected boolean containsPositiveLong(String property) + { + try + { + long value = _configuration.getLong(property); + return value > 0; + } + catch (NoSuchElementException e) + { + return false; + } + + } + + protected boolean containsInt(String property) + { + try + { + _configuration.getInt(property); + return true; + } + catch (NoSuchElementException e) + { + return false; + } + } + + protected boolean containsBoolean(String property) + { + try + { + _configuration.getBoolean(property); + return true; + } + catch (NoSuchElementException e) + { + return false; + } + } + + } diff --git a/java/broker/src/test/java/org/apache/qpid/server/configuration/plugins/ConfigurationPluginTest.java b/java/broker/src/test/java/org/apache/qpid/server/configuration/plugins/ConfigurationPluginTest.java index b9c8e39d1f..2f2a47cd14 100644 --- a/java/broker/src/test/java/org/apache/qpid/server/configuration/plugins/ConfigurationPluginTest.java +++ b/java/broker/src/test/java/org/apache/qpid/server/configuration/plugins/ConfigurationPluginTest.java @@ -22,73 +22,175 @@ package org.apache.qpid.server.configuration.plugins; import junit.framework.TestCase; import org.apache.commons.configuration.CompositeConfiguration; -import org.apache.commons.configuration.Configuration; import org.apache.commons.configuration.ConfigurationException; import org.apache.commons.configuration.XMLConfiguration; +import java.util.List; + /** * Test that verifies that given a configuration the * Plugin manager */ public class ConfigurationPluginTest extends TestCase { + private static final double DOUBLE = 3.14; + private static final long POSITIVE_LONG = 1000; + private static final long NEGATIVE_LONG = -1000; + private static final int LIST_SIZE = 3; class ConfigPlugin extends ConfigurationPlugin { @Override public String[] getElementsProcessed() { - return new String[]{"[@property]", "name"}; + return new String[]{"[@property]", "name", + "positiveLong", "negativeLong", + "true", "list", "double"}; } public String getName() { - return _configuration.getString("name"); + return getStringValue("name"); } public String getProperty() { - return _configuration.getString("[@property]"); + return getStringValue("[@property]"); } - } - Configuration _configuration; + ConfigPlugin _plugin; public void setUp() { XMLConfiguration xmlconfig = new XMLConfiguration(); - xmlconfig.addProperty("base.element[@property]","property"); - xmlconfig.addProperty("base.element.name","name"); + xmlconfig.addProperty("base.element[@property]", "property"); + xmlconfig.addProperty("base.element.name", "name"); + // We make these strings as that is how they will be read from the file. + xmlconfig.addProperty("base.element.positiveLong", String.valueOf(POSITIVE_LONG)); + xmlconfig.addProperty("base.element.negativeLong", String.valueOf(NEGATIVE_LONG)); + xmlconfig.addProperty("base.element.boolean", String.valueOf(true)); + xmlconfig.addProperty("base.element.double", String.valueOf(DOUBLE)); + for (int i = 0; i < LIST_SIZE; i++) + { + xmlconfig.addProperty("base.element.list", i); + } //Use a composite configuration as this is what our broker code uses. - CompositeConfiguration composite = new CompositeConfiguration(); + CompositeConfiguration composite = new CompositeConfiguration(); composite.addConfiguration(xmlconfig); - _configuration = composite; + _plugin = new ConfigPlugin(); + + try + { + _plugin.setConfiguration("base.element", composite.subset("base.element")); + } + catch (ConfigurationException e) + { + e.printStackTrace(); + fail(e.toString()); + } + } + public void testHasConfiguration() + { + assertTrue("Plugin has no configuration ", _plugin.hasConfiguration()); + _plugin = new ConfigPlugin(); + assertFalse("Plugins has configuration", _plugin.hasConfiguration()); + } public void testValuesRetreived() { - ConfigPlugin plugin = new ConfigPlugin(); + assertEquals("Name not correct", "name", _plugin.getName()); + assertEquals("Property not correct", "property", _plugin.getProperty()); + } + + public void testContainsPositiveLong() + { + assertTrue("positiveLong is not positive", _plugin.containsPositiveLong("positiveLong")); + assertFalse("NonExistentValue was found", _plugin.containsPositiveLong("NonExistentValue")); try { - plugin.setConfiguration("base.element", _configuration.subset("base.element")); + _plugin.validatePositiveLong("positiveLong"); } catch (ConfigurationException e) { - e.printStackTrace(); - fail(e.toString()); + fail(e.getMessage()); + } + + try + { + _plugin.validatePositiveLong("negativeLong"); + fail("negativeLong should not be positive"); + } + catch (ConfigurationException e) + { + assertEquals("negativeLong should not be reported as positive", + "ConfigPlugin: unable to configure invalid negativeLong:" + NEGATIVE_LONG, e.getMessage()); } - assertEquals("Name not correct","name",plugin.getName()); - assertEquals("Property not correct","property",plugin.getProperty()); } + public void testDouble() + { + assertEquals("Double value not returned", DOUBLE, _plugin.getDoubleValue("double")); + assertEquals("default Double value not returned", 0.0, _plugin.getDoubleValue("NonExistent")); + assertEquals("set default Double value not returned", DOUBLE, _plugin.getDoubleValue("NonExistent", DOUBLE)); + } + + public void testLong() + { + assertTrue("Long value not returned", _plugin.containsLong("positiveLong")); + assertFalse("Long value returned", _plugin.containsLong("NonExistent")); + assertEquals("Long value not returned", POSITIVE_LONG, _plugin.getLongValue("positiveLong")); + assertEquals("default Long value not returned", 0, _plugin.getLongValue("NonExistent")); + assertEquals("set default Long value not returned", NEGATIVE_LONG, _plugin.getLongValue("NonExistent", NEGATIVE_LONG)); + } + public void testInt() + { + assertTrue("Int value not returned", _plugin.containsInt("positiveLong")); + assertFalse("Int value returned", _plugin.containsInt("NonExistent")); + assertEquals("Int value not returned", (int) POSITIVE_LONG, _plugin.getIntValue("positiveLong")); + assertEquals("default Int value not returned", 0, _plugin.getIntValue("NonExistent")); + assertEquals("set default Int value not returned", (int) NEGATIVE_LONG, _plugin.getIntValue("NonExistent", (int) NEGATIVE_LONG)); + } + public void testString() + { + assertEquals("String value not returned", "name", _plugin.getStringValue("name")); + assertNull("Null default String value not returned", _plugin.getStringValue("NonExistent", null)); + assertNull("default String value not returned", _plugin.getStringValue("NonExistent")); + assertEquals("default String value not returned", "Default", _plugin.getStringValue("NonExistent", "Default")); + } + + public void testBoolean() + { + assertTrue("Boolean value not returned", _plugin.getBooleanValue("boolean")); + assertFalse("default String value not returned", _plugin.getBooleanValue("NonExistent")); + assertTrue("set default String value not returned", _plugin.getBooleanValue("NonExistent", true)); + } + + public void testList() + { + assertTrue("list not found in plugin", _plugin.contains("list")); + List list = _plugin.getListValue("list"); + assertNotNull("Returned list should not be null", list); + assertEquals("List should not be empty", LIST_SIZE, list.size()); + + list = _plugin.getListValue("NonExistent"); + assertNotNull("Returned list should not be null", list); + assertEquals("List is not empty", 0, list.size()); + } + + public void testContains() + { + assertTrue("list not found in plugin", _plugin.contains("list")); + assertFalse("NonExistent found in plugin", _plugin.contains("NonExistent")); + } } |
