summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--qpid/cpp/src/qpid/broker/SessionAdapter.cpp3
-rw-r--r--qpid/python/tests_0-10/exchange.py22
2 files changed, 25 insertions, 0 deletions
diff --git a/qpid/cpp/src/qpid/broker/SessionAdapter.cpp b/qpid/cpp/src/qpid/broker/SessionAdapter.cpp
index 65eadda68a..1a802cb2bd 100644
--- a/qpid/cpp/src/qpid/broker/SessionAdapter.cpp
+++ b/qpid/cpp/src/qpid/broker/SessionAdapter.cpp
@@ -85,6 +85,9 @@ void SessionAdapter::ExchangeHandlerImpl::declare(const string& exchange, const
checkType(actual, type);
checkAlternate(actual, alternate);
}else{
+ if(exchange.find("amq.") == 0) {
+ throw framing::NotAllowedException(QPID_MSG("Exchange names beginning with \"amq.\" are reserved. (exchange=\"" << exchange << "\")"));
+ }
try{
std::pair<Exchange::shared_ptr, bool> response = getBroker().getExchanges().declare(exchange, type, durable, args);
if (response.second) {
diff --git a/qpid/python/tests_0-10/exchange.py b/qpid/python/tests_0-10/exchange.py
index 738e3c4def..e2c84848f7 100644
--- a/qpid/python/tests_0-10/exchange.py
+++ b/qpid/python/tests_0-10/exchange.py
@@ -271,6 +271,28 @@ class DeclareMethodExchangeFieldReservedRuleTests(TestHelper):
"""
+ def test(self):
+ try:
+ self.session.exchange_declare(exchange="amq.", type="direct")
+ self.fail("Expected not allowed error (530) for exchanges starting with \"amq.\".")
+ except SessionException, e:
+ self.assertEquals(e.args[0].error_code, 530)
+ # connection closed, reopen it
+ self.tearDown()
+ self.setUp()
+ try:
+ self.session.exchange_declare(exchange="amq.abc123", type="direct")
+ self.fail("Expected not allowed error (530) for exchanges starting with \"amq.\".")
+ except SessionException, e:
+ self.assertEquals(e.args[0].error_code, 530)
+ # connection closed, reopen it
+ self.tearDown()
+ self.setUp()
+ # The following should be legal:
+ self.session.exchange_declare(exchange="amq", type="direct")
+ self.session.exchange_declare(exchange=".amq.", type="direct")
+ self.session.exchange_declare(exchange="abc.amq.", type="direct")
+ self.session.exchange_declare(exchange="abc.amq.def", type="direct")
class DeclareMethodTypeFieldTypedRuleTests(TestHelper):