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 2015/06/09 19:03:28 UTC

[2/6] qpid-jms git commit: QPIDJMS-48: wire up connection option for toggling behaviour, add some integration test to verify new and received messages both pick it up

QPIDJMS-48: wire up connection option for toggling behaviour, add some integration test to verify new and received messages both pick it up


Project: http://git-wip-us.apache.org/repos/asf/qpid-jms/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-jms/commit/e9d752a0
Tree: http://git-wip-us.apache.org/repos/asf/qpid-jms/tree/e9d752a0
Diff: http://git-wip-us.apache.org/repos/asf/qpid-jms/diff/e9d752a0

Branch: refs/heads/master
Commit: e9d752a048ea984fc5ea750a23c539fcb7a12b65
Parents: dacdce0
Author: Robert Gemmell <ro...@apache.org>
Authored: Tue Jun 9 17:27:11 2015 +0100
Committer: Robert Gemmell <ro...@apache.org>
Committed: Tue Jun 9 18:03:04 2015 +0100

----------------------------------------------------------------------
 .../java/org/apache/qpid/jms/JmsConnection.java |  12 +-
 .../apache/qpid/jms/JmsConnectionFactory.java   |   9 ++
 .../apache/qpid/jms/meta/JmsConnectionInfo.java |  10 ++
 .../jms/integration/IntegrationTestFixture.java |   2 +-
 .../jms/integration/MessageIntegrationTest.java | 110 +++++++++++++++++++
 .../qpid/jms/meta/JmsConnectionInfoTest.java    |   3 +
 6 files changed, 144 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/e9d752a0/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsConnection.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsConnection.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsConnection.java
index f6c907a..bd8ebbd 100644
--- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsConnection.java
+++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsConnection.java
@@ -845,6 +845,14 @@ public class JmsConnection implements Connection, TopicConnection, QueueConnecti
         connectionInfo.setQueuePrefix(queuePrefix);
     }
 
+    public boolean isValidatePropertyNames() {
+        return connectionInfo.isValidatePropertyNames();
+    }
+
+    public void setValidatePropertyNames(boolean validatePropertyNames) {
+        connectionInfo.setValidatePropertyNames(validatePropertyNames);
+    }
+
     public JmsPrefetchPolicy getPrefetchPolicy() {
         return prefetchPolicy;
     }
@@ -970,10 +978,12 @@ public class JmsConnection implements Connection, TopicConnection, QueueConnecti
     public void onInboundMessage(final JmsInboundMessageDispatch envelope) {
 
         JmsMessage incoming = envelope.getMessage();
-        // Ensure incoming Messages are in readonly mode.
         if (incoming != null) {
+            // Ensure incoming Messages are in readonly mode.
             incoming.setReadOnlyBody(true);
             incoming.setReadOnlyProperties(true);
+
+            incoming.setValidatePropertyNames(isValidatePropertyNames());
         }
 
         JmsMessageDispatcher dispatcher = dispatchers.get(envelope.getConsumerId());

http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/e9d752a0/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsConnectionFactory.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsConnectionFactory.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsConnectionFactory.java
index 47a936f..dbeec40 100644
--- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsConnectionFactory.java
+++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsConnectionFactory.java
@@ -62,6 +62,7 @@ public class JmsConnectionFactory extends JNDIStorable implements ConnectionFact
     private boolean localMessagePriority;
     private String queuePrefix = null;
     private String topicPrefix = null;
+    private boolean validatePropertyNames = true;
     private long sendTimeout = JmsConnectionInfo.DEFAULT_SEND_TIMEOUT;
     private long requestTimeout = JmsConnectionInfo.DEFAULT_REQUEST_TIMEOUT;
     private long closeTimeout = JmsConnectionInfo.DEFAULT_CLOSE_TIMEOUT;
@@ -424,6 +425,14 @@ public class JmsConnectionFactory extends JNDIStorable implements ConnectionFact
         this.topicPrefix = topicPrefix;
     }
 
