/** * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.activemq.command; import javax.jms.JMSException; import javax.jms.MessageFormatException; import javax.jms.MessageNotReadableException; import javax.jms.MessageNotWriteableException; import junit.framework.TestCase; /** * */ public class ActiveMQStreamMessageTest extends TestCase { /** * Constructor for ActiveMQStreamMessageTest. * * @param name */ public ActiveMQStreamMessageTest(String name) { super(name); } public static void main(String[] args) { junit.textui.TestRunner.run(ActiveMQStreamMessageTest.class); } /* * @see TestCase#setUp() */ @Override protected void setUp() throws Exception { super.setUp(); } /* * @see TestCase#tearDown() */ @Override protected void tearDown() throws Exception { super.tearDown(); } public void testGetDataStructureType() { ActiveMQStreamMessage msg = new ActiveMQStreamMessage(); assertEquals(msg.getDataStructureType(), CommandTypes.ACTIVEMQ_STREAM_MESSAGE); } public void testReadBoolean() { ActiveMQStreamMessage msg = new ActiveMQStreamMessage(); try { msg.writeBoolean(true); msg.reset(); assertTrue(msg.readBoolean()); msg.reset(); assertTrue(msg.readString().equals("true")); msg.reset(); try { msg.readByte(); fail("Should have thrown exception"); } catch (MessageFormatException mfe) { } msg.reset(); try { msg.readShort(); fail("Should have thrown exception"); } catch (MessageFormatException mfe) { } msg.reset(); try { msg.readInt(); fail("Should have thrown exception"); } catch (MessageFormatException mfe) { } msg.reset(); try { msg.readLong(); fail("Should have thrown exception"); } catch (MessageFormatException mfe) { } msg.reset(); try { msg.readFloat(); fail("Should have thrown exception"); } catch (MessageFormatException mfe) { } msg.reset(); try { msg.readDouble(); fail("Should have thrown exception"); } catch (MessageFormatException mfe) { } msg.reset(); try { msg.readChar(); fail("Should have thrown exception"); } catch (MessageFormatException mfe) { } msg.reset(); try { msg.readBytes(new byte[1]); fail("Should have thrown exception"); } catch (MessageFormatException mfe) { } } catch (JMSException jmsEx) { jmsEx.printStackTrace(); assertTrue(false); } } public void testreadByte() { ActiveMQStreamMessage msg = new ActiveMQStreamMessage(); try { byte test = (byte) 4; msg.writeByte(test); msg.reset(); assertTrue(msg.readByte() == test); msg.reset(); assertTrue(msg.readShort() == test); msg.reset(); assertTrue(msg.readInt() == test); msg.reset(); assertTrue(msg.readLong() == test); msg.reset(); assertTrue(msg.readString().equals(new Byte(test).toString())); msg.reset(); try { msg.readBoolean(); fail("Should have thrown exception"); } catch (MessageFormatException mfe) { } msg.reset(); try { msg.readFloat(); fail("Should have thrown exception"); } catch (MessageFormatException mfe) { } msg.reset(); try { msg.readDouble(); fail("Should have thrown exception"); } catch (MessageFormatException mfe) { } msg.reset(); try { msg.readChar(); fail("Should have thrown exception"); } catch (MessageFormatException mfe) { } msg.reset(); try { msg.readBytes(new byte[1]); fail("Should have thrown exception"); } catch (MessageFormatException mfe) { } } catch (JMSException jmsEx) { jmsEx.printStackTrace(); assertTrue(false); } } public void testReadShort() { ActiveMQStreamMessage msg = new ActiveMQStreamMessage(); try { short test = (short) 4; msg.writeShort(test); msg.reset(); assertTrue(msg.readShort() == test); msg.reset(); assertTrue(msg.readInt() == test); msg.reset(); assertTrue(msg.readLong() == test); msg.reset(); assertTrue(msg.readString().equals(new Short(test).toString())); msg.reset(); try { msg.readBoolean(); fail("Should have thrown exception"); } catch (MessageFormatException mfe) { } msg.reset(); try { msg.readByte(); fail("Should have thrown exception"); } catch (MessageFormatException mfe) { } msg.reset(); try { msg.readFloat(); fail("Should have thrown exception"); } catch (MessageFormatException mfe) { } msg.reset(); try { msg.readDouble(); fail("Should have thrown exception"); } catch (MessageFormatException mfe) { } msg.reset(); try { msg.readChar(); fail("Should have thrown exception"); } catch (MessageFormatException mfe) { } msg.reset(); try { msg.readBytes(new byte[1]); fail("Should have thrown exception"); } catch (MessageFormatException mfe) { } } catch (JMSException jmsEx) { jmsEx.printStackTrace(); assertTrue(false); } } public void testReadChar() { ActiveMQStreamMessage msg = new ActiveMQStreamMessage(); try { char test = 'z'; msg.writeChar(test); msg.reset(); assertTrue(msg.readChar() == test); msg.reset(); assertTrue(msg.readString().equals(new Character(test).toString())); msg.reset(); try { msg.readBoolean(); fail("Should have thrown exception"); } catch (MessageFormatException mfe) { } msg.reset(); try { msg.readByte(); fail("Should have thrown exception"); } catch (MessageFormatException mfe) { } msg.reset(); try { msg.readShort(); fail("Should have thrown exception"); } catch (MessageFormatException mfe) { } msg.reset(); try { msg.readInt(); fail("Should have thrown exception"); } catch (MessageFormatException mfe) { } msg.reset(); try { msg.readLong(); fail("Should have thrown exception"); } catch (MessageFormatException mfe) { } msg.reset(); try { msg.readFloat(); fail("Should have thrown exception"); } catch (MessageFormatException mfe) { } msg.reset(); try { msg.readDouble(); fail("Should have thrown exception"); } catch (MessageFormatException mfe) { } msg.reset(); try { msg.readBytes(new byte[1]); fail("Should have thrown exception"); } catch (MessageFormatException mfe) { } } catch (JMSException jmsEx) { jmsEx.printStackTrace(); assertTrue(false); } } public void testReadInt() { ActiveMQStreamMessage msg = new ActiveMQStreamMessage(); try { int test = 4; msg.writeInt(test); msg.reset(); assertTrue(msg.readInt() == test); msg.reset(); assertTrue(msg.readLong() == test); msg.reset(); assertTrue(msg.readString().equals(new Integer(test).toString())); msg.reset(); try { msg.readBoolean(); fail("Should have thrown exception"); } catch (MessageFormatException mfe) { } msg.reset(); try { msg.readByte(); fail("Should have thrown exception"); } catch (MessageFormatException mfe) { } msg.reset(); try { msg.readShort(); fail("Should have thrown exception"); } catch (MessageFormatException mfe) { } msg.reset(); try { msg.readFloat(); fail("Should have thrown exception"); } catch (MessageFormatException mfe) { } msg.reset(); try { msg.readDouble(); fail("Should have thrown exception"); } catch (MessageFormatException mfe) { } msg.reset(); try { msg.readChar(); fail("Should have thrown exception"); } catch (MessageFormatException mfe) { } msg.reset(); try { msg.readBytes(new byte[1]); fail("Should have thrown exception"); } catch (MessageFormatException mfe) { } } catch (JMSException jmsEx) { jmsEx.printStackTrace(); assertTrue(false); } } public void testReadLong() { ActiveMQStreamMessage msg = new ActiveMQStreamMessage(); try { long test = 4L; msg.writeLong(test); msg.reset(); assertTrue(msg.readLong() == test); msg.reset(); assertTrue(msg.readString().equals(Long.valueOf(test).toString())); msg.reset(); try { msg.readBoolean(); fail("Should have thrown exception"); } catch (MessageFormatException mfe) { } msg.reset(); try { msg.readByte(); fail("Should have thrown exception"); } catch (MessageFormatException mfe) { } msg.reset(); try { msg.readShort(); fail("Should have thrown exception"); } catch (MessageFormatException mfe) { } msg.reset(); try { msg.readInt(); fail("Should have thrown exception"); } catch (MessageFormatException mfe) { } msg.reset(); try { msg.readFloat(); fail("Should have thrown exception"); } catch (MessageFormatException mfe) { } msg.reset(); try { msg.readDouble(); fail("Should have thrown exception"); } catch (MessageFormatException mfe) { } msg.reset(); try { msg.readChar(); fail("Should have thrown exception"); } catch (MessageFormatException mfe) { } msg.reset(); try { msg.readBytes(new byte[1]); fail("Should have thrown exception"); } catch (MessageFormatException mfe) { } msg = new ActiveMQStreamMessage(); msg.writeObject(new Long("1")); // reset so it's readable now msg.reset(); assertEquals(new Long("1"), msg.readObject()); } catch (JMSException jmsEx) { jmsEx.printStackTrace(); assertTrue(false); } } public void testReadFloat() { ActiveMQStreamMessage msg = new ActiveMQStreamMessage(); try { float test = 4.4f; msg.writeFloat(test); msg.reset(); assertTrue(msg.readFloat() == test); msg.reset(); assertTrue(msg.readDouble() == test); msg.reset(); assertTrue(msg.readString().equals(new Float(test).toString())); msg.reset(); try { msg.readBoolean(); fail("Should have thrown exception"); } catch (MessageFormatException mfe) { } msg.reset(); try { msg.readByte(); fail("Should have thrown exception"); } catch (MessageFormatException mfe) { } msg.reset(); try { msg.readShort(); fail("Should have thrown exception"); } catch (MessageFormatException mfe) { } msg.reset(); try { msg.readInt(); fail("Should have thrown exception"); } catch (MessageFormatException mfe) { } msg.reset(); try { msg.readLong(); fail("Should have thrown exception"); } catch (MessageFormatException mfe) { } msg.reset(); try { msg.readChar(); fail("Should have thrown exception"); } catch (MessageFormatException mfe) { } msg.reset(); try { msg.readBytes(new byte[1]); fail("Should have thrown exception"); } catch (MessageFormatException mfe) { } } catch (JMSException jmsEx) { jmsEx.printStackTrace(); assertTrue(false); } } public void testReadDouble() { ActiveMQStreamMessage msg = new ActiveMQStreamMessage(); try { double test = 4.4d; msg.writeDouble(test); msg.reset(); assertTrue(msg.readDouble() == test); msg.reset(); assertTrue(msg.readString().equals(new Double(test).toString())); msg.reset(); try { msg.readBoolean(); fail("Should have thrown exception"); } catch (MessageFormatException mfe) { } msg.reset(); try { msg.readByte(); fail("Should have thrown exception"); } catch (MessageFormatException mfe) { } msg.reset(); try { msg.readShort(); fail("Should have thrown exception"); } catch (MessageFormatException mfe) { } msg.reset(); try { msg.readInt(); fail("Should have thrown exception"); } catch (MessageFormatException mfe) { } msg.reset(); try { msg.readLong(); fail("Should have thrown exception"); } catch (MessageFormatException mfe) { } msg.reset(); try { msg.readFloat(); fail("Should have thrown exception"); } catch (MessageFormatException mfe) { } msg.reset(); try { msg.readChar(); fail("Should have thrown exception"); } catch (MessageFormatException mfe) { } msg.reset(); try { msg.readBytes(new byte[1]); fail("Should have thrown exception"); } catch (MessageFormatException mfe) { } } catch (JMSException jmsEx) { jmsEx.printStackTrace(); assertTrue(false); } } public void testReadString() { ActiveMQStreamMessage msg = new ActiveMQStreamMessage(); try { byte testByte = (byte) 2; msg.writeString(new Byte(testByte).toString()); msg.reset(); assertTrue(msg.readByte() == testByte); msg.clearBody(); short testShort = 3; msg.writeString(new Short(testShort).toString()); msg.reset(); assertTrue(msg.readShort() == testShort); msg.clearBody(); int testInt = 4; msg.writeString(new Integer(testInt).toString()); msg.reset(); assertTrue(msg.readInt() == testInt); msg.clearBody(); long testLong = 6L; msg.writeString(new Long(testLong).toString()); msg.reset(); assertTrue(msg.readLong() == testLong); msg.clearBody(); float testFloat = 6.6f; msg.writeString(new Float(testFloat).toString()); msg.reset(); assertTrue(msg.readFloat() == testFloat); msg.clearBody(); double testDouble = 7.7d; msg.writeString(new Double(testDouble).toString()); msg.reset(); assertTrue(msg.readDouble() == testDouble); msg.clearBody(); msg.writeString("true"); msg.reset(); assertTrue(msg.readBoolean()); msg.clearBody(); msg.writeString("a"); msg.reset(); try { msg.readChar(); fail("Should have thrown exception"); } catch (MessageFormatException e) { } msg.clearBody(); msg.writeString("777"); msg.reset(); try { msg.readBytes(new byte[3]); fail("Should have thrown exception"); } catch (MessageFormatException e) { } } catch (JMSException jmsEx) { jmsEx.printStackTrace(); assertTrue(false); } } public void testReadBigString() { ActiveMQStreamMessage msg = new ActiveMQStreamMessage(); try { // Test with a 1Meg String StringBuffer bigSB = new StringBuffer(1024 * 1024); for (int i = 0; i < 1024 * 1024; i++) { bigSB.append('a' + i % 26); } String bigString = bigSB.toString(); msg.writeString(bigString); msg.reset(); assertEquals(bigString, msg.readString()); } catch (JMSException jmsEx) { jmsEx.printStackTrace(); assertTrue(false); } } public void testReadBytes() { ActiveMQStreamMessage msg = new ActiveMQStreamMessage(); try { byte[] test = new byte[50]; for (int i = 0; i < test.length; i++) { test[i] = (byte) i; } msg.writeBytes(test); msg.reset(); byte[] valid = new byte[test.length]; msg.readBytes(valid); for (int i = 0; i < valid.length; i++) { assertTrue(valid[i] == test[i]); } msg.reset(); try { msg.readByte(); fail("Should have thrown exception"); } catch (MessageFormatException mfe) { } msg.reset(); try { msg.readShort(); fail("Should have thrown exception"); } catch (MessageFormatException mfe) { } msg.reset(); try { msg.readInt(); fail("Should have thrown exception"); } catch (MessageFormatException mfe) { } msg.reset(); try { msg.readLong(); fail("Should have thrown exception"); } catch (MessageFormatException mfe) { } msg.reset(); try { msg.readFloat(); fail("Should have thrown exception"); } catch (MessageFormatException mfe) { } msg.reset(); try { msg.readChar(); fail("Should have thrown exception"); } catch (MessageFormatException mfe) { } msg.reset(); try { msg.readString(); fail("Should have thrown exception"); } catch (MessageFormatException mfe) { } } catch (JMSException jmsEx) { jmsEx.printStackTrace(); assertTrue(false); } } public void testReadObject() { ActiveMQStreamMessage msg = new ActiveMQStreamMessage(); try { byte testByte = (byte) 2; msg.writeByte(testByte); msg.reset(); assertTrue(((Byte) msg.readObject()).byteValue() == testByte); msg.clearBody(); short testShort = 3; msg.writeShort(testShort); msg.reset(); assertTrue(((Short) msg.readObject()).shortValue() == testShort); msg.clearBody(); int testInt = 4; msg.writeInt(testInt); msg.reset(); assertTrue(((Integer) msg.readObject()).intValue() == testInt); msg.clearBody(); long testLong = 6L; msg.writeLong(testLong); msg.reset(); assertTrue(((Long) msg.readObject()).longValue() == testLong); msg.clearBody(); float testFloat = 6.6f; msg.writeFloat(testFloat); msg.reset(); assertTrue(((Float) msg.readObject()).floatValue() == testFloat); msg.clearBody(); double testDouble = 7.7d; msg.writeDouble(testDouble); msg.reset(); assertTrue(((Double) msg.readObject()).doubleValue() == testDouble); msg.clearBody(); char testChar = 'z'; msg.writeChar(testChar); msg.reset(); assertTrue(((Character) msg.readObject()).charValue() == testChar); msg.clearBody(); byte[] data = new byte[50]; for (int i = 0; i < data.length; i++) { data[i] = (byte) i; } msg.writeBytes(data); msg.reset(); byte[] valid = (byte[]) msg.readObject(); assertTrue(valid.length == data.length); for (int i = 0; i < valid.length; i++) { assertTrue(valid[i] == data[i]); } msg.clearBody(); msg.writeBoolean(true); msg.reset(); assertTrue(((Boolean) msg.readObject()).booleanValue()); } catch (JMSException jmsEx) { jmsEx.printStackTrace(); assertTrue(false); } } public void testClearBody() throws JMSException { ActiveMQStreamMessage streamMessage = new ActiveMQStreamMessage(); try { streamMessage.writeObject(new Long(2)); streamMessage.clearBody(); assertFalse(streamMessage.isReadOnlyBody()); streamMessage.writeObject(new Long(2)); streamMessage.readObject(); fail("should throw exception"); } catch (MessageNotReadableException mnwe) { } catch (MessageNotWriteableException mnwe) { fail("should be writeable"); } } public void testReset() throws JMSException { ActiveMQStreamMessage streamMessage = new ActiveMQStreamMessage(); try { streamMessage.writeDouble(24.5); streamMessage.writeLong(311); } catch (MessageNotWriteableException mnwe) { fail("should be writeable"); } streamMessage.reset(); try { assertTrue(streamMessage.isReadOnlyBody()); assertEquals(streamMessage.readDouble(), 24.5, 0); assertEquals(streamMessage.readLong(), 311); } catch (MessageNotReadableException mnre) { fail("should be readable"); } try { streamMessage.writeInt(33); fail("should throw exception"); } catch (MessageNotWriteableException mnwe) { } } public void testReadOnlyBody() throws JMSException { ActiveMQStreamMessage message = new ActiveMQStreamMessage(); try { message.writeBoolean(true); message.writeByte((byte) 1); message.writeBytes(new byte[1]); message.writeBytes(new byte[3], 0, 2); message.writeChar('a'); message.writeDouble(1.5); message.writeFloat((float) 1.5); message.writeInt(1); message.writeLong(1); message.writeObject("stringobj"); message.writeShort((short) 1); message.writeString("string"); } catch (MessageNotWriteableException mnwe) { fail("Should be writeable"); } message.reset(); try { message.readBoolean(); message.readByte(); assertEquals(1, message.readBytes(new byte[10])); assertEquals(-1, message.readBytes(new byte[10])); assertEquals(2, message.readBytes(new byte[10])); assertEquals(-1, message.readBytes(new byte[10])); message.readChar(); message.readDouble(); message.readFloat(); message.readInt(); message.readLong(); message.readString(); message.readShort(); message.readString(); } catch (MessageNotReadableException mnwe) { fail("Should be readable"); } try { message.writeBoolean(true); fail("Should have thrown exception"); } catch (MessageNotWriteableException mnwe) { } try { message.writeByte((byte) 1); fail("Should have thrown exception"); } catch (MessageNotWriteableException mnwe) { } try { message.writeBytes(new byte[1]); fail("Should have thrown exception"); } catch (MessageNotWriteableException mnwe) { } try { message.writeBytes(new byte[3], 0, 2); fail("Should have thrown exception"); } catch (MessageNotWriteableException mnwe) { } try { message.writeChar('a'); fail("Should have thrown exception"); } catch (MessageNotWriteableException mnwe) { } try { message.writeDouble(1.5); fail("Should have thrown exception"); } catch (MessageNotWriteableException mnwe) { } try { message.writeFloat((float) 1.5); fail("Should have thrown exception"); } catch (MessageNotWriteableException mnwe) { } try { message.writeInt(1); fail("Should have thrown exception"); } catch (MessageNotWriteableException mnwe) { } try { message.writeLong(1); fail("Should have thrown exception"); } catch (MessageNotWriteableException mnwe) { } try { message.writeObject("stringobj"); fail("Should have thrown exception"); } catch (MessageNotWriteableException mnwe) { } try { message.writeShort((short) 1); fail("Should have thrown exception"); } catch (MessageNotWriteableException mnwe) { } try { message.writeString("string"); fail("Should have thrown exception"); } catch (MessageNotWriteableException mnwe) { } } public void testWriteOnlyBody() throws JMSException { ActiveMQStreamMessage message = new ActiveMQStreamMessage(); message.clearBody(); try { message.writeBoolean(true); message.writeByte((byte) 1); message.writeBytes(new byte[1]); message.writeBytes(new byte[3], 0, 2); message.writeChar('a'); message.writeDouble(1.5); message.writeFloat((float) 1.5); message.writeInt(1); message.writeLong(1); message.writeObject("stringobj"); message.writeShort((short) 1); message.writeString("string"); } catch (MessageNotWriteableException mnwe) { fail("Should be writeable"); } try { message.readBoolean(); fail("Should have thrown exception"); } catch (MessageNotReadableException mnwe) { } try { message.readByte(); fail("Should have thrown exception"); } catch (MessageNotReadableException e) { } try { message.readBytes(new byte[1]); fail("Should have thrown exception"); } catch (MessageNotReadableException e) { } try { message.readBytes(new byte[2]); fail("Should have thrown exception"); } catch (MessageNotReadableException e) { } try { message.readChar(); fail("Should have thrown exception"); } catch (MessageNotReadableException e) { } try { message.readDouble(); fail("Should have thrown exception"); } catch (MessageNotReadableException e) { } try { message.readFloat(); fail("Should have thrown exception"); } catch (MessageNotReadableException e) { } try { message.readInt(); fail("Should have thrown exception"); } catch (MessageNotReadableException e) { } try { message.readLong(); fail("Should have thrown exception"); } catch (MessageNotReadableException e) { } try { message.readString(); fail("Should have thrown exception"); } catch (MessageNotReadableException e) { } try { message.readShort(); fail("Should have thrown exception"); } catch (MessageNotReadableException e) { } try { message.readString(); fail("Should have thrown exception"); } catch (MessageNotReadableException e) { } } public void testWriteObject() { try { ActiveMQStreamMessage message = new ActiveMQStreamMessage(); message.clearBody(); message.writeObject("test"); message.writeObject(new Character('a')); message.writeObject(new Boolean(false)); message.writeObject(new Byte((byte) 2)); message.writeObject(new Short((short) 2)); message.writeObject(new Integer(2)); message.writeObject(new Long(2L)); message.writeObject(new Float(2.0f)); message.writeObject(new Double(2.0d)); } catch (Exception e) { fail(e.getMessage()); } try { ActiveMQStreamMessage message = new ActiveMQStreamMessage(); message.clearBody(); message.writeObject(new Object()); fail("should throw an exception"); } catch (MessageFormatException e) { } catch (Exception e) { fail(e.getMessage()); } } }