Author: rgodfrey
Date: Tue Feb 21 01:40:14 2012
New Revision: 1291546

URL: http://svn.apache.org/viewvc?rev=1291546&view=rev
Log:
QPID-3596 : Python tests fails as Java Broker does not validate for reserved 
exchange names on create/bind

Modified:
    
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/handler/ExchangeDeclareHandler.java
    
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerSessionDelegate.java
    qpid/trunk/qpid/java/test-profiles/python_tests/Java010PythonExcludes

Modified: 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/handler/ExchangeDeclareHandler.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/handler/ExchangeDeclareHandler.java?rev=1291546&r1=1291545&r2=1291546&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/handler/ExchangeDeclareHandler.java
 (original)
+++ 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/handler/ExchangeDeclareHandler.java
 Tue Feb 21 01:40:14 2012
@@ -26,6 +26,7 @@ import org.apache.qpid.AMQConnectionExce
 import org.apache.qpid.AMQException;
 import org.apache.qpid.AMQUnknownExchangeType;
 import org.apache.qpid.framing.AMQMethodBody;
+import org.apache.qpid.framing.AMQShortString;
 import org.apache.qpid.framing.ExchangeDeclareBody;
 import org.apache.qpid.framing.MethodRegistry;
 import org.apache.qpid.protocol.AMQConstant;
@@ -37,6 +38,7 @@ import org.apache.qpid.server.protocol.A
 import org.apache.qpid.server.state.AMQStateManager;
 import org.apache.qpid.server.state.StateAwareMethodListener;
 import org.apache.qpid.server.virtualhost.VirtualHost;
+import org.apache.qpid.transport.ExecutionErrorCode;
 
 public class ExchangeDeclareHandler implements 
StateAwareMethodListener<ExchangeDeclareBody>
 {
@@ -65,26 +67,39 @@ public class ExchangeDeclareHandler impl
             throw body.getChannelNotFoundException(channelId);
         }
 
