package org.skyscreamer.nevado.jms.message; import org.activemq.message.ActiveMQBytesMessage; import org.junit.Assert; import org.junit.Test; import org.skyscreamer.nevado.jms.AbstractJMSTest; import org.skyscreamer.nevado.jms.util.RandomData; import javax.jms.*; import java.util.Arrays; /** * Created by IntelliJ IDEA. * User: Carter Page * Date: 3/26/12 * Time: 6:53 PM */ public class BytesMessageTest extends AbstractJMSTest { @Test(expected = MessageNotWriteableException.class) public void testMessageNotWritableException() throws JMSException { BytesMessage msg = createSession().createBytesMessage(); msg.writeChar('a'); msg.writeChar('b'); BytesMessage msgOut = (BytesMessage)sendAndReceive(msg); Assert.assertEquals('a', msg.readChar()); msg.writeChar('c'); } @Test(expected = MessageNotReadableException.class) public void testMessageNotReadableException() throws JMSException { BytesMessage msg = createSession().createBytesMessage(); msg.writeChar('x'); msg.readChar(); } @Test public void testLotsOfBytes() throws JMSException { int howManyBytes = 48000; BytesMessage msg = createSession().createBytesMessage(); byte[] data = RandomData.readBytes(howManyBytes); msg.writeBytes(data); BytesMessage msgOut = (BytesMessage)sendAndReceive(msg); byte[] dataOut = new byte[howManyBytes]; msgOut.readBytes(dataOut); Assert.assertTrue(Arrays.equals(data, dataOut)); } @Test public void testBytesMessage() throws JMSException { BytesMessage msg = createSession().createBytesMessage(); testBytesMessage(msg); } @Test public void testAlienBytesMessage() throws JMSException { BytesMessage msg = new ActiveMQBytesMessage(); testBytesMessage(msg); } @Test(expected = MessageEOFException.class) public void testMessageEOF() throws JMSException { BytesMessage msg = createSession().createBytesMessage(); msg.writeByte(RandomData.readByte()); BytesMessage msgOut = (BytesMessage)sendAndReceive(msg); msgOut.readByte(); byte b = msgOut.readByte(); _log.error("Got back an extra byte: " + b); } private void testBytesMessage(BytesMessage msg) throws JMSException { // Initialize MapMessage TestValues testValues = new TestValues(); msg.writeBoolean(testValues.bb); msg.writeByte(testValues.yy); msg.writeShort(testValues.hh); msg.writeChar(testValues.cc); msg.writeInt(testValues.ii); msg.writeLong(testValues.ll); msg.writeFloat(testValues.ff); msg.writeDouble(testValues.dd); msg.writeUTF(testValues.ss); msg.writeBytes(testValues.zz); // Send/Receive BytesMessage msgOut = (BytesMessage)sendAndReceive(msg); Assert.assertTrue("Should be a stream message", msgOut instanceof BytesMessage); // Verify Assert.assertEquals("BytesMessage.getBoolean failed (conversion bb)", testValues.bb, msgOut.readBoolean()); Assert.assertEquals("BytesMessage.getByte failed (conversion yy)", testValues.yy, msgOut.readByte()); Assert.assertEquals("BytesMessage.getShort failed (conversion hh)", testValues.hh, msgOut.readShort()); Assert.assertEquals("BytesMessage.getShort failed (conversion cc)", testValues.cc, msgOut.readChar()); Assert.assertEquals("BytesMessage.getInt failed (conversion ii)", testValues.ii, msgOut.readInt()); Assert.assertEquals("BytesMessage.getLong failed (conversion ll)", testValues.ll, msgOut.readLong()); Assert.assertEquals("BytesMessage.getFloat failed (conversion ff)", testValues.ff, msgOut.readFloat(), 0.0001); Assert.assertEquals("BytesMessage.getDouble failed (conversion dd)", testValues.dd, msgOut.readDouble(), 0.0001); Assert.assertEquals("BytesMessage.getString failed (conversion ss)", String.valueOf(testValues.ss), msgOut.readUTF()); // Testing byte[] takes a little work byte[] buffer = new byte[10000]; int count = msgOut.readBytes(buffer); Assert.assertTrue("Buffer too small", count < buffer.length); byte[] value = new byte[count]; System.arraycopy(buffer, 0, value, 0, count); Assert.assertTrue("BytesMessage.getBytes failed (conversion zz)", Arrays.equals(testValues.zz, value)); } private class TestValues { final boolean bb = RandomData.readBoolean(); final String sb = RandomData.readBoolean().toString(); final byte yy = RandomData.readByte(); final String sy = RandomData.readByte().toString(); final byte yh = RandomData.readByte(); final short hh = RandomData.readShort(); final String sh = RandomData.readShort().toString(); final char cc = RandomData.readChar(); final byte yi = RandomData.readByte(); final short hi = RandomData.readShort(); final int ii = RandomData.readInt(); final String si = RandomData.readInt().toString(); final byte yl = RandomData.readByte(); final short hl = RandomData.readShort(); final int il = RandomData.readInt(); final long ll = RandomData.readLong(); final String sl = RandomData.readLong().toString(); final float ff = RandomData.readFloat(); final String sf = RandomData.readFloat().toString(); final float fd = RandomData.readFloat(); final double dd = RandomData.readDouble(); final String sd = RandomData.readDouble().toString(); final boolean bs = RandomData.readBoolean(); final byte ys = RandomData.readByte(); final short hs = RandomData.readShort(); final char cs = RandomData.readChar(); final int is = RandomData.readInt(); final long ls = RandomData.readLong(); final float fs = RandomData.readFloat(); final double ds = RandomData.readDouble(); final String ss = RandomData.readString(); final byte[] zz = RandomData.readBytes(1000); } }