package org.skyscreamer.nevado.jms.message; import org.activemq.message.ActiveMQStreamMessage; 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: 8:11 AM */ public class StreamMessageTest extends AbstractJMSTest { @Test(expected = MessageNotWriteableException.class) public void testMessageNotWritableException() throws JMSException { StreamMessage msg = createSession().createStreamMessage(); msg.writeChar('a'); msg.writeChar('b'); StreamMessage msgOut = (StreamMessage)sendAndReceive(msg); Assert.assertEquals('a', msg.readChar()); msg.writeChar('c'); } @Test(expected = MessageNotReadableException.class) public void testMessageNotReadableException() throws JMSException { StreamMessage msg = createSession().createStreamMessage(); msg.writeChar('x'); msg.readChar(); } @Test public void testStreamMessage() throws JMSException { StreamMessage msg = createSession().createStreamMessage(); testStreamMessage(msg); } @Test public void testAlienStreamMessage() throws JMSException { StreamMessage msg = new ActiveMQStreamMessage(); testStreamMessage(msg); } @Test(expected = MessageEOFException.class) public void testMessageEOF() throws JMSException { StreamMessage msg = createSession().createStreamMessage(); msg.writeByte(RandomData.readByte()); StreamMessage msgOut = (StreamMessage)sendAndReceive(msg); msgOut.readByte(); byte b = msgOut.readByte(); _log.error("Got back an extra byte: " + b); } private void testStreamMessage(StreamMessage msg) throws JMSException { // Initialize MapMessage TestValues testValues = new TestValues(); msg.writeBoolean(testValues.bb); msg.writeString(testValues.sb); msg.writeByte(testValues.yy); msg.writeString(testValues.sy); msg.writeByte(testValues.yh); msg.writeShort(testValues.hh); msg.writeString(testValues.sh); msg.writeChar(testValues.cc); msg.writeByte(testValues.yi); msg.writeShort(testValues.hi); msg.writeInt(testValues.ii); msg.writeString(testValues.si); msg.writeByte(testValues.yl); msg.writeShort(testValues.hl); msg.writeInt(testValues.il); msg.writeLong(testValues.ll); msg.writeString(testValues.sl); msg.writeFloat(testValues.ff); msg.writeString(testValues.sf); msg.writeFloat(testValues.fd); msg.writeDouble(testValues.dd); msg.writeString(testValues.sd); msg.writeBoolean(testValues.bs); msg.writeByte(testValues.ys); msg.writeShort(testValues.hs); msg.writeChar(testValues.cs); msg.writeInt(testValues.is); msg.writeLong(testValues.ls); msg.writeFloat(testValues.fs); msg.writeDouble(testValues.ds); msg.writeString(testValues.ss); msg.writeBytes(testValues.zz); msg.reset(); // Send/Receive StreamMessage msgOut = (StreamMessage)sendAndReceive(msg); Assert.assertTrue("Should be a stream message", msgOut instanceof StreamMessage); // Verify Assert.assertEquals("StreamMessage.getBoolean failed (conversion bb)", testValues.bb, msgOut.readBoolean()); Assert.assertEquals("StreamMessage.getBoolean failed (conversion sb)", testValues.sb, String.valueOf(msgOut.readBoolean())); Assert.assertEquals("StreamMessage.getByte failed (conversion yy)", testValues.yy, msgOut.readByte()); Assert.assertEquals("StreamMessage.getByte failed (conversion sy)", testValues.sy, String.valueOf(msgOut.readByte())); Assert.assertEquals("StreamMessage.getShort failed (conversion yh)", testValues.yh, msgOut.readShort()); Assert.assertEquals("StreamMessage.getShort failed (conversion hh)", testValues.hh, msgOut.readShort()); Assert.assertEquals("StreamMessage.getShort failed (conversion sh)", testValues.sh, String.valueOf(msgOut.readShort())); Assert.assertEquals("StreamMessage.getShort failed (conversion cc)", testValues.cc, msgOut.readChar()); Assert.assertEquals("StreamMessage.getInt failed (conversion yi)", testValues.yi, msgOut.readInt()); Assert.assertEquals("StreamMessage.getInt failed (conversion hi)", testValues.hi, msgOut.readInt()); Assert.assertEquals("StreamMessage.getInt failed (conversion ii)", testValues.ii, msgOut.readInt()); Assert.assertEquals("StreamMessage.getInt failed (conversion si)", testValues.si, String.valueOf(msgOut.readInt())); Assert.assertEquals("StreamMessage.getLong failed (conversion yl)", testValues.yl, msgOut.readLong()); Assert.assertEquals("StreamMessage.getLong failed (conversion hl)", testValues.hl, msgOut.readLong()); Assert.assertEquals("StreamMessage.getLong failed (conversion il)", testValues.il, msgOut.readLong()); Assert.assertEquals("StreamMessage.getLong failed (conversion ll)", testValues.ll, msgOut.readLong()); Assert.assertEquals("StreamMessage.getLong failed (conversion sl)", testValues.sl, String.valueOf(msgOut.readLong())); Assert.assertEquals("StreamMessage.getFloat failed (conversion ff)", testValues.ff, msgOut.readFloat(), 0.0001); Assert.assertEquals("StreamMessage.getFloat failed (conversion sf)", testValues.sf, String.valueOf(msgOut.readFloat())); Assert.assertEquals("StreamMessage.getDouble failed (conversion fd)", testValues.fd, msgOut.readDouble(), 0.0001); Assert.assertEquals("StreamMessage.getDouble failed (conversion dd)", testValues.dd, msgOut.readDouble(), 0.0001); Assert.assertEquals("StreamMessage.getDouble failed (conversion sd)", testValues.sd, String.valueOf(msgOut.readDouble())); Assert.assertEquals("StreamMessage.getString failed (conversion bs)", String.valueOf(testValues.bs), msgOut.readString()); Assert.assertEquals("StreamMessage.getString failed (conversion ys)", String.valueOf(testValues.ys), msgOut.readString()); Assert.assertEquals("StreamMessage.getString failed (conversion hs)", String.valueOf(testValues.hs), msgOut.readString()); Assert.assertEquals("StreamMessage.getString failed (conversion cs)", String.valueOf(testValues.cs), msgOut.readString()); Assert.assertEquals("StreamMessage.getString failed (conversion is)", String.valueOf(testValues.is), msgOut.readString()); Assert.assertEquals("StreamMessage.getString failed (conversion ls)", String.valueOf(testValues.ls), msgOut.readString()); Assert.assertEquals("StreamMessage.getString failed (conversion fs)", String.valueOf(testValues.fs), msgOut.readString()); Assert.assertEquals("StreamMessage.getString failed (conversion ds)", String.valueOf(testValues.ds), msgOut.readString()); Assert.assertEquals("StreamMessage.getString failed (conversion ss)", String.valueOf(testValues.ss), msgOut.readString()); // 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("StreamMessage.getBytes failed (conversion zz)", Arrays.equals(testValues.zz, value)); } @Test(expected = MessageFormatException.class) public void ybFail() throws JMSException { initStream(RandomData.readByte()).readBoolean(); } @Test(expected = MessageFormatException.class) public void sbFail() throws JMSException { initStream(RandomData.readShort()).readBoolean(); } @Test(expected = MessageFormatException.class) public void cbFail() throws JMSException { initStream(RandomData.readChar()).readBoolean(); } @Test(expected = MessageFormatException.class) public void ibFail() throws JMSException { initStream(RandomData.readInt()).readBoolean(); } @Test(expected = MessageFormatException.class) public void lbFail() throws JMSException { initStream(RandomData.readLong()).readBoolean(); } @Test(expected = MessageFormatException.class) public void fbFail() throws JMSException { initStream(RandomData.readFloat()).readBoolean(); } @Test(expected = MessageFormatException.class) public void dbFail() throws JMSException { initStream(RandomData.readDouble()).readBoolean(); } @Test(expected = MessageFormatException.class) public void zbFail() throws JMSException { initStream(RandomData.readBytes(10)).readBoolean(); } @Test(expected = MessageFormatException.class) public void byFail() throws JMSException { initStream(RandomData.readBoolean()).readByte(); } @Test(expected = MessageFormatException.class) public void syFail() throws JMSException { initStream(RandomData.readShort()).readByte(); } @Test(expected = MessageFormatException.class) public void cyFail() throws JMSException { initStream(RandomData.readChar()).readByte(); } @Test(expected = MessageFormatException.class) public void iyFail() throws JMSException { initStream(RandomData.readInt()).readByte(); } @Test(expected = MessageFormatException.class) public void lyFail() throws JMSException { initStream(RandomData.readLong()).readByte(); } @Test(expected = MessageFormatException.class) public void fyFail() throws JMSException { initStream(RandomData.readFloat()).readByte(); } @Test(expected = MessageFormatException.class) public void dyFail() throws JMSException { initStream(RandomData.readDouble()).readByte(); } @Test(expected = MessageFormatException.class) public void zyFail() throws JMSException { initStream(RandomData.readBytes(10)).readByte(); } @Test(expected = MessageFormatException.class) public void bhFail() throws JMSException { initStream(RandomData.readBoolean()).readShort(); } @Test(expected = MessageFormatException.class) public void chFail() throws JMSException { initStream(RandomData.readChar()).readShort(); } @Test(expected = MessageFormatException.class) public void ihFail() throws JMSException { initStream(RandomData.readInt()).readShort(); } @Test(expected = MessageFormatException.class) public void lhFail() throws JMSException { initStream(RandomData.readLong()).readShort(); } @Test(expected = MessageFormatException.class) public void fhFail() throws JMSException { initStream(RandomData.readFloat()).readShort(); } @Test(expected = MessageFormatException.class) public void dhFail() throws JMSException { initStream(RandomData.readDouble()).readShort(); } @Test(expected = MessageFormatException.class) public void zhFail() throws JMSException { initStream(RandomData.readBytes(10)).readShort(); } @Test(expected = MessageFormatException.class) public void bcFail() throws JMSException { initStream(RandomData.readBoolean()).readChar(); } @Test(expected = MessageFormatException.class) public void ycFail() throws JMSException { initStream(RandomData.readByte()).readChar(); } @Test(expected = MessageFormatException.class) public void hcFail() throws JMSException { initStream(RandomData.readShort()).readChar(); } @Test(expected = MessageFormatException.class) public void icFail() throws JMSException { initStream(RandomData.readInt()).readChar(); } @Test(expected = MessageFormatException.class) public void lcFail() throws JMSException { initStream(RandomData.readLong()).readChar(); } @Test(expected = MessageFormatException.class) public void fcFail() throws JMSException { initStream(RandomData.readFloat()).readChar(); } @Test(expected = MessageFormatException.class) public void dcFail() throws JMSException { initStream(RandomData.readDouble()).readChar(); } @Test(expected = MessageFormatException.class) public void scFail() throws JMSException { initStream(RandomData.readString()).readChar(); } @Test(expected = MessageFormatException.class) public void zcFail() throws JMSException { initStream(RandomData.readBytes(10)).readChar(); } @Test(expected = MessageFormatException.class) public void biFail() throws JMSException { initStream(RandomData.readBoolean()).readInt(); } @Test(expected = MessageFormatException.class) public void ciFail() throws JMSException { initStream(RandomData.readChar()).readInt(); } @Test(expected = MessageFormatException.class) public void liFail() throws JMSException { initStream(RandomData.readLong()).readInt(); } @Test(expected = MessageFormatException.class) public void fiFail() throws JMSException { initStream(RandomData.readFloat()).readInt(); } @Test(expected = MessageFormatException.class) public void diFail() throws JMSException { initStream(RandomData.readDouble()).readInt(); } @Test(expected = MessageFormatException.class) public void ziFail() throws JMSException { initStream(RandomData.readBytes(10)).readInt(); } @Test(expected = MessageFormatException.class) public void blFail() throws JMSException { initStream(RandomData.readBoolean()).readLong(); } @Test(expected = MessageFormatException.class) public void clFail() throws JMSException { initStream(RandomData.readChar()).readLong(); } @Test(expected = MessageFormatException.class) public void dlFail() throws JMSException { initStream(RandomData.readDouble()).readLong(); } @Test(expected = MessageFormatException.class) public void flFail() throws JMSException { initStream(RandomData.readFloat()).readLong(); } @Test(expected = MessageFormatException.class) public void zlFail() throws JMSException { initStream(RandomData.readBytes(10)).readLong(); } @Test(expected = MessageFormatException.class) public void bfFail() throws JMSException { initStream(RandomData.readBoolean()).readFloat(); } @Test(expected = MessageFormatException.class) public void yfFail() throws JMSException { initStream(RandomData.readByte()).readFloat(); } @Test(expected = MessageFormatException.class) public void hfFail() throws JMSException { initStream(RandomData.readShort()).readFloat(); } @Test(expected = MessageFormatException.class) public void cfFail() throws JMSException { initStream(RandomData.readChar()).readFloat(); } @Test(expected = MessageFormatException.class) public void ifFail() throws JMSException { initStream(RandomData.readInt()).readFloat(); } @Test(expected = MessageFormatException.class) public void lfFail() throws JMSException { initStream(RandomData.readLong()).readFloat(); } @Test(expected = MessageFormatException.class) public void dfFail() throws JMSException { initStream(RandomData.readDouble()).readFloat(); } @Test(expected = MessageFormatException.class) public void zfFail() throws JMSException { initStream(RandomData.readBytes(10)).readFloat(); } @Test(expected = MessageFormatException.class) public void bdFail() throws JMSException { initStream(RandomData.readBoolean()).readDouble(); } @Test(expected = MessageFormatException.class) public void ydFail() throws JMSException { initStream(RandomData.readByte()).readDouble(); } @Test(expected = MessageFormatException.class) public void hdFail() throws JMSException { initStream(RandomData.readShort()).readDouble(); } @Test(expected = MessageFormatException.class) public void cdFail() throws JMSException { initStream(RandomData.readChar()).readDouble(); } @Test(expected = MessageFormatException.class) public void idFail() throws JMSException { initStream(RandomData.readInt()).readDouble(); } @Test(expected = MessageFormatException.class) public void ldFail() throws JMSException { initStream(RandomData.readLong()).readDouble(); } @Test(expected = MessageFormatException.class) public void zdFail() throws JMSException { initStream(RandomData.readBytes(10)).readDouble(); } @Test(expected = MessageFormatException.class) public void zsFail() throws JMSException { initStream(RandomData.readBytes(10)).readString(); } @Test(expected = MessageFormatException.class) public void bzFail() throws JMSException { initStream(RandomData.readBoolean()).readBytes(new byte[10]); } @Test(expected = MessageFormatException.class) public void yzFail() throws JMSException { initStream(RandomData.readByte()).readBytes(new byte[10]); } @Test(expected = MessageFormatException.class) public void hzFail() throws JMSException { initStream(RandomData.readShort()).readBytes(new byte[10]); } @Test(expected = MessageFormatException.class) public void czFail() throws JMSException { initStream(RandomData.readChar()).readBytes(new byte[10]); } @Test(expected = MessageFormatException.class) public void izFail() throws JMSException { initStream(RandomData.readInt()).readBytes(new byte[10]); } @Test(expected = MessageFormatException.class) public void lzFail() throws JMSException { initStream(RandomData.readLong()).readBytes(new byte[10]); } @Test(expected = MessageFormatException.class) public void fzFail() throws JMSException { initStream(RandomData.readFloat()).readBytes(new byte[10]); } @Test(expected = MessageFormatException.class) public void dzFail() throws JMSException { initStream(RandomData.readDouble()).readBytes(new byte[10]); } @Test(expected = MessageFormatException.class) public void szFail() throws JMSException { initStream(RandomData.readString()).readBytes(new byte[10]); } private StreamMessage initStream(Object o) throws JMSException { StreamMessage streamMessage = createSession().createStreamMessage(); streamMessage.writeObject(o); streamMessage.writeBytes(new byte[10]); ((NevadoStreamMessage)streamMessage).onSend(); return streamMessage; } 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); } }