Author: rgodfrey
Date: Tue Feb 21 20:54:07 2012
New Revision: 1292008

URL: http://svn.apache.org/viewvc?rev=1292008&view=rev
Log:
QPID-3595 : Python Alternate Exchange tests fail against the Java Broker

Modified:
    
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/QueueEntryImpl.java
    
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/SimpleAMQQueue.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
    qpid/trunk/qpid/tests/src/py/qpid_tests/broker_0_10/new_api.py

Modified: 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/QueueEntryImpl.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/QueueEntryImpl.java?rev=1292008&r1=1292007&r2=1292008&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/QueueEntryImpl.java
 (original)
+++ 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/QueueEntryImpl.java
 Tue Feb 21 20:54:07 2012
@@ -417,11 +417,19 @@ public abstract class QueueEntryImpl imp
 
         if (alternateExchange != null)
         {
-            final List<? extends BaseQueue> rerouteQueues = 
alternateExchange.route(new InboundMessageAdapter(this));
+            InboundMessageAdapter inboundMessageAdapter = new 
InboundMessageAdapter(this);
+            List<? extends BaseQueue> queues = 
alternateExchange.route(inboundMessageAdapter);
             final ServerMessage message = getMessage();
-            if (rerouteQueues != null && rerouteQueues.size() != 0)
+            if ((queues == null || queues.size() == 0) && 
alternateExchange.getAlternateExchange() != null)
             {
+                queues = 
alternateExchange.getAlternateExchange().route(inboundMessageAdapter);
+            }
+
 
+
+            if (queues != null && queues.size() != 0)
+            {
+                final List<? extends BaseQueue> rerouteQueues = queues;
                 ServerTransaction txn = new 
LocalTransaction(getQueue().getVirtualHost().getMessageStore());
 
                 txn.enqueue(rerouteQueues, message, new 
ServerTransaction.Action()

Modified: 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/SimpleAMQQueue.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/SimpleAMQQueue.java?rev=1292008&r1=1292007&r2=1292008&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/SimpleAMQQueue.java
 (original)
+++ 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/SimpleAMQQueue.java
 Tue Feb 21 20:54:07 2012
@@ -1515,10 +1515,16 @@ public class SimpleAMQQueue implements A
                 for(final QueueEntry entry : entries)
                 {
                     adapter.setEntry(entry);
-                    final List<? extends BaseQueue> rerouteQueues = 
_alternateExchange.route(adapter);
+                    List<? extends BaseQueue> queues = 
_alternateExchange.route(adapter);
+                    if((queues == null || queues.size() == 0) && 
_alternateExchange.getAlternateExchange() != null)
+                    {
+                        queues = 
_alternateExchange.getAlternateExchange().route(adapter);
+                    }
+
                     final ServerMessage message = entry.getMessage();
-                    if(rerouteQueues != null && rerouteQueues.size() != 0)
+                    if(queues != null && queues.size() != 0)
                     {
+                        final List<? extends BaseQueue> rerouteQueues = queues;
                         txn.enqueue(rerouteQueues, entry.getMessage(),
                                     new ServerTransaction.Action()
                                     {

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=1292008&r1=1292007&r2=1292008&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 20:54:07 2012
@@ -505,19 +505,40 @@ public class ServerSessionDelegate exten
                                                                   
method.getAutoDelete());
 
                         String alternateExchangeName = 
method.getAlternateExchange();
+                        boolean validAlternate;
                         if(alternateExchangeName != null && 
alternateExchangeName.length() != 0)
                         {
                             Exchange alternate = getExchange(session, 
alternateExchangeName);
-                            exchange.setAlternateExchange(alternate);
+                            if(alternate == null)
+                            {
+                                validAlternate = false;
+                            }
+                            else
+                            {
+                                exchange.setAlternateExchange(alternate);
+                                validAlternate = true;
+                            }
                         }
-
-                        if (exchange.isDurable())
+                        else
                         {
-                            DurableConfigurationStore store = 
virtualHost.getDurableConfigurationStore();
-                            store.createExchange(exchange);
+                            validAlternate = true;
                         }
 
-                        exchangeRegistry.registerExchange(exchange);
+                        if(validAlternate)
+                        {
+                            if (exchange.isDurable())
+                            {
+                                DurableConfigurationStore store = 
virtualHost.getDurableConfigurationStore();
+                                store.createExchange(exchange);
+                            }
+
+                            exchangeRegistry.registerExchange(exchange);
+                        }
+                        else
+                        {
+                            exception(session, method, 
ExecutionErrorCode.NOT_FOUND,
+                                        "Unknown alternate exchange " + 
alternateExchangeName);
+                        }
                     }
                     catch(AMQUnknownExchangeType e)
                     {
@@ -539,7 +560,8 @@ public class ServerSessionDelegate exten
                                     + " to " + method.getType() +".");
                 }
                 else if(method.hasAlternateExchange()
-                          && 
!(method.getAlternateExchange().equals(exchange.getAlternateExchange().getName())))
+                          && (exchange.getAlternateExchange() == null ||
+                              
!method.getAlternateExchange().equals(exchange.getAlternateExchange().getName())))
                 {
                     exception(session, method, ExecutionErrorCode.NOT_ALLOWED,
                             "Attempt to change alternate exchange of: " + 
exchangeName

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=1292008&r1=1292007&r2=1292008&view=diff
==============================================================================
--- qpid/trunk/qpid/java/test-profiles/python_tests/Java010PythonExcludes 
(original)
+++ qpid/trunk/qpid/java/test-profiles/python_tests/Java010PythonExcludes Tue 
Feb 21 20:54:07 2012
@@ -63,12 +63,6 @@ qpid_tests.broker_0_10.message.MessageTe
 #QPID-3605 Durable subscriber with no-local true receives messages on 
re-connection
 qpid_tests.broker_0_10.message.MessageTests.test_no_local_awkward
 
-#QPID-3595 Alternate Exchanges support requires work to be spec compliant.
-qpid_tests.broker_0_10.alternate_exchange.AlternateExchangeTests.test_queue_delete_no_match
-qpid_tests.broker_0_10.alternate_exchange.AlternateExchangeTests.test_reject_no_match
-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-3599 Tests fail due to differences in expected message Redelivered status
 qpid.tests.messaging.endpoints.SessionTests.testCommitAck
 qpid.tests.messaging.endpoints.SessionTests.testRelease

Modified: qpid/trunk/qpid/tests/src/py/qpid_tests/broker_0_10/new_api.py
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/tests/src/py/qpid_tests/broker_0_10/new_api.py?rev=1292008&r1=1292007&r2=1292008&view=diff
==============================================================================
--- qpid/trunk/qpid/tests/src/py/qpid_tests/broker_0_10/new_api.py (original)
+++ qpid/trunk/qpid/tests/src/py/qpid_tests/broker_0_10/new_api.py Tue Feb 21 
20:54:07 2012
@@ -74,7 +74,7 @@ class GeneralTests(Base):
         self.assertEqual(rx_alt.available(), 0, "No messages should have been 
routed to the alt_exchange")
 
         sess1.close()
-
+        sleep(1)
         self.assertEqual(rx_alt.available(), 5, "All 5 messages should have 
been routed to the alt_exchange")
 
         sess2.close()
@@ -108,6 +108,7 @@ class GeneralTests(Base):
 
         # Close sess1; This will cause the queue to be deleted
         sess1.close()
+        sleep(1)
         self.assertEqual(rx_alt.available(), 2, "2 of the messages should have 
been routed to the alt_exchange")
 
         # Close sess2; This will cause the acquired messages to be requeued 
and routed to the alternate



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

Reply via email to