/* * JBoss, Home of Professional Open Source * Copyright 2005-2008, Red Hat Middleware LLC, and individual contributors * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.messaging.tests.unit.jms.client; import static org.jboss.messaging.tests.util.RandomUtil.randomBoolean; import static org.jboss.messaging.tests.util.RandomUtil.randomByte; import static org.jboss.messaging.tests.util.RandomUtil.randomBytes; import static org.jboss.messaging.tests.util.RandomUtil.randomChar; import static org.jboss.messaging.tests.util.RandomUtil.randomDouble; import static org.jboss.messaging.tests.util.RandomUtil.randomFloat; import static org.jboss.messaging.tests.util.RandomUtil.randomInt; import static org.jboss.messaging.tests.util.RandomUtil.randomLong; import static org.jboss.messaging.tests.util.RandomUtil.randomShort; import static org.jboss.messaging.tests.util.RandomUtil.randomString; import static org.jboss.messaging.tests.util.UnitTestCase.assertEqualsByteArrays; import java.util.ArrayList; import javax.jms.MessageEOFException; import javax.jms.MessageFormatException; import junit.framework.TestCase; import org.jboss.messaging.jms.client.JBossStreamMessage; import org.jboss.messaging.tests.util.RandomUtil; /** * @author <a href="mailto:jmesnil@redhat.com">Jeff Mesnil</a> * * @version <tt>$Revision$</tt> * */ public class JBossStreamMessageTest extends TestCase { // Constants ----------------------------------------------------- // Attributes ---------------------------------------------------- // Static -------------------------------------------------------- // Constructors -------------------------------------------------- // Public -------------------------------------------------------- public void testGetType() throws Exception { JBossStreamMessage message = new JBossStreamMessage(); assertEquals(JBossStreamMessage.TYPE, message.getType()); } public void testReadBooleanFromBoolean() throws Exception { boolean value = randomBoolean(); JBossStreamMessage message = new JBossStreamMessage(); message.writeBoolean(value); message.reset(); assertEquals(value, message.readBoolean()); } public void testReadBooleanFromString() throws Exception { boolean value = randomBoolean(); JBossStreamMessage message = new JBossStreamMessage(); message.writeString(Boolean.toString(value)); message.reset(); assertEquals(value, message.readBoolean()); } public void testReadBooleanFromInvalidType() throws Exception { doReadTypeFromInvalidType(randomFloat(), new TypeReader() { public Object readType(JBossStreamMessage message) throws Exception { return message.readBoolean(); } }); } public void testReadBooleanFromEmptyMessage() throws Exception { doReadTypeFromEmptyMessage(new TypeReader() { public Object readType(JBossStreamMessage message) throws Exception { return message.readBoolean(); } }); } public void testReadCharFromInvalidType() throws Exception { doReadTypeFromInvalidType(randomFloat(), new TypeReader() { public Object readType(JBossStreamMessage message) throws Exception { return message.readChar(); } }); } public void testReadCharFromEmptyMessage() throws Exception { doReadTypeFromEmptyMessage(new TypeReader() { public Object readType(JBossStreamMessage message) throws Exception { return message.readChar(); } }); } public void testReadByteFromByte() throws Exception { byte value = randomByte(); JBossStreamMessage message = new JBossStreamMessage(); message.writeByte(value); message.reset(); assertEquals(value, message.readByte()); } public void testReadByteFromString() throws Exception { byte value = randomByte(); JBossStreamMessage message = new JBossStreamMessage(); message.writeString(Byte.toString(value)); message.reset(); assertEquals(value, message.readByte()); } public void testReadByteFromInvalidType() throws Exception { doReadTypeFromInvalidType(randomFloat(), new TypeReader() { public Object readType(JBossStreamMessage message) throws Exception { return message.readByte(); } }); } public void testReadByteFromEmptyMessage() throws Exception { doReadTypeFromEmptyMessage(new TypeReader() { public Object readType(JBossStreamMessage message) throws Exception { return message.readByte(); } }); } public void testReadBytesFromBytes() throws Exception { byte[] value = randomBytes(); JBossStreamMessage message = new JBossStreamMessage(); message.writeBytes(value); message.reset(); byte[] v = new byte[value.length]; message.readBytes(v); assertEqualsByteArrays(value, v); } public void testReadBytesFromBytes_2() throws Exception { byte[] value = randomBytes(512); JBossStreamMessage message = new JBossStreamMessage(); message.writeBytes(value, 0, 256); message.reset(); byte[] v = new byte[256]; message.readBytes(v); assertEqualsByteArrays(256, value, v); } public void testReadBytesFromInvalidType() throws Exception { doReadTypeFromInvalidType(randomBoolean(), new TypeReader() { public Object readType(JBossStreamMessage message) throws Exception { return message.readByte(); } }); } public void testReadBytesFromEmptyMessage() throws Exception { doReadTypeFromEmptyMessage(new TypeReader() { public Object readType(JBossStreamMessage message) throws Exception { byte[] bytes = new byte[1]; return message.readBytes(bytes); } }); } public void testReadShortFromByte() throws Exception { byte value = randomByte(); JBossStreamMessage message = new JBossStreamMessage(); message.writeByte(value); message.reset(); assertEquals(value, message.readShort()); } public void testReadShortFromShort() throws Exception { short value = randomShort(); JBossStreamMessage message = new JBossStreamMessage(); message.writeShort(value); message.reset(); assertEquals(value, message.readShort()); } public void testReadShortFromString() throws Exception { short value = randomShort(); JBossStreamMessage message = new JBossStreamMessage(); message.writeString(Short.toString(value)); message.reset(); assertEquals(value, message.readShort()); } public void testReadShortFromInvalidType() throws Exception { doReadTypeFromInvalidType(randomFloat(), new TypeReader() { public Object readType(JBossStreamMessage message) throws Exception { return message.readShort(); } }); } public void testReadShortFromEmptyMessage() throws Exception { doReadTypeFromEmptyMessage(new TypeReader() { public Object readType(JBossStreamMessage message) throws Exception { return message.readShort(); } }); } public void testReadIntFromByte() throws Exception { byte value = randomByte(); JBossStreamMessage message = new JBossStreamMessage(); message.writeByte(value); message.reset(); assertEquals(value, message.readInt()); } public void testReadIntFromShort() throws Exception { short value = randomShort(); JBossStreamMessage message = new JBossStreamMessage(); message.writeShort(value); message.reset(); assertEquals(value, message.readInt()); } public void testReadIntFromInt() throws Exception { int value = randomInt(); JBossStreamMessage message = new JBossStreamMessage(); message.writeInt(value); message.reset(); assertEquals(value, message.readInt()); } public void testReadIntFromString() throws Exception { int value = randomInt(); JBossStreamMessage message = new JBossStreamMessage(); message.writeString(Integer.toString(value)); message.reset(); assertEquals(value, message.readInt()); } public void testReadIntFromInvalidType() throws Exception { doReadTypeFromInvalidType(randomFloat(), new TypeReader() { public Object readType(JBossStreamMessage message) throws Exception { return message.readInt(); } }); } public void testReadIntFromEmptyMessage() throws Exception { doReadTypeFromEmptyMessage(new TypeReader() { public Object readType(JBossStreamMessage message) throws Exception { return message.readInt(); } }); } public void testReadCharFromChar() throws Exception { char value = randomChar(); JBossStreamMessage message = new JBossStreamMessage(); message.writeChar(value); message.reset(); assertEquals(value, message.readChar()); } public void testReadLongFromByte() throws Exception { byte value = randomByte(); JBossStreamMessage message = new JBossStreamMessage(); message.writeByte(value); message.reset(); assertEquals(value, message.readLong()); } public void testReadLongFromShort() throws Exception { short value = randomShort(); JBossStreamMessage message = new JBossStreamMessage(); message.writeShort(value); message.reset(); assertEquals(value, message.readLong()); } public void testReadLongFromInt() throws Exception { int value = randomInt(); JBossStreamMessage message = new JBossStreamMessage(); message.writeInt(value); message.reset(); assertEquals(value, message.readLong()); } public void testReadLongFromLong() throws Exception { long value = RandomUtil.randomLong(); JBossStreamMessage message = new JBossStreamMessage(); message.writeLong(value); message.reset(); assertEquals(value, message.readLong()); } public void testReadLongFromString() throws Exception { long value = RandomUtil.randomLong(); JBossStreamMessage message = new JBossStreamMessage(); message.writeString(Long.toString(value)); message.reset(); assertEquals(value, message.readLong()); } public void testReadLongFromInvalidType() throws Exception { doReadTypeFromInvalidType(randomFloat(), new TypeReader() { public Object readType(JBossStreamMessage message) throws Exception { return message.readLong(); } }); } public void testReadLongFromEmptyMessage() throws Exception { doReadTypeFromEmptyMessage(new TypeReader() { public Object readType(JBossStreamMessage message) throws Exception { return message.readLong(); } }); } public void testReadFloatFromFloat() throws Exception { float value = randomFloat(); JBossStreamMessage message = new JBossStreamMessage(); message.writeFloat(value); message.reset(); assertEquals(value, message.readFloat()); } public void testReadFloatFromString() throws Exception { float value = randomFloat(); JBossStreamMessage message = new JBossStreamMessage(); message.writeString(Float.toString(value)); message.reset(); assertEquals(value, message.readFloat()); } public void testReadFloatFromInvalidType() throws Exception { doReadTypeFromInvalidType(randomBoolean(), new TypeReader() { public Object readType(JBossStreamMessage message) throws Exception { return message.readFloat(); } }); } public void testReadFloatFromEmptyMessage() throws Exception { doReadTypeFromEmptyMessage(new TypeReader() { public Object readType(JBossStreamMessage message) throws Exception { return message.readFloat(); } }); } public void testReadDoubleFromFloat() throws Exception { float value = randomFloat(); JBossStreamMessage message = new JBossStreamMessage(); message.writeFloat(value); message.reset(); assertEquals(Float.valueOf(value).doubleValue(), message.readDouble()); } public void testReadDoubleFromDouble() throws Exception { double value = randomDouble(); JBossStreamMessage message = new JBossStreamMessage(); message.writeDouble(value); message.reset(); assertEquals(value, message.readDouble()); } public void testReadDoubleFromString() throws Exception { double value = randomDouble(); JBossStreamMessage message = new JBossStreamMessage(); message.writeString(Double.toString(value)); message.reset(); assertEquals(value, message.readDouble()); } public void testReadDoubleFromInvalidType() throws Exception { doReadTypeFromInvalidType(randomBoolean(), new TypeReader() { public Object readType(JBossStreamMessage message) throws Exception { return message.readDouble(); } }); } public void testReadDoubleFromEmptyMessage() throws Exception { doReadTypeFromEmptyMessage(new TypeReader() { public Object readType(JBossStreamMessage message) throws Exception { return message.readDouble(); } }); } public void testReadStringFromBoolean() throws Exception { boolean value = randomBoolean(); JBossStreamMessage message = new JBossStreamMessage(); message.writeBoolean(value); message.reset(); assertEquals(Boolean.toString(value), message.readString()); } public void testReadStringFromChar() throws Exception { char value = randomChar(); JBossStreamMessage message = new JBossStreamMessage(); message.writeChar(value); message.reset(); assertEquals(Character.toString(value), message.readString()); } public void testReadStringFromByte() throws Exception { byte value = randomByte(); JBossStreamMessage message = new JBossStreamMessage(); message.writeByte(value); message.reset(); assertEquals(Byte.toString(value), message.readString()); } public void testReadStringFromShort() throws Exception { short value = randomShort(); JBossStreamMessage message = new JBossStreamMessage(); message.writeShort(value); message.reset(); assertEquals(Short.toString(value), message.readString()); } public void testReadStringFromInt() throws Exception { int value = randomInt(); JBossStreamMessage message = new JBossStreamMessage(); message.writeInt(value); message.reset(); assertEquals(Integer.toString(value), message.readString()); } public void testReadStringFromLong() throws Exception { long value = randomLong(); JBossStreamMessage message = new JBossStreamMessage(); message.writeLong(value); message.reset(); assertEquals(Long.toString(value), message.readString()); } public void testReadStringFromFloat() throws Exception { float value = randomFloat(); JBossStreamMessage message = new JBossStreamMessage(); message.writeFloat(value); message.reset(); assertEquals(Float.toString(value), message.readString()); } public void testReadStringFromDouble() throws Exception { double value = randomDouble(); JBossStreamMessage message = new JBossStreamMessage(); message.writeDouble(value); message.reset(); assertEquals(Double.toString(value), message.readString()); } public void testReadStringFromString() throws Exception { String value = randomString(); JBossStreamMessage message = new JBossStreamMessage(); message.writeString(value); message.reset(); assertEquals(value, message.readString()); } public void testReadStringFromNullString() throws Exception { JBossStreamMessage message = new JBossStreamMessage(); message.writeString(null); message.reset(); assertNull(message.readString()); } public void testReadStringFromEmptyMessage() throws Exception { doReadTypeFromEmptyMessage(new TypeReader() { public Object readType(JBossStreamMessage message) throws Exception { return message.readString(); } }); } public void testWriteObjectWithBoolean() throws Exception { doWriteObjectWithType(randomBoolean(), new TypeReader() { public Object readType(JBossStreamMessage message) throws Exception { return message.readBoolean(); } }); } public void testWriteObjectWithChar() throws Exception { doWriteObjectWithType(randomChar(), new TypeReader() { public Object readType(JBossStreamMessage message) throws Exception { return message.readChar(); } }); } public void testWriteObjectWithByte() throws Exception { doWriteObjectWithType(randomByte(), new TypeReader() { public Object readType(JBossStreamMessage message) throws Exception { return message.readByte(); } }); } public void testWriteObjectWithBytes() throws Exception { final byte[] value = randomBytes(); doWriteObjectWithType(value, new TypeReader() { public Object readType(JBossStreamMessage message) throws Exception { byte[] bytes = new byte[value.length]; message.readBytes(bytes); return bytes; } }); } public void testWriteObjectWithShort() throws Exception { doWriteObjectWithType(randomShort(), new TypeReader() { public Object readType(JBossStreamMessage message) throws Exception { return message.readShort(); } }); } public void testWriteObjectWithInt() throws Exception { doWriteObjectWithType(randomInt(), new TypeReader() { public Object readType(JBossStreamMessage message) throws Exception { return message.readInt(); } }); } public void testWriteObjectWithLong() throws Exception { doWriteObjectWithType(randomLong(), new TypeReader() { public Object readType(JBossStreamMessage message) throws Exception { return message.readLong(); } }); } public void testWriteObjectWithFloat() throws Exception { doWriteObjectWithType(randomFloat(), new TypeReader() { public Object readType(JBossStreamMessage message) throws Exception { return message.readFloat(); } }); } public void testWriteObjectWithDouble() throws Exception { doWriteObjectWithType(randomDouble(), new TypeReader() { public Object readType(JBossStreamMessage message) throws Exception { return message.readDouble(); } }); } public void testWriteObjectWithString() throws Exception { doWriteObjectWithType(randomString(), new TypeReader() { public Object readType(JBossStreamMessage message) throws Exception { return message.readString(); } }); } public void testWriteObjectWithNull() throws Exception { JBossStreamMessage message = new JBossStreamMessage(); try { message.writeObject(null); fail("NullPointerException"); } catch (NullPointerException e) { } } public void testWriteObjectWithInvalidType() throws Exception { JBossStreamMessage message = new JBossStreamMessage(); try { message.writeObject(new ArrayList()); fail("MessageFormatException"); } catch (MessageFormatException e) { } } public void testReadObjectFromBoolean() throws Exception { boolean value = randomBoolean(); JBossStreamMessage message = new JBossStreamMessage(); message.writeBoolean(value); message.reset(); assertEquals(value, message.readObject()); } public void testReadObjectFromChar() throws Exception { char value = randomChar(); JBossStreamMessage message = new JBossStreamMessage(); message.writeChar(value); message.reset(); assertEquals(value, message.readObject()); } public void testReadObjectFromByte() throws Exception { byte value = randomByte(); JBossStreamMessage message = new JBossStreamMessage(); message.writeByte(value); message.reset(); assertEquals(value, message.readObject()); } public void testReadObjectFromBytes() throws Exception { byte[] value = randomBytes(); JBossStreamMessage message = new JBossStreamMessage(); message.writeBytes(value); message.reset(); byte[] v = (byte[]) message.readObject(); assertEqualsByteArrays(value, v); } public void testReadObjectFromShort() throws Exception { short value = randomShort(); JBossStreamMessage message = new JBossStreamMessage(); message.writeShort(value); message.reset(); assertEquals(value, message.readObject()); } public void testReadObjectFromInt() throws Exception { int value = randomInt(); JBossStreamMessage message = new JBossStreamMessage(); message.writeInt(value); message.reset(); assertEquals(value, message.readObject()); } public void testReadObjectFromLong() throws Exception { long value = randomLong(); JBossStreamMessage message = new JBossStreamMessage(); message.writeLong(value); message.reset(); assertEquals(value, message.readObject()); } public void testReadObjectFromFloat() throws Exception { float value = randomFloat(); JBossStreamMessage message = new JBossStreamMessage(); message.writeFloat(value); message.reset(); assertEquals(value, message.readObject()); } public void testReadObjectFromDouble() throws Exception { double value = randomDouble(); JBossStreamMessage message = new JBossStreamMessage(); message.writeDouble(value); message.reset(); assertEquals(value, message.readObject()); } public void testReadObjectFromString() throws Exception { String value = randomString(); JBossStreamMessage message = new JBossStreamMessage(); message.writeString(value); message.reset(); assertEquals(value, message.readObject()); } // Private ------------------------------------------------------- private void doReadTypeFromEmptyMessage(TypeReader reader) throws Exception { JBossStreamMessage message = new JBossStreamMessage(); message.reset(); try { reader.readType(message); fail("MessageEOFException"); } catch (MessageEOFException e) { } } private void doReadTypeFromInvalidType(Object invalidValue, TypeReader reader) throws Exception { JBossStreamMessage message = new JBossStreamMessage(); message.writeObject(invalidValue); message.reset(); try { reader.readType(message); fail("MessageFormatException"); } catch (MessageFormatException e) { } } private void doWriteObjectWithType(Object value, TypeReader reader) throws Exception { JBossStreamMessage message = new JBossStreamMessage(); message.writeObject(value); message.reset(); Object v = reader.readType(message); if (value instanceof byte[]) { assertEqualsByteArrays((byte[]) value, (byte[]) v); } else { assertEquals(value, v); } } // Inner classes ------------------------------------------------- private interface TypeReader { Object readType(JBossStreamMessage message) throws Exception; } }