You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ro...@apache.org on 2014/10/03 16:06:50 UTC

git commit: add message builder unit tests for the case where the message type annotation exists

Repository: qpid-jms
Updated Branches:
  refs/heads/master 2931fbb13 -> a6b5f1bba


add message builder unit tests for the case where the message type annotation exists


Project: http://git-wip-us.apache.org/repos/asf/qpid-jms/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-jms/commit/a6b5f1bb
Tree: http://git-wip-us.apache.org/repos/asf/qpid-jms/tree/a6b5f1bb
Diff: http://git-wip-us.apache.org/repos/asf/qpid-jms/diff/a6b5f1bb

Branch: refs/heads/master
Commit: a6b5f1bbabcb350861748f0cb3d950476fa9fae2
Parents: 2931fbb
Author: Robert Gemmell <ro...@apache.org>
Authored: Fri Oct 3 15:00:13 2014 +0100
Committer: Robert Gemmell <ro...@apache.org>
Committed: Fri Oct 3 15:05:58 2014 +0100

----------------------------------------------------------------------
 .../amqp/message/AmqpJmsMessageBuilder.java     |   2 +-
 .../message/AmqpJmsObjectMessageFacade.java     |   4 +
 .../amqp/message/AmqpJmsMessageBuilderTest.java | 225 +++++++++++++++++++
 3 files changed, 230 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/a6b5f1bb/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessageBuilder.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessageBuilder.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessageBuilder.java
index 889a27e..0649e6c 100644
--- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessageBuilder.java
+++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessageBuilder.java
@@ -102,7 +102,7 @@ public class AmqpJmsMessageBuilder {
                 case JMS_OBJECT_MESSAGE:
                     return createObjectMessage(consumer, message);
                 default:
-                    throw new IOException("Invalid JMS Message Type annotation found in message");
+                    throw new IOException("Invalid JMS Message Type annotation value found in message: " + annotation);
             }
         }
 

http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/a6b5f1bb/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsObjectMessageFacade.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsObjectMessageFacade.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsObjectMessageFacade.java
index 11607a4..3e022a0 100644
--- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsObjectMessageFacade.java
+++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsObjectMessageFacade.java
@@ -150,4 +150,8 @@ public class AmqpJmsObjectMessageFacade extends AmqpJmsMessageFacade implements
             delegate = new AmqpTypedObjectDelegate(getAmqpMessage());
         }
     }
+
+    AmqpObjectTypeDelegate getDelegate() {
+        return delegate;
+    }
 }

