blob: c5b60b406dc29a923c9b0deeff09ecf6c294e3d0 [file] [log] [blame]
/*
* 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 static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import javax.jms.JMSException;
import javax.jms.MessageEOFException;
import javax.jms.MessageFormatException;
import javax.jms.MessageNotReadableException;
import javax.jms.MessageNotWriteableException;
import org.junit.Test;
/**
* Tests for the ActiveMQ StreamMessage implementation
*/
public class ActiveMQStreamMessageTest {
@Test
public void testGetDataStructureType() {
ActiveMQStreamMessage msg = new ActiveMQStreamMessage();
assertEquals(msg.getDataStructureType(), CommandTypes.ACTIVEMQ_STREAM_MESSAGE);
}
@Test
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);
}
}
@Test
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(Byte.toString(test)));
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);
}
}
@Test
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(Short.toString(test)));
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);
}
}
@Test
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(Character.toString(test)));
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);
}
}
@Test
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(Integer.toString(test)));
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);
}
}
@Test
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.toString(test)));
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(Long.valueOf("1"));
// reset so it's readable now
msg.reset();
assertEquals(Long.parseLong("1"), msg.readObject());
} catch (JMSException jmsEx) {
jmsEx.printStackTrace();
assertTrue(false);
}
}
@Test
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(Float.toString(test)));
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);
}
}
@Test
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(Double.toString(test)));
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);
}
}
@Test
public void testReadString() {
ActiveMQStreamMessage msg = new ActiveMQStreamMessage();
try {
byte testByte = (byte)2;
msg.writeString(Byte.toString(testByte));
msg.reset();
assertTrue(msg.readByte() == testByte);
msg.clearBody();
short testShort = 3;
msg.writeString(Short.toString(testShort));
msg.reset();
assertTrue(msg.readShort() == testShort);
msg.clearBody();
int testInt = 4;
msg.writeString(Integer.toString(testInt));
msg.reset();
assertTrue(msg.readInt() == testInt);
msg.clearBody();
long testLong = 6L;
msg.writeString(Long.toString(testLong));
msg.reset();
assertTrue(msg.readLong() == testLong);
msg.clearBody();
float testFloat = 6.6f;
msg.writeString(Float.toString(testFloat));
msg.reset();
assertTrue(msg.readFloat() == testFloat);
msg.clearBody();
double testDouble = 7.7d;
msg.writeString(Double.toString(testDouble));
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);
}
}
@Test
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);
}
}
@Test
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);
}
}
@Test
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);
}
}
@Test
public void testClearBody() throws JMSException {
ActiveMQStreamMessage streamMessage = new ActiveMQStreamMessage();
try {
streamMessage.writeObject(Long.valueOf(2));
streamMessage.clearBody();
assertFalse(streamMessage.isReadOnlyBody());
streamMessage.writeObject(Long.valueOf(2));
streamMessage.readObject();
fail("should throw exception");
} catch (MessageNotReadableException mnwe) {
} catch (MessageNotWriteableException mnwe) {
fail("should be writeable");
}
}
@Test
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) {
}
}
@Test
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) {
}
}
@Test
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) {
}
}
@Test
public void testWriteObject() {
try {
ActiveMQStreamMessage message = new ActiveMQStreamMessage();
message.clearBody();
message.writeObject("test");
message.writeObject(Character.valueOf('a'));
message.writeObject(Boolean.FALSE);
message.writeObject(Byte.valueOf((byte) 2));
message.writeObject(Short.valueOf((short) 2));
message.writeObject(Integer.valueOf(2));
message.writeObject(Long.valueOf(2l));
message.writeObject(Float.valueOf(2.0f));
message.writeObject(Double.valueOf(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());
}
}
@Test
public void testReadEmptyBufferFromStream() throws JMSException {
ActiveMQStreamMessage message = new ActiveMQStreamMessage();
message.clearBody();
final byte[] BYTE_LIST = {1, 2, 4};
byte[] readList = new byte[BYTE_LIST.length - 1];
byte[] emptyList = {};
message.writeBytes(emptyList);
message.reset();
// First call should return zero as the array written was zero sized.
assertEquals(0, message.readBytes(readList));
// Second call should return -1 as we've reached the end of element.
assertEquals(-1, message.readBytes(readList));
}
@Test
public void testReadMixBufferValuesFromStream() throws JMSException {
ActiveMQStreamMessage message = new ActiveMQStreamMessage();
message.clearBody();
final int size = 3;
final byte[] BYTE_LIST_1 = {1, 2, 3};
final byte[] BYTE_LIST_2 = {4, 5, 6};
final byte[] EMPTY_LIST = {};
byte[] bigBuffer = new byte[size + size];
byte[] smallBuffer = new byte[size - 1];
message.writeBytes(BYTE_LIST_1);
message.writeBytes(EMPTY_LIST);
message.writeBytes(BYTE_LIST_2);
message.writeBytes(EMPTY_LIST);
message.reset();
// Read first with big buffer
assertEquals(size, message.readBytes(bigBuffer));
assertEquals(1, bigBuffer[0]);
assertEquals(2, bigBuffer[1]);
assertEquals(3, bigBuffer[2]);
assertEquals(-1, message.readBytes(bigBuffer));
// Read the empty buffer, should not be able to read anything else until
// the bytes read is completed.
assertEquals(0, message.readBytes(bigBuffer));
try {
message.readBoolean();
} catch (JMSException ex) {}
assertEquals(-1, message.readBytes(bigBuffer));
// Read the third buffer with small buffer, anything that is attempted
// to be read in between reads or before read completion should throw.
assertEquals(smallBuffer.length, message.readBytes(smallBuffer));
assertEquals(4, smallBuffer[0]);
assertEquals(5, smallBuffer[1]);
try {
message.readByte();
} catch (JMSException ex) {}
assertEquals(1, message.readBytes(smallBuffer));
assertEquals(6, smallBuffer[0]);
try {
message.readBoolean();
} catch (JMSException ex) {}
assertEquals(-1, message.readBytes(bigBuffer));
// Read the empty buffer, should not be able to read anything else until
// the bytes read is completed.
assertEquals(0, message.readBytes(bigBuffer));
try {
message.readBoolean();
} catch (JMSException ex) {}
assertEquals(-1, message.readBytes(bigBuffer));
// Message should be empty now
try {
message.readBoolean();
} catch (MessageEOFException ex) {}
}
}