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/13 19:09:15 UTC
svn commit: r1567989 - 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: Thu Feb 13 18:09:14 2014
New Revision: 1567989
URL: http://svn.apache.org/r1567989
Log:
QPIDJMS-9: work on support for JMSXUserID
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/ClientProperties.java
qpid/jms/trunk/src/main/java/org/apache/qpid/jms/impl/ConnectionImpl.java
qpid/jms/trunk/src/main/java/org/apache/qpid/jms/impl/MessageImpl.java
qpid/jms/trunk/src/main/java/org/apache/qpid/jms/impl/SenderImpl.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
qpid/jms/trunk/src/test/java/org/apache/qpid/jms/impl/SenderImplTest.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=1567989&r1=1567988&r2=1567989&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 Thu Feb 13 18:09:14 2014
@@ -322,6 +322,16 @@ public abstract class AmqpMessage
//===== Properties ======
+ public void setUserId(byte[] userId)
+ {
+ _message.setUserId(userId);
+ }
+
+ public byte[] getUserId()
+ {
+ return _message.getUserId();
+ }
+
public String getContentType()
{
return _message.getContentType();
Modified: qpid/jms/trunk/src/main/java/org/apache/qpid/jms/impl/ClientProperties.java
URL: http://svn.apache.org/viewvc/qpid/jms/trunk/src/main/java/org/apache/qpid/jms/impl/ClientProperties.java?rev=1567989&r1=1567988&r2=1567989&view=diff
==============================================================================
--- qpid/jms/trunk/src/main/java/org/apache/qpid/jms/impl/ClientProperties.java (original)
+++ qpid/jms/trunk/src/main/java/org/apache/qpid/jms/impl/ClientProperties.java Thu Feb 13 18:09:14 2014
@@ -22,10 +22,16 @@ package org.apache.qpid.jms.impl;
public class ClientProperties
{
- //Message Property Names
+ //JMS-defined Property Names
+ public static final String JMSXUSERID = "JMSXUserID";
+
+ //Custom Message Property Names
public static final String JMS_AMQP_TTL = "JMS_AMQP_TTL";
//Message Annotation Names
public static final String X_OPT_APP_CORRELATION_ID = "x-opt-app-correlation-id";
public static final String X_OPT_JMS_TYPE = "x-opt-jms-type";
+
+ //Client configuration System Property names
+ public static final String QPID_SET_JMSXUSERID_ON_SEND = "qpid.set-jmsxuserid-on-send";
}
Modified: qpid/jms/trunk/src/main/java/org/apache/qpid/jms/impl/ConnectionImpl.java
URL: http://svn.apache.org/viewvc/qpid/jms/trunk/src/main/java/org/apache/qpid/jms/impl/ConnectionImpl.java?rev=1567989&r1=1567988&r2=1567989&view=diff
==============================================================================
--- qpid/jms/trunk/src/main/java/org/apache/qpid/jms/impl/ConnectionImpl.java (original)
+++ qpid/jms/trunk/src/main/java/org/apache/qpid/jms/impl/ConnectionImpl.java Thu Feb 13 18:09:14 2014
@@ -65,14 +65,17 @@ public class ConnectionImpl implements C
private DestinationHelper _destinationHelper;
private MessageIdHelper _messageIdHelper;
+ private String _username;
+
/**
* TODO: accept a client id
* TODO: defer connection to the broker if client has not been set. Defer it until any other method is called.
*/
public ConnectionImpl(String clientName, String remoteHost, int port, String username, String password) throws JMSException
{
+ _username = username;
_amqpConnection = new AmqpConnection(clientName, remoteHost, port);
- _amqpConnection.setUsername(username);
+ _amqpConnection.setUsername(_username);
_amqpConnection.setPassword(password);
try
@@ -234,6 +237,10 @@ public class ConnectionImpl implements C
_connectionLock.stateChanged();
}
+ String getUserName()
+ {
+ return _username;
+ }
//======= JMS Methods =======
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=1567989&r1=1567988&r2=1567989&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 Thu Feb 13 18:09:14 2014
@@ -19,8 +19,10 @@
package org.apache.qpid.jms.impl;
import static org.apache.qpid.jms.impl.ClientProperties.JMS_AMQP_TTL;
+import static org.apache.qpid.jms.impl.ClientProperties.JMSXUSERID;
import static org.apache.qpid.jms.impl.MessageIdHelper.JMS_ID_PREFIX;
+import java.io.UnsupportedEncodingException;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Arrays;
@@ -199,30 +201,68 @@ public abstract class MessageImpl<T exte
if(JMS_AMQP_TTL.equals(name))
{
- Long ttl = null;
- if(value instanceof Long)
- {
- ttl = (Long) value;
- }
+ setJMS_AMQP_TTL(value);
+ return;
+ }
+ else if(JMSXUSERID.equals(name))
+ {
+ setJMSXUserID(value);
+ return;
+ }
- if(ttl != null && ttl >= 0 && ttl <= MAX_UINT)
+ checkObjectPropertyValueIsValid(value);
+
+ _amqpMessage.setApplicationProperty(name, value);
+ }
+
+ private void setJMSXUserID(Object value) throws MessageFormatException
+ {
+ byte[] userIdBytes = null;
+ if(value != null)
+ {
+ if(value instanceof String)
{
- _propJMS_AMQP_TTL = ttl;
+ try
+ {
+ userIdBytes = ((String) value).getBytes("UTF-8");
+ }
+ catch (UnsupportedEncodingException e)
+ {
+ MessageFormatException mfe = new MessageFormatException("Unable to encode user id");
+ mfe.setLinkedException(e);
+ mfe.initCause(e);
+
+ throw mfe;
+ }
}
else
{
- throw new MessageFormatException(JMS_AMQP_TTL + " must be a long with value in range 0 to 2^31 - 1");
+ throw new MessageFormatException(JMSXUSERID + " must be a String");
}
-
- return;
}
- checkObjectPropertyValueIsValid(value);
+ _amqpMessage.setUserId(userIdBytes);
+ }
- _amqpMessage.setApplicationProperty(name, value);
+ private void setJMS_AMQP_TTL(Object value) throws MessageFormatException
+ {
+ Long ttl = null;
+ if(value instanceof Long)
+ {
+ ttl = (Long) value;
+ }
+
+ if(ttl != null && ttl >= 0 && ttl <= MAX_UINT)
+ {
+ _propJMS_AMQP_TTL = ttl;
+ }
+ else
+ {
+ throw new MessageFormatException(JMS_AMQP_TTL + " must be a long with value in range 0 to 2^31 - 1");
+ }
}
- private Object getApplicationProperty(String name)
+ private Object getApplicationProperty(String name) throws MessageFormatException
{
checkPropertyNameIsValid(name);
@@ -230,11 +270,48 @@ public abstract class MessageImpl<T exte
{
return _propJMS_AMQP_TTL;
}
+ else if(JMSXUSERID.equals(name))
+ {
+ return getJMSXUserID();
+ }
//TODO: handle non-JMS types?
return _amqpMessage.getApplicationProperty(name);
}
+ private Object getJMSXUserID() throws MessageFormatException
+ {
+ byte[] userId = _amqpMessage.getUserId();
+ if(userId == null)
+ {
+ return null;
+ }
+ else
+ {
+ try
+ {
+ return new String(userId, "UTF-8");
+ }
+ catch (UnsupportedEncodingException e)
+ {
+ MessageFormatException mfe = new MessageFormatException("Unable to decode user id");
+ mfe.setLinkedException(e);
+ mfe.initCause(e);
+
+ throw mfe;
+ }
+ }
+ }
+
+ private boolean propertyExistsJMSXUserID()
+ {
+ return _amqpMessage.getUserId() != null;
+ }
+
+ private boolean propertyExistsJMS_AMQP_TTL()
+ {
+ return _propJMS_AMQP_TTL != null;
+ }
//======= JMS Methods =======
@@ -575,7 +652,12 @@ public abstract class MessageImpl<T exte
{
if(JMS_AMQP_TTL.equals(name))
{
- return _propJMS_AMQP_TTL != null;
+ return propertyExistsJMS_AMQP_TTL();
+ }
+
+ if(JMSXUSERID.equals(name))
+ {
+ return propertyExistsJMSXUserID();
}
return _amqpMessage.applicationPropertyExists(name);
@@ -781,11 +863,16 @@ public abstract class MessageImpl<T exte
//Create a new list we can mutate
List<String> propNames = new ArrayList<String>(underlyingApplicationPropertyNames);
- if(_propJMS_AMQP_TTL != null)
+ if(propertyExistsJMS_AMQP_TTL())
{
propNames.add(JMS_AMQP_TTL);
}
+ if(propertyExistsJMSXUserID())
+ {
+ propNames.add(JMSXUSERID);
+ }
+
return Collections.enumeration(propNames);
}
Modified: qpid/jms/trunk/src/main/java/org/apache/qpid/jms/impl/SenderImpl.java
URL: http://svn.apache.org/viewvc/qpid/jms/trunk/src/main/java/org/apache/qpid/jms/impl/SenderImpl.java?rev=1567989&r1=1567988&r2=1567989&view=diff
==============================================================================
--- qpid/jms/trunk/src/main/java/org/apache/qpid/jms/impl/SenderImpl.java (original)
+++ qpid/jms/trunk/src/main/java/org/apache/qpid/jms/impl/SenderImpl.java Thu Feb 13 18:09:14 2014
@@ -22,6 +22,7 @@ package org.apache.qpid.jms.impl;
import static org.apache.qpid.jms.impl.ClientProperties.JMS_AMQP_TTL;
+import java.io.UnsupportedEncodingException;
import java.util.UUID;
import javax.jms.Destination;
@@ -36,6 +37,8 @@ import org.apache.qpid.jms.engine.AmqpSe
public class SenderImpl extends LinkImpl implements MessageProducer
{
private static final long UINT_MAX = 0xFFFFFFFFL;
+
+ private final boolean _setJMSXUserId = Boolean.valueOf(System.getProperty(ClientProperties.QPID_SET_JMSXUSERID_ON_SEND, "true"));
private AmqpSender _amqpSender;
private Destination _destination;
@@ -87,6 +90,39 @@ public class SenderImpl extends LinkImpl
AmqpMessage amqpMessage = getAmqpMessageFromJmsMessage(message);
+ //set the JMSXUserId value
+ String existingUserValue = message.getStringProperty(ClientProperties.JMSXUSERID);
+ String newUserString = null;
+ if(_setJMSXUserId)
+ {
+ newUserString = getConnectionImpl().getUserName();
+ }
+
+ if(userStringValuesDiffer(newUserString, existingUserValue))
+ {
+ if(isQpidMessage(message))
+ {
+ //set the UserId field on the underlying AMQP message
+ byte[] bytes = null;
+ if(newUserString != null)
+ {
+ try
+ {
+ bytes = newUserString.getBytes("UTF-8");
+ }
+ catch (UnsupportedEncodingException e)
+ {
+ throw new QpidJmsException("Unable to encode user id", e);
+ }
+ }
+ amqpMessage.setUserId(bytes);
+ }
+ else
+ {
+ message.setStringProperty(ClientProperties.JMSXUSERID, newUserString);
+ }
+ }
+
//set the AMQP header ttl field if necessary
if(message.propertyExists(JMS_AMQP_TTL))
{
@@ -129,9 +165,14 @@ public class SenderImpl extends LinkImpl
}
}
+ private boolean userStringValuesDiffer(String user, String existing)
+ {
+ return user != null && !user.equals(existing) || (user == null && existing != null);
+ }
+
private AmqpMessage getAmqpMessageFromJmsMessage(Message message)
{
- if(message instanceof MessageImpl)
+ if(isQpidMessage(message))
{
return ((MessageImpl<?>)message).getUnderlyingAmqpMessage(true);
}
@@ -142,6 +183,11 @@ public class SenderImpl extends LinkImpl
}
}
+ private boolean isQpidMessage(Message message)
+ {
+ return message instanceof MessageImpl;
+ }
+
//======= JMS Methods =======
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=1567989&r1=1567988&r2=1567989&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 Thu Feb 13 18:09:14 2014
@@ -24,6 +24,7 @@ import static org.junit.Assert.*;
import java.math.BigInteger;
import java.nio.ByteBuffer;
+import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
@@ -335,6 +336,64 @@ public class AmqpMessageTest extends Qpi
}
// ====== Properties =======
+// TODO: delete this marker comment
+
+ @Test
+ public void testGetUserIDIsNullForNewMessage()
+ {
+ AmqpMessage testAmqpMessage = TestAmqpMessage.createNewMessage();
+
+ assertNull("expected useriod to be null on new message", testAmqpMessage.getUserId());
+ }
+
+ /**
+ * 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,
+ * as tested by {@link #testNewMessageHasNoUnderlyingPropertiesSection()}.
+ */
+ @Test
+ public void testSetUserIDNullOnNewMessageDoesNotCreatePropertiesSection() throws Exception
+ {
+ AmqpMessage testAmqpMessage = TestAmqpMessage.createNewMessage();
+
+ testAmqpMessage.setUserId(null);
+
+ assertNull("properties section was created", testAmqpMessage.getMessage().getProperties());
+ }
+
+ /**
+ * Check that setting UserId on the message causes creation of the underlying properties
+ * section with the expected value. New messages lack the properties section section,
+ * as tested by {@link #testNewMessageHasNoUnderlyingPropertiesSection()}.
+ */
+ @Test
+ public void testSetUserIDOnNewMessage() throws Exception
+ {
+ byte[] bytes = "testValue".getBytes("UTF-8");
+ AmqpMessage testAmqpMessage = TestAmqpMessage.createNewMessage();
+
+ testAmqpMessage.setUserId(bytes);
+
+ assertNotNull("properties section was not created", testAmqpMessage.getMessage().getProperties());
+ assertTrue("bytes were not set for userid as expected", Arrays.equals(bytes, testAmqpMessage.getMessage().getProperties().getUserId().getArray()));
+ assertTrue("bytes were not set for userid as expected", Arrays.equals(bytes, testAmqpMessage.getUserId()));
+ }
+
+ /**
+ * Check that setting UserId null on the message causes any existing value to be cleared
+ */
+ @Test
+ public void testSetUserIDNullOnMessageWithExistingUserID() throws Exception
+ {
+ byte[] bytes = "testValue".getBytes("UTF-8");
+ AmqpMessage testAmqpMessage = TestAmqpMessage.createNewMessage();
+
+ testAmqpMessage.setUserId(bytes);
+ testAmqpMessage.setUserId(null);
+
+ assertNull("bytes were not cleared for userid as expected", testAmqpMessage.getMessage().getProperties().getUserId());
+ assertNull("bytes were not cleared for userid as expected", testAmqpMessage.getUserId());
+ }
@Test
public void testGetToWithReceivedMessageWithNoProperties()
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=1567989&r1=1567988&r2=1567989&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 Thu Feb 13 18:09:14 2014
@@ -376,7 +376,6 @@ public class MessageImplTest extends Qpi
}
}
- //TODO: delete this marker comment
/**
* Property 'identifiers' (i.e. names) are not allowed to be NOT, AND, OR, BETWEEN, LIKE, IN, IS, or ESCAPE,
* as described in {@link javax.jms.Message}. Verify an IAE is thrown if setting a property with these values.
@@ -1727,8 +1726,8 @@ public class MessageImplTest extends Qpi
}
/**
- * Test that {@link MessageImpl#setJMSType(String)} sets the expected message
- * annotation on the underlying message to the given value
+ * Test that {@link MessageImpl#setJMSType(String)} using null clears an existing
+ * annotation value on the underlying amqp message.
*/
@Test
public void testSetJMSTypeNullClearsExistingValue() throws Exception
@@ -1755,6 +1754,82 @@ public class MessageImplTest extends Qpi
assertEquals("JMSType value was not as expected", myJMSType, _testMessage.getJMSType());
}
+ // ====== JMSXUserId =======
+//TODO: delete this marker comment
+
+ @Test
+ public void testGetJMSXUserIDIsNullOnNewMessage() throws Exception
+ {
+ assertNull("did not expect a JMSXUserID value to be present", _testMessage.getStringProperty(ClientProperties.JMSXUSERID));
+ }
+
+ @Test
+ public void testGetJMSXUserIDDoesNotExistOnNewMessage() throws Exception
+ {
+ assertFalse("did not expect a JMSXUserID value to be present", _testMessage.propertyExists(ClientProperties.JMSXUSERID));
+ }
+
+ /**
+ * Test that setting the JMSXUserID property sets the expected bytes
+ * for the user-id field on the underlying AMQP message
+ */
+ @Test
+ public void testSetJMSXUserIDSetsUnderlyingMessageUserId() throws Exception
+ {
+ String myUserId = "myUserId";
+ byte[] myUserIdBytes = myUserId.getBytes("UTF-8");
+ _testMessage.setStringProperty(ClientProperties.JMSXUSERID, myUserId);
+
+ assertTrue("expected a JMSXUserID value to be present", _testMessage.propertyExists(ClientProperties.JMSXUSERID));
+ assertTrue("unexpected userId bytes value on underlying message", Arrays.equals(myUserIdBytes, _testAmqpMessage.getUserId()));
+ }
+
+ /**
+ * Test that setting the JMSXUserID property does not set an entry in the
+ * application-properties section of the underlying AMQP message
+ */
+ @Test
+ public void testSetJMSXUserIDDoesNotSetApplicationProperty() throws Exception
+ {
+ String myUserId = "myUserId";
+ _testMessage.setStringProperty(ClientProperties.JMSXUSERID, myUserId);
+
+ assertEquals("expected no application-properties section to be present", 0, _testAmqpMessage.getApplicationPropertyNames().size());
+ }
+
+ /**
+ * Test that setting the JMSXUserID property to null clears an existing
+ * value for the user-id field on the underlying AMQP message
+ */
+ @Test
+ public void testSetJMSXUserIDNullClearsUnderlyingMessageUserId() throws Exception
+ {
+ String myUserId = "myUserId";
+ _testMessage.setStringProperty(ClientProperties.JMSXUSERID, myUserId);
+
+ _testMessage.setStringProperty(ClientProperties.JMSXUSERID, null);
+
+ assertFalse("did not expect a JMSXUserID value to be present", _testMessage.propertyExists(ClientProperties.JMSXUSERID));
+ assertNull("unexpected userId bytes value on underlying message", _testAmqpMessage.getUserId());
+ }
+
+ /**
+ * Test that the JMSXUserID property returns the expected value for a message
+ * received with the user-id field set.
+ */
+ @Test
+ public void testGetJMSXUserIDOnRecievedMessageWithUserId() throws Exception
+ {
+ String myUserId = "myUserId";
+ byte[] myUserIdBytes = myUserId.getBytes("UTF-8");
+ _testAmqpMessage.setUserId(myUserIdBytes);
+
+ _testMessage = TestMessageImpl.createReceivedMessage(_testAmqpMessage, _mockSessionImpl, _mockConnectionImpl, null);
+
+ assertTrue("expected a JMSXUserID value to be present", _testMessage.propertyExists(ClientProperties.JMSXUSERID));
+ assertEquals("JMSXUserID value was not as expected", myUserId, _testMessage.getStringProperty(ClientProperties.JMSXUSERID));
+ }
+
// ====== JMS_AMQP_TTL property =======
@Test
Modified: qpid/jms/trunk/src/test/java/org/apache/qpid/jms/impl/SenderImplTest.java
URL: http://svn.apache.org/viewvc/qpid/jms/trunk/src/test/java/org/apache/qpid/jms/impl/SenderImplTest.java?rev=1567989&r1=1567988&r2=1567989&view=diff
==============================================================================
--- qpid/jms/trunk/src/test/java/org/apache/qpid/jms/impl/SenderImplTest.java (original)
+++ qpid/jms/trunk/src/test/java/org/apache/qpid/jms/impl/SenderImplTest.java Thu Feb 13 18:09:14 2014
@@ -25,6 +25,7 @@ import static org.junit.Assert.assertNot
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertFalse;
import javax.jms.DeliveryMode;
import javax.jms.Message;
@@ -347,4 +348,101 @@ public class SenderImplTest extends Qpid
//Verify that the underlying amqp message ttl field was NOT set, as requested by the property value being 0
assertNull(testMessage.getUnderlyingAmqpMessage(false).getTtl());
}
+
+ //TODO: delete this marker comment and finish test
+ /**
+ * Test that the producer sets the JMSXUserID property with the
+ * user name for the connection the message is being sent on.
+ */
+ @Test
+ public void testSenderSetsJMSUserIDOnMessage() throws Exception
+ {
+ senderSetsJMSXUserIDOnMessageTestImpl(true);
+ }
+
+ /**
+ * Test that the producer does not set the JMSXUserID property on the message
+ * when the {@link ClientProperties#QPID_SET_JMSXUSERID_ON_SEND} system property
+ * is set false.
+ */
+ @Test
+ public void testDisableSenderSettingJMSXUserIDOnMessageUsingSystemProperty() throws Exception
+ {
+ senderSetsJMSXUserIDOnMessageTestImpl(false);
+ }
+
+ private void senderSetsJMSXUserIDOnMessageTestImpl(boolean enabled) throws Exception
+ {
+ if(!enabled)
+ {
+ setTestSystemProperty(ClientProperties.QPID_SET_JMSXUSERID_ON_SEND, "false");
+ }
+
+ //Create mock sent message token, ensure that it is immediately marked as Accepted
+ AmqpSentMessageToken _mockToken = Mockito.mock(AmqpSentMessageToken.class);
+ Mockito.when(_mockToken.getRemoteDeliveryState()).thenReturn(Accepted.getInstance());
+ Mockito.when(_mockAmqpSender.sendMessage(Mockito.any(AmqpMessage.class))).thenReturn(_mockToken);
+
+ ImmediateWaitUntil.mockWaitUntil(_mockConnection);
+
+ SenderImpl senderImpl = new SenderImpl(_mockSession, _mockConnection, _mockAmqpSender, _mockQueue);
+
+ String myUserId = "testUser";
+ Mockito.when(_mockConnection.getUserName()).thenReturn(myUserId);
+
+ MessageImpl<?> testMessage = TestMessageImpl.createNewMessage(_mockSession, null);
+
+ assertNull("expected JMSUserID to be null", testMessage.getStringProperty(ClientProperties.JMSXUSERID));
+
+ senderImpl.send(testMessage);
+
+ if(enabled)
+ {
+ //verify the sender stamped the message with the user
+ assertTrue("JMSXUserID property should exist", testMessage.propertyExists(ClientProperties.JMSXUSERID));
+ assertEquals("sender failed to set JMSXUserID", myUserId, testMessage.getStringProperty(ClientProperties.JMSXUSERID));
+ }
+ else
+ {
+ //verify the sender didnt stamp the message with the user
+ assertNull("expected JMSXUserID to still be null", testMessage.getStringProperty(ClientProperties.JMSXUSERID));
+ assertFalse("JMSXUserID property should not exist", testMessage.propertyExists(ClientProperties.JMSXUSERID));
+ }
+ }
+
+ /**
+ * Test that the producer clears any existing JMSXUserID value on a message
+ * when the {@link ClientProperties#QPID_SET_JMSXUSERID_ON_SEND} system property
+ * is set false.
+ */
+ @Test
+ public void testSenderClearsExistingJMSXUserIDValueOnSendWhenSetOnSendIsDisabled() throws Exception
+ {
+ //disable setting the user-id on send
+ setTestSystemProperty(ClientProperties.QPID_SET_JMSXUSERID_ON_SEND, "false");
+
+ //Create mock sent message token, ensure that it is immediately marked as Accepted
+ AmqpSentMessageToken _mockToken = Mockito.mock(AmqpSentMessageToken.class);
+ Mockito.when(_mockToken.getRemoteDeliveryState()).thenReturn(Accepted.getInstance());
+ Mockito.when(_mockAmqpSender.sendMessage(Mockito.any(AmqpMessage.class))).thenReturn(_mockToken);
+
+ ImmediateWaitUntil.mockWaitUntil(_mockConnection);
+
+ SenderImpl senderImpl = new SenderImpl(_mockSession, _mockConnection, _mockAmqpSender, _mockQueue);
+
+ String myUserId = "testUser";
+ Mockito.when(_mockConnection.getUserName()).thenReturn(myUserId);
+
+ MessageImpl<?> testMessage = TestMessageImpl.createNewMessage(_mockSession, null);
+
+ testMessage.setStringProperty(ClientProperties.JMSXUSERID, "value");
+ assertNotNull("expected JMSUserID to be null", testMessage.getStringProperty(ClientProperties.JMSXUSERID));
+
+ senderImpl.send(testMessage);
+
+ //verify the sender cleared the existing value
+ String value = testMessage.getStringProperty(ClientProperties.JMSXUSERID);
+ assertNull("expected JMSXUserID be null, but was: " + value, value);
+ assertFalse("JMSXUserID property should not exist", testMessage.propertyExists(ClientProperties.JMSXUSERID));
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org