Repository: activemq
Updated Branches:
  refs/heads/master 5e7b70f11 -> 138e52b08


AMQ-5801: add error condition hint via the info map to signal the container-id 
was the invalid field


Project: http://git-wip-us.apache.org/repos/asf/activemq/repo
Commit: http://git-wip-us.apache.org/repos/asf/activemq/commit/138e52b0
Tree: http://git-wip-us.apache.org/repos/asf/activemq/tree/138e52b0
Diff: http://git-wip-us.apache.org/repos/asf/activemq/diff/138e52b0

Branch: refs/heads/master
Commit: 138e52b08c2f49b730817932a6e63f2a135854f1
Parents: 5e7b70f
Author: Robert Gemmell <[email protected]>
Authored: Wed May 27 18:08:40 2015 +0100
Committer: Robert Gemmell <[email protected]>
Committed: Wed May 27 18:09:45 2015 +0100

----------------------------------------------------------------------
 .../activemq/transport/amqp/AmqpSupport.java    |  4 ++++
 .../transport/amqp/protocol/AmqpConnection.java | 10 +++++++-
 .../amqp/interop/AmqpConnectionsTest.java       | 24 ++++++++++++++++++--
 3 files changed, 35 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/activemq/blob/138e52b0/activemq-amqp/src/main/java/org/apache/activemq/transport/amqp/AmqpSupport.java
----------------------------------------------------------------------
diff --git 
a/activemq-amqp/src/main/java/org/apache/activemq/transport/amqp/AmqpSupport.java
 
b/activemq-amqp/src/main/java/org/apache/activemq/transport/amqp/AmqpSupport.java
index 1c3d587..0579fcf 100644
--- 
a/activemq-amqp/src/main/java/org/apache/activemq/transport/amqp/AmqpSupport.java
+++ 
b/activemq-amqp/src/main/java/org/apache/activemq/transport/amqp/AmqpSupport.java
@@ -46,6 +46,10 @@ public class AmqpSupport {
     public static final Symbol TEMP_TOPIC_CAPABILITY = 
Symbol.valueOf("temporary-topic");
 
     // Symbols used to announce connection information to remote peer.
+    public static final Symbol INVALID_FIELD = Symbol.valueOf("invalid-field");
+    public static final Symbol CONTAINER_ID = Symbol.valueOf("container-id");
+
+    // Symbols used to announce connection information to remote peer.
     public static final Symbol ANONYMOUS_RELAY = 
Symbol.valueOf("ANONYMOUS-RELAY");
     public static final Symbol QUEUE_PREFIX = Symbol.valueOf("queue-prefix");
     public static final Symbol TOPIC_PREFIX = Symbol.valueOf("topic-prefix");

http://git-wip-us.apache.org/repos/asf/activemq/blob/138e52b0/activemq-amqp/src/main/java/org/apache/activemq/transport/amqp/protocol/AmqpConnection.java
----------------------------------------------------------------------
diff --git 
a/activemq-amqp/src/main/java/org/apache/activemq/transport/amqp/protocol/AmqpConnection.java
 
b/activemq-amqp/src/main/java/org/apache/activemq/transport/amqp/protocol/AmqpConnection.java
index 711156a..962d48f 100644
--- 
a/activemq-amqp/src/main/java/org/apache/activemq/transport/amqp/protocol/AmqpConnection.java
+++ 
b/activemq-amqp/src/main/java/org/apache/activemq/transport/amqp/protocol/AmqpConnection.java
@@ -18,6 +18,8 @@ package org.apache.activemq.transport.amqp.protocol;
 
 import static org.apache.activemq.transport.amqp.AmqpSupport.ANONYMOUS_RELAY;
 import static 
org.apache.activemq.transport.amqp.AmqpSupport.CONNECTION_OPEN_FAILED;
+import static org.apache.activemq.transport.amqp.AmqpSupport.CONTAINER_ID;
+import static org.apache.activemq.transport.amqp.AmqpSupport.INVALID_FIELD;
 import static org.apache.activemq.transport.amqp.AmqpSupport.QUEUE_PREFIX;
 import static 
org.apache.activemq.transport.amqp.AmqpSupport.TEMP_QUEUE_CAPABILITY;
 import static 
org.apache.activemq.transport.amqp.AmqpSupport.TEMP_TOPIC_CAPABILITY;
@@ -434,7 +436,13 @@ public class AmqpConnection implements 
AmqpProtocolConverter {
                         if (exception instanceof SecurityException) {
                             protonConnection.setCondition(new 
ErrorCondition(AmqpError.UNAUTHORIZED_ACCESS, exception.getMessage()));
                         } else if (exception instanceof 
InvalidClientIDException) {
-                            protonConnection.setCondition(new 
ErrorCondition(AmqpError.INVALID_FIELD, exception.getMessage()));
+                            ErrorCondition condition = new 
ErrorCondition(AmqpError.INVALID_FIELD, exception.getMessage());
+
+                            Map<Symbol, Object> infoMap = new HashMap<Symbol, 
Object> ();
+                            infoMap.put(INVALID_FIELD, CONTAINER_ID);
+                            condition.setInfo(infoMap);
+
+                            protonConnection.setCondition(condition);
                         } else {
                             protonConnection.setCondition(new 
ErrorCondition(AmqpError.ILLEGAL_STATE, exception.getMessage()));
                         }

http://git-wip-us.apache.org/repos/asf/activemq/blob/138e52b0/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpConnectionsTest.java
----------------------------------------------------------------------
diff --git 
a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpConnectionsTest.java
 
b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpConnectionsTest.java
index dfe3a4b..783db65 100644
--- 
a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpConnectionsTest.java
+++ 
b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpConnectionsTest.java
@@ -23,6 +23,7 @@ import static org.junit.Assert.assertNotNull;
 
 import java.util.Map;
 
+import org.apache.activemq.transport.amqp.AmqpSupport;
 import org.apache.activemq.transport.amqp.client.AmqpClient;
 import org.apache.activemq.transport.amqp.client.AmqpClientTestSupport;
 import org.apache.activemq.transport.amqp.client.AmqpConnection;
@@ -145,11 +146,30 @@ public class AmqpConnectionsTest extends 
AmqpClientTestSupport {
             public void inspectClosedResource(Connection connection) {
                 ErrorCondition remoteError = connection.getRemoteCondition();
                 if (remoteError == null) {
-                    markAsInvalid("Broker dd not add error condition for 
duplicate client ID");
+                    markAsInvalid("Broker did not add error condition for 
duplicate client ID");
                 }
 
                 if 
(!remoteError.getCondition().equals(AmqpError.INVALID_FIELD)) {
-                    markAsInvalid("Broker dd not set condition to " + 
AmqpError.INVALID_FIELD);
+                    markAsInvalid("Broker did not set condition to " + 
AmqpError.INVALID_FIELD);
+                }
+
+                if 
(!remoteError.getCondition().equals(AmqpError.INVALID_FIELD)) {
+                    markAsInvalid("Broker did not set condition to " + 
AmqpError.INVALID_FIELD);
+                }
+
+                // Validate the info map contains a hint that the 
container/client id was the problem
+                Map<?, ?> infoMap = remoteError.getInfo();
+                if(infoMap == null) {
+                    markAsInvalid("Broker did not set an info map on 
condition");
+                }
+
+                if(!infoMap.containsKey(AmqpSupport.INVALID_FIELD)) {
+                    markAsInvalid("Info map does not contain expected key");
+                }
+
+                Object value = infoMap.get(AmqpSupport.INVALID_FIELD);
+                if(!AmqpSupport.CONTAINER_ID.equals(value)) {
+                    markAsInvalid("Info map does not contain expected value: " 
+ value);
                 }
             }
         });

Reply via email to