Jiri Danek created QPIDJMS-325:
----------------------------------

             Summary: reading from empty buffer of a BytesMessage should return 
0, not -1
                 Key: QPIDJMS-325
                 URL: https://issues.apache.org/jira/browse/QPIDJMS-325
             Project: Qpid JMS
          Issue Type: Bug
          Components: qpid-jms-client
    Affects Versions: 0.25.0
            Reporter: Jiri Danek
            Priority: Minor


Consider the following test. According to 
http://docs.oracle.com/javaee/7/api/javax/jms/BytesMessage.html#readBytes-byte:A-
 the #readBytes method should return 0 when it is first called, as the number 
of bytes in the buffer is 0 and it read 0 bytes. Only on subsequent calls it 
should return -1. What happens now is that the method returns -1 the first time.

See the commented lines to try the same thing with ActiveMQ JMS Client library, 
and with StreamMessage instead of BytesMessage. The behavior there should be 
the same.

ActiveMQ passes the test with BytesMessage and fails it with StreamMessage. 
Qpid JMS fails with BytesMessage and passes with StreamMessage.

{code}
import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.qpid.jms.JmsConnectionFactory;
import org.junit.Test;

import javax.jms.*;

import static com.google.common.truth.Truth.assertThat;

public class EmptyBufferInputTest {
    @Test
    public void testEmptyBufferInput() throws JMSException {
//        ConnectionFactory connectionFactory = new 
ActiveMQConnectionFactory("tcp://127.0.0.1:61616");
        JmsConnectionFactory connectionFactory = new 
JmsConnectionFactory("amqp://127.0.0.1:5672");
        Connection connection = connectionFactory.createConnection();
        Session session = connection.createSession(false, 
Session.AUTO_ACKNOWLEDGE);
        final byte[] BYTE_LIST = {1, 2, 4};
//        StreamMessage message = session.createStreamMessage();
        BytesMessage message = session.createBytesMessage();
        message.clearBody();
        byte[] readList = new byte[BYTE_LIST.length - 1];
        byte[] emptyList = {};
        message.writeBytes(emptyList);
        message.reset();
        final int IS_EMPTY = 0;
        assertThat(message.readBytes(readList)).isEqualTo(IS_EMPTY);
    }
}
{code}



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to