You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by kp...@apache.org on 2009/10/28 21:24:51 UTC

svn commit: r830751 - in /qpid/trunk/qpid: cpp/src/qpid/broker/SessionAdapter.cpp python/tests_0-10/exchange.py

Author: kpvdr
Date: Wed Oct 28 20:24:51 2009
New Revision: 830751

URL: http://svn.apache.org/viewvc?rev=830751&view=rev
Log:
Fixed lack of checking for reserved exchange names that start with "amq." according to the AMQP spec. Added a python test for this functionality.

Modified:
    qpid/trunk/qpid/cpp/src/qpid/broker/SessionAdapter.cpp
    qpid/trunk/qpid/python/tests_0-10/exchange.py

Modified: qpid/trunk/qpid/cpp/src/qpid/broker/SessionAdapter.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/broker/SessionAdapter.cpp?rev=830751&r1=830750&r2=830751&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/broker/SessionAdapter.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/broker/SessionAdapter.cpp Wed Oct 28 20:24:51 2009
@@ -85,6 +85,9 @@
         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) {

Modified: qpid/trunk/qpid/python/tests_0-10/exchange.py
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/python/tests_0-10/exchange.py?rev=830751&r1=830750&r2=830751&view=diff
==============================================================================
--- qpid/trunk/qpid/python/tests_0-10/exchange.py (original)
+++ qpid/trunk/qpid/python/tests_0-10/exchange.py Wed Oct 28 20:24:51 2009
@@ -271,6 +271,28 @@
     
     
     """
+    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):



---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:commits-subscribe@qpid.apache.org