diff options
-rw-r--r-- | cpp/src/qpid/broker/QueuePolicy.cpp | 16 | ||||
-rw-r--r-- | cpp/src/tests/QueuePolicyTest.cpp | 18 | ||||
-rw-r--r-- | tests/src/py/qpid_tests/broker_0_10/queue.py | 75 |
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 |