+        final AMQShortString exchangeName = body.getExchange();
         if (_logger.isDebugEnabled())
         {
-            _logger.debug("Request to declare exchange of type " + 
body.getType() + " with name " + body.getExchange());
+            _logger.debug("Request to declare exchange of type " + 
body.getType() + " with name " + exchangeName);
         }
         
         synchronized(exchangeRegistry)
         {
-            Exchange exchange = 
exchangeRegistry.getExchange(body.getExchange());
+            Exchange exchange = exchangeRegistry.getExchange(exchangeName);
 
             if (exchange == null)
             {
                 if(body.getPassive() && ((body.getType() == null) || 
body.getType().length() ==0))
                 {
-                    throw body.getChannelException(AMQConstant.NOT_FOUND, 
"Unknown exchange: " + body.getExchange());
+                    throw body.getChannelException(AMQConstant.NOT_FOUND, 
"Unknown exchange: " + exchangeName);
+                }
+                else if(exchangeName.startsWith("amq."))
+                {
+                    throw body.getConnectionException(AMQConstant.NOT_ALLOWED,
+                              "Attempt to declare exchange: " + exchangeName +
+                              " which begins with reserved prefix 'amq.'.");
+                }
+                else if(exchangeName.startsWith("qpid."))
+                {
+                    throw body.getConnectionException(AMQConstant.NOT_ALLOWED,
+                                                      "Attempt to declare 
exchange: " + exchangeName +
+                                                      " which begins with 
reserved prefix 'qpid.'.");
                 }
                 else
                 {
                     try
                     {
-                        exchange = 
exchangeFactory.createExchange(body.getExchange() == null ? null : 
body.getExchange().intern(),
+                        exchange = exchangeFactory.createExchange(exchangeName 
== null ? null : exchangeName.intern(),
                                                                   
body.getType() == null ? null : body.getType().intern(),
                                                                   
body.getDurable(),
                                                                   
body.getPassive(), body.getTicket());
@@ -97,14 +112,15 @@ public class ExchangeDeclareHandler impl
                     }
                     catch(AMQUnknownExchangeType e)
                     {
-                        throw 
body.getConnectionException(AMQConstant.COMMAND_INVALID, "Unknown exchange: " + 
body.getExchange(),e);
+                        throw 
body.getConnectionException(AMQConstant.COMMAND_INVALID, "Unknown exchange: " + 
exchangeName,e);
                     }
                 }
             }
             else if (!exchange.getTypeShortString().equals(body.getType()) && 
!((body.getType() == null || body.getType().length() ==0) && body.getPassive()))
             {
 
-                throw new AMQConnectionException(AMQConstant.NOT_ALLOWED, 
"Attempt to redeclare exchange: " + body.getExchange() + " of type " + 
exchange.getTypeShortString() + " to " + body.getType() +".",body.getClazz(), 
body.getMethod(),body.getMajor(),body.getMinor(),null);
+                throw new AMQConnectionException(AMQConstant.NOT_ALLOWED, 
"Attempt to redeclare exchange: " +
+                                                                          
exchangeName + " of type " + exchange.getTypeShortString() + " to " + 
body.getType() +".",body.getClazz(), 
body.getMethod(),body.getMajor(),body.getMinor(),null);
             }
         }
         if(!body.getNowait())

Modified: 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerSessionDelegate.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerSessionDelegate.java?rev=1291546&r1=1291545&r2=1291546&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerSessionDelegate.java
 (original)
+++ 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerSessionDelegate.java
 Tue Feb 21 01:40:14 2012
@@ -474,41 +474,56 @@ public class ServerSessionDelegate exten
         {
             if (exchange == null)
             {
-                ExchangeRegistry exchangeRegistry = 
getExchangeRegistry(session);
-                ExchangeFactory exchangeFactory = 
virtualHost.getExchangeFactory();
+                if(exchangeName.startsWith("amq."))
+                {
+                    exception(session, method, ExecutionErrorCode.NOT_ALLOWED,
+                              "Attempt to declare exchange: " + exchangeName +
+                              " which begins with reserved prefix 'amq.'.");
+                }
+                else if(exchangeName.startsWith("qpid."))
+                {
+                    exception(session, method, ExecutionErrorCode.NOT_ALLOWED,
+                              "Attempt to declare exchange: " + exchangeName +
+                              " which begins with reserved prefix 'qpid.'.");
+                }
+                else
+                {
+                    ExchangeRegistry exchangeRegistry = 
getExchangeRegistry(session);
+                    ExchangeFactory exchangeFactory = 
virtualHost.getExchangeFactory();
 
 
 
-                try
-                {
+                    try
+                    {
+
+                        exchange = 
exchangeFactory.createExchange(method.getExchange(),
+                                                                  
method.getType(),
+                                                                  
method.getDurable(),
+                                                                  
method.getAutoDelete());
+
+                        String alternateExchangeName = 
method.getAlternateExchange();
+                        if(alternateExchangeName != null && 
alternateExchangeName.length() != 0)
+                        {
+                            Exchange alternate = getExchange(session, 
alternateExchangeName);
+                            exchange.setAlternateExchange(alternate);
+                        }
 
-                    exchange = 
exchangeFactory.createExchange(method.getExchange(),
-                                                              method.getType(),
-                                                              
method.getDurable(),
-                                                              
method.getAutoDelete());
+                        if (exchange.isDurable())
+                        {
+                            DurableConfigurationStore store = 
virtualHost.getDurableConfigurationStore();
+                            store.createExchange(exchange);
+                        }
 
-                    String alternateExchangeName = 
method.getAlternateExchange();
-                    if(alternateExchangeName != null && 
alternateExchangeName.length() != 0)
+                        exchangeRegistry.registerExchange(exchange);
+                    }
+                    catch(AMQUnknownExchangeType e)
                     {
-                        Exchange alternate = getExchange(session, 
alternateExchangeName);
-                        exchange.setAlternateExchange(alternate);
+                        exception(session, method, 
ExecutionErrorCode.NOT_FOUND, "Unknown Exchange Type: " + method.getType());
                     }
-
-                    if (exchange.isDurable())
+                    catch (AMQException e)
                     {
-                        DurableConfigurationStore store = 
virtualHost.getDurableConfigurationStore();
-                        store.createExchange(exchange);
+                        exception(session, method, e, "Cannot declare exchange 
'" + exchangeName);
                     }
-
-                    exchangeRegistry.registerExchange(exchange);
-                }
-                catch(AMQUnknownExchangeType e)
-                {
-                    exception(session, method, ExecutionErrorCode.NOT_FOUND, 
"Unknown Exchange Type: " + method.getType());
-                }
-                catch (AMQException e)
-                {
-                    exception(session, method, e, "Cannot declare exchange '" 
+ exchangeName);
                 }
             }
             else

Modified: qpid/trunk/qpid/java/test-profiles/python_tests/Java010PythonExcludes
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/test-profiles/python_tests/Java010PythonExcludes?rev=1291546&r1=1291545&r2=1291546&view=diff
==============================================================================
--- qpid/trunk/qpid/java/test-profiles/python_tests/Java010PythonExcludes 
(original)
+++ qpid/trunk/qpid/java/test-profiles/python_tests/Java010PythonExcludes Tue 
Feb 21 01:40:14 2012
@@ -77,9 +77,6 @@ qpid_tests.broker_0_10.alternate_exchang
 
qpid_tests.broker_0_10.alternate_exchange.AlternateExchangeTests.test_add_alternate_to_exchange
 
qpid_tests.broker_0_10.new_api.GeneralTests.test_qpid_3481_acquired_to_alt_exchange
 
-#QPID-3596 Broker does not validate for reserved exchange names on create/bind.
-qpid_tests.broker_0_10.exchange.DeclareMethodExchangeFieldReservedRuleTests.*
-
 #QPID-3597 Headers exchange issues
 qpid_tests.broker_0_10.exchange.HeadersExchangeTests.*
 qpid_tests.broker_0_10.queue.QueueTests.test_unbind_headers



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

Reply via email to