qpid-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Robbie Gemmell (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (QPIDJMS-325) reading from empty buffer of a BytesMessage should return 0, not -1
Date Wed, 20 Sep 2017 14:45:00 GMT

    [ https://issues.apache.org/jira/browse/QPIDJMS-325?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16173284#comment-16173284
] 

Robbie Gemmell commented on QPIDJMS-325:
----------------------------------------

I think it can be interpreted that way, which is why I'm not against changing it, but I also
think it can be interpreted perfectly correctly the other way that it is currently implemented.

There are no bytes in the stream as none were ever added to it, so -1 can be returned. The
text about less bytes in the stream than the array covers the case of there being 1+ and the
array being of size 2+. Unlike StreamMessage, which calls out its behaviour very clearly that
you must perform multiple readBytes until -1 is returned and you must return 0 for an empty
byte value, BytesMessage does not do that, which I think allows either behaviour jsut fine.
An empty byte array inside a StreamMessage of elements is an entirely different case than
a BytesMessage with no content.

> 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 Daněk
>            Priority: Trivial
>
> 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: dev-unsubscribe@qpid.apache.org
For additional commands, e-mail: dev-help@qpid.apache.org


Mime
View raw message