summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cpp/src/qpid/broker/QueuePolicy.cpp16
-rw-r--r--cpp/src/tests/QueuePolicyTest.cpp18
-rw-r--r--tests/src/py/qpid_tests/broker_0_10/queue.py75
3 files changed, 29 insertions, 80 deletions
diff --git a/cpp/src/qpid/broker/QueuePolicy.cpp b/cpp/src/qpid/broker/QueuePolicy.cpp
index c1d979ac33..f311ea8321 100644
--- a/cpp/src/qpid/broker/QueuePolicy.cpp
+++ b/cpp/src/qpid/broker/QueuePolicy.cpp
@@ -123,17 +123,23 @@ uint32_t QueuePolicy::getCapacity(const FieldTable& settings, const std::string&
int32_t result = 0;
if (!v) return defaultValue;
- if (v->convertsTo<int>()) {
+ if (v->getType() == 0x23) {
+ QPID_LOG(debug, "Value for " << key << " specified as float: " << v->get<float>());
+ } else if (v->getType() == 0x33) {
+ QPID_LOG(debug, "Value for " << key << " specified as double: " << v->get<double>());
+ } else if (v->convertsTo<int>()) {
result = v->get<int>();
+ QPID_LOG(debug, "Got integer value for " << key << ": " << result);
if (result >= 0) return result;
- }
- else {
- string s(v->get<string>()); // I assume anything can be converted to a string
+ } else if (v->convertsTo<string>()) {
+ string s(v->get<string>());
+ QPID_LOG(debug, "Got string value for " << key << ": " << s);
std::istringstream convert(s);
if (convert >> result && result >= 0) return result;
}
- throw InvalidArgumentException(QPID_MSG("Cannot convert " << key << " to unsigned integer"));
+ QPID_LOG(warning, "Cannot convert " << key << " to unsigned integer, using default (" << defaultValue << ")");
+ return defaultValue;
}
std::string QueuePolicy::getType(const FieldTable& settings)
diff --git a/cpp/src/tests/QueuePolicyTest.cpp b/cpp/src/tests/QueuePolicyTest.cpp
index 5992151e46..90af9c7dd9 100644
--- a/cpp/src/tests/QueuePolicyTest.cpp
+++ b/cpp/src/tests/QueuePolicyTest.cpp
@@ -378,6 +378,24 @@ QPID_AUTO_TEST_CASE(testPolicyFailureOnCommit)
BOOST_CHECK_THROW(f.session.txCommit(), InternalErrorException);
}
+QPID_AUTO_TEST_CASE(testCapacityConversion)
+{
+ FieldTable args;
+ args.setString("qpid.max_count", "5");
+
+ ProxySessionFixture f;
+ std::string q("q");
+ f.session.queueDeclare(arg::queue=q, arg::exclusive=true, arg::autoDelete=true, arg::arguments=args);
+ for (int i = 0; i < 5; i++) {
+ f.session.messageTransfer(arg::content=client::Message((boost::format("%1%_%2%") % "Message" % (i+1)).str(), q));
+ }
+ try {
+ ScopedSuppressLogging sl; // Suppress messages for expected errors.
+ f.session.messageTransfer(arg::content=client::Message("Message_6", q));
+ BOOST_FAIL("expecting ResourceLimitExceededException.");
+ } catch (const ResourceLimitExceededException&) {}
+}
+
QPID_AUTO_TEST_SUITE_END()
}} // namespace qpid::tests
diff --git a/tests/src/py/qpid_tests/broker_0_10/queue.py b/tests/src/py/qpid_tests/broker_0_10/queue.py
index 294155ee8c..d68cf91492 100644
--- a/tests/src/py/qpid_tests/broker_0_10/queue.py
+++ b/tests/src/py/qpid_tests/broker_0_10/queue.py
@@ -115,81 +115,6 @@ class QueueTests(TestBase010):
except SessionException, e:
self.assertEquals(405, e.args[0].error_code)
- def test_declare_capacity_valid(self):
- session = self.session
-
- try:
- queue_options = {}
- queue_options["qpid.max_count"] = 0
- queue_options["qpid.max_size"] = 0
- session.queue_declare(queue="queue_capacity1", exclusive=True, arguments=queue_options)
- except SessionException, e:
- self.fail("Should accept queue create request with name=queue_capacity1, qpid.max_count=0 and qpid.max_size=0")
-
- try:
- queue_options = {}
- queue_options["qpid.max_count"] = 3
- queue_options["qpid.max_size"] = 0
- session.queue_declare(queue="queue_capacity2", exclusive=True, arguments=queue_options)
- except SessionException, e:
- self.fail("Should accept queue create request with name=queue_capacity2, qpid.max_count=3 and qpid.max_size=0")
-
- try:
- queue_options = {}
- queue_options["qpid.max_count"] = 0
- queue_options["qpid.max_size"] = 300
- session.queue_declare(queue="queue_capacity3", exclusive=True, arguments=queue_options)
- except SessionException, e:
- self.fail("Should accept queue create request with name=queue_capacity3, qpid.max_count=0 and qpid.max_size=300")
-
- try:
- queue_options = {}
- queue_options["qpid.max_count"] = 0
- queue_options["qpid.max_size"] = "3"
- session.queue_declare(queue="queue_capacity6", exclusive=True, arguments=queue_options)
- except SessionException, e:
- self.fail("Should allow queue create request with qpid.max_size='3'")
-
-
- def test_declare_capacity_invalid(self):
- session = self.session
- try:
- queue_options = {}
- queue_options["qpid.max_count"] = -1
- queue_options["qpid.max_size"] = 0
- session.queue_declare(queue="queue_capacity4", exclusive=True, arguments=queue_options)
- self.fail("Should reject queue create request with name=queue_capacity4, qpid.max_count=-1 and qpid.max_size=0")
- except SessionException, e:
- pass
-
- try:
- queue_options = {}
- queue_options["qpid.max_count"] = 0
- queue_options["qpid.max_size"] = -1
- session.queue_declare(queue="queue_capacity5", exclusive=True, arguments=queue_options)
- self.fail("Should reject queue create request with name=queue_capacity5, qpid.max_count=0 and qpid.max_size=-1")
- except SessionException, e:
- pass
-
- try:
- queue_options = {}
- queue_options["qpid.max_count"] = 0
- queue_options["qpid.max_size"] = "flummery"
- session.queue_declare(queue="queue_capacity7", exclusive=True, arguments=queue_options)
- self.fail("Should deny queue create request with name=queue_capacity7, qpid.max_count=0 and qpid.max_size='flummery'")
- except SessionException, e:
- pass
-
- try:
- queue_options = {}
- queue_options["qpid.max_count"] = 0
- queue_options["qpid.max_size"] = 3.14159
- session.queue_declare(queue="queue_capacity8", exclusive=True, arguments=queue_options)
- self.fail("Should deny queue create request with name=queue_capacity4, qpid.max_count=0 and qpid.max_size=3.14159");
- except SessionException, e:
- pass
-
-
def test_declare_passive(self):
"""
Test that the passive field is honoured in queue.declare