PROTON-711: add tests for the existing destination type annotation processing 
done by the transformers

git-svn-id: https://svn.apache.org/repos/asf/qpid/proton/trunk@1631793 
13f79535-47bb-0310-9956-ffa450edef68


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

Branch: refs/heads/examples
Commit: c87fc8a2944ad8d68dec4e66c78768a071da35c0
Parents: 12c6d30
Author: Robert Gemmell <rob...@apache.org>
Authored: Tue Oct 14 15:33:15 2014 +0000
Committer: Robert Gemmell <rob...@apache.org>
Committed: Tue Oct 14 15:33:15 2014 +0000

----------------------------------------------------------------------
 .../jms/JMSMappingInboundTransformerTest.java   | 214 ++++++++++++++++++
 .../jms/JMSMappingOutboundTransformerTest.java  | 226 +++++++++++++++++++
 2 files changed, 440 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/c87fc8a2/contrib/proton-jms/src/test/java/org/apache/qpid/proton/jms/JMSMappingInboundTransformerTest.java
----------------------------------------------------------------------
diff --git 
a/contrib/proton-jms/src/test/java/org/apache/qpid/proton/jms/JMSMappingInboundTransformerTest.java
 
b/contrib/proton-jms/src/test/java/org/apache/qpid/proton/jms/JMSMappingInboundTransformerTest.java
new file mode 100644
index 0000000..42a99ca
--- /dev/null
+++ 
b/contrib/proton-jms/src/test/java/org/apache/qpid/proton/jms/JMSMappingInboundTransformerTest.java
@@ -0,0 +1,214 @@
+/*
+ * 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.proton.jms;
+
+import static org.junit.Assert.*;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.jms.Destination;
+import javax.jms.Queue;
+import javax.jms.TemporaryQueue;
+import javax.jms.TemporaryTopic;
+import javax.jms.TextMessage;
+import javax.jms.Topic;
+
+import org.apache.qpid.proton.amqp.Symbol;
+import org.apache.qpid.proton.amqp.messaging.AmqpValue;
+import org.apache.qpid.proton.amqp.messaging.MessageAnnotations;
+import org.apache.qpid.proton.message.Message;
+import org.junit.Test;
+import org.mockito.Mockito;
+
+public class JMSMappingInboundTransformerTest
+{
+    @Test
+    public void testTransformMessageWithAmqpValueStringCreatesTextMessage() 
throws Exception
+    {
+        TextMessage mockTextMessage = createMockTextMessage();
+        JMSVendor mockVendor = createMockVendor(mockTextMessage);
+        JMSMappingInboundTransformer transformer = new 
JMSMappingInboundTransformer(mockVendor);
+
+        String contentString = "myTextMessageContent";
+        Message amqp = Message.Factory.create();
+        amqp.setBody(new AmqpValue(contentString));
+
+        EncodedMessage em = encodeMessage(amqp);
+
+        javax.jms.Message jmsMessage = transformer.transform(em);
+
+        assertTrue("Expected TextMessage", jmsMessage instanceof TextMessage);
+        Mockito.verify(mockTextMessage).setText(contentString);
+        assertSame("Expected provided mock message, got a different one", 
mockTextMessage, jmsMessage);
+    }
+
+    // ======= JMSDestination Handling =========
+    // =========================================
+
+    @Test
+    public void testTransformWithNoToTypeDestinationTypeAnnotation() throws 
Exception
+    {
+        doTransformWithToTypeDestinationTypeAnnotationTestImpl(null, 
Destination.class);
+    }
+
+    @Test
+    public void testTransformWithQueueStringToTypeDestinationTypeAnnotation() 
throws Exception
+    {
+        doTransformWithToTypeDestinationTypeAnnotationTestImpl("queue", 
Queue.class);
+    }
+
+    @Test
+    public void 
testTransformWithTemporaryQueueStringToTypeDestinationTypeAnnotation() throws 
Exception
+    {
+        
doTransformWithToTypeDestinationTypeAnnotationTestImpl("queue,temporary", 
TemporaryQueue.class);
+    }
+
+    @Test
+    public void testTransformWithTopicStringToTypeDestinationTypeAnnotation() 
throws Exception
+    {
+        doTransformWithToTypeDestinationTypeAnnotationTestImpl("topic", 
Topic.class);
+    }
+
+    @Test
+    public void 
testTransformWithTemporaryTopicStringToTypeDestinationTypeAnnotation() throws 
Exception
+    {
+        
doTransformWithToTypeDestinationTypeAnnotationTestImpl("topic,temporary", 
TemporaryTopic.class);
+    }
+
+    private void doTransformWithToTypeDestinationTypeAnnotationTestImpl(Object 
toTypeAnnotationValue, Class<? extends Destination> expectedClass) throws 
Exception
+    {
+        TextMessage mockTextMessage = createMockTextMessage();
+        JMSVendor mockVendor = createMockVendor(mockTextMessage);
+        JMSMappingInboundTransformer transformer = new 
JMSMappingInboundTransformer(mockVendor);
+
+        String toAddress = "toAddress";
+        Message amqp = Message.Factory.create();
+        amqp.setBody(new AmqpValue("myTextMessageContent"));
+        amqp.setAddress(toAddress);
+        if(toTypeAnnotationValue != null)
+        {
+            Map<Symbol, Object> map = new HashMap<Symbol, Object>();
+            map.put(Symbol.valueOf("x-opt-to-type"), toTypeAnnotationValue);
+            MessageAnnotations ma = new MessageAnnotations(map);
+            amqp.setMessageAnnotations(ma);
+        }
+
+        EncodedMessage em = encodeMessage(amqp);
+
+        javax.jms.Message jmsMessage = transformer.transform(em);
+        assertTrue("Expected TextMessage", jmsMessage instanceof TextMessage);
+
+        // Verify that createDestination was called with the provided 'to' 
address and 'Destination' class
+        Mockito.verify(mockVendor).createDestination(toAddress, expectedClass);
+    }
+
+    // ======= JMSReplyTo Handling =========
+    // =====================================
+
+    @Test
+    public void testTransformWithNoReplyToTypeDestinationTypeAnnotation() 
throws Exception
+    {
+        
doTransformWithReplyToTypeDestinationTypeAnnotationTestImpl(null,Destination.class);
+    }
+
+    @Test
+    public void 
testTransformWithQueueStringReplyToTypeDestinationTypeAnnotation() throws 
Exception
+    {
+        doTransformWithReplyToTypeDestinationTypeAnnotationTestImpl("queue", 
Queue.class);
+    }
+
+    @Test
+    public void 
testTransformWithTemporaryQueueStringReplyToTypeDestinationTypeAnnotation() 
throws Exception
+    {
+        
doTransformWithReplyToTypeDestinationTypeAnnotationTestImpl("queue,temporary", 
TemporaryQueue.class);
+    }
+
+    @Test
+    public void 
testTransformWithTopicStringReplyToTypeDestinationTypeAnnotation() throws 
Exception
+    {
+        doTransformWithReplyToTypeDestinationTypeAnnotationTestImpl("topic", 
Topic.class);
+    }
+
+    @Test
+    public void 
testTransformWithTemporaryTopicStringReplyToTypeDestinationTypeAnnotation() 
throws Exception
+    {
+        
doTransformWithReplyToTypeDestinationTypeAnnotationTestImpl("topic,temporary", 
TemporaryTopic.class);
+    }
+
+    private void 
doTransformWithReplyToTypeDestinationTypeAnnotationTestImpl(Object 
replyToTypeAnnotationValue, Class<? extends Destination> expectedClass) throws 
Exception
+    {
+        TextMessage mockTextMessage = createMockTextMessage();
+        JMSVendor mockVendor = createMockVendor(mockTextMessage);
+        JMSMappingInboundTransformer transformer = new 
JMSMappingInboundTransformer(mockVendor);
+
+        String replyToAddress = "replyToAddress";
+        Message amqp = Message.Factory.create();
+        amqp.setBody(new AmqpValue("myTextMessageContent"));
+        amqp.setReplyTo(replyToAddress);
+        if(replyToTypeAnnotationValue != null)
+        {
+            Map<Symbol, Object> map = new HashMap<Symbol, Object>();
+            map.put(Symbol.valueOf("x-opt-reply-type"), 
replyToTypeAnnotationValue);
+            MessageAnnotations ma = new MessageAnnotations(map);
+            amqp.setMessageAnnotations(ma);
+        }
+
+        EncodedMessage em = encodeMessage(amqp);
+
+        javax.jms.Message jmsMessage = transformer.transform(em);
+        assertTrue("Expected TextMessage", jmsMessage instanceof TextMessage);
+
+        // Verify that createDestination was called with the provided 
'replyTo' address and 'Destination' class
+        
Mockito.verify(mockVendor).createDestination(replyToAddress,expectedClass);
+    }
+
+    // ======= Utility Methods =========
+    // =================================
+
+    private TextMessage createMockTextMessage()
+    {
+        TextMessage mockTextMessage = Mockito.mock(TextMessage.class);
+
+        return mockTextMessage;
+    }
+
+    private JMSVendor createMockVendor(TextMessage mockTextMessage)
+    {
+        JMSVendor mockVendor = Mockito.mock(JMSVendor.class);
+        
Mockito.when(mockVendor.createTextMessage()).thenReturn(mockTextMessage);
+
+        return mockVendor;
+    }
+
+    private EncodedMessage encodeMessage(Message message)
+    {
+        byte[] encodeBuffer = new byte[1024 * 8];
+        int encodedSize;
+        while (true) {
+            try {
+                encodedSize = message.encode(encodeBuffer, 0, 
encodeBuffer.length);
+                break;
+            } catch (java.nio.BufferOverflowException e) {
+                encodeBuffer = new byte[encodeBuffer.length * 2];
+            }
+        }
+
+        long messageFormat = 0;
+        return new EncodedMessage(messageFormat, encodeBuffer, 0, encodedSize);
+    }
+}

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/c87fc8a2/contrib/proton-jms/src/test/java/org/apache/qpid/proton/jms/JMSMappingOutboundTransformerTest.java
----------------------------------------------------------------------
diff --git 
a/contrib/proton-jms/src/test/java/org/apache/qpid/proton/jms/JMSMappingOutboundTransformerTest.java
 
b/contrib/proton-jms/src/test/java/org/apache/qpid/proton/jms/JMSMappingOutboundTransformerTest.java
new file mode 100644
index 0000000..1b14627
--- /dev/null
+++ 
b/contrib/proton-jms/src/test/java/org/apache/qpid/proton/jms/JMSMappingOutboundTransformerTest.java
@@ -0,0 +1,226 @@
+/*
+ * 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.proton.jms;
+
+import static org.junit.Assert.*;
+
+import java.util.Collections;
+import java.util.Map;
+
+import javax.jms.Destination;
+import javax.jms.Queue;
+import javax.jms.TemporaryQueue;
+import javax.jms.TemporaryTopic;
+import javax.jms.TextMessage;
+import javax.jms.Topic;
+
+import org.apache.qpid.proton.amqp.Symbol;
+import org.apache.qpid.proton.amqp.messaging.AmqpValue;
+import org.apache.qpid.proton.amqp.messaging.MessageAnnotations;
+import org.apache.qpid.proton.message.Message;
+import org.junit.Test;
+import org.mockito.Mockito;
+
+public class JMSMappingOutboundTransformerTest
+{
+    @Test
+    public void testConvertMessageWithTextMessageCreatesAmqpValueStringBody() 
throws Exception
+    {
+        String contentString = "myTextMessageContent";
+        TextMessage mockTextMessage = createMockTextMessage();
+        Mockito.when(mockTextMessage.getText()).thenReturn(contentString);
+        JMSVendor mockVendor = createMockVendor();
+
+        JMSMappingOutboundTransformer transformer = new 
JMSMappingOutboundTransformer(mockVendor);
+
+        Message amqp = transformer.convert(mockTextMessage);
+
+        assertNotNull(amqp.getBody());
+        assertTrue(amqp.getBody() instanceof AmqpValue);
+        assertEquals(contentString, ((AmqpValue) amqp.getBody()).getValue());
+    }
+
+    // ======= JMSDestination Handling =========
+    // =========================================
+
+    @Test
+    public void testConvertMessageWithJMSDestinationNull() throws Exception
+    {
+        doTestConvertMessageWithJMSDestination(null, null);
+    }
+
+    @Test
+    public void testConvertMessageWithJMSDestinationQueue() throws Exception
+    {
+        Queue mockDest = Mockito.mock(Queue.class);
+
+        doTestConvertMessageWithJMSDestination(mockDest, "queue");
+    }
+
+    @Test
+    public void testConvertMessageWithJMSDestinationTemporaryQueue() throws 
Exception
+    {
+        TemporaryQueue mockDest = Mockito.mock(TemporaryQueue.class);
+
+        doTestConvertMessageWithJMSDestination(mockDest, "temporary,queue");
+    }
+
+    @Test
+    public void testConvertMessageWithJMSDestinationTopic() throws Exception
+    {
+        Topic mockDest = Mockito.mock(Topic.class);
+
+        doTestConvertMessageWithJMSDestination(mockDest, "topic");
+    }
+
+    @Test
+    public void testConvertMessageWithJMSDestinationTemporaryTopic() throws 
Exception
+    {
+        TemporaryTopic mockDest = Mockito.mock(TemporaryTopic.class);
+
+        doTestConvertMessageWithJMSDestination(mockDest, "temporary,topic");
+    }
+
+    private void doTestConvertMessageWithJMSDestination(Destination 
jmsDestination, Object expectedAnnotationValue) throws Exception
+    {
+        TextMessage mockTextMessage = createMockTextMessage();
+        
Mockito.when(mockTextMessage.getText()).thenReturn("myTextMessageContent");
+        
Mockito.when(mockTextMessage.getJMSDestination()).thenReturn(jmsDestination);
+        JMSVendor mockVendor = createMockVendor();
+        String toAddress = "someToAddress";
+        if(jmsDestination != null)
+        {
+            Mockito.when(mockVendor.toAddress(Mockito.any(Destination.class)))
+                    .thenReturn(toAddress);
+        }
+
+        JMSMappingOutboundTransformer transformer = new 
JMSMappingOutboundTransformer(mockVendor);
+
+        Message amqp = transformer.convert(mockTextMessage);
+
+        MessageAnnotations ma = amqp.getMessageAnnotations();
+        Map<Symbol, Object> maMap = ma == null ? null : ma.getValue();
+        if(maMap != null)
+        {
+            Object actualValue = maMap.get(Symbol.valueOf("x-opt-to-type"));
+            assertEquals("Unexpected annotation value", 
expectedAnnotationValue, actualValue);
+        }
+        else if (expectedAnnotationValue != null)
+        {
+            fail("Expected annotation value, but there were no annotations");
+        }
+
+        if(jmsDestination != null)
+        {
+            assertEquals("Unexpected 'to' address", toAddress, 
amqp.getAddress());
+        }
+    }
+
+    // ======= JMSReplyTo Handling =========
+    // =====================================
+
+    @Test
+    public void testConvertMessageWithJMSReplyToNull() throws Exception
+    {
+        doTestConvertMessageWithJMSReplyTo(null, null);
+    }
+
+    @Test
+    public void testConvertMessageWithJMSReplyToQueue() throws Exception
+    {
+        Queue mockDest = Mockito.mock(Queue.class);
+
+        doTestConvertMessageWithJMSReplyTo(mockDest, "queue");
+    }
+
+    @Test
+    public void testConvertMessageWithJMSReplyToTemporaryQueue() throws 
Exception
+    {
+        TemporaryQueue mockDest = Mockito.mock(TemporaryQueue.class);
+
+        doTestConvertMessageWithJMSReplyTo(mockDest, "temporary,queue");
+    }
+
+    @Test
+    public void testConvertMessageWithJMSReplyToTopic() throws Exception
+    {
+        Topic mockDest = Mockito.mock(Topic.class);
+
+        doTestConvertMessageWithJMSReplyTo(mockDest, "topic");
+    }
+
+    @Test
+    public void testConvertMessageWithJMSReplyToTemporaryTopic() throws 
Exception
+    {
+        TemporaryTopic mockDest = Mockito.mock(TemporaryTopic.class);
+
+        doTestConvertMessageWithJMSReplyTo(mockDest, "temporary,topic");
+    }
+
+    private void doTestConvertMessageWithJMSReplyTo(Destination jmsReplyTo, 
Object expectedAnnotationValue) throws Exception
+    {
+        TextMessage mockTextMessage = createMockTextMessage();
+        
Mockito.when(mockTextMessage.getText()).thenReturn("myTextMessageContent");
+        Mockito.when(mockTextMessage.getJMSReplyTo()).thenReturn(jmsReplyTo);
+        JMSVendor mockVendor = createMockVendor();
+        String replyToAddress = "someReplyToAddress";
+        if(jmsReplyTo != null)
+        {
+            Mockito.when(mockVendor.toAddress(Mockito.any(Destination.class)))
+                    .thenReturn(replyToAddress);
+        }
+
+        JMSMappingOutboundTransformer transformer = new 
JMSMappingOutboundTransformer(mockVendor);
+
+        Message amqp = transformer.convert(mockTextMessage);
+
+        MessageAnnotations ma = amqp.getMessageAnnotations();
+        Map<Symbol, Object> maMap = ma == null ? null : ma.getValue();
+        if(maMap != null)
+        {
+            Object actualValue = maMap.get(Symbol.valueOf("x-opt-reply-type"));
+            assertEquals("Unexpected annotation value", 
expectedAnnotationValue, actualValue);
+        }
+        else if (expectedAnnotationValue != null)
+        {
+            fail("Expected annotation value, but there were no annotations");
+        }
+
+        if(jmsReplyTo != null)
+        {
+            assertEquals("Unexpected 'reply-to' address", replyToAddress, 
amqp.getReplyTo());
+        }
+    }
+
+    // ======= Utility Methods =========
+    // =================================
+
+    private TextMessage createMockTextMessage() throws Exception
+    {
+        TextMessage mockTextMessage = Mockito.mock(TextMessage.class);
+        
Mockito.when(mockTextMessage.getPropertyNames()).thenReturn(Collections.emptyEnumeration());
+
+        return mockTextMessage;
+    }
+
+    private JMSVendor createMockVendor()
+    {
+        JMSVendor mockVendor = Mockito.mock(JMSVendor.class);
+
+        return mockVendor;
+    }
+}


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

Reply via email to