Make new facades have an empty data section, as the copy being sent always 
does. Add additional tests around copy.


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

Branch: refs/heads/master
Commit: 27b9b283f63af6534ae2df03b1ae920434112bdc
Parents: c4690c4
Author: Robert Gemmell <rob...@apache.org>
Authored: Fri Oct 10 11:44:57 2014 +0100
Committer: Robert Gemmell <rob...@apache.org>
Committed: Fri Oct 10 11:46:01 2014 +0100

----------------------------------------------------------------------
 .../amqp/message/AmqpJmsBytesMessageFacade.java |  9 ++-
 .../message/AmqpJmsBytesMessageFacadeTest.java  | 58 +++++++++++++++++---
 2 files changed, 58 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/27b9b283/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsBytesMessageFacade.java
----------------------------------------------------------------------
diff --git 
a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsBytesMessageFacade.java
 
b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsBytesMessageFacade.java
index 553a044..1fe5e26 100644
--- 
a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsBytesMessageFacade.java
+++ 
b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsBytesMessageFacade.java
@@ -62,6 +62,7 @@ public class AmqpJmsBytesMessageFacade extends 
AmqpJmsMessageFacade implements J
         super(connection);
         setContentType(OCTET_STREAM_CONTENT_TYPE);
         setMessageAnnotation(JMS_MSG_TYPE, JMS_BYTES_MESSAGE);
