Author: rgodfrey
Date: Tue Feb 21 12:48:30 2012
New Revision: 1291749

URL: http://svn.apache.org/viewvc?rev=1291749&view=rev
Log:
QPID-3597 : Python Headers Exchange tests fail against Java Broker (Fix 
ExchangeBound when matching arguments)

Modified:
    
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/HeadersExchange.java
    
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/TopicExchange.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/exchange/HeadersExchange.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/HeadersExchange.java?rev=1291749&r1=1291748&r2=1291749&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/HeadersExchange.java
 (original)
+++ 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/HeadersExchange.java
 Tue Feb 21 12:48:30 2012
@@ -146,6 +146,33 @@ public class HeadersExchange extends Abs
         return new ArrayList<BaseQueue>(queues);
     }
 
+
+    public boolean isBound(String bindingKey, Map<String, Object> arguments, 
AMQQueue queue)
+    {
+        CopyOnWriteArraySet<Binding> bindings;
+        if(bindingKey == null)
+        {
+            bindings = new CopyOnWriteArraySet<Binding>(getBindings());
+        }
+        else
+        {
+            bindings = _bindingsByKey.get(bindingKey);
+        }
+
+        if(bindings != null)
+        {
+            for(Binding binding : bindings)
+            {
+                if(queue == null || binding.getQueue().equals(queue))
+                {
+                    return arguments == null ? binding.getArguments() == null 
: binding.getArguments().equals(arguments);
+                }
+            }
+        }
+
+        return false;
+    }
+
     public boolean isBound(AMQShortString routingKey, FieldTable arguments, 
AMQQueue queue)
     {
         //fixme isBound here should take the arguements in to consideration.

Modified: 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/TopicExchange.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/TopicExchange.java?rev=1291749&r1=1291748&r2=1291749&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/TopicExchange.java
 (original)
+++ 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/TopicExchange.java
 Tue Feb 21 12:48:30 2012
@@ -20,13 +20,23 @@
  */
 package org.apache.qpid.server.exchange;
 
+import java.lang.ref.WeakReference;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.WeakHashMap;
+import java.util.concurrent.ConcurrentHashMap;
+import javax.management.JMException;
 import org.apache.log4j.Logger;
-
 import org.apache.qpid.AMQException;
 import org.apache.qpid.AMQInvalidArgumentException;
 import org.apache.qpid.common.AMQPFilterTypes;
 import org.apache.qpid.exchange.ExchangeDefaults;
 import org.apache.qpid.filter.SelectorParsingException;
+import org.apache.qpid.filter.selector.ParseException;
 import org.apache.qpid.filter.selector.TokenMgrError;
 import org.apache.qpid.framing.AMQShortString;
 import org.apache.qpid.framing.FieldTable;
@@ -36,23 +46,11 @@ import org.apache.qpid.server.exchange.t
 import org.apache.qpid.server.exchange.topic.TopicNormalizer;
 import org.apache.qpid.server.exchange.topic.TopicParser;
 import org.apache.qpid.server.filter.JMSSelectorFilter;
-import org.apache.qpid.filter.selector.ParseException;
 import org.apache.qpid.server.message.InboundMessage;
 import org.apache.qpid.server.queue.AMQQueue;
 import org.apache.qpid.server.queue.BaseQueue;
 import org.apache.qpid.server.virtualhost.VirtualHost;
 
-import javax.management.JMException;
-import java.lang.ref.WeakReference;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.WeakHashMap;
-import java.util.concurrent.ConcurrentHashMap;
-
 public class TopicExchange extends AbstractExchange
 {
 
@@ -275,6 +273,28 @@ public class TopicExchange extends Abstr
         }
     }
 
+    public boolean isBound(String bindingKey, Map<String, Object> arguments, 
AMQQueue queue)
+    {
+        Binding binding = new Binding(null, bindingKey, queue, this, 
arguments);
+        if (arguments == null)
+        {
+            return _bindings.containsKey(binding);
+        }
+        else
+        {
+            FieldTable o = _bindings.get(binding);
+            if (o != null)
+            {
+                return arguments.equals(FieldTable.convertToMap(o));
+            }
+            else
+            {
+                return false;
+            }
+        }
+
+    }
+
     public boolean isBound(AMQShortString routingKey, AMQQueue queue)
     {
         return isBound(routingKey, null, queue);

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=1291749&r1=1291748&r2=1291749&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 12:48:30 2012
@@ -859,12 +859,6 @@ public class ServerSessionDelegate exten
                 if(method.hasBindingKey())
                 {
 
-                    if(method.hasArguments())
-                    {
-                        FieldTable args = 
FieldTable.convertToFieldTable(method.getArguments());
-                        
-                        result.setArgsNotMatched(!exchange.isBound(new 
AMQShortString(method.getBindingKey()), args, queue));
-                    }
                     if(queueMatched)
                     {
                         
result.setKeyNotMatched(!exchange.isBound(method.getBindingKey(), queue));
@@ -873,23 +867,28 @@ public class ServerSessionDelegate exten
                     {
                         
result.setKeyNotMatched(!exchange.isBound(method.getBindingKey()));
                     }
+
+                    if(method.hasArguments())
+                    {
+                        
result.setArgsNotMatched(!exchange.isBound(result.getKeyNotMatched() ? null : 
method.getBindingKey(), method.getArguments(), queueMatched ? queue : null));
+                    }
+
                 }
                 else if (method.hasArguments())
                 {
-                    // TODO
-
+                    result.setArgsNotMatched(!exchange.isBound(null, 
method.getArguments(), queueMatched ? queue : null));
                 }
 
-                result.setQueueNotMatched(!exchange.isBound(queue));
-
             }
             else if(exchange != null && method.hasBindingKey())
             {
+                
result.setKeyNotMatched(!exchange.isBound(method.getBindingKey()));
+
                 if(method.hasArguments())
                 {
-                    // TODO
+                    
result.setArgsNotMatched(!exchange.isBound(result.getKeyNotMatched() ? null : 
method.getBindingKey(), method.getArguments(), queue));
                 }
-                
result.setKeyNotMatched(!exchange.isBound(method.getBindingKey()));
+
 
             }
 
@@ -898,11 +897,15 @@ public class ServerSessionDelegate exten
         {
             if(method.hasArguments())
             {
-                // TODO
+                
result.setArgsNotMatched(!exchange.isBound(method.getBindingKey(), 
method.getArguments(), null));
             }
             result.setKeyNotMatched(!exchange.isBound(method.getBindingKey()));
 
         }
+        else if(exchange != null && method.hasArguments())
+        {
+            result.setArgsNotMatched(!exchange.isBound(null, 
method.getArguments(), null));
+        }
 
 
         session.executionResult((int) method.getId(), result);

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=1291749&r1=1291748&r2=1291749&view=diff
==============================================================================
--- qpid/trunk/qpid/java/test-profiles/python_tests/Java010PythonExcludes 
(original)
+++ qpid/trunk/qpid/java/test-profiles/python_tests/Java010PythonExcludes Tue 
Feb 21 12:48:30 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-3597 Headers exchange issues
-qpid_tests.broker_0_10.query.QueryTests.test_exchange_bound_header
-
 #QPID-3599 Tests fail due to differences in expected message Redelivered status
 qpid.tests.messaging.endpoints.SessionTests.testCommitAck
 qpid.tests.messaging.endpoints.SessionTests.testRelease



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

Reply via email to