Capture and throw correct errors from BytesMessage read and write methods, adds tests to cover these.
Project: http://git-wip-us.apache.org/repos/asf/qpid-jms/repo Commit: http://git-wip-us.apache.org/repos/asf/qpid-jms/commit/079e6c04 Tree: http://git-wip-us.apache.org/repos/asf/qpid-jms/tree/079e6c04 Diff: http://git-wip-us.apache.org/repos/asf/qpid-jms/diff/079e6c04 Branch: refs/heads/master Commit: 079e6c04d41b58f0f411ea9f148b40e697db0a93 Parents: bfd9953 Author: Timothy Bish <tabish...@gmail.com> Authored: Fri Oct 10 14:28:48 2014 -0400 Committer: Timothy Bish <tabish...@gmail.com> Committed: Fri Oct 10 14:28:48 2014 -0400 ---------------------------------------------------------------------- .../qpid/jms/message/JmsBytesMessage.java | 44 +-- .../qpid/jms/message/JmsBytesMessageTest.java | 279 +++++++++++++++++++ 2 files changed, 301 insertions(+), 22 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/079e6c04/qpid-jms-client/src/main/java/org/apache/qpid/jms/message/JmsBytesMessage.java ---------------------------------------------------------------------- diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/message/JmsBytesMessage.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/message/JmsBytesMessage.java index f5a6cf7..057c91a 100644 --- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/message/JmsBytesMessage.java +++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/message/JmsBytesMessage.java @@ -81,9 +81,9 @@ public class JmsBytesMessage extends JmsMessage implements BytesMessage { initializeReading(); try { return this.dataIn.readBoolean(); - } catch (ArrayIndexOutOfBoundsException e) { + } catch (EOFException e) { throw JmsExceptionSupport.createMessageEOFException(e); - } catch (Throwable e) { + } catch (IOException e) { throw JmsExceptionSupport.createMessageFormatException(e); } } @@ -105,9 +105,9 @@ public class JmsBytesMessage extends JmsMessage implements BytesMessage { initializeReading(); try { return this.dataIn.readUnsignedByte(); - } catch (ArrayIndexOutOfBoundsException e) { + } catch (EOFException e) { throw JmsExceptionSupport.createMessageEOFException(e); - } catch (Throwable e) { + } catch (IOException e) { throw JmsExceptionSupport.createMessageFormatException(e); } } @@ -117,9 +117,9 @@ public class JmsBytesMessage extends JmsMessage implements BytesMessage { initializeReading(); try { return this.dataIn.readShort(); - } catch (ArrayIndexOutOfBoundsException e) { + } catch (EOFException e) { throw JmsExceptionSupport.createMessageEOFException(e); - } catch (Throwable e) { + } catch (IOException e) { throw JmsExceptionSupport.createMessageFormatException(e); } } @@ -129,9 +129,9 @@ public class JmsBytesMessage extends JmsMessage implements BytesMessage { initializeReading(); try { return this.dataIn.readUnsignedShort(); - } catch (ArrayIndexOutOfBoundsException e) { + } catch (EOFException e) { throw JmsExceptionSupport.createMessageEOFException(e); - } catch (Throwable e) { + } catch (IOException e) { throw JmsExceptionSupport.createMessageFormatException(e); } } @@ -141,9 +141,9 @@ public class JmsBytesMessage extends JmsMessage implements BytesMessage { initializeReading(); try { return this.dataIn.readChar(); - } catch (ArrayIndexOutOfBoundsException e) { + } catch (EOFException e) { throw JmsExceptionSupport.createMessageEOFException(e); - } catch (Throwable e) { + } catch (IOException e) { throw JmsExceptionSupport.createMessageFormatException(e); } } @@ -153,9 +153,9 @@ public class JmsBytesMessage extends JmsMessage implements BytesMessage { initializeReading(); try { return this.dataIn.readInt(); - } catch (ArrayIndexOutOfBoundsException e) { + } catch (EOFException e) { throw JmsExceptionSupport.createMessageEOFException(e); - } catch (Throwable e) { + } catch (IOException e) { throw JmsExceptionSupport.createMessageFormatException(e); } } @@ -165,9 +165,9 @@ public class JmsBytesMessage extends JmsMessage implements BytesMessage { initializeReading(); try { return this.dataIn.readLong(); - } catch (ArrayIndexOutOfBoundsException e) { + } catch (EOFException e) { throw JmsExceptionSupport.createMessageEOFException(e); - } catch (Throwable e) { + } catch (IOException e) { throw JmsExceptionSupport.createMessageFormatException(e); } } @@ -177,9 +177,9 @@ public class JmsBytesMessage extends JmsMessage implements BytesMessage { initializeReading(); try { return this.dataIn.readFloat(); - } catch (ArrayIndexOutOfBoundsException e) { + } catch (EOFException e) { throw JmsExceptionSupport.createMessageEOFException(e); - } catch (Throwable e) { + } catch (IOException e) { throw JmsExceptionSupport.createMessageFormatException(e); } } @@ -189,9 +189,9 @@ public class JmsBytesMessage extends JmsMessage implements BytesMessage { initializeReading(); try { return this.dataIn.readDouble(); - } catch (ArrayIndexOutOfBoundsException e) { + } catch (EOFException e) { throw JmsExceptionSupport.createMessageEOFException(e); - } catch (Throwable e) { + } catch (IOException e) { throw JmsExceptionSupport.createMessageFormatException(e); } } @@ -201,9 +201,9 @@ public class JmsBytesMessage extends JmsMessage implements BytesMessage { initializeReading(); try { return this.dataIn.readUTF(); - } catch (ArrayIndexOutOfBoundsException e) { + } catch (EOFException e) { throw JmsExceptionSupport.createMessageEOFException(e); - } catch (Throwable e) { + } catch (IOException e) { throw JmsExceptionSupport.createMessageFormatException(e); } } @@ -235,9 +235,9 @@ public class JmsBytesMessage extends JmsMessage implements BytesMessage { n = -1; } return n; - } catch (ArrayIndexOutOfBoundsException e) { + } catch (EOFException e) { throw JmsExceptionSupport.createMessageEOFException(e); - } catch (Throwable e) { + } catch (IOException e) { throw JmsExceptionSupport.createMessageFormatException(e); } } http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/079e6c04/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsBytesMessageTest.java ---------------------------------------------------------------------- diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsBytesMessageTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsBytesMessageTest.java index 60172bd..d1923d6 100644 --- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsBytesMessageTest.java +++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsBytesMessageTest.java @@ -21,17 +21,24 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; +import java.io.EOFException; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; import java.util.Arrays; import javax.jms.BytesMessage; import javax.jms.JMSException; +import javax.jms.MessageEOFException; import javax.jms.MessageFormatException; import javax.jms.MessageNotReadableException; import javax.jms.MessageNotWriteableException; +import org.apache.qpid.jms.message.facade.JmsBytesMessageFacade; import org.apache.qpid.jms.message.facade.defaults.JmsDefaultBytesMessageFacade; import org.apache.qpid.jms.message.facade.defaults.JmsDefaultMessageFactory; import org.junit.Test; +import org.mockito.Mockito; /** * Test for JMS Spec compliance for the JmsBytesMessage class using the default message facade. @@ -655,6 +662,278 @@ public class JmsBytesMessageTest { } } + //---------- Test that errors are trapped correctly ----------------------// + + @Test + public void testReadMethodsCaptureEOFExceptionThrowsMessageEOFEx() throws Exception { + JmsBytesMessageFacade facade = Mockito.mock(JmsBytesMessageFacade.class); + InputStream bytesIn = Mockito.mock(InputStream.class); + Mockito.when(facade.getInputStream()).thenReturn(bytesIn); + + Mockito.when(bytesIn.read()).thenThrow(new EOFException()); + Mockito.when(bytesIn.read(Mockito.any(byte[].class))).thenThrow(new EOFException()); + Mockito.when(bytesIn.read(Mockito.any(byte[].class), Mockito.anyInt(), Mockito.anyInt())).thenThrow(new EOFException()); + + JmsBytesMessage message = new JmsBytesMessage(facade); + message.reset(); + + try { + message.readBoolean(); + } catch (MessageEOFException ex) { + assertTrue(ex.getCause() instanceof EOFException); + } + + try { + message.readByte(); + } catch (MessageEOFException ex) { + assertTrue(ex.getCause() instanceof EOFException); + } + + try { + message.readBytes(new byte[10]); + } catch (MessageEOFException ex) { + assertTrue(ex.getCause() instanceof EOFException); + } + + try { + message.readBytes(new byte[10], 10); + } catch (MessageEOFException ex) { + assertTrue(ex.getCause() instanceof EOFException); + } + + try { + message.readChar(); + } catch (MessageEOFException ex) { + assertTrue(ex.getCause() instanceof EOFException); + } + + try { + message.readDouble(); + } catch (MessageEOFException ex) { + assertTrue(ex.getCause() instanceof EOFException); + } + + try { + message.readFloat(); + } catch (MessageEOFException ex) { + assertTrue(ex.getCause() instanceof EOFException); + } + + try { + message.readInt(); + } catch (MessageEOFException ex) { + assertTrue(ex.getCause() instanceof EOFException); + } + + try { + message.readLong(); + } catch (MessageEOFException ex) { + assertTrue(ex.getCause() instanceof EOFException); + } + + try { + message.readShort(); + } catch (MessageEOFException ex) { + assertTrue(ex.getCause() instanceof EOFException); + } + + try { + message.readUnsignedByte(); + } catch (MessageEOFException ex) { + assertTrue(ex.getCause() instanceof EOFException); + } + + try { + message.readUnsignedShort(); + } catch (MessageEOFException ex) { + assertTrue(ex.getCause() instanceof EOFException); + } + + try { + message.readUTF(); + } catch (MessageEOFException ex) { + assertTrue(ex.getCause() instanceof EOFException); + } + } + + @Test + public void testReadMethodsCaptureIOExceptionThrowsJMSEx() throws Exception { + JmsBytesMessageFacade facade = Mockito.mock(JmsBytesMessageFacade.class); + InputStream bytesIn = Mockito.mock(InputStream.class); + Mockito.when(facade.getInputStream()).thenReturn(bytesIn); + + Mockito.when(bytesIn.read()).thenThrow(new IOException()); + Mockito.when(bytesIn.read(Mockito.any(byte[].class))).thenThrow(new IOException()); + Mockito.when(bytesIn.read(Mockito.any(byte[].class), Mockito.anyInt(), Mockito.anyInt())).thenThrow(new IOException()); + + JmsBytesMessage message = new JmsBytesMessage(facade); + message.reset(); + + try { + message.readBoolean(); + } catch (JMSException ex) { + assertTrue(ex.getCause() instanceof IOException); + } + + try { + message.readByte(); + } catch (JMSException ex) { + assertTrue(ex.getCause() instanceof IOException); + } + + try { + message.readBytes(new byte[10]); + } catch (JMSException ex) { + assertTrue(ex.getCause() instanceof IOException); + } + + try { + message.readBytes(new byte[10], 10); + } catch (JMSException ex) { + assertTrue(ex.getCause() instanceof IOException); + } + + try { + message.readChar(); + } catch (JMSException ex) { + assertTrue(ex.getCause() instanceof IOException); + } + + try { + message.readDouble(); + } catch (JMSException ex) { + assertTrue(ex.getCause() instanceof IOException); + } + + try { + message.readFloat(); + } catch (JMSException ex) { + assertTrue(ex.getCause() instanceof IOException); + } + + try { + message.readInt(); + } catch (JMSException ex) { + assertTrue(ex.getCause() instanceof IOException); + } + + try { + message.readLong(); + } catch (JMSException ex) { + assertTrue(ex.getCause() instanceof IOException); + } + + try { + message.readShort(); + } catch (JMSException ex) { + assertTrue(ex.getCause() instanceof IOException); + } + + try { + message.readUnsignedByte(); + } catch (JMSException ex) { + assertTrue(ex.getCause() instanceof IOException); + } + + try { + message.readUnsignedShort(); + } catch (JMSException ex) { + assertTrue(ex.getCause() instanceof IOException); + } + + try { + message.readUTF(); + } catch (JMSException ex) { + assertTrue(ex.getCause() instanceof IOException); + } + } + + @Test + public void testWriteMethodsCaptureIOExceptionThrowsJMSEx() throws Exception { + JmsBytesMessageFacade facade = Mockito.mock(JmsBytesMessageFacade.class); + OutputStream bytesOut = Mockito.mock(OutputStream.class); + Mockito.when(facade.getOutputStream()).thenReturn(bytesOut); + + Mockito.doThrow(new IOException()).when(bytesOut).write(Mockito.anyByte()); + Mockito.doThrow(new IOException()).when(bytesOut).write(Mockito.any(byte[].class)); + Mockito.doThrow(new IOException()).when(bytesOut).write(Mockito.any(byte[].class), Mockito.anyInt(), Mockito.anyInt()); + JmsBytesMessage message = new JmsBytesMessage(facade); + + try { + message.writeBoolean(false); + } catch (JMSException ex) { + assertTrue(ex.getCause() instanceof IOException); + } + + try { + message.writeByte((byte) 128); + } catch (JMSException ex) { + assertTrue(ex.getCause() instanceof IOException); + } + + try { + message.writeBytes(new byte[10]); + } catch (JMSException ex) { + assertTrue(ex.getCause() instanceof IOException); + } + + try { + message.writeBytes(new byte[10], 0, 10); + } catch (JMSException ex) { + assertTrue(ex.getCause() instanceof IOException); + } + + try { + message.writeChar('a'); + } catch (JMSException ex) { + assertTrue(ex.getCause() instanceof IOException); + } + + try { + message.writeDouble(100.0); + } catch (JMSException ex) { + assertTrue(ex.getCause() instanceof IOException); + } + + try { + message.writeFloat(10.2f); + } catch (JMSException ex) { + assertTrue(ex.getCause() instanceof IOException); + } + + try { + message.writeInt(125); + } catch (JMSException ex) { + assertTrue(ex.getCause() instanceof IOException); + } + + try { + message.writeLong(65536L); + } catch (JMSException ex) { + assertTrue(ex.getCause() instanceof IOException); + } + + try { + message.writeObject(""); + } catch (JMSException ex) { + assertTrue(ex.getCause() instanceof IOException); + } + + try { + message.writeShort((short) 32768); + } catch (JMSException ex) { + assertTrue(ex.getCause() instanceof IOException); + } + + try { + message.writeUTF(""); + } catch (JMSException ex) { + assertTrue(ex.getCause() instanceof IOException); + } + } + + //---------- Test for misc message methods -------------------------------// + @Test public void testHashCode() throws Exception { String messageId = "ID:SOME-ID:0:1:1"; --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org