Uploaded image for project: 'Qpid JMS'
  1. Qpid JMS
  2. QPIDJMS-325

reading from empty buffer of a BytesMessage should return 0, not -1

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Trivial
    • Resolution: Not A Problem
    • 0.25.0
    • None
    • qpid-jms-client
    • None

    Description

      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.

      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);
          }
      }
      

      Attachments

        Issue Links

          Activity

            People

              Unassigned Unassigned
              jdanek Jiri Daněk
              Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: