Repository: qpid-jms Updated Branches: refs/heads/master c33e2d687 -> 4915a8fdf
QPIDJMS-131 Fix and test to get presettleProducers option working Project: http://git-wip-us.apache.org/repos/asf/qpid-jms/repo Commit: http://git-wip-us.apache.org/repos/asf/qpid-jms/commit/4915a8fd Tree: http://git-wip-us.apache.org/repos/asf/qpid-jms/tree/4915a8fd Diff: http://git-wip-us.apache.org/repos/asf/qpid-jms/diff/4915a8fd Branch: refs/heads/master Commit: 4915a8fdfd360cf055d387f4ec971361a48398a3 Parents: c33e2d6 Author: Timothy Bish <[email protected]> Authored: Wed Apr 27 14:07:23 2016 -0400 Committer: Timothy Bish <[email protected]> Committed: Wed Apr 27 14:07:23 2016 -0400 ---------------------------------------------------------------------- .../amqp/builders/AmqpProducerBuilder.java | 8 ++++- .../integration/ProducerIntegrationTest.java | 32 ++++++++++++++++++++ .../qpid/jms/test/testpeer/TestAmqpPeer.java | 14 +++++++-- 3 files changed, 51 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/4915a8fd/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/builders/AmqpProducerBuilder.java ---------------------------------------------------------------------- diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/builders/AmqpProducerBuilder.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/builders/AmqpProducerBuilder.java index d017921..74fe18d 100644 --- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/builders/AmqpProducerBuilder.java +++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/builders/AmqpProducerBuilder.java @@ -78,7 +78,13 @@ public class AmqpProducerBuilder extends AmqpResourceBuilder<AmqpProducer, AmqpS @Override protected AmqpProducer createResource(AmqpSession parent, JmsProducerInfo resourceInfo, Sender endpoint) { - return new AmqpFixedProducer(getParent(), getResourceInfo(), endpoint); + AmqpProducer producer = new AmqpFixedProducer(getParent(), getResourceInfo(), endpoint); + + if (getParent().getConnection().isPresettleProducers()) { + producer.setPresettle(true); + } + + return producer; } @Override http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/4915a8fd/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/ProducerIntegrationTest.java ---------------------------------------------------------------------- diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/ProducerIntegrationTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/ProducerIntegrationTest.java index 2e49080..9625cd1 100644 --- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/ProducerIntegrationTest.java +++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/ProducerIntegrationTest.java @@ -1602,4 +1602,36 @@ public class ProducerIntegrationTest extends QpidJmsTestCase { testPeer.waitForAllHandlersToComplete(1000); } } + + @Test(timeout = 20000) + public void testPresettledProducersConfigurationApplied() throws Exception { + try (TestAmqpPeer testPeer = new TestAmqpPeer();) { + Connection connection = testFixture.establishConnecton(testPeer, "?amqp.presettleProducers=true"); + testPeer.expectBegin(); + testPeer.expectSettledSenderAttach(); + + Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); + Queue queue = session.createQueue("myQueue"); + MessageProducer producer = session.createProducer(queue); + + // Create and transfer a new message + MessageHeaderSectionMatcher headersMatcher = new MessageHeaderSectionMatcher(true) + .withDurable(equalTo(true)); + MessageAnnotationsSectionMatcher msgAnnotationsMatcher = new MessageAnnotationsSectionMatcher(true); + TransferPayloadCompositeMatcher messageMatcher = new TransferPayloadCompositeMatcher(); + messageMatcher.setHeadersMatcher(headersMatcher); + messageMatcher.setMessageAnnotationsMatcher(msgAnnotationsMatcher); + testPeer.expectTransfer(messageMatcher, nullValue(), true, false, null, false); + testPeer.expectClose(); + + Message message = session.createTextMessage(); + + producer.send(message); + assertEquals(DeliveryMode.PERSISTENT, message.getJMSDeliveryMode()); + + connection.close(); + + testPeer.waitForAllHandlersToComplete(1000); + } + } } http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/4915a8fd/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/TestAmqpPeer.java ---------------------------------------------------------------------- diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/TestAmqpPeer.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/TestAmqpPeer.java index b4cf921..eb9cba4 100644 --- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/TestAmqpPeer.java +++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/TestAmqpPeer.java @@ -867,6 +867,11 @@ public class TestAmqpPeer implements AutoCloseable expectSenderAttach(notNullValue(), false, false); } + public void expectSettledSenderAttach() + { + expectSenderAttach(notNullValue(), notNullValue(), true, false, false, false, 0, DEFAULT_PRODUCER_CREDIT, null, null); + } + public void expectSenderAttachWithoutGrantingCredit() { expectSenderAttach(notNullValue(), notNullValue(), false, false, false, 0, 0, null, null); @@ -894,18 +899,23 @@ public class TestAmqpPeer implements AutoCloseable public void expectSenderAttach(final Matcher<?> sourceMatcher, final Matcher<?> targetMatcher, final boolean refuseLink, boolean omitDetach, boolean deferAttachResponseWrite, long creditFlowDelay, int creditAmount, Symbol errorType, String errorMessage) { + expectSenderAttach(sourceMatcher, targetMatcher, false, refuseLink, omitDetach, deferAttachResponseWrite, creditFlowDelay, creditAmount, errorType, errorMessage); + } + + public void expectSenderAttach(final Matcher<?> sourceMatcher, final Matcher<?> targetMatcher, final boolean senderSettled, final boolean refuseLink, boolean omitDetach, boolean deferAttachResponseWrite, long creditFlowDelay, int creditAmount, Symbol errorType, String errorMessage) + { final AttachMatcher attachMatcher = new AttachMatcher() .withName(notNullValue()) .withHandle(notNullValue()) .withRole(equalTo(Role.SENDER)) - .withSndSettleMode(equalTo(SenderSettleMode.UNSETTLED)) + .withSndSettleMode(equalTo(senderSettled ? SenderSettleMode.SETTLED : SenderSettleMode.UNSETTLED)) .withRcvSettleMode(equalTo(ReceiverSettleMode.FIRST)) .withSource(sourceMatcher) .withTarget(targetMatcher); final AttachFrame attachResponse = new AttachFrame() .setRole(Role.RECEIVER) - .setSndSettleMode(SenderSettleMode.UNSETTLED) + .setSndSettleMode(senderSettled ? SenderSettleMode.SETTLED : SenderSettleMode.UNSETTLED) .setRcvSettleMode(ReceiverSettleMode.FIRST); // The response frame channel will be dynamically set based on the incoming frame. Using the -1 is an illegal placeholder. --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