+        getAmqpMessage().setBody(EMPTY_BODY);
     }
 
     /**
@@ -84,7 +85,7 @@ public class AmqpJmsBytesMessageFacade extends 
AmqpJmsMessageFacade implements J
         copyInto(copy);
 
         Binary payload = getBinaryFromBody();
-        if (payload != null && payload.getLength() > 0) {
+        if (payload.getLength() > 0) {
             byte[] result = new byte[payload.getLength()];
             System.arraycopy(payload.getArray(), payload.getArrayOffset(), 
result, 0, payload.getLength());
             copy.message.setBody(new Data(new Binary(result)));
@@ -182,6 +183,12 @@ public class AmqpJmsBytesMessageFacade extends 
AmqpJmsMessageFacade implements J
         return getBinaryFromBody().getLength();
     }
 
+    /**
+     * Get the underlying Binary object from the body, or
+     * {@link EMPTY_BINARY} if there is none. Never returns null.
+     *
+     * @return the body binary, or empty substitute if there is none
+     */
     private Binary getBinaryFromBody() {
         Section body = getAmqpMessage().getBody();
         Binary result = EMPTY_BINARY;

http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/27b9b283/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsBytesMessageFacadeTest.java
----------------------------------------------------------------------
diff --git 
a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsBytesMessageFacadeTest.java
 
b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsBytesMessageFacadeTest.java
index 6bcf777..6199917 100644
--- 
a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsBytesMessageFacadeTest.java
+++ 
b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsBytesMessageFacadeTest.java
@@ -22,6 +22,7 @@ import static 
org.apache.qpid.jms.provider.amqp.message.AmqpMessageSupport.getSy
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
@@ -85,15 +86,11 @@ public class AmqpJmsBytesMessageFacadeTest extends 
AmqpJmsMessageTypesTestCase {
     }
 
     @Test
-    public void testNewMessageHasContentTypeButNoBodySection() throws 
Exception {
-        // TODO: this test assumes we can omit the body section. If we decide 
otherwise
-        // it should instead check for e.g. a data section containing 0 length 
binary
+    public void testNewMessageHasContentType() throws Exception {
         AmqpJmsBytesMessageFacade amqpBytesMessageFacade = 
createNewBytesMessageFacade();
         Message protonMessage = amqpBytesMessageFacade.getAmqpMessage();
 
         assertNotNull(protonMessage);
-        assertNull(protonMessage.getBody());
-
         String contentType = protonMessage.getContentType();
         assertNotNull("content type should be set", contentType);
         assertEquals("application/octet-stream", contentType);
@@ -114,9 +111,27 @@ public class AmqpJmsBytesMessageFacadeTest extends 
AmqpJmsMessageTypesTestCase {
         assertEquals("Message reports unexpected length", bytes.length, 
amqpBytesMessageFacade.getBodyLength());
     }
 
+    @Test
+    public void testGetOutputStreamReturnsSameStream() throws Exception {
+        AmqpJmsBytesMessageFacade amqpBytesMessageFacade = 
createNewBytesMessageFacade();
+
+        OutputStream os1 = amqpBytesMessageFacade.getOutputStream();
+        OutputStream os2 = amqpBytesMessageFacade.getOutputStream();
+        assertSame("Got different output streams", os1, os2);
+    }
+
+    @Test
+    public void testGetInputStreamReturnsSameStream() throws Exception {
+        AmqpJmsBytesMessageFacade amqpBytesMessageFacade = 
createNewBytesMessageFacade();
+
+        InputStream is1 = amqpBytesMessageFacade.getInputStream();
+        InputStream is2 = amqpBytesMessageFacade.getInputStream();
+        assertSame("Got different input streams", is1, is2);
+    }
+
     /**
-     * Test that copying a new messages which has been written to creates the 
data section of the underlying message,
-     * which as tested by {@link 
#testNewMessageHasContentTypeButNoBodySection} does not exist initially.
+     * Test that copying a new messages which has been written to creates the
+     * non-empty data section of the underlying message.
      */
     @Test
     public void testCopyOnPopulatedNewMessageCreatesDataSection() throws 
Exception {
@@ -124,7 +139,7 @@ public class AmqpJmsBytesMessageFacadeTest extends 
AmqpJmsMessageTypesTestCase {
         Message protonMessage = amqpBytesMessageFacade.getAmqpMessage();
 
         assertNotNull("underlying proton message was null", protonMessage);
-        assertNull("Expected no body section to be present", 
protonMessage.getBody());
+        assertDataBodyAsExpected(protonMessage, 0);
 
         byte[] bytes = "myBytes".getBytes();
         OutputStream os = amqpBytesMessageFacade.getOutputStream();
@@ -136,6 +151,24 @@ public class AmqpJmsBytesMessageFacadeTest extends 
AmqpJmsMessageTypesTestCase {
         assertDataBodyAsExpected(copy.getAmqpMessage(), bytes.length);
     }
 
+    /**
+     * Test that copying a new messages which has not been written to creates 
the
+     * (empty) data section of the underlying message on the copy.
+     */
+    @Test
+    public void testCopyOfNewMessageDoesNotCreateDataSection() throws 
Exception {
+        AmqpJmsBytesMessageFacade amqpBytesMessageFacade = 
createNewBytesMessageFacade();
+        Message origAmqpMessage = amqpBytesMessageFacade.getAmqpMessage();
+
+        assertNotNull("underlying proton message was null", origAmqpMessage);
+        assertDataBodyAsExpected(origAmqpMessage, 0);
+
+        AmqpJmsBytesMessageFacade copy = amqpBytesMessageFacade.copy();
+
+        assertDataBodyAsExpected(origAmqpMessage, 0);
+        assertDataBodyAsExpected(copy.getAmqpMessage(), 0);
+    }
+
     @Test
     public void testClearBodySetsBodyLength0AndCausesEmptyInputStream() throws 
Exception {
         byte[] bytes = "myBytes".getBytes();
@@ -221,6 +254,15 @@ public class AmqpJmsBytesMessageFacadeTest extends 
AmqpJmsMessageTypesTestCase {
     }
 
     @Test
+    public void 
testGetBodyLengthUsingReceivedMessageWithAmqpValueSectionContainingZeroLengthBinary()
 throws Exception {
+        Message message = Message.Factory.create();
+        message.setBody(new AmqpValue(new Binary(new byte[0])));
+        AmqpJmsBytesMessageFacade amqpBytesMessageFacade = 
createReceivedBytesMessageFacade(createMockAmqpConsumer(), message);
+
+        assertEquals("Message reports unexpected length", 0, 
amqpBytesMessageFacade.getBodyLength());
+    }
+
+    @Test
     public void 
testGetBodyLengthUsingReceivedMessageWithAmqpValueSectionContainingNull() 
throws Exception {
         Message message = Message.Factory.create();
         message.setBody(new AmqpValue(null));


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

Reply via email to