You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ro...@apache.org on 2014/02/18 18:41:33 UTC
svn commit: r1569437 - in /qpid/jms/trunk/src:
main/java/org/apache/qpid/jms/engine/ main/java/org/apache/qpid/jms/impl/
test/java/org/apache/qpid/jms/engine/ test/java/org/apache/qpid/jms/impl/
Author: robbie
Date: Tue Feb 18 17:41:33 2014
New Revision: 1569437
URL: http://svn.apache.org/r1569437
Log:
flesh out JMSXGroupSeq, e.g getter and handle group-sequence values above the int limit
Modified:
qpid/jms/trunk/src/main/java/org/apache/qpid/jms/engine/AmqpMessage.java
qpid/jms/trunk/src/main/java/org/apache/qpid/jms/impl/MessageImpl.java
qpid/jms/trunk/src/test/java/org/apache/qpid/jms/engine/AmqpMessageTest.java
qpid/jms/trunk/src/test/java/org/apache/qpid/jms/impl/MessageImplTest.java
Modified: qpid/jms/trunk/src/main/java/org/apache/qpid/jms/engine/AmqpMessage.java
URL: http://svn.apache.org/viewvc/qpid/jms/trunk/src/main/java/org/apache/qpid/jms/engine/AmqpMessage.java?rev=1569437&r1=1569436&r2=1569437&view=diff
==============================================================================
--- qpid/jms/trunk/src/main/java/org/apache/qpid/jms/engine/AmqpMessage.java (original)
+++ qpid/jms/trunk/src/main/java/org/apache/qpid/jms/engine/AmqpMessage.java Tue Feb 18 17:41:33 2014
@@ -340,11 +340,14 @@ public abstract class AmqpMessage
return uint.longValue();
}
}
-
- //TODO: is _message.getGroupSequence() doing the right thing before returning?
}
- public void setGroupSequence(Long groupSeq)
+ /**
+ * Set the group-sequence uint field on the properties section.
+ * @param groupSeq
+ * @throws IllegalArgumentException if the value is outside the range [0 - 2^32)
+ */
+ public void setGroupSequence(Long groupSeq) throws IllegalArgumentException
{
if(groupSeq == null)
{
@@ -359,7 +362,11 @@ public abstract class AmqpMessage
}
else
{
- //TODO: is this method doing the right thing with our value?
+ if(groupSeq < 0 || groupSeq > 0xFFFFFFFFL)
+ {
+ throw new IllegalArgumentException("Value '"+groupSeq+"' lies outside the range [0 - 2^32).");
+ }
+
_message.setGroupSequence(groupSeq);
}
}
Modified: qpid/jms/trunk/src/main/java/org/apache/qpid/jms/impl/MessageImpl.java
URL: http://svn.apache.org/viewvc/qpid/jms/trunk/src/main/java/org/apache/qpid/jms/impl/MessageImpl.java?rev=1569437&r1=1569436&r2=1569437&view=diff
==============================================================================
--- qpid/jms/trunk/src/main/java/org/apache/qpid/jms/impl/MessageImpl.java (original)
+++ qpid/jms/trunk/src/main/java/org/apache/qpid/jms/impl/MessageImpl.java Tue Feb 18 17:41:33 2014
@@ -247,7 +247,6 @@ public abstract class MessageImpl<T exte
private void setJMSXGroupSeq(Object value) throws MessageFormatException
{
- //TODO: handle setting String, byte, short? Validate value?
Long groupSeq = null;
if(value != null)
{
@@ -323,12 +322,16 @@ public abstract class MessageImpl<T exte
{
return _amqpMessage.getGroupId();
}
+ else if(JMSXGROUPSEQ.equals(name))
+ {
+ return getJMSXGroupSeq();
+ }
//TODO: handle non-JMS types?
return _amqpMessage.getApplicationProperty(name);
}
- private Object getJMSXUserID() throws MessageFormatException
+ private String getJMSXUserID() throws MessageFormatException
{
byte[] userId = _amqpMessage.getUserId();
if(userId == null)
@@ -348,6 +351,21 @@ public abstract class MessageImpl<T exte
}
}
+ private Integer getJMSXGroupSeq()
+ {
+ Long groupSeqUint = _amqpMessage.getGroupSequence();
+ if(groupSeqUint == null)
+ {
+ return null;
+ }
+ else
+ {
+ //The long represents a uint, so may be 0 to 2^32-1.
+ //This wraps it into a negative int range if over 2^31-1
+ return groupSeqUint.intValue();
+ }
+ }
+
private MessageFormatException createMessageFormatException(String message)
{
return createMessageFormatException(message, null);
Modified: qpid/jms/trunk/src/test/java/org/apache/qpid/jms/engine/AmqpMessageTest.java
URL: http://svn.apache.org/viewvc/qpid/jms/trunk/src/test/java/org/apache/qpid/jms/engine/AmqpMessageTest.java?rev=1569437&r1=1569436&r2=1569437&view=diff
==============================================================================
--- qpid/jms/trunk/src/test/java/org/apache/qpid/jms/engine/AmqpMessageTest.java (original)
+++ qpid/jms/trunk/src/test/java/org/apache/qpid/jms/engine/AmqpMessageTest.java Tue Feb 18 17:41:33 2014
@@ -402,6 +402,38 @@ public class AmqpMessageTest extends Qpi
assertNull("expected userid to be null on new message", testAmqpMessage.getUserId());
}
+ //TODO: delete this marker comment
+ /**
+ * Test that attempting to set a uint group-sequence (represented as a long) with a value
+ * outwith the allowed [0 - 2^32) range results in an IAE being thrown
+ */
+ @Test
+ public void testSetGroupSequenceWithUIntOutOfRangeThrowsIAE()
+ {
+ //negative value
+ AmqpMessage testAmqpMessage = TestAmqpMessage.createNewMessage();
+ try
+ {
+ testAmqpMessage.setGroupSequence(-1L);
+ fail("expected exception was not thrown");
+ }
+ catch(IllegalArgumentException iae)
+ {
+ //expected
+ }
+
+ //value 1 over max
+ try
+ {
+ testAmqpMessage.setGroupSequence(0xFFFFFFFFL + 1);
+ fail("expected exception was not thrown");
+ }
+ catch(IllegalArgumentException iae)
+ {
+ //expected
+ }
+ }
+
/**
* Check that setting UserId null on a new message does not cause creation of the underlying properties
* section. New messages lack the properties section section,
Modified: qpid/jms/trunk/src/test/java/org/apache/qpid/jms/impl/MessageImplTest.java
URL: http://svn.apache.org/viewvc/qpid/jms/trunk/src/test/java/org/apache/qpid/jms/impl/MessageImplTest.java?rev=1569437&r1=1569436&r2=1569437&view=diff
==============================================================================
--- qpid/jms/trunk/src/test/java/org/apache/qpid/jms/impl/MessageImplTest.java (original)
+++ qpid/jms/trunk/src/test/java/org/apache/qpid/jms/impl/MessageImplTest.java Tue Feb 18 17:41:33 2014
@@ -2048,6 +2048,11 @@ public class MessageImplTest extends Qpi
}
//TODO: delete this marker comment
+ @Test
+ public void testGetJMSXGroupSeqOnNewMessageThrowsNFE() throws Exception
+ {
+ assertGetMissingPropertyThrowsNumberFormatException(_testMessage, JMSXGROUPSEQ, Integer.class);
+ }
@Test
public void testGetJMSXGroupSeqDoesNotExistOnNewMessage() throws Exception
@@ -2134,6 +2139,87 @@ public class MessageImplTest extends Qpi
assertEquals("expected no entry to be present in the application-properties section", 0, _testAmqpMessage.getApplicationPropertyNames().size());
}
+ /**
+ * Test that setting the JMSXGroupSeq property to null clears an existing
+ * value for the group-sequence field on the underlying AMQP message
+ */
+ @Test
+ public void testSetJMSXGroupSeqNullClearsUnderlyingMessageGroupSequence() throws Exception
+ {
+ int myGroupSeq = 1;
+ _testMessage.setIntProperty(JMSXGROUPSEQ, myGroupSeq);
+
+ _testMessage.setStringProperty(JMSXGROUPSEQ, null);
+
+ assertFalse("did not expect a JMSXGroupSeq value to be present", _testMessage.propertyExists(JMSXGROUPSEQ));
+ assertNull("unexpected group-sequence value on underlying message", _testAmqpMessage.getGroupId());
+ }
+
+ /**
+ * Test that setting the JMSXGroupSeq property to a non-Integer instance
+ * causes an MFE to be thrown.
+ */
+ @Test
+ public void testSetJMSXGroupSeqToNonIntegerInstanceThrowsMFE() throws Exception
+ {
+ long myGroupSeq = 1L;
+
+ try
+ {
+ _testMessage.setLongProperty(JMSXGROUPSEQ, myGroupSeq);
+ fail("expected exception not thrown");
+ }
+ catch(MessageFormatException mfe)
+ {
+ //expected
+ }
+ }
+
+ /**
+ * Test that the JMSXGroupSeq property returns the expected value for a message
+ * received with the group-sequence field set.
+ */
+ @Test
+ public void testGetJMSXGroupSeqOnReceivedMessageWithGroupSequence() throws Exception
+ {
+ int groupSeqInt = 1;
+ Long myGroupSeq = Long.valueOf(groupSeqInt);
+ getJMSXGroupSeqOnReceivedMessageWithGroupSequenceAboveIntRangeTestImpl(myGroupSeq, groupSeqInt);
+ }
+
+ /**
+ * Test that the JMSXGroupSeq property returns the expected value for a message
+ * received with the group-sequence field uint set to a value above the int range.
+ * Expect that it is wrapped into the negative numbers not used normally by JMS.
+ */
+ @Test
+ public void testGetJMSXGroupSeqOnRecievedMessageWithGroupSequenceAboveIntRange() throws Exception
+ {
+ //First value just out of range
+ Long groupSeqUint = Integer.MAX_VALUE + 1L;//2^31;
+ int expected = Integer.MIN_VALUE;
+ getJMSXGroupSeqOnReceivedMessageWithGroupSequenceAboveIntRangeTestImpl(groupSeqUint, expected);
+
+ //Maximum uint value
+ groupSeqUint = 0x100000000L - 1L; //2^32 -1;
+ expected = -1;
+ getJMSXGroupSeqOnReceivedMessageWithGroupSequenceAboveIntRangeTestImpl(groupSeqUint, expected);
+
+ //Somewhere between the two
+ groupSeqUint = Integer.MAX_VALUE + 1L + 4L; //2^31 + 4;
+ expected = Integer.MIN_VALUE + 4;
+ getJMSXGroupSeqOnReceivedMessageWithGroupSequenceAboveIntRangeTestImpl(groupSeqUint, expected);
+ }
+
+ private void getJMSXGroupSeqOnReceivedMessageWithGroupSequenceAboveIntRangeTestImpl(Long groupSeqUint, int expected) throws JMSException
+ {
+ _testAmqpMessage.setGroupSequence(groupSeqUint);
+
+ _testMessage = TestMessageImpl.createReceivedMessage(_testAmqpMessage, _mockSessionImpl, _mockConnectionImpl, null);
+
+ assertEquals("JMSXGroupSeq value was not as expected", expected, _testMessage.getIntProperty(JMSXGROUPSEQ));
+ }
+
//TODO: delete this marker comment
// ====== JMS_AMQP_TTL property =======
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org