http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/a6b5f1bb/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessageBuilderTest.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessageBuilderTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessageBuilderTest.java
new file mode 100644
index 0000000..2e02608
--- /dev/null
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessageBuilderTest.java
@@ -0,0 +1,225 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.qpid.jms.provider.amqp.message;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.qpid.jms.message.JmsBytesMessage;
+import org.apache.qpid.jms.message.JmsMessage;
+import org.apache.qpid.jms.message.JmsObjectMessage;
+import org.apache.qpid.jms.message.JmsStreamMessage;
+import org.apache.qpid.jms.message.JmsTextMessage;
+import org.apache.qpid.jms.message.facade.JmsMessageFacade;
+import org.apache.qpid.jms.provider.amqp.AmqpConsumer;
+import org.apache.qpid.jms.test.QpidJmsTestCase;
+import org.apache.qpid.proton.Proton;
+import org.apache.qpid.proton.amqp.Symbol;
+import org.apache.qpid.proton.amqp.messaging.MessageAnnotations;
+import org.apache.qpid.proton.message.Message;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mockito;
+
+public class AmqpJmsMessageBuilderTest extends QpidJmsTestCase {
+    private AmqpConsumer mockConsumer;
+
+    @Before
+    @Override
+    public void setUp() throws Exception {
+        super.setUp();
+        mockConsumer = Mockito.mock(AmqpConsumer.class);
+    }
+
+    // =============== With The Message Type Annotation =========
+    // ==========================================================
+
+    /**
+     * Test that a message with the {@value AmqpMessageSupport#JMS_MSG_TYPE}
+     * annotation set to  {@value AmqpMessageSupport#JMS_MESSAGE} is
+     * treated as a generic {@link JmsMessage} with {@link AmqpJmsMessageFacade}
+     */
+    @Test(expected = IOException.class)
+    public void testCreateMessageFromUnknownMessageTypeAnnotationValueThrows() throws Exception {
+        Message message = Proton.message();
+
+        Map<Symbol, Object> map = new HashMap<Symbol, Object>();
+        map.put(Symbol.valueOf(AmqpMessageSupport.JMS_MSG_TYPE), (byte) -1);
+
+        MessageAnnotations messageAnnotations = new MessageAnnotations(map);
+        message.setMessageAnnotations(messageAnnotations);
+
+        AmqpJmsMessageBuilder.createJmsMessage(mockConsumer, message);
+    }
+
+    /**
+     * Test that a message with the {@value AmqpMessageSupport#JMS_MSG_TYPE}
+     * annotation set to  {@value AmqpMessageSupport#JMS_MESSAGE} is
+     * treated as a generic {@link JmsMessage} with {@link AmqpJmsMessageFacade}
+     */
+    @Test
+    public void testCreateGenericMessageFromMessageTypeAnnotation() throws Exception {
+        Message message = Proton.message();
+
+        Map<Symbol, Object> map = new HashMap<Symbol, Object>();
+        map.put(Symbol.valueOf(AmqpMessageSupport.JMS_MSG_TYPE), AmqpMessageSupport.JMS_MESSAGE);
+
+        MessageAnnotations messageAnnotations = new MessageAnnotations(map);
+        message.setMessageAnnotations(messageAnnotations);
+
+        JmsMessage jmsMessage = AmqpJmsMessageBuilder.createJmsMessage(mockConsumer, message);
+        assertNotNull("Message should not be null", jmsMessage);
+        assertEquals("Unexpected message class type", JmsMessage.class, jmsMessage.getClass());
+
+        JmsMessageFacade facade = jmsMessage.getFacade();
+        assertNotNull("Facade should not be null", facade);
+        assertEquals("Unexpected facade class type", AmqpJmsMessageFacade.class, facade.getClass());
+    }
+
+    /**
+     * Test that a message with the {@value AmqpMessageSupport#JMS_MSG_TYPE}
+     * annotation set to  {@value AmqpMessageSupport#JMS_BYTES_MESSAGE} is
+     * treated as a {@link JmsBytesMessage} with {@link AmqpJmsBytesMessageFacade}
+     */
+    @Test
+    public void testCreateBytesMessageFromMessageTypeAnnotation() throws Exception {
+        Message message = Proton.message();
+
+        Map<Symbol, Object> map = new HashMap<Symbol, Object>();
+        map.put(Symbol.valueOf(AmqpMessageSupport.JMS_MSG_TYPE), AmqpMessageSupport.JMS_BYTES_MESSAGE);
+
+        MessageAnnotations messageAnnotations = new MessageAnnotations(map);
+        message.setMessageAnnotations(messageAnnotations);
+
+        JmsMessage jmsMessage = AmqpJmsMessageBuilder.createJmsMessage(mockConsumer, message);
+        assertNotNull("Message should not be null", jmsMessage);
+        assertEquals("Unexpected message class type", JmsBytesMessage.class, jmsMessage.getClass());
+
+        JmsMessageFacade facade = jmsMessage.getFacade();
+        assertNotNull("Facade should not be null", facade);
+        assertEquals("Unexpected facade class type", AmqpJmsBytesMessageFacade.class, facade.getClass());
+    }
+
+    /**
+     * Test that a message with the {@value AmqpMessageSupport#JMS_MSG_TYPE}
+     * annotation set to  {@value AmqpMessageSupport#JMS_BYTES_MESSAGE} is
+     * treated as a {@link JmsTextMessage} with {@link AmqpJmsTextMessageFacade}
+     */
+    @Test
+    public void testCreateTextMessageFromMessageTypeAnnotation() throws Exception {
+        Message message = Proton.message();
+
+        Map<Symbol, Object> map = new HashMap<Symbol, Object>();
+        map.put(Symbol.valueOf(AmqpMessageSupport.JMS_MSG_TYPE), AmqpMessageSupport.JMS_TEXT_MESSAGE);
+
+        MessageAnnotations messageAnnotations = new MessageAnnotations(map);
+        message.setMessageAnnotations(messageAnnotations);
+
+        JmsMessage jmsMessage = AmqpJmsMessageBuilder.createJmsMessage(mockConsumer, message);
+        assertNotNull("Message should not be null", jmsMessage);
+        assertEquals("Unexpected message class type", JmsTextMessage.class, jmsMessage.getClass());
+
+        JmsMessageFacade facade = jmsMessage.getFacade();
+        assertNotNull("Facade should not be null", facade);
+        assertEquals("Unexpected facade class type", AmqpJmsTextMessageFacade.class, facade.getClass());
+    }
+
+    /**
+     * Test that a message with the {@value AmqpMessageSupport#JMS_MSG_TYPE}
+     * annotation set to  {@value AmqpMessageSupport#JMS_OBJECT_MESSAGE} and
+     * content-type set to {@value AmqpMessageSupport.OCTET_STREAM_CONTENT_TYPE} is
+     * treated as a {@link JmsObjectMessage} with {@link AmqpJmsObjectMessageFacade}
+     * containing a {@link AmqpSerializedObjectDelegate}.
+     */
+    @Test
+    public void testCreateObjectMessageFromMessageTypeAnnotation() throws Exception {
+        createObjectMessageFromMessageTypeAnnotationTestImpl(true);
+    }
+
+    /**
+     * Test that a message with the {@value AmqpMessageSupport#JMS_MSG_TYPE}
+     * annotation set to  {@value AmqpMessageSupport#JMS_OBJECT_MESSAGE} and
+     * content-type not set is treated as a {@link JmsObjectMessage} with
+     * {@link AmqpJmsObjectMessageFacade} containing a {@link AmqpTypedObjectDelegate}.
+     */
+    @Test
+    public void testCreateObjectMessageFromMessageTypeAnnotationAnd() throws Exception {
+        createObjectMessageFromMessageTypeAnnotationTestImpl(false);
+    }
+
+    private void createObjectMessageFromMessageTypeAnnotationTestImpl(boolean setJavaSerializedContentType) throws Exception {
+        Message message = Proton.message();
+
+        Map<Symbol, Object> map = new HashMap<Symbol, Object>();
+        map.put(Symbol.valueOf(AmqpMessageSupport.JMS_MSG_TYPE), AmqpMessageSupport.JMS_OBJECT_MESSAGE);
+
+        MessageAnnotations messageAnnotations = new MessageAnnotations(map);
+        message.setMessageAnnotations(messageAnnotations);
+
+        if (setJavaSerializedContentType) {
+            message.setContentType(AmqpMessageSupport.SERIALIZED_JAVA_OBJECT_CONTENT_TYPE);
+        }
+
+        JmsMessage jmsMessage = AmqpJmsMessageBuilder.createJmsMessage(mockConsumer, message);
+        assertNotNull("Message should not be null", jmsMessage);
+        assertEquals("Unexpected message class type", JmsObjectMessage.class, jmsMessage.getClass());
+
+        JmsMessageFacade facade = jmsMessage.getFacade();
+        assertNotNull("Facade should not be null", facade);
+        assertEquals("Unexpected facade class type", AmqpJmsObjectMessageFacade.class, facade.getClass());
+
+        AmqpObjectTypeDelegate delegate = ((AmqpJmsObjectMessageFacade) facade).getDelegate();
+        if (setJavaSerializedContentType) {
+            assertTrue("Unexpected delegate type: " + delegate, delegate instanceof AmqpSerializedObjectDelegate);
+        } else {
+            assertTrue("Unexpected delegate type: " + delegate, delegate instanceof AmqpTypedObjectDelegate);
+        }
+    }
+
+    /**
+     * Test that a message with the {@value AmqpMessageSupport#JMS_MSG_TYPE}
+     * annotation set to  {@value AmqpMessageSupport#JMS_STREAM_MESSAGE} is
+     * treated as a {@link JmsStreamMessage} with {@link AmqpJmsStreamMessageFacade}
+     */
+    @Test
+    public void testCreateStreamMessageFromMessageTypeAnnotation() throws Exception {
+        Message message = Proton.message();
+
+        Map<Symbol, Object> map = new HashMap<Symbol, Object>();
+        map.put(Symbol.valueOf(AmqpMessageSupport.JMS_MSG_TYPE), AmqpMessageSupport.JMS_STREAM_MESSAGE);
+
+        MessageAnnotations messageAnnotations = new MessageAnnotations(map);
+        message.setMessageAnnotations(messageAnnotations);
+
+        JmsMessage jmsMessage = AmqpJmsMessageBuilder.createJmsMessage(mockConsumer, message);
+        assertNotNull("Message should not be null", jmsMessage);
+        assertEquals("Unexpected message class type", JmsStreamMessage.class, jmsMessage.getClass());
+
+        JmsMessageFacade facade = jmsMessage.getFacade();
+        assertNotNull("Facade should not be null", facade);
+        assertEquals("Unexpected facade class type", AmqpJmsStreamMessageFacade.class, facade.getClass());
+    }
+}


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org