Add some additional test cases to ensure errors are trapped.  Remove
unneeded check for null.  

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

Branch: refs/heads/master
Commit: 95941245ade051d81093ac5b3cc46651a31160de
Parents: fff5e96
Author: Timothy Bish <[email protected]>
Authored: Mon Oct 13 16:31:10 2014 -0400
Committer: Timothy Bish <[email protected]>
Committed: Mon Oct 13 16:31:10 2014 -0400

----------------------------------------------------------------------
 .../amqp/message/AmqpJmsBytesMessageFacade.java |   3 +-
 .../message/AmqpJmsBytesMessageFacadeTest.java  | 107 +++++++++++++++++++
 2 files changed, 108 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/95941245/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 1fe5e26..8e9aca9 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
@@ -103,8 +103,7 @@ public class AmqpJmsBytesMessageFacade extends 
AmqpJmsMessageFacade implements J
 
     @Override
     public boolean isEmpty() {
-        Binary payload = getBinaryFromBody();
-        return payload == null || payload.getLength() == 0;
+        return getBinaryFromBody().getLength() == 0;
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/95941245/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 b07ba29..fd110ee 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
@@ -20,13 +20,19 @@ import static 
org.apache.qpid.jms.provider.amqp.message.AmqpMessageSupport.JMS_B
 import static 
org.apache.qpid.jms.provider.amqp.message.AmqpMessageSupport.JMS_MSG_TYPE;
 import static 
org.apache.qpid.jms.provider.amqp.message.AmqpMessageSupport.getSymbol;
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
+import io.netty.buffer.ByteBufInputStream;
+import io.netty.buffer.ByteBufOutputStream;
+import io.netty.buffer.Unpooled;
 
+import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.lang.reflect.Field;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Map;
@@ -40,6 +46,7 @@ import 
org.apache.qpid.proton.amqp.messaging.MessageAnnotations;
 import org.apache.qpid.proton.amqp.messaging.Section;
 import org.apache.qpid.proton.message.Message;
 import org.junit.Test;
+import org.mockito.Mockito;
 
 /**
  * Tests for class AmqpJmsBytesMessageFacade
@@ -266,6 +273,7 @@ public class AmqpJmsBytesMessageFacadeTest extends 
AmqpJmsMessageTypesTestCase {
         AmqpJmsBytesMessageFacade amqpBytesMessageFacade = 
createReceivedBytesMessageFacade(createMockAmqpConsumer(), message);
 
         assertEquals("Message reports unexpected length", length, 
amqpBytesMessageFacade.getBodyLength());
+        assertFalse(amqpBytesMessageFacade.isEmpty());
     }
 
     @Test
@@ -285,6 +293,7 @@ public class AmqpJmsBytesMessageFacadeTest extends 
AmqpJmsMessageTypesTestCase {
         AmqpJmsBytesMessageFacade amqpBytesMessageFacade = 
createReceivedBytesMessageFacade(createMockAmqpConsumer(), message);
 
         assertEquals("Message reports unexpected length", 0, 
amqpBytesMessageFacade.getBodyLength());
+        assertTrue(amqpBytesMessageFacade.isEmpty());
     }
 
     @Test
@@ -390,6 +399,24 @@ public class AmqpJmsBytesMessageFacadeTest extends 
AmqpJmsMessageTypesTestCase {
         }
     }
 
+    @Test
+    public void testIsEmpty() throws Exception {
+        Message message = Message.Factory.create();
+        message.setBody(new Data(new Binary(new byte[1])));
+        AmqpJmsBytesMessageFacade amqpBytesMessageFacade = 
createReceivedBytesMessageFacade(createMockAmqpConsumer(), message);
+
+        // Very small payload.
+        assertFalse(amqpBytesMessageFacade.isEmpty());
+
+        // Ensure no NPE
+        message.setBody(null);
+        assertTrue(amqpBytesMessageFacade.isEmpty());
+
+        byte[] bytes = "myBytes".getBytes();
+        message.setBody(new AmqpValue(new Binary(bytes)));
+        assertFalse(amqpBytesMessageFacade.isEmpty());
+    }
+
     /**
      * Test that setting bytes on a received message results in the expected 
content in the body section
      * of the underlying message and returned by a new InputStream requested 
from the message.
@@ -426,6 +453,66 @@ public class AmqpJmsBytesMessageFacadeTest extends 
AmqpJmsMessageTypesTestCase {
         assertEquals("Expected input stream to be at end but data was 
returned", END_OF_STREAM, bytesStream.read(new byte[1]));
     }
 
+    @Test
+    public void testClearBodyHandlesErrorFromOutputStream() throws Exception {
+        byte[] bodyBytes = "myOrigBytes".getBytes();
+
+        Message message = Message.Factory.create();
+        message.setBody(new Data(new Binary(bodyBytes)));
+        AmqpJmsBytesMessageFacade amqpBytesMessageFacade = 
createReceivedBytesMessageFacade(createMockAmqpConsumer(), message);
+
+        OutputStream outputStream = amqpBytesMessageFacade.getOutputStream();
+        outputStream = substituteMockOutputStream(amqpBytesMessageFacade);
+        Mockito.doThrow(new IOException()).when(outputStream).close();
+
+        amqpBytesMessageFacade.clearBody();
+    }
+
+    @Test
+    public void testClearBodyHandlesErrorFromInputStream() throws Exception {
+        byte[] bodyBytes = "myOrigBytes".getBytes();
+
+        Message message = Message.Factory.create();
+        message.setBody(new Data(new Binary(bodyBytes)));
+        AmqpJmsBytesMessageFacade amqpBytesMessageFacade = 
createReceivedBytesMessageFacade(createMockAmqpConsumer(), message);
+
+        InputStream inputStream = amqpBytesMessageFacade.getInputStream();
+        inputStream = substituteMockInputStream(amqpBytesMessageFacade);
+        Mockito.doThrow(new IOException()).when(inputStream).close();
+
+        amqpBytesMessageFacade.clearBody();
+    }
+
+    @Test
+    public void testResetHandlesErrorFromOutputStream() throws Exception {
+        byte[] bodyBytes = "myOrigBytes".getBytes();
+
+        Message message = Message.Factory.create();
+        message.setBody(new Data(new Binary(bodyBytes)));
+        AmqpJmsBytesMessageFacade amqpBytesMessageFacade = 
createReceivedBytesMessageFacade(createMockAmqpConsumer(), message);
+
+        OutputStream outputStream = amqpBytesMessageFacade.getOutputStream();
+        outputStream = substituteMockOutputStream(amqpBytesMessageFacade);
+        Mockito.doThrow(new IOException()).when(outputStream).close();
+
+        amqpBytesMessageFacade.reset();
+    }
+
+    @Test
+    public void testResetHandlesErrorFromInputStream() throws Exception {
+        byte[] bodyBytes = "myOrigBytes".getBytes();
+
+        Message message = Message.Factory.create();
+        message.setBody(new Data(new Binary(bodyBytes)));
+        AmqpJmsBytesMessageFacade amqpBytesMessageFacade = 
createReceivedBytesMessageFacade(createMockAmqpConsumer(), message);
+
+        InputStream inputStream = amqpBytesMessageFacade.getInputStream();
+        inputStream = substituteMockInputStream(amqpBytesMessageFacade);
+        Mockito.doThrow(new IOException()).when(inputStream).close();
+
+        amqpBytesMessageFacade.reset();
+    }
+
     //--------- utility methods ----------
 
     private void assertDataBodyAsExpected(Message protonMessage, int length) {
@@ -437,4 +524,24 @@ public class AmqpJmsBytesMessageFacadeTest extends 
AmqpJmsMessageTypesTestCase {
         assertEquals("Unexpected body length", length, value.getLength());
     }
 
+    private InputStream substituteMockInputStream(AmqpJmsBytesMessageFacade 
bytesMessage) throws NoSuchFieldException, SecurityException, 
IllegalArgumentException, IllegalAccessException {
+        InputStream mock = Mockito.mock(ByteBufInputStream.class);
+
+        Field ishField = bytesMessage.getClass().getDeclaredField("bytesIn");
+        ishField.setAccessible(true);
+        ishField.set(bytesMessage, mock);
+
+        return mock;
+    }
+
+    private OutputStream substituteMockOutputStream(AmqpJmsBytesMessageFacade 
bytesMessage) throws NoSuchFieldException, SecurityException, 
IllegalArgumentException, IllegalAccessException {
+        ByteBufOutputStream mock = Mockito.mock(ByteBufOutputStream.class);
+        Mockito.when(mock.buffer()).thenReturn(Unpooled.EMPTY_BUFFER);
+
+        Field oshField = bytesMessage.getClass().getDeclaredField("bytesOut");
+        oshField.setAccessible(true);
+        oshField.set(bytesMessage, mock);
+
+        return mock;
+    }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to