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