+    public boolean isValidatePropertyNames() {
+        return validatePropertyNames;
+    }
+
+    public void setValidatePropertyNames(boolean validatePropertyNames) {
+        this.validatePropertyNames = validatePropertyNames;
+    }
+
     /**
      * Gets the currently set close timeout.
      *

http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/e9d752a0/qpid-jms-client/src/main/java/org/apache/qpid/jms/meta/JmsConnectionInfo.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/meta/JmsConnectionInfo.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/meta/JmsConnectionInfo.java
index 0f7ec3f..b7d1ae7 100644
--- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/meta/JmsConnectionInfo.java
+++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/meta/JmsConnectionInfo.java
@@ -42,6 +42,7 @@ public final class JmsConnectionInfo implements JmsResource, Comparable<JmsConne
     public long closeTimeout = DEFAULT_CLOSE_TIMEOUT;
     private String queuePrefix = null;
     private String topicPrefix = null;
+    private boolean validatePropertyNames = true;
 
     public JmsConnectionInfo(JmsConnectionId connectionId) {
         if (connectionId == null) {
@@ -69,6 +70,7 @@ public final class JmsConnectionInfo implements JmsResource, Comparable<JmsConne
         copy.queuePrefix = queuePrefix;
         copy.topicPrefix = topicPrefix;
         copy.connectTimeout = connectTimeout;
+        copy.validatePropertyNames = validatePropertyNames;
     }
 
     public boolean isForceAsyncSend() {
@@ -131,6 +133,14 @@ public final class JmsConnectionInfo implements JmsResource, Comparable<JmsConne
         this.topicPrefix = topicPrefix;
     }
 
+    public boolean isValidatePropertyNames() {
+        return validatePropertyNames;
+    }
+
+    public void setValidatePropertyNames(boolean validatePropertyNames) {
+        this.validatePropertyNames = validatePropertyNames;
+    }
+
     public long getCloseTimeout() {
         return closeTimeout;
     }

http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/e9d752a0/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/IntegrationTestFixture.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/IntegrationTestFixture.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/IntegrationTestFixture.java
index 1791cd8..fef76fe 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/IntegrationTestFixture.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/IntegrationTestFixture.java
@@ -50,7 +50,7 @@ public class IntegrationTestFixture {
     }
 
     Connection establishConnecton(TestAmqpPeer testPeer, String optionsString, Symbol[] serverCapabilities, Map<Symbol, Object> serverProperties) throws JMSException {
-        return establishConnecton(testPeer, false, null, serverCapabilities, serverProperties, true);
+        return establishConnecton(testPeer, false, optionsString, serverCapabilities, serverProperties, true);
     }
 
     Connection establishConnecton(TestAmqpPeer testPeer, boolean ssl, String optionsString, Symbol[] serverCapabilities, Map<Symbol, Object> serverProperties, boolean setClientId) throws JMSException {

http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/e9d752a0/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/MessageIntegrationTest.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/MessageIntegrationTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/MessageIntegrationTest.java
index 2ab5857..1a1c426 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/MessageIntegrationTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/MessageIntegrationTest.java
@@ -30,6 +30,7 @@ import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
+import java.io.IOException;
 import java.util.Date;
 import java.util.Enumeration;
 import java.util.HashMap;
@@ -38,6 +39,7 @@ import java.util.UUID;
 
 import javax.jms.Connection;
 import javax.jms.Destination;
+import javax.jms.JMSException;
 import javax.jms.Message;
 import javax.jms.MessageConsumer;
 import javax.jms.MessageProducer;
@@ -211,6 +213,114 @@ public class MessageIntegrationTest extends QpidJmsTestCase
         }
     }
 
+    @Test(timeout = 5000)
+    public void testReceiveMessageWithInvalidPropertyName() throws Exception {
+        doReceiveMessageWithInvalidPropertyNameTestImpl(false);
+    }
+
+    @Test(timeout = 5000)
+    public void testReceiveMessageWithInvalidPropertyNameAndWithValidationDisabled() throws Exception {
+        doReceiveMessageWithInvalidPropertyNameTestImpl(true);
+    }
+
+    private void doReceiveMessageWithInvalidPropertyNameTestImpl(boolean disableValidation) throws JMSException, InterruptedException, Exception, IOException {
+        try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
+            Connection connection = testFixture.establishConnecton(testPeer, "?jms.validatePropertyNames=" + !disableValidation);
+            connection.start();
+
+            testPeer.expectBegin(true);
+
+            String invalidPropName = "invalid-name";
+            String value = "valueA";
+            Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+            Queue queue = session.createQueue("myQueue");
+
+            ApplicationPropertiesDescribedType appProperties = new ApplicationPropertiesDescribedType();
+            appProperties.setApplicationProperty(invalidPropName, value);
+
+            DescribedType amqpValueNullContent = new AmqpValueDescribedType(null);
+
+            testPeer.expectReceiverAttach();
+            testPeer.expectLinkFlowRespondWithTransfer(null, null, null, appProperties, amqpValueNullContent);
+            testPeer.expectDispositionThatIsAcceptedAndSettled();
+
+            MessageConsumer messageConsumer = session.createConsumer(queue);
+            Message receivedMessage = messageConsumer.receive(1000);
+            testPeer.waitForAllHandlersToComplete(3000);
+
+            if(!disableValidation) {
+                assertFalse("Expected property to be indicated as not existing", receivedMessage.propertyExists(invalidPropName));
+
+                try {
+                    receivedMessage.getStringProperty(invalidPropName);
+                    fail("Expected exception to be thrown");
+                } catch (IllegalArgumentException iae) {
+                    // expected
+                }
+            } else {
+                assertTrue(receivedMessage.propertyExists(invalidPropName));
+                assertEquals(value, receivedMessage.getStringProperty(invalidPropName));
+            }
+
+        }
+    }
+
+    @Test(timeout = 5000)
+    public void testSendMessageWithInvalidPropertyName() throws Exception {
+        doSendMessageWithInvalidPropertyNameTestImpl(false);
+    }
+
+    @Test(timeout = 5000)
+    public void testSendMessageWithInvalidPropertyNameAndWithValidationDisabled() throws Exception {
+        doSendMessageWithInvalidPropertyNameTestImpl(true);
+    }
+
+    private void doSendMessageWithInvalidPropertyNameTestImpl(boolean disableValidation) throws Exception {
+        try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
+            Connection connection = testFixture.establishConnecton(testPeer, "?jms.validatePropertyNames=" + !disableValidation);
+            connection.start();
+
+            testPeer.expectBegin(true);
+
+            String invalidPropName = "invalid-name";
+            String value = "valueA";
+            Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+            Queue queue = session.createQueue("myQueue");
+
+            testPeer.expectSenderAttach();
+
+            MessageProducer producer = session.createProducer(queue);
+
+            Message message = session.createMessage();
+
+            if (!disableValidation) {
+                try {
+                    message.setStringProperty(invalidPropName, value);
+                    fail("Expected exception to be thrown");
+                } catch (IllegalArgumentException iae) {
+                    // expected
+                }
+            } else {
+                MessageHeaderSectionMatcher headersMatcher = new MessageHeaderSectionMatcher(true);
+                MessageAnnotationsSectionMatcher msgAnnotationsMatcher = new MessageAnnotationsSectionMatcher(true);
+                MessagePropertiesSectionMatcher propsMatcher = new MessagePropertiesSectionMatcher(true);
+                ApplicationPropertiesSectionMatcher appPropsMatcher = new ApplicationPropertiesSectionMatcher(true);
+                appPropsMatcher.withEntry(invalidPropName, equalTo(value));
+
+                TransferPayloadCompositeMatcher messageMatcher = new TransferPayloadCompositeMatcher();
+                messageMatcher.setHeadersMatcher(headersMatcher);
+                messageMatcher.setMessageAnnotationsMatcher(msgAnnotationsMatcher);
+                messageMatcher.setPropertiesMatcher(propsMatcher);
+
+                testPeer.expectTransfer(messageMatcher);
+
+                producer.send(message);
+            }
+
+            testPeer.waitForAllHandlersToComplete(2000);
+        }
+    }
+
     //==== Destination Handling ====
     //==============================
 

http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/e9d752a0/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsConnectionInfoTest.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsConnectionInfoTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsConnectionInfoTest.java
index 8df0949..8f4ec31 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsConnectionInfoTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsConnectionInfoTest.java
@@ -71,6 +71,8 @@ public class JmsConnectionInfoTest {
         info.setSendTimeout(150);
         info.setTopicPrefix("topic");
         info.setUsername("user");
+        boolean validatePropertyNames = ! info.isValidatePropertyNames();
+        info.setValidatePropertyNames(validatePropertyNames);
 
         JmsConnectionInfo copy = info.copy();
 
@@ -85,6 +87,7 @@ public class JmsConnectionInfoTest {
         assertEquals(150, copy.getSendTimeout());
         assertEquals("topic", copy.getTopicPrefix());
         assertEquals("user", copy.getUsername());
+        assertEquals(validatePropertyNames, copy.isValidatePropertyNames());
 
         assertEquals(info, copy);
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org