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