You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ta...@apache.org on 2014/10/13 22:31:23 UTC

[2/2] git commit: Add some additional test cases to ensure errors are trapped. Remove unneeded check for null.

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 <ta...@gmail.com>
Authored: Mon Oct 13 16:31:10 2014 -0400
Committer: Timothy Bish <ta...@gmail.com>
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: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org