You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by or...@apache.org on 2019/08/21 16:35:42 UTC

[qpid-broker-j] branch master updated (3caf52a -> 5381ed2)

This is an automated email from the ASF dual-hosted git repository.

orudyy pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/qpid-broker-j.git.


    from 3caf52a  QPID-8355: [Broker-J] Improve exception handling on instantiation of JMX MBeans
     new 6e4d716  QPID-8349: [Tests][AMQP 1.0] Log sent and received performatives in test interaction
     new 80fc0b8  QPID-8349: [Tests][AMQP 1.0] Introduce field to count incoming deliveries in order to set flow next-incoming-id based on received message count and begin next-outgoing-id
     new a8d14bf  QPID-8349: [Tests][AMQP 1.0] Introduce QueueAdmin to delegate queue related operations in external broker admin
     new a545246  QPID-8349: [Tests][AMQP 1.0] Add methods to set delivery id from internal counter
     new 9f9bfe9  QPID-8349: [Tests][AMQP 1.0] Improve transaction and transfer tests
     new a01721d  QPID-8349: [Tests][AMQP 1.0] Simplify transaction tests by moving InteractionTransactionalState from tests into Interaction
     new b724eb4  QPID-8349: [Tests][AMQP 1.0] Use annotation ConfigItem for setting Qpid Broker-J JVM system properties
     new e5cc98f  QPID-8349: [Tests][AMQP 1.0] Add ability to assert received performatives using chained assert method
     new c8bbebf  QPID-8350: [Tests][AMQP 1.0] Add more assertions and validation into sole connection tests
     new c4fae61  QPID-8357: [Broker-J][AMQP 1.0][Sole connection] Broker should set open property 'sole-connection-eforcement-policy' when 'close-existing' eforcement policy is requested
     new c3eb4fd  QPID-8350: [Tests][AMQP 1.0] Improve begin tests
     new 62484c7  QPID-8350: [Tests][AMQP 1.0] Improve attach tests
     new d67424a  QPID-8350: [Tests][AMQP 1.0] Improve open tests
     new fd79bf6  QPID-8350: [Tests][AMQP 1.0] Verify test assumptions
     new f91e699  QPID-8350: [Tests][AMQP 1.0] Improve ResumeDeliveriesTest
     new b0d5709  QPID-8350: [Tests][AMQP 1.0] Fix setting of flow next-incoming-id in OutcomeTest
     new 019905c  QPID-8350: [Tests][AMQP 1.0] Use randomly generated name for unknown destinations in AnonymousTerminusTest
     new a56812f  QPID-8350: [Tests][AMQP 1.0] Mark entire FilterTest as broker-j specific
     new e81d4be  QPID-8350: [Tests][AMQP 1.0] Add assumtpion that sasl is supported into ProtocolHeaderTest
     new 455f232  QPID-8350: [Tests][AMQP 1.0] Remove BrokerSpecific annotation from DecodeErrorTest#illegalMessage()
     new 5381ed2  QPID-8349: [Tests][AMQP 1.0] Remove assertions from Utils

The 21 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../protocol/v1_0/AMQPConnection_1_0Impl.java      |   5 +
 .../tests/protocol/v1_0/ExistingQueueAdmin.java    | 224 +++++++++++++++
 .../qpid/tests/protocol/v1_0/FrameDecoder.java     |   7 +-
 .../qpid/tests/protocol/v1_0/FrameEncoder.java     |   8 +-
 .../qpid/tests/protocol/v1_0/Interaction.java      | 227 ++++++++++++----
 .../v1_0/InteractionTransactionalState.java        |  12 +
 .../org/apache/qpid/tests/protocol/v1_0/Utils.java |  46 ++--
 .../qpid/tests/protocol/v1_0/DecodeErrorTest.java  | 119 +++++---
 .../protocol/v1_0/ExistingQueueAdminTest.java      | 146 ++++++++++
 .../anonymousterminus/AnonymousTerminusTest.java   | 175 ++++++------
 .../v1_0/extensions/filter/FilterTest.java         |  22 +-
 .../extensions/qpid/queue/QueueDeletionTest.java   |  28 +-
 .../transactiontimeout/TransactionTimeoutTest.java |  15 +-
 .../extensions/soleconn/CloseExistingPolicy.java   |  89 +++---
 .../v1_0/extensions/soleconn/MixedPolicy.java      |  13 +-
 .../soleconn/RefuseConnectionPolicy.java           | 109 +++-----
 .../extensions/soleconn/SoleConnectionAsserts.java | 129 +++++++++
 .../protocol/v1_0/messaging/MessageFormat.java     |   2 +-
 .../protocol/v1_0/messaging/MultiTransferTest.java |  31 +--
 .../tests/protocol/v1_0/messaging/OutcomeTest.java |   3 +-
 .../protocol/v1_0/messaging/TransferTest.java      | 299 +++++++++++----------
 .../protocol/v1_0/transaction/DischargeTest.java   | 228 ++++++++--------
 .../transaction/TransactionalTransferTest.java     | 207 +++++++-------
 .../v1_0/transport/ProtocolHeaderTest.java         |   4 +
 .../v1_0/transport/connection/OpenTest.java        |  56 ++--
 .../protocol/v1_0/transport/link/AttachTest.java   |   5 +-
 .../protocol/v1_0/transport/link/FlowTest.java     | 221 +++++++++------
 .../v1_0/transport/link/ResumeDeliveriesTest.java  |  53 ++--
 .../v1_0/transport/security/sasl/SaslTest.java     |   8 +-
 .../protocol/v1_0/transport/session/BeginTest.java |  33 ++-
 .../qpid/tests/protocol/AbstractInteraction.java   |  11 +-
 .../qpid/systests/admin/SpawnBrokerAdmin.java      |   9 +-
 .../qpid/tests/utils}/BrokerAdminException.java    |   3 +-
 .../qpid/tests/utils/BrokerAdminFactory.java       |   2 +-
 .../org/apache/qpid/tests/utils/ConfigItem.java    |   1 +
 .../utils/EmbeddedBrokerPerClassAdminImpl.java     |  25 +-
 .../tests/utils/ExternalQpidBrokerAdminImpl.java   |  29 +-
 ...AdminUsingTestBase.java => NoOpQueueAdmin.java} |  38 +--
 .../utils/{BrokerSpecific.java => QueueAdmin.java} |  17 +-
 .../apache/qpid/tests/utils/QueueAdminFactory.java |  50 ++++
 .../apache/qpid/tests/utils/RunBrokerAdmin.java    |   4 +-
 .../qpid/tests/utils/BrokerAdminFactoryTest.java   |  48 ++--
 .../utils/ExternalQpidBrokerAdminImplTest.java     | 103 +++++++
 .../qpid/tests/utils/NoOpQueueAdminTest.java       |  78 ++++++
 .../qpid/tests/utils/QueueAdminFactoryTest.java    | 133 +++++++++
 45 files changed, 2109 insertions(+), 966 deletions(-)
 create mode 100644 systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/ExistingQueueAdmin.java
 create mode 100644 systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/ExistingQueueAdminTest.java
 create mode 100644 systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/extensions/soleconn/SoleConnectionAsserts.java
 copy systests/{qpid-systests-spawn-admin/src/main/java/org/apache/qpid/systests/admin => systests-utils/src/main/java/org/apache/qpid/tests/utils}/BrokerAdminException.java (96%)
 copy systests/systests-utils/src/main/java/org/apache/qpid/tests/utils/{BrokerAdminUsingTestBase.java => NoOpQueueAdmin.java} (54%)
 copy systests/systests-utils/src/main/java/org/apache/qpid/tests/utils/{BrokerSpecific.java => QueueAdmin.java} (72%)
 create mode 100644 systests/systests-utils/src/main/java/org/apache/qpid/tests/utils/QueueAdminFactory.java
 copy perftests/src/test/java/org/apache/qpid/disttest/client/property/SimplePropertyValueTest.java => systests/systests-utils/src/test/java/org/apache/qpid/tests/utils/BrokerAdminFactoryTest.java (55%)
 create mode 100644 systests/systests-utils/src/test/java/org/apache/qpid/tests/utils/ExternalQpidBrokerAdminImplTest.java
 create mode 100644 systests/systests-utils/src/test/java/org/apache/qpid/tests/utils/NoOpQueueAdminTest.java
 create mode 100644 systests/systests-utils/src/test/java/org/apache/qpid/tests/utils/QueueAdminFactoryTest.java


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


[qpid-broker-j] 08/21: QPID-8349: [Tests][AMQP 1.0] Add ability to assert received performatives using chained assert method

Posted by or...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

orudyy pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/qpid-broker-j.git

commit e5cc98f2d65f554ec8238ffb13e4144f86c3e853
Author: Alex Rudyy <or...@apache.org>
AuthorDate: Tue Aug 20 14:43:45 2019 +0100

    QPID-8349: [Tests][AMQP 1.0] Add ability to assert received performatives using chained assert method
---
 .../qpid/tests/protocol/v1_0/Interaction.java      | 10 ++++++++
 .../anonymousterminus/AnonymousTerminusTest.java   | 27 ++++++++++++++--------
 .../protocol/v1_0/messaging/TransferTest.java      | 26 +++++++++++++++++++++
 .../protocol/v1_0/transaction/DischargeTest.java   |  4 ++++
 .../transaction/TransactionalTransferTest.java     |  7 ++++++
 .../v1_0/transport/link/ResumeDeliveriesTest.java  | 11 ++++++++-
 6 files changed, 74 insertions(+), 11 deletions(-)

diff --git a/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/Interaction.java b/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/Interaction.java
index 727b501..8c7709d 100644
--- a/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/Interaction.java
+++ b/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/Interaction.java
@@ -32,6 +32,7 @@ import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.atomic.AtomicLong;
+import java.util.function.Consumer;
 
 import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.MoreExecutors;
@@ -848,6 +849,9 @@ public class Interaction extends AbstractInteraction<Interaction>
         try (QpidByteBuffer encodedForm = section.getEncodedForm())
         {
             transfer.setPayload(encodedForm);
+        }
+        finally
+        {
             section.dispose();
         }
     }
@@ -1264,4 +1268,10 @@ public class Interaction extends AbstractInteraction<Interaction>
         return response;
     }
 
+    public <T> Interaction assertLatestResponse(Class<T> type, Consumer<T> assertion)
+    {
+        T latestResponse = getLatestResponse(type);
+        assertion.accept(latestResponse);
+        return this;
+    }
 }
diff --git a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/extensions/anonymousterminus/AnonymousTerminusTest.java b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/extensions/anonymousterminus/AnonymousTerminusTest.java
index 582e7de..6449e31 100644
--- a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/extensions/anonymousterminus/AnonymousTerminusTest.java
+++ b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/extensions/anonymousterminus/AnonymousTerminusTest.java
@@ -26,6 +26,7 @@ import static org.hamcrest.CoreMatchers.instanceOf;
 import static org.hamcrest.CoreMatchers.notNullValue;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.greaterThan;
 import static org.hamcrest.Matchers.is;
 import static org.junit.Assume.assumeThat;
 
@@ -100,7 +101,7 @@ public class AnonymousTerminusTest extends BrokerAdminUsingTestBase
                        .attachRole(Role.SENDER)
                        .attach().consumeResponse(Attach.class)
                        .consumeResponse(Flow.class)
-
+                       .assertLatestResponse(Flow.class, this::assumeSufficientCredits)
                        .transferDeliveryId()
                        .transferPayload(generateMessagePayloadToDestination(BrokerAdmin.TEST_QUEUE_NAME))
                        .transferSettled(Boolean.TRUE)
@@ -136,7 +137,7 @@ public class AnonymousTerminusTest extends BrokerAdminUsingTestBase
                        .attachRole(Role.SENDER)
                        .attach().consumeResponse(Attach.class)
                        .consumeResponse(Flow.class)
-
+                       .assertLatestResponse(Flow.class, this::assumeSufficientCredits)
                        .transferDeliveryId()
                        .transferPayload(generateMessagePayloadToDestination("Unknown"))
                        .transferSettled(Boolean.TRUE)
@@ -177,7 +178,7 @@ public class AnonymousTerminusTest extends BrokerAdminUsingTestBase
                        .attachSourceOutcomes(Accepted.ACCEPTED_SYMBOL, Rejected.REJECTED_SYMBOL)
                        .attach().consumeResponse(Attach.class)
                        .consumeResponse(Flow.class)
-
+                       .assertLatestResponse(Flow.class, this::assumeSufficientCredits)
                        .transferDeliveryId()
                        .transferPayload(generateMessagePayloadToDestination("Unknown"))
                        .transferDeliveryTag(_deliveryTag)
@@ -225,7 +226,7 @@ public class AnonymousTerminusTest extends BrokerAdminUsingTestBase
                        .attachSourceOutcomes(Accepted.ACCEPTED_SYMBOL)
                        .attach().consumeResponse(Attach.class)
                        .consumeResponse(Flow.class)
-
+                       .assertLatestResponse(Flow.class, this::assumeSufficientCredits)
                        .transferDeliveryId()
                        .transferPayload(generateMessagePayloadToDestination("Unknown"))
                        .transferDeliveryTag(_deliveryTag)
@@ -261,7 +262,7 @@ public class AnonymousTerminusTest extends BrokerAdminUsingTestBase
                        .attachHandle(linkHandle)
                        .attach().consumeResponse(Attach.class)
                        .consumeResponse(Flow.class)
-
+                       .assertLatestResponse(Flow.class, this::assumeSufficientCredits)
                        .transferDeliveryId()
                        .transferHandle(linkHandle)
                        .transferPayload(generateMessagePayloadToDestination(BrokerAdmin.TEST_QUEUE_NAME))
@@ -294,7 +295,7 @@ public class AnonymousTerminusTest extends BrokerAdminUsingTestBase
                        .attachHandle(linkHandle)
                        .attach().consumeResponse(Attach.class)
                        .consumeResponse(Flow.class)
-
+                       .assertLatestResponse(Flow.class, this::assumeSufficientCredits)
                        .transferDeliveryId()
                        .transferHandle(linkHandle)
                        .transferPayload(generateMessagePayloadToDestination(BrokerAdmin.TEST_QUEUE_NAME))
@@ -340,7 +341,7 @@ public class AnonymousTerminusTest extends BrokerAdminUsingTestBase
                        .attachHandle(linkHandle)
                        .attach().consumeResponse(Attach.class)
                        .consumeResponse(Flow.class)
-
+                       .assertLatestResponse(Flow.class, this::assumeSufficientCredits)
                        .transferDeliveryId()
                        .transferHandle(linkHandle)
                        .transferPayload(generateMessagePayloadToDestination("Unknown"))
@@ -388,7 +389,7 @@ public class AnonymousTerminusTest extends BrokerAdminUsingTestBase
                        .attachHandle(linkHandle)
                        .attach().consumeResponse(Attach.class)
                        .consumeResponse(Flow.class)
-
+                       .assertLatestResponse(Flow.class, this::assumeSufficientCredits)
                        .transferDeliveryId()
                        .transferHandle(linkHandle)
                        .transferPayload(generateMessagePayloadToDestination("Unknown"))
@@ -459,7 +460,7 @@ public class AnonymousTerminusTest extends BrokerAdminUsingTestBase
                        .attachSourceOutcomes(Accepted.ACCEPTED_SYMBOL, Rejected.REJECTED_SYMBOL)
                        .attach().consumeResponse(Attach.class)
                        .consumeResponse(Flow.class)
-
+                       .assertLatestResponse(Flow.class, this::assumeSufficientCredits)
                        .transferDeliveryId()
                        .transferHandle(linkHandle)
                        .transferPayload(generateMessagePayloadToDestination("Unknown"))
@@ -526,7 +527,7 @@ public class AnonymousTerminusTest extends BrokerAdminUsingTestBase
                        .attachSourceOutcomes(Accepted.ACCEPTED_SYMBOL, Rejected.REJECTED_SYMBOL)
                        .attach().consumeResponse(Attach.class)
                        .consumeResponse(Flow.class)
-
+                       .assertLatestResponse(Flow.class, this::assumeSufficientCredits)
                        .transferDeliveryId()
                        .transferHandle(linkHandle)
                        .transferPayload(generateMessagePayloadToDestination("Unknown"))
@@ -586,4 +587,10 @@ public class AnonymousTerminusTest extends BrokerAdminUsingTestBase
         messageEncoder.addData(TEST_MESSAGE_CONTENT);
         return messageEncoder.getPayload();
     }
+
+    private void assumeSufficientCredits(final Flow flow)
+    {
+        assumeThat(flow.getLinkCredit(), is(greaterThan(UnsignedInteger.ZERO)));
+    }
+
 }
diff --git a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/messaging/TransferTest.java b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/messaging/TransferTest.java
index 4ef0f28..c89898d 100644
--- a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/messaging/TransferTest.java
+++ b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/messaging/TransferTest.java
@@ -117,6 +117,7 @@ public class TransferTest extends BrokerAdminUsingTestBase
                                            .attachRole(Role.SENDER)
                                            .attach().consumeResponse(Attach.class)
                                            .consumeResponse(Flow.class)
+                                           .assertLatestResponse(Flow.class, this::assumeSufficientCredits)
                                            .transferHandle(null)
                                            .transfer()
                                            .consumeResponse()
@@ -160,6 +161,7 @@ public class TransferTest extends BrokerAdminUsingTestBase
                                                  .attachTargetAddress(BrokerAdmin.TEST_QUEUE_NAME)
                                                  .attach().consumeResponse(Attach.class)
                                                  .consumeResponse(Flow.class)
+                                                 .assertLatestResponse(Flow.class, this::assumeSufficientCredits)
                                                  .transferDeliveryId()
                                                  .transferDeliveryTag(null)
                                                  .transferPayloadData(getTestName())
@@ -185,6 +187,7 @@ public class TransferTest extends BrokerAdminUsingTestBase
                                                        .attachHandle(linkHandle)
                                                        .attach().consumeResponse(Attach.class)
                                                        .consumeResponse(Flow.class)
+                                                       .assertLatestResponse(Flow.class, this::assumeSufficientCredits)
                                                        .transferDeliveryId()
                                                        .transferHandle(linkHandle)
                                                        .transferPayloadData(getTestName())
@@ -223,11 +226,13 @@ public class TransferTest extends BrokerAdminUsingTestBase
                                      .attachHandle(link1Handle)
                                      .attach().consumeResponse(Attach.class)
                                      .consumeResponse(Flow.class)
+                                     .assertLatestResponse(Flow.class, this::assumeSufficientCredits)
 
                                      .attachName("test2")
                                      .attachHandle(link2Handle)
                                      .attach().consumeResponse(Attach.class)
                                      .consumeResponse(Flow.class)
+                                     .assertLatestResponse(Flow.class, this::assumeSufficientCredits)
 
                                      .transferHandle(link1Handle)
                                      .transferPayloadData(contents[0])
@@ -273,6 +278,7 @@ public class TransferTest extends BrokerAdminUsingTestBase
                                                        .attachTargetAddress(BrokerAdmin.TEST_QUEUE_NAME)
                                                        .attach().consumeResponse(Attach.class)
                                                        .consumeResponse(Flow.class)
+                                                       .assertLatestResponse(Flow.class, this::assumeSufficientCredits)
                                                        .transferPayloadData(getTestName())
                                                        .transferRcvSettleMode(ReceiverSettleMode.FIRST)
                                                        .transfer()
@@ -307,6 +313,7 @@ public class TransferTest extends BrokerAdminUsingTestBase
                                      .attachRcvSettleMode(ReceiverSettleMode.FIRST)
                                      .attach().consumeResponse(Attach.class)
                                      .consumeResponse(Flow.class)
+                                     .assertLatestResponse(Flow.class, this::assumeSufficientCredits)
                                      .transferPayloadData(getTestName())
                                      .transferRcvSettleMode(ReceiverSettleMode.SECOND)
                                      .transfer()
@@ -390,6 +397,7 @@ public class TransferTest extends BrokerAdminUsingTestBase
                                                                                    Rejected.REJECTED_SYMBOL)
                                                              .attach().consumeResponse(Attach.class)
                                                              .consumeResponse(Flow.class)
+                                                             .assertLatestResponse(Flow.class, this::assumeSufficientCredits)
                                                              .transferDeliveryId()
                                                              .transferPayload(messageEncoder.getPayload())
                                                              .transferRcvSettleMode(ReceiverSettleMode.FIRST)
@@ -436,6 +444,7 @@ public class TransferTest extends BrokerAdminUsingTestBase
                                                   .attachSourceOutcomes(Accepted.ACCEPTED_SYMBOL)
                                                   .attach().consumeResponse(Attach.class)
                                                   .consumeResponse(Flow.class)
+                                                  .assertLatestResponse(Flow.class, this::assumeSufficientCredits)
                                                   .transferDeliveryId()
                                                   .transferPayload(messageEncoder.getPayload())
                                                   .transferRcvSettleMode(ReceiverSettleMode.FIRST)
@@ -555,6 +564,7 @@ public class TransferTest extends BrokerAdminUsingTestBase
                                                      .attachSourceAddress(BrokerAdmin.TEST_QUEUE_NAME)
                                                      .attachRcvSettleMode(ReceiverSettleMode.SECOND)
                                                      .attach().consumeResponse()
+                                                     .assertLatestResponse(Attach.class, this::assumeReceiverSettlesSecond)
                                                      .flowIncomingWindow(UnsignedInteger.ONE)
                                                      .flowNextIncomingIdFromPeerLatestSessionBeginAndDeliveryCount()
                                                      .flowOutgoingWindow(UnsignedInteger.ZERO)
@@ -602,6 +612,7 @@ public class TransferTest extends BrokerAdminUsingTestBase
                                                      .attachSourceOutcomes(Accepted.ACCEPTED_SYMBOL, Rejected.REJECTED_SYMBOL)
                                                      .attachRcvSettleMode(ReceiverSettleMode.SECOND)
                                                      .attach().consumeResponse()
+                                                     .assertLatestResponse(Attach.class, this::assumeReceiverSettlesSecond)
                                                      .flowIncomingWindow(UnsignedInteger.ONE)
                                                      .flowNextIncomingIdFromPeerLatestSessionBeginAndDeliveryCount()
                                                      .flowOutgoingWindow(UnsignedInteger.ZERO)
@@ -659,6 +670,7 @@ public class TransferTest extends BrokerAdminUsingTestBase
                                                      .attachSourceOutcomes()
                                                      .attachSourceDefaultOutcome(null)
                                                      .attach().consumeResponse()
+                                                     .assertLatestResponse(Attach.class, this::assumeReceiverSettlesSecond)
                                                      .flowIncomingWindow(UnsignedInteger.ONE)
                                                      .flowNextIncomingIdFromPeerLatestSessionBeginAndDeliveryCount()
                                                      .flowOutgoingWindow(UnsignedInteger.ZERO)
@@ -705,6 +717,7 @@ public class TransferTest extends BrokerAdminUsingTestBase
                        .attachSourceAddress(BrokerAdmin.TEST_QUEUE_NAME)
                        .attachRcvSettleMode(ReceiverSettleMode.SECOND)
                        .attach().consumeResponse()
+                       .assertLatestResponse(Attach.class, this::assumeReceiverSettlesSecond)
                        .flowIncomingWindow(UnsignedInteger.ONE)
                        .flowNextIncomingIdFromPeerLatestSessionBeginAndDeliveryCount()
                        .flowOutgoingWindow(UnsignedInteger.ZERO)
@@ -821,7 +834,10 @@ public class TransferTest extends BrokerAdminUsingTestBase
                        .attachTargetAddress(BrokerAdmin.TEST_QUEUE_NAME)
                        .attach()
                        .consumeResponse(Attach.class)
+                       .assertLatestResponse(Attach.class, this::assumeReceiverSettlesSecond)
                        .consumeResponse(Flow.class)
+                       .assertLatestResponse(Flow.class,
+                                             flow -> assumeThat(flow.getLinkCredit().intValue(), is(greaterThan(1))))
                        .transferDeliveryId()
                        .transferDeliveryTag(deliveryTag)
                        .transferPayloadData(content1)
@@ -1224,4 +1240,14 @@ public class TransferTest extends BrokerAdminUsingTestBase
             assertThat(Utils.receiveMessage(_brokerAddress, BrokerAdmin.TEST_QUEUE_NAME), is(equalTo(content)));
         }
     }
+
+    private void assumeSufficientCredits(final Flow flow)
+    {
+        assumeThat(flow.getLinkCredit(), is(greaterThan(UnsignedInteger.ZERO)));
+    }
+
+    private void assumeReceiverSettlesSecond(final Attach attach)
+    {
+        assumeThat(attach.getRcvSettleMode(), is(equalTo(ReceiverSettleMode.SECOND)));
+    }
 }
diff --git a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transaction/DischargeTest.java b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transaction/DischargeTest.java
index 369bd9b..2036d1e 100644
--- a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transaction/DischargeTest.java
+++ b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transaction/DischargeTest.java
@@ -29,6 +29,7 @@ import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.empty;
 import static org.hamcrest.Matchers.equalTo;
 import static org.hamcrest.Matchers.is;
+import static org.junit.Assume.assumeThat;
 
 import java.net.InetSocketAddress;
 import java.util.List;
@@ -263,6 +264,9 @@ public class DischargeTest extends BrokerAdminUsingTestBase
                        .attachTargetAddress(BrokerAdmin.TEST_QUEUE_NAME)
                        .attachRcvSettleMode(ReceiverSettleMode.SECOND)
                        .attach().consumeResponse(Attach.class)
+                       .assertLatestResponse(Attach.class,
+                                             attach -> assumeThat(attach.getRcvSettleMode(),
+                                                                  is(equalTo(ReceiverSettleMode.SECOND))))
                        .consumeResponse(Flow.class)
 
                        .transferDeliveryId()
diff --git a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transaction/TransactionalTransferTest.java b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transaction/TransactionalTransferTest.java
index 02d28a7..6a334dc 100644
--- a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transaction/TransactionalTransferTest.java
+++ b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transaction/TransactionalTransferTest.java
@@ -201,6 +201,7 @@ public class TransactionalTransferTest extends BrokerAdminUsingTestBase
                                                          .attachHandle(linkHandle)
                                                          .attach()
                                                          .consumeResponse(Attach.class)
+                                                         .assertLatestResponse(Attach.class, this::assumeReceiverSettlesSecond)
                                                          .consumeResponse(Flow.class)
 
                                                          .transferDeliveryId()
@@ -451,6 +452,7 @@ public class TransactionalTransferTest extends BrokerAdminUsingTestBase
                        .attachHandle(UnsignedInteger.ONE)
                        .attachSourceAddress(BrokerAdmin.TEST_QUEUE_NAME)
                        .attachRcvSettleMode(ReceiverSettleMode.SECOND)
+                       .assertLatestResponse(Attach.class, this::assumeReceiverSettlesSecond)
                        .attach()
                        .consumeResponse(Attach.class)
 
@@ -698,4 +700,9 @@ public class TransactionalTransferTest extends BrokerAdminUsingTestBase
         data[0] = (byte) ((txnId & 0xff000000) >> 24);
         return new Binary(data);
     }
+
+    private void assumeReceiverSettlesSecond(final Attach attach)
+    {
+        assumeThat(attach.getRcvSettleMode(), is(equalTo(ReceiverSettleMode.SECOND)));
+    }
 }
diff --git a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/link/ResumeDeliveriesTest.java b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/link/ResumeDeliveriesTest.java
index b38d30e..db3259b 100644
--- a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/link/ResumeDeliveriesTest.java
+++ b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/link/ResumeDeliveriesTest.java
@@ -113,6 +113,7 @@ public class ResumeDeliveriesTest extends BrokerAdminUsingTestBase
                        .attachRcvSettleMode(ReceiverSettleMode.SECOND)
                        .attachTargetAddress(destination)
                        .attach().consumeResponse(Attach.class)
+                       .assertLatestResponse(Attach.class, this::assumeReceiverSettlesSecond)
                        .consumeResponse(Flow.class);
 
             // 2. send a unsettled delivery
@@ -175,6 +176,7 @@ public class ResumeDeliveriesTest extends BrokerAdminUsingTestBase
                        .attachRcvSettleMode(ReceiverSettleMode.SECOND)
                        .attachTargetAddress(destination)
                        .attach().consumeResponse(Attach.class)
+                       .assertLatestResponse(Attach.class, this::assumeReceiverSettlesSecond)
                        .consumeResponse(Flow.class);
 
             // 2. send enough unsettled deliveries to cause incomplete-unsettled to be true
@@ -269,6 +271,7 @@ public class ResumeDeliveriesTest extends BrokerAdminUsingTestBase
                        .attachRcvSettleMode(ReceiverSettleMode.SECOND)
                        .attachTargetAddress(destination)
                        .attach().consumeResponse(Attach.class)
+                       .assertLatestResponse(Attach.class, this::assumeReceiverSettlesSecond)
                        .consumeResponse(Flow.class);
 
             // 2. send enough unsettled deliverys to cause incomplete-unsettled to be true
@@ -356,7 +359,8 @@ public class ResumeDeliveriesTest extends BrokerAdminUsingTestBase
                        .attachSndSettleMode(SenderSettleMode.UNSETTLED)
                        .attachSourceAddress(BrokerAdmin.TEST_QUEUE_NAME)
                        .attach()
-                       .consumeResponse(Attach.class);
+                       .consumeResponse(Attach.class)
+                       .assertLatestResponse(Attach.class, this::assumeReceiverSettlesSecond);
 
             Attach attach = interaction.getLatestResponse(Attach.class);
             assumeThat(attach.getSndSettleMode(), is(equalTo(SenderSettleMode.UNSETTLED)));
@@ -755,4 +759,9 @@ public class ResumeDeliveriesTest extends BrokerAdminUsingTestBase
             interaction.doCloseConnection();
         }
     }
+
+    private void assumeReceiverSettlesSecond(final Attach attach)
+    {
+        assumeThat(attach.getRcvSettleMode(), Matchers.is(Matchers.equalTo(ReceiverSettleMode.SECOND)));
+    }
 }


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


[qpid-broker-j] 17/21: QPID-8350: [Tests][AMQP 1.0] Use randomly generated name for unknown destinations in AnonymousTerminusTest

Posted by or...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

orudyy pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/qpid-broker-j.git

commit 019905cfd608061f0bd79f0c26d9b04dbad3205a
Author: Alex Rudyy <or...@apache.org>
AuthorDate: Wed Aug 21 17:11:22 2019 +0100

    QPID-8350: [Tests][AMQP 1.0] Use randomly generated name for unknown destinations in AnonymousTerminusTest
---
 .../anonymousterminus/AnonymousTerminusTest.java     | 20 +++++++++++++-------
 1 file changed, 13 insertions(+), 7 deletions(-)

diff --git a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/extensions/anonymousterminus/AnonymousTerminusTest.java b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/extensions/anonymousterminus/AnonymousTerminusTest.java
index 6449e31..369abf7 100644
--- a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/extensions/anonymousterminus/AnonymousTerminusTest.java
+++ b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/extensions/anonymousterminus/AnonymousTerminusTest.java
@@ -58,6 +58,7 @@ import org.apache.qpid.server.protocol.v1_0.type.transport.Error;
 import org.apache.qpid.server.protocol.v1_0.type.transport.Flow;
 import org.apache.qpid.server.protocol.v1_0.type.transport.Open;
 import org.apache.qpid.server.protocol.v1_0.type.transport.Role;
+import org.apache.qpid.server.util.StringUtil;
 import org.apache.qpid.tests.protocol.Response;
 import org.apache.qpid.tests.protocol.SpecificationTest;
 import org.apache.qpid.tests.protocol.v1_0.FrameTransport;
@@ -139,7 +140,7 @@ public class AnonymousTerminusTest extends BrokerAdminUsingTestBase
                        .consumeResponse(Flow.class)
                        .assertLatestResponse(Flow.class, this::assumeSufficientCredits)
                        .transferDeliveryId()
-                       .transferPayload(generateMessagePayloadToDestination("Unknown"))
+                       .transferPayload(generateMessagePayloadToDestination(getNonExistingDestinationName()))
                        .transferSettled(Boolean.TRUE)
                        .transferDeliveryTag(_deliveryTag)
                        .transfer();
@@ -180,7 +181,7 @@ public class AnonymousTerminusTest extends BrokerAdminUsingTestBase
                        .consumeResponse(Flow.class)
                        .assertLatestResponse(Flow.class, this::assumeSufficientCredits)
                        .transferDeliveryId()
-                       .transferPayload(generateMessagePayloadToDestination("Unknown"))
+                       .transferPayload(generateMessagePayloadToDestination(getNonExistingDestinationName()))
                        .transferDeliveryTag(_deliveryTag)
                        .transfer()
                        .consumeResponse();
@@ -228,7 +229,7 @@ public class AnonymousTerminusTest extends BrokerAdminUsingTestBase
                        .consumeResponse(Flow.class)
                        .assertLatestResponse(Flow.class, this::assumeSufficientCredits)
                        .transferDeliveryId()
-                       .transferPayload(generateMessagePayloadToDestination("Unknown"))
+                       .transferPayload(generateMessagePayloadToDestination(getNonExistingDestinationName()))
                        .transferDeliveryTag(_deliveryTag)
                        .transfer();
 
@@ -344,7 +345,7 @@ public class AnonymousTerminusTest extends BrokerAdminUsingTestBase
                        .assertLatestResponse(Flow.class, this::assumeSufficientCredits)
                        .transferDeliveryId()
                        .transferHandle(linkHandle)
-                       .transferPayload(generateMessagePayloadToDestination("Unknown"))
+                       .transferPayload(generateMessagePayloadToDestination(getNonExistingDestinationName()))
                        .transferDeliveryTag(_deliveryTag)
                        .transferTransactionalStateFromCurrentTransaction()
                        .transferSettled(Boolean.FALSE)
@@ -392,7 +393,7 @@ public class AnonymousTerminusTest extends BrokerAdminUsingTestBase
                        .assertLatestResponse(Flow.class, this::assumeSufficientCredits)
                        .transferDeliveryId()
                        .transferHandle(linkHandle)
-                       .transferPayload(generateMessagePayloadToDestination("Unknown"))
+                       .transferPayload(generateMessagePayloadToDestination(getNonExistingDestinationName()))
                        .transferDeliveryId(UnsignedInteger.valueOf(1))
                        .transferDeliveryTag(_deliveryTag)
                        .transferTransactionalStateFromCurrentTransaction()
@@ -463,7 +464,7 @@ public class AnonymousTerminusTest extends BrokerAdminUsingTestBase
                        .assertLatestResponse(Flow.class, this::assumeSufficientCredits)
                        .transferDeliveryId()
                        .transferHandle(linkHandle)
-                       .transferPayload(generateMessagePayloadToDestination("Unknown"))
+                       .transferPayload(generateMessagePayloadToDestination(getNonExistingDestinationName()))
                        .transferDeliveryTag(_deliveryTag)
                        .transferTransactionalStateFromCurrentTransaction()
                        .transferSettled(Boolean.TRUE)
@@ -530,7 +531,7 @@ public class AnonymousTerminusTest extends BrokerAdminUsingTestBase
                        .assertLatestResponse(Flow.class, this::assumeSufficientCredits)
                        .transferDeliveryId()
                        .transferHandle(linkHandle)
-                       .transferPayload(generateMessagePayloadToDestination("Unknown"))
+                       .transferPayload(generateMessagePayloadToDestination(getNonExistingDestinationName()))
                        .transferDeliveryTag(_deliveryTag)
                        .transferTransactionalStateFromCurrentTransaction()
                        .transferSettled(Boolean.TRUE)
@@ -543,6 +544,11 @@ public class AnonymousTerminusTest extends BrokerAdminUsingTestBase
         }
     }
 
+    private String getNonExistingDestinationName()
+    {
+        return String.format("%sNonExisting%s", getTestName(), new StringUtil().randomAlphaNumericString(10));
+    }
+
     private Disposition getDispositionForDeliveryId(final Interaction interaction,
                                                     final UnsignedInteger deliveryId) throws Exception
     {


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


[qpid-broker-j] 05/21: QPID-8349: [Tests][AMQP 1.0] Improve transaction and transfer tests

Posted by or...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

orudyy pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/qpid-broker-j.git

commit 9f9bfe92980c005eee825f0386307c951b3fafcc
Author: Alex Rudyy <or...@apache.org>
AuthorDate: Tue Aug 20 13:45:54 2019 +0100

    QPID-8349: [Tests][AMQP 1.0] Improve transaction and transfer tests
---
 .../qpid/tests/protocol/v1_0/Interaction.java      | 114 ++++++----
 .../v1_0/InteractionTransactionalState.java        |  12 ++
 .../org/apache/qpid/tests/protocol/v1_0/Utils.java |  13 +-
 .../qpid/tests/protocol/v1_0/DecodeErrorTest.java  | 123 ++++++++---
 .../anonymousterminus/AnonymousTerminusTest.java   |  81 +++----
 .../extensions/qpid/queue/QueueDeletionTest.java   |   4 +-
 .../protocol/v1_0/messaging/MessageFormat.java     |   2 +-
 .../protocol/v1_0/messaging/MultiTransferTest.java |   9 +-
 .../protocol/v1_0/messaging/TransferTest.java      | 238 +++++++++++----------
 .../protocol/v1_0/transaction/DischargeTest.java   | 205 +++++++++---------
 .../transaction/TransactionalTransferTest.java     |  94 ++++----
 .../protocol/v1_0/transport/link/FlowTest.java     | 221 ++++++++++++-------
 .../v1_0/transport/link/ResumeDeliveriesTest.java  |  16 +-
 .../qpid/tests/protocol/AbstractInteraction.java   |   7 +-
 14 files changed, 660 insertions(+), 479 deletions(-)

diff --git a/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/Interaction.java b/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/Interaction.java
index 98ffe45..ab2c959 100644
--- a/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/Interaction.java
+++ b/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/Interaction.java
@@ -20,12 +20,6 @@
 
 package org.apache.qpid.tests.protocol.v1_0;
 
-import static org.hamcrest.CoreMatchers.instanceOf;
-import static org.hamcrest.CoreMatchers.notNullValue;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.equalTo;
-import static org.hamcrest.Matchers.is;
-
 import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -117,6 +111,7 @@ public class Interaction extends AbstractInteraction<Interaction>
     private Map<String, Object> _latestDeliveryApplicationProperties;
     private Map<Class, FrameBody> _latestResponses = new HashMap<>();
     private AtomicLong _receivedDeliveryCount = new AtomicLong();
+    private AtomicLong _coordinatorCredits = new AtomicLong();
 
     Interaction(final FrameTransport frameTransport)
     {
@@ -955,6 +950,12 @@ public class Interaction extends AbstractInteraction<Interaction>
 
     public Interaction txnAttachCoordinatorLink(InteractionTransactionalState transactionalState) throws Exception
     {
+        return txnAttachCoordinatorLink(transactionalState, Accepted.ACCEPTED_SYMBOL, Rejected.REJECTED_SYMBOL);
+    }
+
+    public Interaction txnAttachCoordinatorLink(final InteractionTransactionalState transactionalState,
+                                                final Symbol... outcomes) throws Exception
+    {
         Attach attach = new Attach();
         attach.setName("testTransactionCoordinator-" + transactionalState.getHandle());
         attach.setHandle(transactionalState.getHandle());
@@ -963,70 +964,90 @@ public class Interaction extends AbstractInteraction<Interaction>
         attach.setRole(Role.SENDER);
         Source source = new Source();
         attach.setSource(source);
-        source.setOutcomes(Accepted.ACCEPTED_SYMBOL, Rejected.REJECTED_SYMBOL);
+        source.setOutcomes(outcomes);
         sendPerformativeAndChainFuture(attach, _sessionChannel);
         consumeResponse(Attach.class);
-        consumeResponse(Flow.class);
+        final Flow flow = consumeResponse(Flow.class).getLatestResponse(Flow.class);
+        _coordinatorCredits.set(flow.getLinkCredit().longValue());
         return this;
     }
 
     public Interaction txnDeclare(final InteractionTransactionalState txnState) throws Exception
     {
-        Transfer transfer = createTransactionTransfer(txnState.getHandle());
-        transferPayload(transfer, new Declare());
-        sendPerformativeAndChainFuture(transfer, _sessionChannel);
-        consumeResponse(Disposition.class);
-        Disposition declareTransactionDisposition = getLatestResponse(Disposition.class);
-        assertThat(declareTransactionDisposition.getSettled(), is(equalTo(true)));
-        assertThat(declareTransactionDisposition.getState(), is(instanceOf(Declared.class)));
-        Binary transactionId = ((Declared) declareTransactionDisposition.getState()).getTxnId();
-        assertThat(transactionId, is(notNullValue()));
-        consumeResponse(Flow.class);
+        sendPayloadToCoordinator(new Declare(), txnState.getHandle());
+        final DeliveryState state = handleCoordinatorResponse();
+        txnState.setDeliveryState(state);
+        final Binary transactionId = ((Declared) state).getTxnId();
         txnState.setLastTransactionId(transactionId);
         return this;
     }
 
-    public Interaction discharge(final InteractionTransactionalState txnState, final boolean failed) throws Exception
+    public Interaction txnSendDischarge(final InteractionTransactionalState txnState, final boolean failed)
+            throws Exception
     {
         final Discharge discharge = new Discharge();
         discharge.setTxnId(txnState.getCurrentTransactionId());
         discharge.setFail(failed);
-
-        Transfer transfer = createTransactionTransfer(txnState.getHandle());
-        transferPayload(transfer, discharge);
-        sendPerformativeAndChainFuture(transfer, _sessionChannel);
+        sendPayloadToCoordinator(discharge, txnState.getHandle());
         return this;
     }
 
     public Interaction txnDischarge(final InteractionTransactionalState txnState, boolean failed) throws Exception
     {
-        discharge(txnState, failed);
+        txnSendDischarge(txnState, failed);
+        final DeliveryState state = handleCoordinatorResponse();
+        txnState.setDeliveryState(state);
+        txnState.setLastTransactionId(null);
+        return this;
+    }
+
+    private void sendPayloadToCoordinator(final Object payload, final UnsignedInteger handle)
+            throws Exception
+    {
+        final Transfer transfer = createTransactionTransfer(handle);
+        transferPayload(transfer, payload);
+        sendPerformativeAndChainFuture(transfer, _sessionChannel);
+    }
+
+    private DeliveryState handleCoordinatorResponse() throws Exception
+    {
+        final Set<Class<?>> expected = new HashSet<>(Collections.singletonList(Disposition.class));
 
-        Disposition declareTransactionDisposition = null;
-        Flow coordinatorFlow = null;
+        if (_coordinatorCredits.decrementAndGet() == 0)
+        {
+            expected.add(Flow.class);
+        }
+
+        final Map<Class<?>, ?> responses = consumeResponses(expected);
+
+        final Disposition disposition = (Disposition) responses.get(Disposition.class);
+        if (expected.contains(Flow.class))
+        {
+            Flow flow = (Flow) responses.get(Flow.class);
+            _coordinatorCredits.set(flow.getLinkCredit().longValue());
+        }
+        if (!Boolean.TRUE.equals(disposition.getSettled()))
+        {
+            throw new IllegalStateException("Coordinator disposition is not settled");
+        }
+        return disposition.getState();
+    }
+
+    private Map<Class<?>, ?> consumeResponses(final Set<Class<?>> responseTypes)
+            throws Exception
+    {
+        Map<Class<?>, Object> results = new HashMap<>();
         do
         {
-            consumeResponse(Disposition.class, Flow.class);
-            Response<?> response = getLatestResponse();
-            if (response.getBody() instanceof Disposition)
+            Response<?> response = consumeResponse(responseTypes).getLatestResponse();
+            if (response != null && response.getBody() instanceof FrameBody)
             {
-                declareTransactionDisposition = (Disposition) response.getBody();
+                Class<?> bodyClass = response.getBody().getClass();
+                results.put(bodyClass, response.getBody());
             }
-            if (response.getBody() instanceof Flow)
-            {
-                final Flow flowResponse = (Flow) response.getBody();
-                if (flowResponse.getHandle().equals(txnState.getHandle()))
-                {
-                    coordinatorFlow = flowResponse;
-                }
-            }
-        } while(declareTransactionDisposition == null || coordinatorFlow == null);
-
-        assertThat(declareTransactionDisposition.getSettled(), is(equalTo(true)));
-        assertThat(declareTransactionDisposition.getState(), is(instanceOf(Accepted.class)));
-
-        txnState.setLastTransactionId(null);
-        return this;
+        }
+        while (!results.keySet().containsAll(responseTypes));
+        return results;
     }
 
     private Transfer createTransactionTransfer(final UnsignedInteger handle)
@@ -1034,7 +1055,8 @@ public class Interaction extends AbstractInteraction<Interaction>
         Transfer transfer = new Transfer();
         transfer.setHandle(handle);
         transfer.setDeliveryId(getNextDeliveryId());
-        transfer.setDeliveryTag(new Binary(("transaction-" + transfer.getDeliveryId()).getBytes(StandardCharsets.UTF_8)));
+        transfer.setDeliveryTag(new Binary(("transaction-"
+                                            + transfer.getDeliveryId()).getBytes(StandardCharsets.UTF_8)));
         return transfer;
     }
 
diff --git a/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/InteractionTransactionalState.java b/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/InteractionTransactionalState.java
index 061be92..b0832cc 100644
--- a/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/InteractionTransactionalState.java
+++ b/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/InteractionTransactionalState.java
@@ -21,12 +21,14 @@
 package org.apache.qpid.tests.protocol.v1_0;
 
 import org.apache.qpid.server.protocol.v1_0.type.Binary;
+import org.apache.qpid.server.protocol.v1_0.type.DeliveryState;
 import org.apache.qpid.server.protocol.v1_0.type.UnsignedInteger;
 
 public class InteractionTransactionalState
 {
     private final UnsignedInteger _handle;
     private Binary _lastTransactionId;
+    private DeliveryState _deliveryState;
 
     public InteractionTransactionalState(final UnsignedInteger handle)
     {
@@ -47,4 +49,14 @@ public class InteractionTransactionalState
     {
         return _lastTransactionId;
     }
+
+    public DeliveryState getDeliveryState()
+    {
+        return _deliveryState;
+    }
+
+    public void setDeliveryState(final DeliveryState deliveryState)
+    {
+        _deliveryState = deliveryState;
+    }
 }
diff --git a/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/Utils.java b/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/Utils.java
index e846b5f..2ac50f4 100644
--- a/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/Utils.java
+++ b/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/Utils.java
@@ -20,6 +20,7 @@
 
 package org.apache.qpid.tests.protocol.v1_0;
 
+import static java.nio.charset.StandardCharsets.UTF_8;
 import static org.hamcrest.Matchers.greaterThan;
 import static org.hamcrest.Matchers.is;
 import static org.junit.Assume.assumeThat;
@@ -28,6 +29,7 @@ import java.net.InetSocketAddress;
 import java.util.stream.IntStream;
 
 import org.apache.qpid.server.bytebuffer.QpidByteBuffer;
+import org.apache.qpid.server.protocol.v1_0.type.Binary;
 import org.apache.qpid.server.protocol.v1_0.type.UnsignedInteger;
 import org.apache.qpid.server.protocol.v1_0.type.messaging.Accepted;
 import org.apache.qpid.server.protocol.v1_0.type.messaging.Header;
@@ -37,6 +39,7 @@ import org.apache.qpid.server.protocol.v1_0.type.transport.Detach;
 import org.apache.qpid.server.protocol.v1_0.type.transport.Flow;
 import org.apache.qpid.server.protocol.v1_0.type.transport.Open;
 import org.apache.qpid.server.protocol.v1_0.type.transport.Role;
+import org.apache.qpid.server.protocol.v1_0.type.transport.SenderSettleMode;
 import org.apache.qpid.tests.utils.BrokerAdmin;
 
 public class Utils
@@ -83,7 +86,7 @@ public class Utils
                        .attachSourceAddress(queueName)
                        .attach().consumeResponse()
                        .flowIncomingWindow(UnsignedInteger.ONE)
-                       .flowNextIncomingId(UnsignedInteger.ZERO)
+                       .flowNextIncomingIdFromPeerLatestSessionBeginAndDeliveryCount()
                        .flowOutgoingWindow(UnsignedInteger.ZERO)
                        .flowNextOutgoingId(UnsignedInteger.ZERO)
                        .flowLinkCredit(UnsignedInteger.ONE)
@@ -157,6 +160,7 @@ public class Utils
                                              .begin().consumeResponse(Begin.class)
                                              .attachRole(Role.SENDER)
                                              .attachTargetAddress(BrokerAdmin.TEST_QUEUE_NAME)
+                                             .attachSndSettleMode(SenderSettleMode.SETTLED)
                                              .attach().consumeResponse(Attach.class)
                                              .consumeResponse(Flow.class)
                                              .getLatestResponse(Flow.class);
@@ -166,14 +170,21 @@ public class Utils
                                          message.length),
                            flow.getLinkCredit().intValue(),
                            is(greaterThan(message.length)));
+
+                int tag = 0;
                 for (String payload : message)
                 {
                     interaction.transferPayloadData(payload)
                                .transferSettled(true)
+                               .transferDeliveryId()
+                               .transferDeliveryTag(new Binary(String.valueOf(tag).getBytes(UTF_8)))
                                .transfer()
                                .sync();
+                    tag++;
                 }
+                interaction.doCloseConnection();
             }
         }
     }
+
 }
diff --git a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/DecodeErrorTest.java b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/DecodeErrorTest.java
index 1ca4419..b079122 100644
--- a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/DecodeErrorTest.java
+++ b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/DecodeErrorTest.java
@@ -24,14 +24,18 @@ import static org.apache.qpid.server.protocol.v1_0.type.transport.AmqpError.DECO
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.CoreMatchers.notNullValue;
 import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.greaterThan;
 import static org.hamcrest.Matchers.is;
 import static org.junit.Assert.fail;
+import static org.junit.Assume.assumeThat;
 
 import java.net.InetSocketAddress;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+import java.util.Map;
 
+import org.hamcrest.Matchers;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -39,6 +43,8 @@ import org.apache.qpid.server.bytebuffer.QpidByteBuffer;
 import org.apache.qpid.server.protocol.v1_0.codec.StringWriter;
 import org.apache.qpid.server.protocol.v1_0.type.Symbol;
 import org.apache.qpid.server.protocol.v1_0.type.UnsignedInteger;
+import org.apache.qpid.server.protocol.v1_0.type.messaging.AmqpValue;
+import org.apache.qpid.server.protocol.v1_0.type.messaging.AmqpValueSection;
 import org.apache.qpid.server.protocol.v1_0.type.messaging.DeliveryAnnotations;
 import org.apache.qpid.server.protocol.v1_0.type.messaging.DeliveryAnnotationsSection;
 import org.apache.qpid.server.protocol.v1_0.type.messaging.Header;
@@ -53,11 +59,13 @@ import org.apache.qpid.server.protocol.v1_0.type.transport.End;
 import org.apache.qpid.server.protocol.v1_0.type.transport.Error;
 import org.apache.qpid.server.protocol.v1_0.type.transport.Flow;
 import org.apache.qpid.server.protocol.v1_0.type.transport.Open;
+import org.apache.qpid.server.protocol.v1_0.type.transport.ReceiverSettleMode;
 import org.apache.qpid.server.protocol.v1_0.type.transport.Role;
 import org.apache.qpid.tests.protocol.Response;
 import org.apache.qpid.tests.protocol.SpecificationTest;
 import org.apache.qpid.tests.utils.BrokerAdmin;
 import org.apache.qpid.tests.utils.BrokerAdminUsingTestBase;
+import org.apache.qpid.tests.utils.BrokerSpecific;
 
 public class DecodeErrorTest extends BrokerAdminUsingTestBase
 {
@@ -74,44 +82,46 @@ public class DecodeErrorTest extends BrokerAdminUsingTestBase
     @SpecificationTest(section = "3.2",
             description = "Altogether a message consists of the following sections: Zero or one header,"
                           + " Zero or one delivery-annotations, [...]")
-    public void illegalMessageFormatPayload() throws Exception
+    @BrokerSpecific(kind = BrokerAdmin.KIND_BROKER_J)
+    public void illegalMessage() throws Exception
     {
         try (FrameTransport transport = new FrameTransport(_brokerAddress).connect())
         {
+            final Interaction interaction = transport.newInteraction();
+            final Attach attach = interaction.negotiateProtocol()
+                                             .consumeResponse()
+                                             .open()
+                                             .consumeResponse(Open.class)
+                                             .begin()
+                                             .consumeResponse(Begin.class)
+                                             .attachRole(Role.SENDER)
+                                             .attachTargetAddress(BrokerAdmin.TEST_QUEUE_NAME)
+                                             .attachRcvSettleMode(ReceiverSettleMode.SECOND)
+                                             .attach()
+                                             .consumeResponse(Attach.class)
+                                             .getLatestResponse(Attach.class);
+            assumeThat(attach.getRcvSettleMode(), is(equalTo(ReceiverSettleMode.SECOND)));
 
-            List<QpidByteBuffer> payloads = new ArrayList<>();
-            final HeaderSection headerSection = new Header().createEncodingRetainingSection();
-            payloads.add(headerSection.getEncodedForm());
-            headerSection.dispose();
-            final StringWriter stringWriter = new StringWriter("string in between annotation sections");
-            QpidByteBuffer encodedString = QpidByteBuffer.allocate(stringWriter.getEncodedSize());
-            stringWriter.writeToBuffer(encodedString);
-            encodedString.flip();
-            payloads.add(encodedString);
-            final DeliveryAnnotationsSection
-                    deliveryAnnotationsSection =
-                    new DeliveryAnnotations(Collections.emptyMap()).createEncodingRetainingSection();
-            payloads.add(deliveryAnnotationsSection.getEncodedForm());
-            deliveryAnnotationsSection.dispose();
+            final Flow flow = interaction.consumeResponse(Flow.class).getLatestResponse(Flow.class);
+            assumeThat(flow.getLinkCredit(), is(greaterThan(UnsignedInteger.ZERO)));
 
-            final Detach detachResponse;
-            try (QpidByteBuffer combinedPayload = QpidByteBuffer.concatenate(payloads))
+            final List<QpidByteBuffer> payloads = buildInvalidMessage();
+            try
             {
-                detachResponse = transport.newInteraction()
-                                          .negotiateProtocol().consumeResponse()
-                                          .open().consumeResponse(Open.class)
-                                          .begin().consumeResponse(Begin.class)
-                                          .attachRole(Role.SENDER)
-                                          .attachTargetAddress(BrokerAdmin.TEST_QUEUE_NAME)
-                                          .attach().consumeResponse(Attach.class)
-                                          .consumeResponse(Flow.class)
-                                          .transferMessageFormat(UnsignedInteger.ZERO)
-                                          .transferPayload(combinedPayload)
-                                          .transfer()
-                                          .consumeResponse()
-                                          .getLatestResponse(Detach.class);
+                try (QpidByteBuffer combinedPayload = QpidByteBuffer.concatenate(payloads))
+                {
+                    interaction.transferMessageFormat(UnsignedInteger.ZERO)
+                               .transferPayload(combinedPayload)
+                               .transfer();
+                }
             }
-            payloads.forEach(QpidByteBuffer::dispose);
+            finally
+            {
+                payloads.forEach(QpidByteBuffer::dispose);
+            }
+
+            final Detach detachResponse = interaction.consumeResponse()
+                                                     .getLatestResponse(Detach.class);
             assertThat(detachResponse.getError(), is(notNullValue()));
             assertThat(detachResponse.getError().getCondition(), is(equalTo(DECODE_ERROR)));
         }
@@ -148,6 +158,10 @@ public class DecodeErrorTest extends BrokerAdminUsingTestBase
             {
                 error = ((Close) responseBody).getError();
             }
+            else if (responseBody instanceof Detach)
+            {
+                error = ((Detach) responseBody).getError();
+            }
             else
             {
                 fail(String.format("Expected response of either Detach, End, or Close. Got '%s'", responseBody));
@@ -200,4 +214,51 @@ public class DecodeErrorTest extends BrokerAdminUsingTestBase
             assertThat(error.getCondition(), is(equalTo(DECODE_ERROR)));
         }
     }
+
+    private List<QpidByteBuffer> buildInvalidMessage()
+    {
+        final List<QpidByteBuffer> payloads = new ArrayList<>();
+        final Header header = new Header();
+        header.setTtl(UnsignedInteger.valueOf(1000L));
+        final HeaderSection headerSection = header.createEncodingRetainingSection();
+        try
+        {
+            payloads.add(headerSection.getEncodedForm());
+        }
+        finally
+        {
+            headerSection.dispose();
+        }
+
+        final StringWriter stringWriter = new StringWriter("string in between annotation sections");
+        QpidByteBuffer encodedString = QpidByteBuffer.allocate(stringWriter.getEncodedSize());
+        stringWriter.writeToBuffer(encodedString);
+        encodedString.flip();
+        payloads.add(encodedString);
+
+        final Map<Symbol, Object> annoationMap = Collections.singletonMap(Symbol.valueOf("foo"), "bar");
+        final DeliveryAnnotations annotations = new DeliveryAnnotations(annoationMap);
+        final DeliveryAnnotationsSection deliveryAnnotationsSection = annotations.createEncodingRetainingSection();
+        try
+        {
+
+            payloads.add(deliveryAnnotationsSection.getEncodedForm());
+        }
+        finally
+        {
+            deliveryAnnotationsSection.dispose();
+        }
+
+        final AmqpValueSection payload = new AmqpValue(getTestName()).createEncodingRetainingSection();
+        try
+        {
+            payloads.add(payload.getEncodedForm());
+        }
+        finally
+        {
+            payload.dispose();
+        }
+        return payloads;
+    }
+
 }
diff --git a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/extensions/anonymousterminus/AnonymousTerminusTest.java b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/extensions/anonymousterminus/AnonymousTerminusTest.java
index 1878950..a7ef076 100644
--- a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/extensions/anonymousterminus/AnonymousTerminusTest.java
+++ b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/extensions/anonymousterminus/AnonymousTerminusTest.java
@@ -46,8 +46,6 @@ import org.apache.qpid.server.protocol.v1_0.type.messaging.Accepted;
 import org.apache.qpid.server.protocol.v1_0.type.messaging.Properties;
 import org.apache.qpid.server.protocol.v1_0.type.messaging.Rejected;
 import org.apache.qpid.server.protocol.v1_0.type.messaging.Target;
-import org.apache.qpid.server.protocol.v1_0.type.transaction.Coordinator;
-import org.apache.qpid.server.protocol.v1_0.type.transaction.Discharge;
 import org.apache.qpid.server.protocol.v1_0.type.transaction.TransactionError;
 import org.apache.qpid.server.protocol.v1_0.type.transaction.TransactionalState;
 import org.apache.qpid.server.protocol.v1_0.type.transport.AmqpError;
@@ -104,6 +102,7 @@ public class AnonymousTerminusTest extends BrokerAdminUsingTestBase
                        .attach().consumeResponse(Attach.class)
                        .consumeResponse(Flow.class)
 
+                       .transferDeliveryId()
                        .transferPayload(generateMessagePayloadToDestination(BrokerAdmin.TEST_QUEUE_NAME))
                        .transferSettled(Boolean.TRUE)
                        .transferDeliveryTag(_deliveryTag)
@@ -139,12 +138,13 @@ public class AnonymousTerminusTest extends BrokerAdminUsingTestBase
                        .attach().consumeResponse(Attach.class)
                        .consumeResponse(Flow.class)
 
+                       .transferDeliveryId()
                        .transferPayload(generateMessagePayloadToDestination("Unknown"))
                        .transferSettled(Boolean.TRUE)
                        .transferDeliveryTag(_deliveryTag)
                        .transfer();
 
-            Detach detach = interaction.consumeResponse().getLatestResponse(Detach.class);
+            Detach detach = interaction.consumeResponse(Detach.class).getLatestResponse(Detach.class);
             Error error = detach.getError();
             assertThat(error, is(notNullValue()));
             assertThat(error.getCondition(), is(equalTo(AmqpError.NOT_FOUND)));
@@ -179,6 +179,7 @@ public class AnonymousTerminusTest extends BrokerAdminUsingTestBase
                        .attach().consumeResponse(Attach.class)
                        .consumeResponse(Flow.class)
 
+                       .transferDeliveryId()
                        .transferPayload(generateMessagePayloadToDestination("Unknown"))
                        .transferDeliveryTag(_deliveryTag)
                        .transfer()
@@ -226,6 +227,7 @@ public class AnonymousTerminusTest extends BrokerAdminUsingTestBase
                        .attach().consumeResponse(Attach.class)
                        .consumeResponse(Flow.class)
 
+                       .transferDeliveryId()
                        .transferPayload(generateMessagePayloadToDestination("Unknown"))
                        .transferDeliveryTag(_deliveryTag)
                        .transfer();
@@ -262,6 +264,7 @@ public class AnonymousTerminusTest extends BrokerAdminUsingTestBase
                        .attach().consumeResponse(Attach.class)
                        .consumeResponse(Flow.class)
 
+                       .transferDeliveryId()
                        .transferHandle(linkHandle)
                        .transferPayload(generateMessagePayloadToDestination(BrokerAdmin.TEST_QUEUE_NAME))
                        .transferDeliveryTag(_deliveryTag)
@@ -271,6 +274,8 @@ public class AnonymousTerminusTest extends BrokerAdminUsingTestBase
 
                        .txnDischarge(txnState, false);
 
+            assertThat(txnState.getDeliveryState(), is(instanceOf(Accepted.class)));
+
             Object receivedMessage = Utils.receiveMessage(_brokerAddress, BrokerAdmin.TEST_QUEUE_NAME);
             assertThat(receivedMessage, is(equalTo(TEST_MESSAGE_CONTENT)));
         }
@@ -295,6 +300,7 @@ public class AnonymousTerminusTest extends BrokerAdminUsingTestBase
                        .attach().consumeResponse(Attach.class)
                        .consumeResponse(Flow.class)
 
+                       .transferDeliveryId()
                        .transferHandle(linkHandle)
                        .transferPayload(generateMessagePayloadToDestination(BrokerAdmin.TEST_QUEUE_NAME))
                        .transferDeliveryTag(_deliveryTag)
@@ -314,6 +320,8 @@ public class AnonymousTerminusTest extends BrokerAdminUsingTestBase
 
             interaction.txnDischarge(txnState, false);
 
+            assertThat(txnState.getDeliveryState(), is(instanceOf(Accepted.class)));
+
             Object receivedMessage = Utils.receiveMessage(_brokerAddress, BrokerAdmin.TEST_QUEUE_NAME);
             assertThat(receivedMessage, is(equalTo(TEST_MESSAGE_CONTENT)));
         }
@@ -339,6 +347,7 @@ public class AnonymousTerminusTest extends BrokerAdminUsingTestBase
                        .attach().consumeResponse(Attach.class)
                        .consumeResponse(Flow.class)
 
+                       .transferDeliveryId()
                        .transferHandle(linkHandle)
                        .transferPayload(generateMessagePayloadToDestination("Unknown"))
                        .transferDeliveryTag(_deliveryTag)
@@ -362,6 +371,8 @@ public class AnonymousTerminusTest extends BrokerAdminUsingTestBase
             assertThat(rejectedError.getInfo().get(DELIVERY_TAG), is(equalTo(_deliveryTag)));
 
             interaction.txnDischarge(txnState, false);
+
+            assertThat(txnState.getDeliveryState(), is(instanceOf(Accepted.class)));
         }
     }
 
@@ -385,6 +396,7 @@ public class AnonymousTerminusTest extends BrokerAdminUsingTestBase
                        .attach().consumeResponse(Attach.class)
                        .consumeResponse(Flow.class)
 
+                       .transferDeliveryId()
                        .transferHandle(linkHandle)
                        .transferPayload(generateMessagePayloadToDestination("Unknown"))
                        .transferDeliveryId(UnsignedInteger.valueOf(1))
@@ -400,23 +412,11 @@ public class AnonymousTerminusTest extends BrokerAdminUsingTestBase
             assertThat(senderLinkDetachError.getInfo(), is(notNullValue()));
             assertThat(senderLinkDetachError.getInfo().get(DELIVERY_TAG), is(equalTo(_deliveryTag)));
 
-            final Discharge discharge = new Discharge();
-            discharge.setTxnId(txnState.getCurrentTransactionId());
-            discharge.setFail(false);
-
-            interaction.transferHandle(txnState.getHandle())
-                       .transferSettled(Boolean.FALSE)
-                       .transferDeliveryId(UnsignedInteger.valueOf(2))
-                       .transferDeliveryTag(new Binary(("transaction-" + 2).getBytes(StandardCharsets.UTF_8)))
-                       .transferPayloadData(discharge).transfer();
-
-            Disposition dischargeTransactionDisposition =
-                    getDispositionForDeliveryId(interaction, UnsignedInteger.valueOf(2));
-
-            assertThat(dischargeTransactionDisposition.getSettled(), is(equalTo(true)));
-            assertThat(dischargeTransactionDisposition.getState(), is(instanceOf(Rejected.class)));
+            interaction.txnDischarge(txnState, false);
 
-            Rejected rejected = (Rejected) dischargeTransactionDisposition.getState();
+            DeliveryState txnDischargeDeliveryState = txnState.getDeliveryState();
+            assertThat(txnDischargeDeliveryState, is(instanceOf(Rejected.class)));
+            Rejected rejected = (Rejected) txnDischargeDeliveryState;
             Error error = rejected.getError();
 
             assertThat(error, is(notNullValue()));
@@ -468,30 +468,20 @@ public class AnonymousTerminusTest extends BrokerAdminUsingTestBase
                        .attach().consumeResponse(Attach.class)
                        .consumeResponse(Flow.class)
 
+                       .transferDeliveryId()
                        .transferHandle(linkHandle)
                        .transferPayload(generateMessagePayloadToDestination("Unknown"))
                        .transferDeliveryTag(_deliveryTag)
                        .transferTransactionalState(txnState.getCurrentTransactionId())
                        .transferSettled(Boolean.TRUE)
-                       .transferDeliveryId(UnsignedInteger.valueOf(1))
                        .transfer();
 
-            final Discharge discharge = new Discharge();
-            discharge.setTxnId(txnState.getCurrentTransactionId());
-            discharge.setFail(false);
-            interaction.transferHandle(txnState.getHandle())
-                       .transferDeliveryId(UnsignedInteger.valueOf(2))
-                       .transferSettled(Boolean.FALSE)
-                       .transferDeliveryTag(new Binary(("transaction-" + 2).getBytes(StandardCharsets.UTF_8)))
-                       .transferPayloadData(discharge).transfer();
-
-            Disposition dischargeTransactionDisposition =
-                    getDispositionForDeliveryId(interaction, UnsignedInteger.valueOf(2));
+            interaction.txnDischarge(txnState, false);
 
-            assertThat(dischargeTransactionDisposition.getSettled(), is(equalTo(true)));
-            assertThat(dischargeTransactionDisposition.getState(), is(instanceOf(Rejected.class)));
+            DeliveryState txDischargeDeliveryState = txnState.getDeliveryState();
+            assertThat(txDischargeDeliveryState, is(instanceOf(Rejected.class)));
 
-            Rejected rejected = (Rejected) dischargeTransactionDisposition.getState();
+            Rejected rejected = (Rejected) txDischargeDeliveryState;
             Error error = rejected.getError();
 
             assertThat(error, is(notNullValue()));
@@ -536,14 +526,7 @@ public class AnonymousTerminusTest extends BrokerAdminUsingTestBase
             interaction.begin()
                        .consumeResponse(Begin.class)
 
-                       .attachRole(Role.SENDER)
-                       .attachName("testTransactionCoordinator-" + txnState.getHandle())
-                       .attachHandle(txnState.getHandle())
-                       .attachInitialDeliveryCount(UnsignedInteger.ZERO)
-                       .attachTarget(new Coordinator())
-                       .attachSourceOutcomes(Accepted.ACCEPTED_SYMBOL)
-                       .attach().consumeResponse(Attach.class)
-                       .consumeResponse(Flow.class)
+                       .txnAttachCoordinatorLink(txnState, Accepted.ACCEPTED_SYMBOL)
                        .txnDeclare(txnState)
 
                        .attachRole(Role.SENDER)
@@ -554,22 +537,14 @@ public class AnonymousTerminusTest extends BrokerAdminUsingTestBase
                        .attach().consumeResponse(Attach.class)
                        .consumeResponse(Flow.class)
 
+                       .transferDeliveryId()
                        .transferHandle(linkHandle)
                        .transferPayload(generateMessagePayloadToDestination("Unknown"))
                        .transferDeliveryTag(_deliveryTag)
                        .transferTransactionalState(txnState.getCurrentTransactionId())
                        .transferSettled(Boolean.TRUE)
-                       .transfer();
-
-            final Discharge discharge = new Discharge();
-            discharge.setTxnId(txnState.getCurrentTransactionId());
-            discharge.setFail(false);
-
-            interaction.transferHandle(txnState.getHandle())
-                       .transferSettled(Boolean.FALSE)
-                       .transferDeliveryId(UnsignedInteger.valueOf(4))
-                       .transferDeliveryTag(new Binary(("transaction-" + 4).getBytes(StandardCharsets.UTF_8)))
-                       .transferPayloadData(discharge).transfer();
+                       .transfer()
+                       .txnSendDischarge(txnState, false);
 
             Detach transactionCoordinatorDetach = interaction.consumeResponse().getLatestResponse(Detach.class);
             Error transactionCoordinatorDetachError = transactionCoordinatorDetach.getError();
diff --git a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/extensions/qpid/queue/QueueDeletionTest.java b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/extensions/qpid/queue/QueueDeletionTest.java
index d6eb3d1..39a8a9b 100644
--- a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/extensions/qpid/queue/QueueDeletionTest.java
+++ b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/extensions/qpid/queue/QueueDeletionTest.java
@@ -171,7 +171,7 @@ public class QueueDeletionTest extends BrokerAdminUsingTestBase
             assertThat(receivedDetach.getError().getCondition(), is(AmqpError.RESOURCE_DELETED));
             assertThat(receivedDetach.getHandle(), is(equalTo(attach.getHandle())));
 
-            interaction.discharge(txnState, false);
+            interaction.txnSendDischarge(txnState, false);
 
             assertTransactionRollbackOnly(interaction, txnState);
         }
@@ -244,7 +244,7 @@ public class QueueDeletionTest extends BrokerAdminUsingTestBase
             assertThat(receivedDetach.getError().getCondition(), is(AmqpError.RESOURCE_DELETED));
             assertThat(receivedDetach.getHandle(), is(equalTo(attach.getHandle())));
 
-            interaction.discharge(txnState, false);
+            interaction.txnSendDischarge(txnState, false);
 
             assertTransactionRollbackOnly(interaction, txnState);
         }
diff --git a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/messaging/MessageFormat.java b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/messaging/MessageFormat.java
index 1cf1ff0..6ac8e7f 100644
--- a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/messaging/MessageFormat.java
+++ b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/messaging/MessageFormat.java
@@ -70,7 +70,7 @@ public class MessageFormat extends BrokerAdminUsingTestBase
     {
         try (FrameTransport transport = new FrameTransport(_brokerAddress).connect())
         {
-            QpidByteBuffer[] payloads = Utils.splitPayload("testData", 2);
+            QpidByteBuffer[] payloads = Utils.splitPayload(getTestName(), 2);
 
             final Response<?> latestResponse = transport.newInteraction()
                                                         .negotiateProtocol().consumeResponse()
diff --git a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/messaging/MultiTransferTest.java b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/messaging/MultiTransferTest.java
index ed9e58d..3b421c7 100644
--- a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/messaging/MultiTransferTest.java
+++ b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/messaging/MultiTransferTest.java
@@ -49,6 +49,7 @@ import org.apache.qpid.server.protocol.v1_0.type.transport.End;
 import org.apache.qpid.server.protocol.v1_0.type.transport.Flow;
 import org.apache.qpid.server.protocol.v1_0.type.transport.Open;
 import org.apache.qpid.server.protocol.v1_0.type.transport.Role;
+import org.apache.qpid.tests.protocol.ChannelClosedResponse;
 import org.apache.qpid.tests.protocol.v1_0.FrameTransport;
 import org.apache.qpid.tests.protocol.v1_0.Interaction;
 import org.apache.qpid.tests.protocol.SpecificationTest;
@@ -229,9 +230,11 @@ public class MultiTransferTest extends BrokerAdminUsingTestBase
             {
                 payload.dispose();
             }
-            Response<?> latestResponse = interaction.consumeResponse(new Class<?>[] {null}).getLatestResponse();
-            assertThat(latestResponse, is(nullValue()));
+            interaction.consumeResponse(null, Flow.class);
         }
+        String secondMessage = getTestName() + "_2";
+        Utils.putMessageOnQueue(getBrokerAdmin(), BrokerAdmin.TEST_QUEUE_NAME, secondMessage);
+        assertThat(Utils.receiveMessage(_brokerAddress, BrokerAdmin.TEST_QUEUE_NAME), is(equalTo(secondMessage)));
     }
 
     @Test
@@ -387,7 +390,7 @@ public class MultiTransferTest extends BrokerAdminUsingTestBase
                 payload.dispose();
             }
 
-            interaction.consumeResponse(Detach.class, End.class, Close.class);
+            interaction.consumeResponse(Detach.class, End.class, Close.class, ChannelClosedResponse.class);
         }
     }
 }
diff --git a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/messaging/TransferTest.java b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/messaging/TransferTest.java
index 7950741..42f5dfc 100644
--- a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/messaging/TransferTest.java
+++ b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/messaging/TransferTest.java
@@ -38,6 +38,7 @@ import static org.junit.Assume.assumeThat;
 
 import java.net.InetSocketAddress;
 import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 import java.util.TreeSet;
@@ -62,7 +63,6 @@ import org.apache.qpid.server.protocol.v1_0.type.messaging.Accepted;
 import org.apache.qpid.server.protocol.v1_0.type.messaging.Header;
 import org.apache.qpid.server.protocol.v1_0.type.messaging.Received;
 import org.apache.qpid.server.protocol.v1_0.type.messaging.Rejected;
-import org.apache.qpid.server.protocol.v1_0.type.transaction.Discharge;
 import org.apache.qpid.server.protocol.v1_0.type.transport.AmqpError;
 import org.apache.qpid.server.protocol.v1_0.type.transport.Attach;
 import org.apache.qpid.server.protocol.v1_0.type.transport.Begin;
@@ -78,6 +78,7 @@ import org.apache.qpid.server.protocol.v1_0.type.transport.ReceiverSettleMode;
 import org.apache.qpid.server.protocol.v1_0.type.transport.Role;
 import org.apache.qpid.server.protocol.v1_0.type.transport.SenderSettleMode;
 import org.apache.qpid.server.protocol.v1_0.type.transport.Transfer;
+import org.apache.qpid.tests.protocol.ChannelClosedResponse;
 import org.apache.qpid.tests.protocol.Response;
 import org.apache.qpid.tests.protocol.SpecificationTest;
 import org.apache.qpid.tests.protocol.v1_0.FrameTransport;
@@ -121,13 +122,13 @@ public class TransferTest extends BrokerAdminUsingTestBase
 
     @Test
     @SpecificationTest(section = "1.3.4",
-            description = "Transfer without mandatory fields should result in a decoding error.")
+            description = "mandatory [...] a non null value for the field is always encoded.")
     public void emptyTransfer() throws Exception
     {
         try (FrameTransport transport = new FrameTransport(_brokerAddress).connect())
         {
-            Close responseClose = transport.newInteraction()
-                                           .negotiateProtocol().consumeResponse()
+            Interaction interact = transport.newInteraction();
+            Response<?> response = interact.negotiateProtocol().consumeResponse()
                                            .open().consumeResponse(Open.class)
                                            .begin().consumeResponse(Begin.class)
                                            .attachRole(Role.SENDER)
@@ -136,9 +137,27 @@ public class TransferTest extends BrokerAdminUsingTestBase
                                            .transferHandle(null)
                                            .transfer()
                                            .consumeResponse()
-                                           .getLatestResponse(Close.class);
-            assertThat(responseClose.getError(), is(notNullValue()));
-            assertThat(responseClose.getError().getCondition(), equalTo(AmqpError.DECODE_ERROR));
+                                           .getLatestResponse();
+
+            assertThat(response.getBody(), is(notNullValue()));
+
+            if (response.getBody() instanceof Close)
+            {
+                final Close responseClose = (Close)response.getBody();
+                assertThat(responseClose.getError(), is(notNullValue()));
+                assertThat(responseClose.getError().getCondition(), equalTo(AmqpError.DECODE_ERROR));
+
+                interact.close().sync();
+            }
+            else if (response.getBody() instanceof End)
+            {
+                final End responseEnd = (End)response.getBody();
+                assertThat(responseEnd.getError(), is(notNullValue()));
+                assertThat(responseEnd.getError().getCondition(), equalTo(AmqpError.DECODE_ERROR));
+
+                interact.end().doCloseConnection();
+            }
+            transport.assertNoMoreResponses();
         }
     }
 
@@ -158,10 +177,11 @@ public class TransferTest extends BrokerAdminUsingTestBase
                                                  .attachTargetAddress(BrokerAdmin.TEST_QUEUE_NAME)
                                                  .attach().consumeResponse(Attach.class)
                                                  .consumeResponse(Flow.class)
+                                                 .transferDeliveryId()
                                                  .transferDeliveryTag(null)
                                                  .transferPayloadData(getTestName())
                                                  .transfer();
-            interaction.consumeResponse(Detach.class, End.class, Close.class);
+            interaction.consumeResponse(Detach.class, End.class, Close.class, ChannelClosedResponse.class);
         }
     }
 
@@ -182,6 +202,7 @@ public class TransferTest extends BrokerAdminUsingTestBase
                                                        .attachHandle(linkHandle)
                                                        .attach().consumeResponse(Attach.class)
                                                        .consumeResponse(Flow.class)
+                                                       .transferDeliveryId()
                                                        .transferHandle(linkHandle)
                                                        .transferPayloadData(getTestName())
                                                        .transfer()
@@ -283,12 +304,18 @@ public class TransferTest extends BrokerAdminUsingTestBase
 
     @Test
     @SpecificationTest(section = "2.7.5",
-            description = "If the negotiated link value is first, then it is illegal to set this field to second.")
+            description = "rcv-settle-mode "
+                          + "If first, this indicates that the receiver MUST settle the delivery once it has arrived"
+                          + " without waiting for the sender to settle first."
+                          + " If second, this indicates that the receiver MUST NOT settle until sending its disposition"
+                          + " to the sender and receiving a settled disposition from the sender."
+                          + " If not set, this value is defaulted to the value negotiated on link attach."
+                          + " If the negotiated link value is first, then it is illegal to set this field to second.")
     public void transferReceiverSettleModeCannotBeSecondWhenLinkModeIsFirst() throws Exception
     {
         try (FrameTransport transport = new FrameTransport(_brokerAddress).connect())
         {
-            Detach detach = transport.newInteraction()
+            Response<?> response = transport.newInteraction()
                                      .negotiateProtocol().consumeResponse()
                                      .open().consumeResponse(Open.class)
                                      .begin().consumeResponse(Begin.class)
@@ -301,10 +328,24 @@ public class TransferTest extends BrokerAdminUsingTestBase
                                      .transferRcvSettleMode(ReceiverSettleMode.SECOND)
                                      .transfer()
                                      .consumeResponse()
-                                     .getLatestResponse(Detach.class);
-            Error error = detach.getError();
-            assertThat(error, is(notNullValue()));
-            assertThat(error.getCondition(), is(equalTo(AmqpError.INVALID_FIELD)));
+                                     .getLatestResponse();
+
+            if (response.getBody() instanceof Detach)
+            {
+                final Detach detach = (Detach) response.getBody();
+                Error error = detach.getError();
+                assertThat(error, is(notNullValue()));
+                assertThat(error.getCondition(), is(equalTo(AmqpError.INVALID_FIELD)));
+            }
+            else
+            {
+                if (response.getBody() instanceof Disposition)
+                {
+                    // clean up
+                    Utils.receiveMessage(_brokerAddress, BrokerAdmin.TEST_QUEUE_NAME);
+                }
+                fail("it is illegal to set transfer 'rcv-settle-mode' to 'second' when link 'rcv-settle-mode' is set to 'first'");
+            }
         }
     }
 
@@ -366,6 +407,7 @@ public class TransferTest extends BrokerAdminUsingTestBase
                                                                                    Rejected.REJECTED_SYMBOL)
                                                              .attach().consumeResponse(Attach.class)
                                                              .consumeResponse(Flow.class)
+                                                             .transferDeliveryId()
                                                              .transferPayload(messageEncoder.getPayload())
                                                              .transferRcvSettleMode(ReceiverSettleMode.FIRST)
                                                              .transfer()
@@ -411,6 +453,7 @@ public class TransferTest extends BrokerAdminUsingTestBase
                                                   .attachSourceOutcomes(Accepted.ACCEPTED_SYMBOL)
                                                   .attach().consumeResponse(Attach.class)
                                                   .consumeResponse(Flow.class)
+                                                  .transferDeliveryId()
                                                   .transferPayload(messageEncoder.getPayload())
                                                   .transferRcvSettleMode(ReceiverSettleMode.FIRST)
                                                   .transfer()
@@ -453,7 +496,7 @@ public class TransferTest extends BrokerAdminUsingTestBase
                                                      .attachSourceAddress(BrokerAdmin.TEST_QUEUE_NAME)
                                                      .attach().consumeResponse()
                                                      .flowIncomingWindow(UnsignedInteger.ONE)
-                                                     .flowNextIncomingId(UnsignedInteger.ZERO)
+                                                     .flowNextIncomingIdFromPeerLatestSessionBeginAndDeliveryCount()
                                                      .flowOutgoingWindow(UnsignedInteger.ZERO)
                                                      .flowNextOutgoingId(UnsignedInteger.ZERO)
                                                      .flowLinkCredit(UnsignedInteger.ONE)
@@ -493,7 +536,7 @@ public class TransferTest extends BrokerAdminUsingTestBase
                                                      .attachRcvSettleMode(ReceiverSettleMode.FIRST)
                                                      .attach().consumeResponse()
                                                      .flowIncomingWindow(UnsignedInteger.ONE)
-                                                     .flowNextIncomingId(UnsignedInteger.ZERO)
+                                                     .flowNextIncomingIdFromPeerLatestSessionBeginAndDeliveryCount()
                                                      .flowOutgoingWindow(UnsignedInteger.ZERO)
                                                      .flowNextOutgoingId(UnsignedInteger.ZERO)
                                                      .flowLinkCredit(UnsignedInteger.ONE)
@@ -519,8 +562,6 @@ public class TransferTest extends BrokerAdminUsingTestBase
     @SpecificationTest(section = "2.6.12", description = "Transferring A Message.")
     public void receiveTransferReceiverSettleSecond() throws Exception
     {
-        Utils.putMessageOnQueue(getBrokerAdmin(), BrokerAdmin.TEST_QUEUE_NAME, getTestName());
-
         try (FrameTransport transport = new FrameTransport(_brokerAddress).connect())
         {
             final Interaction interaction = transport.newInteraction()
@@ -532,19 +573,22 @@ public class TransferTest extends BrokerAdminUsingTestBase
                                                      .attachRcvSettleMode(ReceiverSettleMode.SECOND)
                                                      .attach().consumeResponse()
                                                      .flowIncomingWindow(UnsignedInteger.ONE)
-                                                     .flowNextIncomingId(UnsignedInteger.ZERO)
+                                                     .flowNextIncomingIdFromPeerLatestSessionBeginAndDeliveryCount()
                                                      .flowOutgoingWindow(UnsignedInteger.ZERO)
                                                      .flowNextOutgoingId(UnsignedInteger.ZERO)
                                                      .flowLinkCredit(UnsignedInteger.ONE)
                                                      .flowHandleFromLinkHandle()
-                                                     .flow()
-                                                     .receiveDelivery()
-                                                     .decodeLatestDelivery();
+                                                     .flow();
 
-            Object data = interaction.getDecodedLatestDelivery();
+            Utils.putMessageOnQueue(getBrokerAdmin(), BrokerAdmin.TEST_QUEUE_NAME, getTestName());
+
+            Object data = interaction.receiveDelivery()
+                                     .decodeLatestDelivery()
+                                     .getDecodedLatestDelivery();
             assertThat(data, is(equalTo(getTestName())));
 
             Disposition disposition = interaction.dispositionSettled(false)
+                                                 .dispositionFirstFromLatestDelivery()
                                                  .dispositionRole(Role.RECEIVER)
                                                  .dispositionState(new Accepted())
                                                  .disposition()
@@ -552,8 +596,11 @@ public class TransferTest extends BrokerAdminUsingTestBase
                                                  .getLatestResponse(Disposition.class);
             assertThat(disposition.getSettled(), is(true));
 
-            interaction.consumeResponse(null, Flow.class);
-
+            interaction.dispositionSettled(true)
+                       .dispositionFirstFromLatestDelivery()
+                       .dispositionRole(Role.RECEIVER)
+                       .dispositionState(new Accepted())
+                       .disposition();
         }
     }
 
@@ -561,8 +608,6 @@ public class TransferTest extends BrokerAdminUsingTestBase
     @SpecificationTest(section = "2.6.12", description = "Transferring A Message.")
     public void receiveTransferReceiverSettleSecondWithRejectedOutcome() throws Exception
     {
-        Utils.putMessageOnQueue(getBrokerAdmin(), BrokerAdmin.TEST_QUEUE_NAME, getTestName());
-
         try (FrameTransport transport = new FrameTransport(_brokerAddress).connect())
         {
             final Interaction interaction = transport.newInteraction()
@@ -575,17 +620,20 @@ public class TransferTest extends BrokerAdminUsingTestBase
                                                      .attachRcvSettleMode(ReceiverSettleMode.SECOND)
                                                      .attach().consumeResponse()
                                                      .flowIncomingWindow(UnsignedInteger.ONE)
-                                                     .flowNextIncomingId(UnsignedInteger.ZERO)
+                                                     .flowNextIncomingIdFromPeerLatestSessionBeginAndDeliveryCount()
                                                      .flowOutgoingWindow(UnsignedInteger.ZERO)
                                                      .flowNextOutgoingId(UnsignedInteger.ZERO)
                                                      .flowLinkCredit(UnsignedInteger.ONE)
                                                      .flowHandleFromLinkHandle()
                                                      .flow();
 
+            Utils.putMessageOnQueue(getBrokerAdmin(), BrokerAdmin.TEST_QUEUE_NAME, getTestName());
+
             Object data = interaction.receiveDelivery().decodeLatestDelivery().getDecodedLatestDelivery();
             assertThat(data, is(equalTo(getTestName())));
 
             interaction.dispositionSettled(false)
+                       .dispositionFirstFromLatestDelivery()
                        .dispositionRole(Role.RECEIVER)
                        .dispositionState(new Rejected())
                        .disposition()
@@ -599,9 +647,11 @@ public class TransferTest extends BrokerAdminUsingTestBase
             Disposition disposition = interaction.getLatestResponse(Disposition.class);
             assertThat(disposition.getSettled(), is(true));
 
-            interaction.consumeResponse(null, Flow.class);
-
-
+            interaction.dispositionSettled(true)
+                       .dispositionFirstFromLatestDelivery()
+                       .dispositionRole(Role.RECEIVER)
+                       .dispositionState(new Rejected())
+                       .disposition();
 
         }
         assertThat(Utils.receiveMessage(_brokerAddress, BrokerAdmin.TEST_QUEUE_NAME), is(equalTo(getTestName())));
@@ -627,7 +677,7 @@ public class TransferTest extends BrokerAdminUsingTestBase
                                                      .attachSourceDefaultOutcome(null)
                                                      .attach().consumeResponse()
                                                      .flowIncomingWindow(UnsignedInteger.ONE)
-                                                     .flowNextIncomingId(UnsignedInteger.ZERO)
+                                                     .flowNextIncomingIdFromPeerLatestSessionBeginAndDeliveryCount()
                                                      .flowOutgoingWindow(UnsignedInteger.ZERO)
                                                      .flowNextOutgoingId(UnsignedInteger.ZERO)
                                                      .flowLinkCredit(UnsignedInteger.ONE)
@@ -640,6 +690,7 @@ public class TransferTest extends BrokerAdminUsingTestBase
             assertThat(data, is(equalTo(getTestName())));
 
             Disposition disposition = interaction.dispositionSettled(false)
+                                                 .dispositionFirstFromLatestDelivery()
                                                  .dispositionRole(Role.RECEIVER)
                                                  .dispositionState(null)
                                                  .disposition()
@@ -658,7 +709,6 @@ public class TransferTest extends BrokerAdminUsingTestBase
                                                          + " non-terminal delivery states to the sender")
     public void receiveTransferReceiverIndicatesNonTerminalDeliveryState() throws Exception
     {
-        String testMessageData;
         try (FrameTransport transport = new FrameTransport(_brokerAddress).connect())
         {
             final Interaction interaction = transport.newInteraction();
@@ -667,19 +717,13 @@ public class TransferTest extends BrokerAdminUsingTestBase
                                    .openMaxFrameSize(UnsignedInteger.valueOf(4096))
                                    .open().consumeResponse()
                                    .getLatestResponse(Open.class);
-
-            int negotiatedFrameSize = open.getMaxFrameSize().intValue();
-            testMessageData = Stream.generate(() -> "*").limit(negotiatedFrameSize).collect(Collectors.joining());
-
-            Utils.putMessageOnQueue(getBrokerAdmin(), BrokerAdmin.TEST_QUEUE_NAME, testMessageData);
-
             interaction.begin().consumeResponse()
                        .attachRole(Role.RECEIVER)
                        .attachSourceAddress(BrokerAdmin.TEST_QUEUE_NAME)
                        .attachRcvSettleMode(ReceiverSettleMode.SECOND)
                        .attach().consumeResponse()
                        .flowIncomingWindow(UnsignedInteger.ONE)
-                       .flowNextIncomingId(UnsignedInteger.ZERO)
+                       .flowNextIncomingIdFromPeerLatestSessionBeginAndDeliveryCount()
                        .flowOutgoingWindow(UnsignedInteger.ZERO)
                        .flowNextOutgoingId(UnsignedInteger.ZERO)
                        .flowLinkCredit(UnsignedInteger.ONE)
@@ -687,6 +731,11 @@ public class TransferTest extends BrokerAdminUsingTestBase
                        .flow()
                        .sync();
 
+            final int negotiatedFrameSize = open.getMaxFrameSize().intValue();
+            final String testMessageData = Stream.generate(() -> "*").limit(negotiatedFrameSize).collect(Collectors.joining());
+
+            Utils.putMessageOnQueue(getBrokerAdmin(), BrokerAdmin.TEST_QUEUE_NAME, testMessageData);
+
             MessageDecoder messageDecoder = new MessageDecoder();
 
             Transfer first = interaction.consumeResponse(Transfer.class)
@@ -745,14 +794,14 @@ public class TransferTest extends BrokerAdminUsingTestBase
             assumeThat(attach.getSndSettleMode(), is(equalTo(SenderSettleMode.SETTLED)));
 
             interaction.flowIncomingWindow(UnsignedInteger.ONE)
-                                                     .flowNextIncomingId(UnsignedInteger.ZERO)
-                                                     .flowOutgoingWindow(UnsignedInteger.ZERO)
-                                                     .flowNextOutgoingId(UnsignedInteger.ZERO)
-                                                     .flowLinkCredit(UnsignedInteger.ONE)
-                                                     .flowHandleFromLinkHandle()
-                                                     .flow();
+                       .flowNextIncomingIdFromPeerLatestSessionBeginAndDeliveryCount()
+                       .flowOutgoingWindow(UnsignedInteger.ZERO)
+                       .flowNextOutgoingId(UnsignedInteger.ZERO)
+                       .flowLinkCredit(UnsignedInteger.ONE)
+                       .flowHandleFromLinkHandle()
+                       .flow();
 
-            List<Transfer> transfers = interaction.receiveDelivery().getLatestDelivery();
+            final List<Transfer> transfers = interaction.receiveDelivery().getLatestDelivery();
             final AtomicBoolean isSettled = new AtomicBoolean();
             transfers.forEach(transfer -> { if (Boolean.TRUE.equals(transfer.getSettled())) { isSettled.set(true);}});
 
@@ -762,10 +811,6 @@ public class TransferTest extends BrokerAdminUsingTestBase
             interaction.doCloseConnection();
         }
 
-        if (getBrokerAdmin().isQueueDepthSupported())
-        {
-            assertThat(getBrokerAdmin().getQueueDepthMessages(BrokerAdmin.TEST_QUEUE_NAME), is(equalTo(0)));
-        }
         Utils.putMessageOnQueue(getBrokerAdmin(), BrokerAdmin.TEST_QUEUE_NAME, "test");
         assertThat(Utils.receiveMessage(_brokerAddress, BrokerAdmin.TEST_QUEUE_NAME), is(equalTo("test")));
     }
@@ -793,17 +838,13 @@ public class TransferTest extends BrokerAdminUsingTestBase
                        .attachTargetAddress(BrokerAdmin.TEST_QUEUE_NAME)
                        .attach()
                        .consumeResponse(Attach.class)
-                       .consumeResponse(Flow.class);
-
-            Flow flow = interaction.getLatestResponse(Flow.class);
-            assertThat(flow.getLinkCredit().intValue(), is(greaterThan(1)));
-
-            interaction.transferDeliveryId(UnsignedInteger.ZERO)
+                       .consumeResponse(Flow.class)
+                       .transferDeliveryId()
                        .transferDeliveryTag(deliveryTag)
                        .transferPayloadData(content1)
                        .transfer()
                        .transferDeliveryTag(deliveryTag)
-                       .transferDeliveryId(UnsignedInteger.ONE)
+                       .transferDeliveryId()
                        .transferPayloadData(getTestName() + "_2")
                        .transfer()
                        .sync();
@@ -1019,28 +1060,21 @@ public class TransferTest extends BrokerAdminUsingTestBase
             interaction.txnAttachCoordinatorLink(txnState)
                        .txnDeclare(txnState);
 
-            interaction.transferDeliveryId(UnsignedInteger.ONE)
+            interaction.transferDeliveryId()
                        .transferDeliveryTag(new Binary("A".getBytes(StandardCharsets.UTF_8)))
                        .transferPayloadData(contents[0])
                        .transfer()
-                       .transferDeliveryId(UnsignedInteger.valueOf(2))
+                       .transferDeliveryId()
                        .transferDeliveryTag(new Binary("B".getBytes(StandardCharsets.UTF_8)))
                        .transferPayloadData(contents[1])
                        .transfer()
-                       .transferDeliveryId(UnsignedInteger.valueOf(3))
+                       .transferDeliveryId()
                        .transferDeliveryTag(new Binary("C".getBytes(StandardCharsets.UTF_8)))
                        .transferTransactionalState(txnState.getCurrentTransactionId())
                        .transferPayloadData(contents[2])
                        .transfer();
 
-            final Discharge discharge = new Discharge();
-            discharge.setTxnId(txnState.getCurrentTransactionId());
-            discharge.setFail(false);
-
-            interaction.transferHandle(txnState.getHandle())
-                       .transferDeliveryId(UnsignedInteger.valueOf(4))
-                       .transferDeliveryTag(new Binary(("transaction-" + 4).getBytes(StandardCharsets.UTF_8)))
-                       .transferPayloadData(discharge).transfer();
+            interaction.txnSendDischarge(txnState, false);
 
             assertDeliveries(interaction, Sets.newTreeSet(Arrays.asList(UnsignedInteger.ONE,
                                                                         UnsignedInteger.valueOf(2),
@@ -1069,39 +1103,32 @@ public class TransferTest extends BrokerAdminUsingTestBase
                                                      .attachRcvSettleMode(ReceiverSettleMode.FIRST)
                                                      .attach().consumeResponse()
                                                      .flowIncomingWindow(UnsignedInteger.valueOf(numberOfMessages))
-                                                     .flowNextIncomingId(UnsignedInteger.ZERO)
+                                                     .flowNextIncomingIdFromPeerLatestSessionBeginAndDeliveryCount()
                                                      .flowOutgoingWindow(UnsignedInteger.ZERO)
                                                      .flowNextOutgoingId(UnsignedInteger.ZERO)
                                                      .flowLinkCredit(UnsignedInteger.valueOf(numberOfMessages))
                                                      .flowHandleFromLinkHandle()
                                                      .flow();
 
-            for (int i = 0; i < contents.length; i++)
+            UnsignedInteger firstDeliveryId = null;
+            for (final String content : contents)
             {
                 interaction.receiveDelivery(Flow.class).decodeLatestDelivery();
                 Object data = interaction.getDecodedLatestDelivery();
-                assertThat(data, is(equalTo(contents[i])));
-                assertThat(interaction.getLatestDeliveryId(), is(equalTo(UnsignedInteger.valueOf(i))));
+                assertThat(data, is(equalTo(content)));
+                if (firstDeliveryId == null)
+                {
+                    firstDeliveryId = interaction.getLatestDeliveryId();
+                }
             }
 
             interaction.dispositionSettled(true)
                        .dispositionRole(Role.RECEIVER)
-                       .dispositionFirst(UnsignedInteger.ZERO)
+                       .dispositionFirst(firstDeliveryId)
                        .dispositionLast(interaction.getLatestDeliveryId())
                        .dispositionState(new Accepted())
                        .disposition();
-
-            // make sure sure the disposition is handled by making drain request
-            interaction.flowLinkCredit(UnsignedInteger.ONE)
-                       .flowNextIncomingId(UnsignedInteger.valueOf(numberOfMessages))
-                       .flowDrain(Boolean.TRUE)
-                       .flow()
-                       .consumeResponse(Flow.class);
-
-            if (getBrokerAdmin().isQueueDepthSupported())
-            {
-                assertThat(getBrokerAdmin().getQueueDepthMessages(BrokerAdmin.TEST_QUEUE_NAME), is(equalTo(0)));
-            }
+            interaction.doCloseConnection();
         }
 
         final String messageText = getTestName() + "_" + 4;
@@ -1116,7 +1143,6 @@ public class TransferTest extends BrokerAdminUsingTestBase
     {
         final int numberOfMessages = 4;
         final String[] contents = Utils.createTestMessageContents(numberOfMessages, getTestName());
-        Utils.putMessageOnQueue(getBrokerAdmin(), BrokerAdmin.TEST_QUEUE_NAME, contents);
 
         try (FrameTransport transport = new FrameTransport(_brokerAddress).connect())
         {
@@ -1130,19 +1156,22 @@ public class TransferTest extends BrokerAdminUsingTestBase
                                                      .attachHandle(UnsignedInteger.ZERO)
                                                      .attach().consumeResponse()
                                                      .flowIncomingWindow(UnsignedInteger.valueOf(numberOfMessages))
-                                                     .flowNextIncomingId(UnsignedInteger.ZERO)
+                                                     .flowNextIncomingIdFromPeerLatestSessionBeginAndDeliveryCount()
                                                      .flowOutgoingWindow(UnsignedInteger.ZERO)
                                                      .flowNextOutgoingId(UnsignedInteger.ZERO)
                                                      .flowLinkCredit(UnsignedInteger.valueOf(numberOfMessages))
                                                      .flowHandleFromLinkHandle()
                                                      .flow();
 
-            for (int i = 0; i < contents.length; i++)
+            Utils.putMessageOnQueue(getBrokerAdmin(), BrokerAdmin.TEST_QUEUE_NAME, contents);
+
+            final List<UnsignedInteger> deliveryIds = new ArrayList<>();
+            for (final String content : contents)
             {
                 interaction.receiveDelivery(Flow.class).decodeLatestDelivery();
                 Object data = interaction.getDecodedLatestDelivery();
-                assertThat(data, is(equalTo(contents[i])));
-                assertThat(interaction.getLatestDeliveryId(), is(equalTo(UnsignedInteger.valueOf(i))));
+                assertThat(data, is(equalTo(content)));
+                deliveryIds.add(interaction.getLatestDeliveryId());
             }
 
             final InteractionTransactionalState txnState = interaction.createTransactionalState(UnsignedInteger.ONE);
@@ -1151,31 +1180,18 @@ public class TransferTest extends BrokerAdminUsingTestBase
 
             interaction.dispositionSettled(true)
                        .dispositionRole(Role.RECEIVER)
-                       .dispositionFirst(UnsignedInteger.ZERO)
-                       .dispositionLast(UnsignedInteger.ONE)
+                       .dispositionFirst(deliveryIds.get(0))
+                       .dispositionLast(deliveryIds.get(1))
                        .dispositionState(new Accepted())
                        .disposition()
                        .dispositionSettled(true)
                        .dispositionRole(Role.RECEIVER)
-                       .dispositionFirst(UnsignedInteger.valueOf(2))
-                       .dispositionLast(UnsignedInteger.valueOf(3))
+                       .dispositionFirst(deliveryIds.get(2))
+                       .dispositionLast(deliveryIds.get(3))
                        .dispositionTransactionalState(txnState.getCurrentTransactionId(), new Accepted())
                        .disposition();
 
-
-            final Discharge discharge = new Discharge();
-            discharge.setTxnId(txnState.getCurrentTransactionId());
-            discharge.setFail(false);
-
-            interaction.transferHandle(txnState.getHandle())
-                       .transferDeliveryId(UnsignedInteger.valueOf(4))
-                       .transferDeliveryTag(new Binary(("transaction-" + 4).getBytes(StandardCharsets.UTF_8)))
-                       .transferPayloadData(discharge)
-                       .transfer();
-
-
-            final Flow coordinatorFlow = interaction.consume(Flow.class, Disposition.class);
-            assertThat(coordinatorFlow.getHandle(), is(equalTo(txnState.getHandle())));
+            interaction.txnDischarge(txnState, false);
         }
 
         String messageText = getTestName() + "_" + 4;
@@ -1203,6 +1219,10 @@ public class TransferTest extends BrokerAdminUsingTestBase
                               expectedDeliveryIds.remove(deliveryId);
                           });
             }
+            else if (response.getBody() instanceof Flow)
+            {
+                // ignore flows
+            }
         }
         while (!expectedDeliveryIds.isEmpty());
     }
diff --git a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transaction/DischargeTest.java b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transaction/DischargeTest.java
index 32a96b0..85040c8 100644
--- a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transaction/DischargeTest.java
+++ b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transaction/DischargeTest.java
@@ -21,6 +21,7 @@
 package org.apache.qpid.tests.protocol.v1_0.transaction;
 
 import static java.nio.charset.StandardCharsets.UTF_8;
+import static org.apache.qpid.tests.utils.BrokerAdmin.KIND_BROKER_J;
 import static org.hamcrest.CoreMatchers.instanceOf;
 import static org.hamcrest.CoreMatchers.not;
 import static org.hamcrest.CoreMatchers.notNullValue;
@@ -28,7 +29,6 @@ import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.empty;
 import static org.hamcrest.Matchers.equalTo;
 import static org.hamcrest.Matchers.is;
-import static org.junit.Assume.assumeThat;
 
 import java.net.InetSocketAddress;
 import java.util.List;
@@ -40,10 +40,7 @@ import org.apache.qpid.server.protocol.v1_0.type.Binary;
 import org.apache.qpid.server.protocol.v1_0.type.UnsignedInteger;
 import org.apache.qpid.server.protocol.v1_0.type.messaging.Accepted;
 import org.apache.qpid.server.protocol.v1_0.type.messaging.Rejected;
-import org.apache.qpid.server.protocol.v1_0.type.transaction.Coordinator;
-import org.apache.qpid.server.protocol.v1_0.type.transaction.Declare;
 import org.apache.qpid.server.protocol.v1_0.type.transaction.Declared;
-import org.apache.qpid.server.protocol.v1_0.type.transaction.Discharge;
 import org.apache.qpid.server.protocol.v1_0.type.transaction.TransactionError;
 import org.apache.qpid.server.protocol.v1_0.type.transport.Attach;
 import org.apache.qpid.server.protocol.v1_0.type.transport.Begin;
@@ -55,10 +52,10 @@ import org.apache.qpid.server.protocol.v1_0.type.transport.Open;
 import org.apache.qpid.server.protocol.v1_0.type.transport.ReceiverSettleMode;
 import org.apache.qpid.server.protocol.v1_0.type.transport.Role;
 import org.apache.qpid.server.protocol.v1_0.type.transport.Transfer;
+import org.apache.qpid.tests.protocol.SpecificationTest;
 import org.apache.qpid.tests.protocol.v1_0.FrameTransport;
 import org.apache.qpid.tests.protocol.v1_0.Interaction;
 import org.apache.qpid.tests.protocol.v1_0.InteractionTransactionalState;
-import org.apache.qpid.tests.protocol.SpecificationTest;
 import org.apache.qpid.tests.protocol.v1_0.Utils;
 import org.apache.qpid.tests.utils.BrokerAdmin;
 import org.apache.qpid.tests.utils.BrokerAdminUsingTestBase;
@@ -76,86 +73,76 @@ public class DischargeTest extends BrokerAdminUsingTestBase
 
     @Test
     @SpecificationTest(section = "4.3",
-            description = "If the coordinator is unable to complete the discharge, the coordinator MUST convey the error to the controller "
-                          + "as a transaction-error. If the source for the link to the coordinator supports the rejected outcome, then the "
-                          + "message MUST be rejected with this outcome carrying the transaction-error.")
+            description = "If the coordinator is unable to complete the discharge,"
+                          + " the coordinator MUST convey the error to the controller as a transaction-error."
+                          + " If the source for the link to the coordinator supports the rejected outcome, then the "
+                          + " message MUST be rejected with this outcome carrying the transaction-error.")
     public void dischargeUnknownTransactionIdWhenSourceSupportsRejectedOutcome() throws Exception
     {
         try (FrameTransport transport = new FrameTransport(_brokerAddress).connect())
         {
+            final InteractionTransactionalState txnState = new InteractionTransactionalState(UnsignedInteger.ZERO);
             final Interaction interaction = transport.newInteraction();
-            final Disposition disposition = interaction.negotiateProtocol().consumeResponse()
-                                                       .open().consumeResponse(Open.class)
-                                                       .begin().consumeResponse(Begin.class)
-                                                       .attachRole(Role.SENDER)
-                                                       .attachSourceOutcomes(Rejected.REJECTED_SYMBOL)
-                                                       .attachTarget(new Coordinator())
-                                                       .attach().consumeResponse(Attach.class)
-                                                       .consumeResponse(Flow.class)
-                                                       .transferPayloadData(new Declare())
-                                                       .transfer().consumeResponse()
-                                                       .getLatestResponse(Disposition.class);
-
-            assertThat(disposition.getSettled(), is(equalTo(true)));
-            assertThat(disposition.getState(), is(instanceOf(Declared.class)));
-            assertThat(((Declared) disposition.getState()).getTxnId(), is(notNullValue()));
-
-            interaction.consumeResponse(Flow.class);
-
-            final Discharge discharge = new Discharge();
-            discharge.setTxnId(new Binary("nonExistingTransaction".getBytes(UTF_8)));
-            final Disposition dischargeDisposition = interaction.transferDeliveryId(UnsignedInteger.ONE)
-                                                                .transferDeliveryTag(new Binary("discharge".getBytes(UTF_8)))
-                                                                .transferPayloadData(discharge)
-                                                                .transfer().consumeResponse()
-                                                                .getLatestResponse(Disposition.class);
-            assertThat(dischargeDisposition.getState(), is(instanceOf(Rejected.class)));
-            final Error error = ((Rejected) dischargeDisposition.getState()).getError();
+            interaction.negotiateProtocol().consumeResponse()
+                       .open().consumeResponse(Open.class)
+                       .begin().consumeResponse(Begin.class)
+
+                       .txnAttachCoordinatorLink(txnState, Rejected.REJECTED_SYMBOL)
+                       .txnDeclare(txnState);
+
+            assertThat(txnState.getDeliveryState(), is(instanceOf(Declared.class)));
+            assertThat(txnState.getCurrentTransactionId(), is(notNullValue()));
+
+            txnState.setLastTransactionId(new Binary("nonExistingTransaction".getBytes(UTF_8)));
+            interaction.txnDischarge(txnState, false);
+            interaction.doCloseConnection();
+
+            assertThat(txnState.getDeliveryState(), is(instanceOf(Rejected.class)));
+            final Error error = ((Rejected) txnState.getDeliveryState()).getError();
             assertThat(error, is(notNullValue()));
-            assertThat(error.getCondition(), is(equalTo(TransactionError.UNKNOWN_ID)));
+
+            if (KIND_BROKER_J.equals(getBrokerAdmin().getKind()))
+            {
+                assertThat(error.getCondition(), is(equalTo(TransactionError.UNKNOWN_ID)));
+            }
         }
     }
 
     @Test
     @SpecificationTest(section = "4.3",
-            description = "If the coordinator is unable to complete the discharge, the coordinator MUST convey the error to the controller "
-                          + "as a transaction-error. [...] If the source does not support "
-                          + "the rejected outcome, the transactional resource MUST detach the link to the coordinator, with the detach "
-                          + "performative carrying the transaction-error.")
+            description = "If the coordinator is unable to complete the discharge,"
+                          + " the coordinator MUST convey the error to the controller as a transaction-error."
+                          + " [...] If the source does not support the rejected outcome, the transactional resource"
+                          + " MUST detach the link to the coordinator, with the detach performative carrying"
+                          + " the transaction-error.")
     public void dischargeUnknownTransactionIdWhenSourceDoesNotSupportRejectedOutcome() throws Exception
     {
         try (FrameTransport transport = new FrameTransport(_brokerAddress).connect())
         {
+            final InteractionTransactionalState txnState = new InteractionTransactionalState(UnsignedInteger.ZERO);
             final Interaction interaction = transport.newInteraction();
-            final Disposition disposition = interaction.negotiateProtocol().consumeResponse()
-                                                       .open().consumeResponse(Open.class)
-                                                       .begin().consumeResponse(Begin.class)
-                                                       .attachRole(Role.SENDER)
-                                                       .attachSourceOutcomes(Accepted.ACCEPTED_SYMBOL)
-                                                       .attachTarget(new Coordinator())
-                                                       .attach().consumeResponse(Attach.class)
-                                                       .consumeResponse(Flow.class)
-                                                       .transferPayloadData(new Declare())
-                                                       .transfer().consumeResponse()
-                                                       .getLatestResponse(Disposition.class);
-
-
-            assertThat(disposition.getSettled(), is(equalTo(true)));
-            assertThat(disposition.getState(), is(instanceOf(Declared.class)));
-            assertThat(((Declared) disposition.getState()).getTxnId(), is(notNullValue()));
-
-            interaction.consumeResponse(Flow.class);
-
-            final Discharge discharge = new Discharge();
-            discharge.setTxnId(new Binary("nonExistingTransaction".getBytes(UTF_8)));
-            final Detach detachResponse = interaction.transferDeliveryId(UnsignedInteger.ONE)
-                                                                .transferDeliveryTag(new Binary("discharge".getBytes(UTF_8)))
-                                                                .transferPayloadData(discharge)
-                                                                .transfer().consumeResponse(Detach.class)
-                                                                .getLatestResponse(Detach.class);
-            Error error = detachResponse.getError();
+            interaction.negotiateProtocol().consumeResponse()
+                                           .open().consumeResponse(Open.class)
+                                           .begin().consumeResponse(Begin.class)
+                                           .txnAttachCoordinatorLink(txnState, Accepted.ACCEPTED_SYMBOL)
+                                           .txnDeclare(txnState);
+
+            assertThat(txnState.getDeliveryState(), is(instanceOf(Declared.class)));
+            assertThat(txnState.getCurrentTransactionId(), is(notNullValue()));
+
+            txnState.setLastTransactionId(new Binary("nonExistingTransaction".getBytes(UTF_8)));
+            interaction.txnSendDischarge(txnState, false);
+
+            final Detach detachResponse = interaction.consumeResponse(Detach.class).getLatestResponse(Detach.class);
+            interaction.doCloseConnection();
+
+            final Error error = detachResponse.getError();
             assertThat(error, is(notNullValue()));
-            assertThat(error.getCondition(), is(equalTo(TransactionError.UNKNOWN_ID)));
+
+            if (KIND_BROKER_J.equals(getBrokerAdmin().getKind()))
+            {
+                assertThat(error.getCondition(), is(equalTo(TransactionError.UNKNOWN_ID)));
+            }
         }
     }
 
@@ -167,33 +154,34 @@ public class DischargeTest extends BrokerAdminUsingTestBase
                           + " desired transaction identifier and the outcome to be applied upon a successful discharge.")
     public void dischargeSettledAfterReceiverDetach() throws Exception
     {
-        assumeThat(getBrokerAdmin().isQueueDepthSupported(), is(true));
-
-        Utils.putMessageOnQueue(getBrokerAdmin(), BrokerAdmin.TEST_QUEUE_NAME, "test message");
         try (FrameTransport transport = new FrameTransport(_brokerAddress).connect())
         {
             final Interaction interaction = transport.newInteraction();
             final InteractionTransactionalState txnState = interaction.createTransactionalState(UnsignedInteger.ZERO);
-            List<Transfer> transfers = interaction.negotiateProtocol().consumeResponse()
-                                                  .open().consumeResponse(Open.class)
-                                                  .begin().consumeResponse(Begin.class)
-
-                                                  .txnAttachCoordinatorLink(txnState)
-                                                  .txnDeclare(txnState)
-
-                                                  .attachRole(Role.RECEIVER)
-                                                  .attachHandle(UnsignedInteger.ONE)
-                                                  .attachSourceAddress(BrokerAdmin.TEST_QUEUE_NAME)
-                                                  .attachRcvSettleMode(ReceiverSettleMode.FIRST)
-                                                  .attach().consumeResponse(Attach.class)
-
-                                                  .flowIncomingWindow(UnsignedInteger.ONE)
-                                                  .flowLinkCredit(UnsignedInteger.ONE)
-                                                  .flowHandleFromLinkHandle()
-                                                  .flow()
-
-                                                  .receiveDelivery()
-                                                  .getLatestDelivery();
+            interaction.negotiateProtocol().consumeResponse()
+                       .open().consumeResponse(Open.class)
+                       .begin().consumeResponse(Begin.class)
+
+                       .txnAttachCoordinatorLink(txnState)
+                       .txnDeclare(txnState)
+
+                       .attachRole(Role.RECEIVER)
+                       .attachHandle(UnsignedInteger.ONE)
+                       .attachSourceAddress(BrokerAdmin.TEST_QUEUE_NAME)
+                       .attachRcvSettleMode(ReceiverSettleMode.FIRST)
+                       .attach().consumeResponse(Attach.class)
+
+                       .flowNextIncomingIdFromPeerLatestSessionBeginAndDeliveryCount()
+                       .flowNextOutgoingId(UnsignedInteger.ZERO)
+                       .flowOutgoingWindow(UnsignedInteger.ZERO)
+                       .flowIncomingWindow(UnsignedInteger.ONE)
+                       .flowLinkCredit(UnsignedInteger.ONE)
+                       .flowHandleFromLinkHandle()
+                       .flow();
+
+            Utils.putMessageOnQueue(getBrokerAdmin(), BrokerAdmin.TEST_QUEUE_NAME, getTestName());
+
+            List<Transfer> transfers = interaction.receiveDelivery().getLatestDelivery();
             assertThat(transfers, is(notNullValue()));
             assertThat(transfers, is(not(empty())));
             final UnsignedInteger deliveryId = transfers.get(0).getDeliveryId();
@@ -204,8 +192,15 @@ public class DischargeTest extends BrokerAdminUsingTestBase
                        .disposition()
                        .txnDischarge(txnState, false);
 
-            assertThat(getBrokerAdmin().getQueueDepthMessages(BrokerAdmin.TEST_QUEUE_NAME), is(equalTo(0)));
+            assertThat(txnState.getDeliveryState(), is(instanceOf(Accepted.class)));
+
+            interaction.doCloseConnection();
         }
+
+        String secondMessage = getTestName() + "_2";
+        Utils.putMessageOnQueue(getBrokerAdmin(), BrokerAdmin.TEST_QUEUE_NAME, secondMessage);
+        Object receivedMessage = Utils.receiveMessage(_brokerAddress, BrokerAdmin.TEST_QUEUE_NAME);
+        assertThat(receivedMessage, is(equalTo(secondMessage)));
     }
 
     @Test
@@ -219,8 +214,6 @@ public class DischargeTest extends BrokerAdminUsingTestBase
                           + " was associated.")
     public void dischargeSettledAfterSenderDetach() throws Exception
     {
-        assumeThat(getBrokerAdmin().isQueueDepthSupported(), is(true));
-
         try (FrameTransport transport = new FrameTransport(_brokerAddress).connect())
         {
             final Interaction interaction = transport.newInteraction();
@@ -238,20 +231,21 @@ public class DischargeTest extends BrokerAdminUsingTestBase
                        .attach().consumeResponse(Attach.class)
                        .consumeResponse(Flow.class)
 
+                       .transferDeliveryId()
                        .transferTransactionalState(txnState.getCurrentTransactionId())
-                       .transferPayloadData("test message")
+                       .transferPayloadData(getTestName())
                        .transferHandle(UnsignedInteger.ONE)
                        .transfer().consumeResponse(Disposition.class)
 
                        .detachHandle(UnsignedInteger.ONE)
                        .detach().consumeResponse(Detach.class);
-
-            assertThat(getBrokerAdmin().getQueueDepthMessages(BrokerAdmin.TEST_QUEUE_NAME), is(equalTo(0)));
-
             interaction.txnDischarge(txnState, false);
 
-            assertThat(getBrokerAdmin().getQueueDepthMessages(BrokerAdmin.TEST_QUEUE_NAME), is(equalTo(1)));
+            assertThat(txnState.getDeliveryState(), is(instanceOf(Accepted.class)));
         }
+
+        final Object receivedMessage = Utils.receiveMessage(_brokerAddress, BrokerAdmin.TEST_QUEUE_NAME);
+        assertThat(receivedMessage, is(equalTo(getTestName())));
     }
 
     @Test
@@ -262,8 +256,6 @@ public class DischargeTest extends BrokerAdminUsingTestBase
                           + " reflect the outcome that was applied.")
     public void dischargeUnsettledAfterSenderClose() throws Exception
     {
-        assumeThat(getBrokerAdmin().isQueueDepthSupported(), is(true));
-
         try (FrameTransport transport = new FrameTransport(_brokerAddress).connect())
         {
             final Interaction interaction = transport.newInteraction();
@@ -282,21 +274,22 @@ public class DischargeTest extends BrokerAdminUsingTestBase
                        .attach().consumeResponse(Attach.class)
                        .consumeResponse(Flow.class)
 
+                       .transferDeliveryId()
                        .transferTransactionalState(txnState.getCurrentTransactionId())
-                       .transferPayloadData("test message")
+                       .transferPayloadData(getTestName())
                        .transferHandle(UnsignedInteger.ONE)
                        .transfer().consumeResponse(Disposition.class)
 
                        .detachHandle(UnsignedInteger.ONE)
                        .detachClose(true)
                        .detach().consumeResponse(Detach.class);
-
-            assertThat(getBrokerAdmin().getQueueDepthMessages(BrokerAdmin.TEST_QUEUE_NAME), is(equalTo(0)));
-
             interaction.txnDischarge(txnState, false);
 
-            assertThat(getBrokerAdmin().getQueueDepthMessages(BrokerAdmin.TEST_QUEUE_NAME), is(equalTo(1)));
+            assertThat(txnState.getDeliveryState(), is(instanceOf(Accepted.class)));
         }
+
+        final Object receivedMessage = Utils.receiveMessage(_brokerAddress, BrokerAdmin.TEST_QUEUE_NAME);
+        assertThat(receivedMessage, is(equalTo(getTestName())));
     }
 
 }
diff --git a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transaction/TransactionalTransferTest.java b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transaction/TransactionalTransferTest.java
index 853fdd9..f44790f 100644
--- a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transaction/TransactionalTransferTest.java
+++ b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transaction/TransactionalTransferTest.java
@@ -26,6 +26,7 @@ import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.equalTo;
 import static org.hamcrest.Matchers.is;
 import static org.junit.Assert.fail;
+import static org.junit.Assume.assumeThat;
 
 import java.net.InetSocketAddress;
 import java.util.Collections;
@@ -102,6 +103,7 @@ public class TransactionalTransferTest extends BrokerAdminUsingTestBase
                                                          .attach().consumeResponse(Attach.class)
                                                          .consumeResponse(Flow.class)
 
+                                                         .transferDeliveryId()
                                                          .transferHandle(linkHandle)
                                                          .transferPayloadData(getTestName())
                                                          .transferTransactionalState(txnState.getCurrentTransactionId())
@@ -116,9 +118,10 @@ public class TransactionalTransferTest extends BrokerAdminUsingTestBase
 
             interaction.txnDischarge(txnState, false);
 
-            Object receivedMessage = Utils.receiveMessage(_brokerAddress, BrokerAdmin.TEST_QUEUE_NAME);
-            assertThat(receivedMessage, is(equalTo(getTestName())));
+            assertThat(txnState.getDeliveryState(), is(instanceOf(Accepted.class)));
         }
+        Object receivedMessage = Utils.receiveMessage(_brokerAddress, BrokerAdmin.TEST_QUEUE_NAME);
+        assertThat(receivedMessage, is(equalTo(getTestName())));
     }
 
     @Test
@@ -150,6 +153,7 @@ public class TransactionalTransferTest extends BrokerAdminUsingTestBase
                                                          .attach().consumeResponse(Attach.class)
                                                          .consumeResponse(Flow.class)
 
+                                                         .transferDeliveryId()
                                                          .transferHandle(linkHandle)
                                                          .transferPayloadData(getTestName())
                                                          .transferTransactionalState(txnState.getCurrentTransactionId())
@@ -164,16 +168,11 @@ public class TransactionalTransferTest extends BrokerAdminUsingTestBase
 
             interaction.txnDischarge(txnState, true);
 
-            if (getBrokerAdmin().isQueueDepthSupported())
-            {
-                assertThat(getBrokerAdmin().getQueueDepthMessages(BrokerAdmin.TEST_QUEUE_NAME), is(equalTo(0)));
-            }
-            else
-            {
-                final String content = getTestName() + "_2";
-                Utils.putMessageOnQueue(getBrokerAdmin(), BrokerAdmin.TEST_QUEUE_NAME, content);
-                assertThat(Utils.receiveMessage(_brokerAddress, BrokerAdmin.TEST_QUEUE_NAME), is(equalTo(content)));
-            }
+            assertThat(txnState.getDeliveryState(), is(instanceOf(Accepted.class)));
+
+            final String content = getTestName() + "_2";
+            Utils.putMessageOnQueue(getBrokerAdmin(), BrokerAdmin.TEST_QUEUE_NAME, content);
+            assertThat(Utils.receiveMessage(_brokerAddress, BrokerAdmin.TEST_QUEUE_NAME), is(equalTo(content)));
         }
     }
 
@@ -204,9 +203,11 @@ public class TransactionalTransferTest extends BrokerAdminUsingTestBase
                                                          .attachTargetAddress(BrokerAdmin.TEST_QUEUE_NAME)
                                                          .attachRcvSettleMode(ReceiverSettleMode.SECOND)
                                                          .attachHandle(linkHandle)
-                                                         .attach().consumeResponse(Attach.class)
+                                                         .attach()
+                                                         .consumeResponse(Attach.class)
                                                          .consumeResponse(Flow.class)
 
+                                                         .transferDeliveryId()
                                                          .transferHandle(linkHandle)
                                                          .transferPayloadData(getTestName())
                                                          .transferTransactionalState(txnState.getCurrentTransactionId())
@@ -225,6 +226,8 @@ public class TransactionalTransferTest extends BrokerAdminUsingTestBase
                        .disposition();
 
             interaction.txnDischarge(txnState, false);
+
+            assertThat(txnState.getDeliveryState(), is(instanceOf(Accepted.class)));
         }
         assertThat(Utils.receiveMessage(_brokerAddress, BrokerAdmin.TEST_QUEUE_NAME), is(equalTo(getTestName())));
     }
@@ -255,6 +258,7 @@ public class TransactionalTransferTest extends BrokerAdminUsingTestBase
                                               .attach().consumeResponse(Attach.class)
                                               .consumeResponse(Flow.class)
 
+                                              .transferDeliveryId()
                                               .transferHandle(linkHandle)
                                               .transferPayloadData(getTestName())
                                               .transferTransactionalState(integerToBinary(Integer.MAX_VALUE))
@@ -295,7 +299,7 @@ public class TransactionalTransferTest extends BrokerAdminUsingTestBase
                        .consumeResponse(Attach.class)
 
                        .flowIncomingWindow(UnsignedInteger.ONE)
-                       .flowNextIncomingId(UnsignedInteger.ZERO)
+                       .flowNextIncomingIdFromPeerLatestSessionBeginAndDeliveryCount()
                        .flowOutgoingWindow(UnsignedInteger.ZERO)
                        .flowNextOutgoingId(UnsignedInteger.ZERO)
                        .flowLinkCredit(UnsignedInteger.ONE)
@@ -313,6 +317,9 @@ public class TransactionalTransferTest extends BrokerAdminUsingTestBase
                        .dispositionTransactionalState(txnState.getCurrentTransactionId(), new Accepted())
                        .disposition()
                        .txnDischarge(txnState, false);
+
+
+            assertThat(txnState.getDeliveryState(), is(instanceOf(Accepted.class)));
         }
     }
 
@@ -344,7 +351,7 @@ public class TransactionalTransferTest extends BrokerAdminUsingTestBase
                        .consumeResponse(Attach.class)
 
                        .flowIncomingWindow(UnsignedInteger.ONE)
-                       .flowNextIncomingId(UnsignedInteger.ZERO)
+                       .flowNextIncomingIdFromPeerLatestSessionBeginAndDeliveryCount()
                        .flowOutgoingWindow(UnsignedInteger.ZERO)
                        .flowNextOutgoingId(UnsignedInteger.ZERO)
                        .flowLinkCredit(UnsignedInteger.ONE)
@@ -363,6 +370,8 @@ public class TransactionalTransferTest extends BrokerAdminUsingTestBase
                        .disposition()
                        .txnDischarge(txnState, true);
 
+            assertThat(txnState.getDeliveryState(), is(instanceOf(Accepted.class)));
+
             Object receivedMessage = Utils.receiveMessage(_brokerAddress, BrokerAdmin.TEST_QUEUE_NAME);
             assertThat(receivedMessage, is(equalTo(getTestName())));
         }
@@ -396,7 +405,7 @@ public class TransactionalTransferTest extends BrokerAdminUsingTestBase
                                                   .attach().consumeResponse(Attach.class)
 
                                                   .flowIncomingWindow(UnsignedInteger.ONE)
-                                                  .flowNextIncomingId(UnsignedInteger.ZERO)
+                                                  .flowNextIncomingIdFromPeerLatestSessionBeginAndDeliveryCount()
                                                   .flowOutgoingWindow(UnsignedInteger.ZERO)
                                                   .flowNextOutgoingId(UnsignedInteger.ZERO)
                                                   .flowLinkCredit(UnsignedInteger.ONE)
@@ -421,7 +430,10 @@ public class TransactionalTransferTest extends BrokerAdminUsingTestBase
                                               .consumeResponse().getLatestResponse();
             assertUnknownTransactionIdError(response);
         }
-        assertThat(Utils.receiveMessage(_brokerAddress, BrokerAdmin.TEST_QUEUE_NAME), is(equalTo(getTestName())));
+        finally
+        {
+            assertThat(Utils.receiveMessage(_brokerAddress, BrokerAdmin.TEST_QUEUE_NAME), is(equalTo(getTestName())));
+        }
     }
 
     @Ignore("TODO disposition is currently not being sent by Broker")
@@ -479,6 +491,8 @@ public class TransactionalTransferTest extends BrokerAdminUsingTestBase
             assertThat(((TransactionalState) settledDisposition.getState()).getOutcome(), is(instanceOf(Accepted.class)));
 
             interaction.txnDischarge(txnState, false);
+
+            assertThat(txnState.getDeliveryState(), is(instanceOf(Accepted.class)));
         }
     }
 
@@ -514,7 +528,7 @@ public class TransactionalTransferTest extends BrokerAdminUsingTestBase
                        .consumeResponse(Attach.class)
 
                        .flowIncomingWindow(UnsignedInteger.ONE)
-                       .flowNextIncomingId(UnsignedInteger.ZERO)
+                       .flowNextIncomingIdFromPeerLatestSessionBeginAndDeliveryCount()
                        .flowOutgoingWindow(UnsignedInteger.ZERO)
                        .flowNextOutgoingId(UnsignedInteger.ZERO)
                        .flowLinkCredit(UnsignedInteger.ONE)
@@ -526,9 +540,6 @@ public class TransactionalTransferTest extends BrokerAdminUsingTestBase
 
             List<Transfer> transfers = interaction.getLatestDelivery();
             assertThat(transfers.size(), is(equalTo(1)));
-            Transfer transfer = transfers.get(0);
-            assertThat(transfer.getState(), is(instanceOf(TransactionalState.class)));
-            assertThat(((TransactionalState) transfer.getState()).getTxnId(), is(equalTo(txnState.getCurrentTransactionId())));
 
             Object data = interaction.decodeLatestDelivery().getDecodedLatestDelivery();
             assertThat(data, is(equalTo(getTestName())));
@@ -536,19 +547,20 @@ public class TransactionalTransferTest extends BrokerAdminUsingTestBase
             interaction.dispositionSettled(true)
                        .dispositionRole(Role.RECEIVER)
                        .dispositionTransactionalState(txnState.getCurrentTransactionId(), new Accepted())
+                       .dispositionFirstFromLatestDelivery()
                        .disposition()
                        .txnDischarge(txnState, false);
 
-            if (getBrokerAdmin().isQueueDepthSupported())
-            {
-                assertThat(getBrokerAdmin().getQueueDepthMessages(BrokerAdmin.TEST_QUEUE_NAME), is(equalTo(0)));
-            }
-            else
-            {
-                final String content = getTestName() + "_2";
-                Utils.putMessageOnQueue(getBrokerAdmin(), BrokerAdmin.TEST_QUEUE_NAME, content);
-                assertThat(Utils.receiveMessage(_brokerAddress, BrokerAdmin.TEST_QUEUE_NAME), is(equalTo(content)));
-            }
+
+            assertThat(txnState.getDeliveryState(), is(instanceOf(Accepted.class)));
+
+            Transfer transfer = transfers.get(0);
+            assumeThat(transfer.getState(), is(instanceOf(TransactionalState.class)));
+            assumeThat(((TransactionalState) transfer.getState()).getTxnId(), is(equalTo(txnState.getCurrentTransactionId())));
+
+            final String content = getTestName() + "_2";
+            Utils.putMessageOnQueue(getBrokerAdmin(), BrokerAdmin.TEST_QUEUE_NAME, content);
+            assertThat(Utils.receiveMessage(_brokerAddress, BrokerAdmin.TEST_QUEUE_NAME), is(equalTo(content)));
         }
     }
 
@@ -584,7 +596,7 @@ public class TransactionalTransferTest extends BrokerAdminUsingTestBase
                        .consumeResponse(Attach.class)
 
                        .flowIncomingWindow(UnsignedInteger.ONE)
-                       .flowNextIncomingId(UnsignedInteger.ZERO)
+                       .flowNextIncomingIdFromPeerLatestSessionBeginAndDeliveryCount()
                        .flowOutgoingWindow(UnsignedInteger.ZERO)
                        .flowNextOutgoingId(UnsignedInteger.ZERO)
                        .flowLinkCredit(UnsignedInteger.ONE)
@@ -596,9 +608,6 @@ public class TransactionalTransferTest extends BrokerAdminUsingTestBase
 
             List<Transfer> transfers = interaction.getLatestDelivery();
             assertThat(transfers.size(), is(equalTo(1)));
-            Transfer transfer = transfers.get(0);
-            assertThat(transfer.getState(), is(instanceOf(TransactionalState.class)));
-            assertThat(((TransactionalState) transfer.getState()).getTxnId(), is(equalTo(txnState.getCurrentTransactionId())));
 
             Object data = interaction.decodeLatestDelivery().getDecodedLatestDelivery();
             assertThat(data, is(equalTo(getTestName())));
@@ -609,11 +618,13 @@ public class TransactionalTransferTest extends BrokerAdminUsingTestBase
                        .disposition()
                        .txnDischarge(txnState, true);
 
-            if (getBrokerAdmin().isQueueDepthSupported())
-            {
-                assertThat(getBrokerAdmin().getQueueDepthMessages(BrokerAdmin.TEST_QUEUE_NAME), is(equalTo(1)));
-            }
+            assertThat(txnState.getDeliveryState(), is(instanceOf(Accepted.class)));
+
             assertThat(Utils.receiveMessage(_brokerAddress, BrokerAdmin.TEST_QUEUE_NAME), is(equalTo(getTestName())));
+
+            Transfer transfer = transfers.get(0);
+            assumeThat(transfer.getState(), is(instanceOf(TransactionalState.class)));
+            assumeThat(((TransactionalState) transfer.getState()).getTxnId(), is(equalTo(txnState.getCurrentTransactionId())));
         }
     }
 
@@ -661,7 +672,10 @@ public class TransactionalTransferTest extends BrokerAdminUsingTestBase
 
             assertUnknownTransactionIdError(response);
         }
-        assertThat(Utils.receiveMessage(_brokerAddress, BrokerAdmin.TEST_QUEUE_NAME), is(equalTo(getTestName())));
+        finally
+        {
+            assertThat(Utils.receiveMessage(_brokerAddress, BrokerAdmin.TEST_QUEUE_NAME), is(equalTo(getTestName())));
+        }
     }
 
     private void assertUnknownTransactionIdError(final Response<?> response)
diff --git a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/link/FlowTest.java b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/link/FlowTest.java
index 1bfa6d3..448de42 100644
--- a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/link/FlowTest.java
+++ b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/link/FlowTest.java
@@ -21,6 +21,7 @@
 package org.apache.qpid.tests.protocol.v1_0.transport.link;
 
 import static org.hamcrest.CoreMatchers.equalTo;
+import static org.hamcrest.CoreMatchers.instanceOf;
 import static org.hamcrest.CoreMatchers.notNullValue;
 import static org.hamcrest.CoreMatchers.nullValue;
 import static org.hamcrest.MatcherAssert.assertThat;
@@ -42,6 +43,7 @@ import org.apache.qpid.server.protocol.v1_0.type.transport.Flow;
 import org.apache.qpid.server.protocol.v1_0.type.transport.Open;
 import org.apache.qpid.server.protocol.v1_0.type.transport.Role;
 import org.apache.qpid.server.protocol.v1_0.type.transport.SessionError;
+import org.apache.qpid.tests.protocol.Response;
 import org.apache.qpid.tests.protocol.SpecificationTest;
 import org.apache.qpid.tests.protocol.v1_0.FrameTransport;
 import org.apache.qpid.tests.protocol.v1_0.Interaction;
@@ -53,7 +55,7 @@ public class FlowTest extends BrokerAdminUsingTestBase
 {
     @Test
     @SpecificationTest(section = "1.3.4",
-            description = "Flow without mandatory fields should result in a decoding error.")
+            description = "mandatory [...] a non null value for the field is always encoded.")
     public void emptyFlow() throws Exception
     {
         getBrokerAdmin().createQueue(BrokerAdmin.TEST_QUEUE_NAME);
@@ -69,7 +71,7 @@ public class FlowTest extends BrokerAdminUsingTestBase
                                            .flowOutgoingWindow(null)
                                            .flowNextOutgoingId(null)
                                            .flow()
-                                           .consumeResponse()
+                                           .consumeResponse(Close.class)
                                            .getLatestResponse(Close.class);
             assertThat(responseClose.getError(), is(notNullValue()));
             assertThat(responseClose.getError().getCondition(), is(AmqpError.DECODE_ERROR));
@@ -89,6 +91,11 @@ public class FlowTest extends BrokerAdminUsingTestBase
                                          .open().consumeResponse(Open.class)
                                          .begin().consumeResponse(Begin.class)
                                          .flowEcho(true)
+                                         .flowOutgoingWindow(UnsignedInteger.ZERO)
+                                         .flowNextOutgoingId(UnsignedInteger.ZERO)
+                                         .flowNextIncomingIdFromPeerLatestSessionBeginAndDeliveryCount()
+                                         .flowIncomingWindow(UnsignedInteger.ONE)
+                                         .flowHandle(null)
                                          .flow()
                                          .consumeResponse()
                                          .getLatestResponse(Flow.class);
@@ -118,7 +125,10 @@ public class FlowTest extends BrokerAdminUsingTestBase
                                          .flowHandleFromLinkHandle()
                                          .flowAvailable(UnsignedInteger.valueOf(10))
                                          .flowDeliveryCount(UnsignedInteger.ZERO)
-                                         .flowLinkCredit(UnsignedInteger.ZERO)
+                                         .flowLinkCredit(UnsignedInteger.ONE)
+                                         .flowOutgoingWindow(UnsignedInteger.ZERO)
+                                         .flowNextOutgoingId(UnsignedInteger.ZERO)
+                                         .flowNextIncomingIdFromPeerLatestSessionBeginAndDeliveryCount()
                                          .flow().consumeResponse()
                                          .getLatestResponse(Flow.class);
             assertThat(responseFlow.getEcho(), not(equalTo(Boolean.TRUE)));
@@ -146,7 +156,7 @@ public class FlowTest extends BrokerAdminUsingTestBase
                        .attachSourceAddress(BrokerAdmin.TEST_QUEUE_NAME)
                        .attach().consumeResponse()
                        .flowIncomingWindow(UnsignedInteger.ONE)
-                       .flowNextIncomingId(UnsignedInteger.ZERO)
+                       .flowNextIncomingIdFromPeerLatestSessionBeginAndDeliveryCount()
                        .flowOutgoingWindow(UnsignedInteger.ZERO)
                        .flowNextOutgoingId(UnsignedInteger.ZERO)
                        .flowLinkCredit(UnsignedInteger.ONE)
@@ -156,7 +166,7 @@ public class FlowTest extends BrokerAdminUsingTestBase
                        .decodeLatestDelivery()
                        .dispositionSettled(true)
                        .dispositionRole(Role.RECEIVER)
-                       .dispositionFirst(interaction.getLatestDeliveryId())
+                       .dispositionFirstFromLatestDelivery()
                        .dispositionLast(interaction.getLatestDeliveryId())
                        .dispositionState(new Accepted())
                        .disposition()
@@ -215,7 +225,12 @@ public class FlowTest extends BrokerAdminUsingTestBase
                                        .open().consumeResponse(Open.class)
                                        .begin().consumeResponse(Begin.class)
                                        .flowEcho(true)
-                                       .flowHandle(UnsignedInteger.ONE)
+                                       .flowIncomingWindow(UnsignedInteger.ONE)
+                                       .flowNextIncomingIdFromPeerLatestSessionBeginAndDeliveryCount()
+                                       .flowLinkCredit(UnsignedInteger.ONE)
+                                       .flowHandle(UnsignedInteger.valueOf(Integer.MAX_VALUE))
+                                       .flowOutgoingWindow(UnsignedInteger.ZERO)
+                                       .flowNextOutgoingId(UnsignedInteger.ZERO)
                                        .flow()
                                        .consumeResponse().getLatestResponse(End.class);
 
@@ -249,20 +264,22 @@ public class FlowTest extends BrokerAdminUsingTestBase
             UnsignedInteger remoteHandle = remoteAttach.getHandle();
             assertThat(remoteHandle, is(notNullValue()));
 
-            Flow responseFlow = interaction.flowIncomingWindow(UnsignedInteger.valueOf(1))
-                                           .flowNextIncomingId(UnsignedInteger.ZERO)
+            interaction.flowIncomingWindow(UnsignedInteger.ONE)
+                                           .flowNextIncomingIdFromPeerLatestSessionBeginAndDeliveryCount()
+                                           .flowOutgoingWindow(UnsignedInteger.ZERO)
+                                           .flowNextOutgoingId(UnsignedInteger.ZERO)
                                            .flowLinkCredit(UnsignedInteger.ONE)
                                            .flowDrain(Boolean.FALSE)
                                            .flowEcho(Boolean.TRUE)
                                            .flowHandleFromLinkHandle()
                                            .flow()
-                                           .consumeResponse().getLatestResponse(Flow.class);
-
-            assertThat(responseFlow.getHandle(), is(equalTo(remoteHandle)));
-            assertThat(responseFlow.getLinkCredit(), is(equalTo(UnsignedInteger.ONE)));
-            assertThat(responseFlow.getDrain(), is(equalTo(Boolean.FALSE)));
+                                           .consumeResponse(null, Flow.class);
 
-            responseFlow = interaction.flowLinkCredit(UnsignedInteger.ONE)
+            Flow responseFlow = interaction.flowIncomingWindow(UnsignedInteger.ONE)
+                                      .flowNextIncomingIdFromPeerLatestSessionBeginAndDeliveryCount()
+                                      .flowOutgoingWindow(UnsignedInteger.ZERO)
+                                      .flowNextOutgoingId(UnsignedInteger.ZERO)
+                                      .flowLinkCredit(UnsignedInteger.ONE)
                                       .flowDrain(Boolean.TRUE)
                                       .flowEcho(Boolean.FALSE)
                                       .flowHandleFromLinkHandle()
@@ -271,6 +288,7 @@ public class FlowTest extends BrokerAdminUsingTestBase
 
             assertThat(responseFlow.getHandle(), is(equalTo(remoteHandle)));
             assertThat(responseFlow.getLinkCredit(), is(equalTo(UnsignedInteger.ZERO)));
+            assertThat(responseFlow.getDrain(), is(equalTo(Boolean.TRUE)));
         }
     }
 
@@ -286,8 +304,6 @@ public class FlowTest extends BrokerAdminUsingTestBase
     {
         BrokerAdmin brokerAdmin = getBrokerAdmin();
         brokerAdmin.createQueue(BrokerAdmin.TEST_QUEUE_NAME);
-        String messageContent = getTestName();
-        Utils.putMessageOnQueue(getBrokerAdmin(), BrokerAdmin.TEST_QUEUE_NAME, messageContent);
 
         final InetSocketAddress addr = brokerAdmin.getBrokerAddress(BrokerAdmin.PortType.ANONYMOUS_AMQP);
         try (FrameTransport transport = new FrameTransport(addr).connect())
@@ -304,35 +320,42 @@ public class FlowTest extends BrokerAdminUsingTestBase
             UnsignedInteger remoteHandle = remoteAttach.getHandle();
             assertThat(remoteHandle, is(notNullValue()));
 
-            Object receivedMessageContent = interaction.flowIncomingWindow(UnsignedInteger.valueOf(1))
-                                                       .flowNextIncomingId(UnsignedInteger.ZERO)
+            interaction.flowIncomingWindow(UnsignedInteger.valueOf(1))
+                                                       .flowNextIncomingIdFromPeerLatestSessionBeginAndDeliveryCount()
                                                        .flowLinkCredit(UnsignedInteger.ONE)
                                                        .flowDrain(Boolean.FALSE)
                                                        .flowEcho(Boolean.FALSE)
                                                        .flowHandleFromLinkHandle()
+                                                       .flowOutgoingWindow(UnsignedInteger.ZERO)
+                                                       .flowNextOutgoingId(UnsignedInteger.ZERO)
                                                        .flow()
-                                                       .receiveDelivery()
-                                                       .decodeLatestDelivery()
-                                                       .getDecodedLatestDelivery();
+                                                       .sync();
 
-            assertThat(receivedMessageContent, is(equalTo(messageContent)));
-            UnsignedInteger firstDeliveryId = interaction.getLatestDeliveryId();
-            assertThat(firstDeliveryId, is(equalTo(UnsignedInteger.ZERO)));
+            Utils.putMessageOnQueue(getBrokerAdmin(), BrokerAdmin.TEST_QUEUE_NAME, getTestName());
 
-            Flow responseFlow = interaction.flowNextIncomingId(UnsignedInteger.ONE)
-                                           .flowLinkCredit(UnsignedInteger.ONE)
-                                           .flowDrain(Boolean.TRUE)
-                                           .flowEcho(Boolean.FALSE)
-                                           .flowHandleFromLinkHandle()
-                                           .flow()
-                                           .consumeResponse().getLatestResponse(Flow.class);
+            final Object receivedMessageContent = interaction.receiveDelivery()
+                                                             .decodeLatestDelivery()
+                                                             .getDecodedLatestDelivery();
+
+            assertThat(receivedMessageContent, is(equalTo(getTestName())));
+
+            final Flow responseFlow = interaction.flowNextIncomingIdFromPeerLatestSessionBeginAndDeliveryCount()
+                                                 .flowLinkCredit(UnsignedInteger.ONE)
+                                                 .flowDrain(Boolean.TRUE)
+                                                 .flowEcho(Boolean.FALSE)
+                                                 .flowHandleFromLinkHandle()
+                                                 .flowOutgoingWindow(UnsignedInteger.ZERO)
+                                                 .flowNextOutgoingId(UnsignedInteger.ZERO)
+                                                 .flowDeliveryCount()
+                                                 .flow()
+                                                 .consumeResponse().getLatestResponse(Flow.class);
 
             assertThat(responseFlow.getHandle(), is(equalTo(remoteHandle)));
             assertThat(responseFlow.getLinkCredit(), is(equalTo(UnsignedInteger.ZERO)));
 
             interaction.dispositionSettled(true)
                        .dispositionRole(Role.RECEIVER)
-                       .dispositionFirst(firstDeliveryId)
+                       .dispositionFirst(interaction.getLatestDeliveryId())
                        .dispositionState(new Accepted())
                        .disposition()
                        .sync();
@@ -373,9 +396,12 @@ public class FlowTest extends BrokerAdminUsingTestBase
             UnsignedInteger delta = UnsignedInteger.ONE;
             UnsignedInteger incomingWindow = UnsignedInteger.valueOf(3);
             Object receivedMessageContent1 = interaction.flowIncomingWindow(incomingWindow)
-                                                        .flowNextIncomingId(UnsignedInteger.ZERO)
+                                                        .flowNextIncomingIdFromPeerLatestSessionBeginAndDeliveryCount()
                                                         .flowLinkCredit(delta)
                                                         .flowHandleFromLinkHandle()
+                                                        .flowDeliveryCount()
+                                                        .flowOutgoingWindow(UnsignedInteger.ZERO)
+                                                        .flowNextOutgoingId(UnsignedInteger.ZERO)
                                                         .flow()
                                                         .receiveDelivery()
                                                         .decodeLatestDelivery()
@@ -383,12 +409,14 @@ public class FlowTest extends BrokerAdminUsingTestBase
 
             assertThat(receivedMessageContent1, is(equalTo(contents[0])));
             UnsignedInteger firstDeliveryId = interaction.getLatestDeliveryId();
-            assertThat(firstDeliveryId, is(equalTo(UnsignedInteger.ZERO)));
 
             Object receivedMessageContent2 = interaction.flowIncomingWindow(incomingWindow)
-                                                        .flowNextIncomingId(UnsignedInteger.ONE)
+                                                        .flowNextIncomingIdFromPeerLatestSessionBeginAndDeliveryCount()
                                                         .flowLinkCredit(delta)
                                                         .flowHandleFromLinkHandle()
+                                                        .flowOutgoingWindow(UnsignedInteger.ZERO)
+                                                        .flowNextOutgoingId(UnsignedInteger.ZERO)
+                                                        .flowDeliveryCount()
                                                         .flow()
                                                         .receiveDelivery()
                                                         .decodeLatestDelivery()
@@ -396,17 +424,18 @@ public class FlowTest extends BrokerAdminUsingTestBase
 
             assertThat(receivedMessageContent2, is(equalTo(contents[1])));
             UnsignedInteger secondDeliveryId = interaction.getLatestDeliveryId();
-            assertThat(secondDeliveryId, is(equalTo(UnsignedInteger.ONE)));
 
             // send session flow with echo=true to verify that no message is delivered without issuing a credit
-            Flow responseFlow = interaction.flowNextIncomingId(UnsignedInteger.valueOf(2))
-                                           .flowLinkCredit(null)
-                                           .flowHandle(null)
-                                           .flowEcho(Boolean.TRUE)
-                                           .flow()
-                                           .consumeResponse().getLatestResponse(Flow.class);
-
-            assertThat(responseFlow.getHandle(), is(nullValue()));
+            interaction.flowNextIncomingIdFromPeerLatestSessionBeginAndDeliveryCount()
+                       .flowIncomingWindow(incomingWindow)
+                       .flowLinkCredit(null)
+                       .flowHandle(null)
+                       .flowDeliveryCount(null)
+                       .flowEcho(Boolean.TRUE)
+                       .flowOutgoingWindow(UnsignedInteger.ZERO)
+                       .flowNextOutgoingId(UnsignedInteger.ZERO)
+                       .flow()
+                       .consumeResponse(null, Flow.class);
 
             interaction.dispositionSettled(true)
                        .dispositionRole(Role.RECEIVER)
@@ -429,10 +458,8 @@ public class FlowTest extends BrokerAdminUsingTestBase
     {
         BrokerAdmin brokerAdmin = getBrokerAdmin();
         brokerAdmin.createQueue(BrokerAdmin.TEST_QUEUE_NAME);
-        final String[] contents = Utils.createTestMessageContents(2, getTestName());
-        Utils.putMessageOnQueue(getBrokerAdmin(), BrokerAdmin.TEST_QUEUE_NAME, contents);
-
         final InetSocketAddress addr = brokerAdmin.getBrokerAddress(BrokerAdmin.PortType.ANONYMOUS_AMQP);
+        Utils.putMessageOnQueue(getBrokerAdmin(), BrokerAdmin.TEST_QUEUE_NAME, getTestName());
         try (FrameTransport transport = new FrameTransport(addr).connect())
         {
             Interaction interaction = transport.newInteraction()
@@ -447,36 +474,68 @@ public class FlowTest extends BrokerAdminUsingTestBase
             UnsignedInteger remoteHandle = remoteAttach.getHandle();
             assertThat(remoteHandle, is(notNullValue()));
 
-            Object receivedMessageContent1 = interaction.flowIncomingWindow(UnsignedInteger.valueOf(2))
-                                                        .flowNextIncomingId(UnsignedInteger.ZERO)
-                                                        .flowLinkCredit(UnsignedInteger.ONE)
+            UnsignedInteger incomingWindow = UnsignedInteger.valueOf(2);
+            Object receivedMessageContent1 = interaction.flowIncomingWindow(incomingWindow)
+                                                        .flowNextIncomingIdFromPeerLatestSessionBeginAndDeliveryCount()
+                                                        .flowLinkCredit(incomingWindow)
+                                                        .flowNextOutgoingId()
                                                         .flowHandleFromLinkHandle()
+                                                        .flowOutgoingWindow(UnsignedInteger.ZERO)
+                                                        .flowNextOutgoingId(UnsignedInteger.ZERO)
                                                         .flow()
                                                         .receiveDelivery()
                                                         .decodeLatestDelivery()
                                                         .getDecodedLatestDelivery();
-
-            assertThat(receivedMessageContent1, is(equalTo(contents[0])));
-            assertThat(interaction.getLatestDeliveryId(), is(equalTo(UnsignedInteger.ZERO)));
-
-            Flow responseFlow = interaction.flowNextIncomingId(UnsignedInteger.ONE)
-                                           .flowLinkCredit(UnsignedInteger.ZERO)
-                                           .flowHandleFromLinkHandle()
-                                           .flowEcho(Boolean.TRUE)
-                                           .flow()
-                                           .consumeResponse().getLatestResponse(Flow.class);
-
-            assertThat(responseFlow.getHandle(), is(equalTo(remoteHandle)));
-            assertThat(responseFlow.getLinkCredit(), is(equalTo(UnsignedInteger.ZERO)));
-
-            interaction.dispositionSettled(true)
-                       .dispositionRole(Role.RECEIVER)
-                       .dispositionFirst(interaction.getLatestDeliveryId())
-                       .dispositionState(new Accepted())
-                       .disposition()
-                       .sync();
+            assertThat(receivedMessageContent1, is(equalTo(getTestName())));
+
+            final Response<?> response = interaction.flowIncomingWindow(incomingWindow)
+                                                    .flowNextIncomingIdFromPeerLatestSessionBeginAndDeliveryCount()
+                                                    .flowLinkCredit(UnsignedInteger.ZERO)
+                                                    .flowHandleFromLinkHandle()
+                                                    .flowEcho(Boolean.TRUE)
+                                                    .flowOutgoingWindow(UnsignedInteger.ZERO)
+                                                    .flowNextOutgoingId(UnsignedInteger.ZERO)
+                                                    .flowDeliveryCount()
+                                                    .flow()
+                                                    .consumeResponse(null, Flow.class)
+                                                    .getLatestResponse();
+
+            if (response != null)
+            {
+                assertThat(response.getBody(), is(instanceOf(Flow.class)));
+                final Flow responseFlow = (Flow) response.getBody();
+                assertThat(responseFlow.getEcho(), not(equalTo(Boolean.TRUE)));
+                assertThat(responseFlow.getHandle(), is(notNullValue()));
+            }
+
+            final String message2 = getTestName() + "_2";
+            Utils.putMessageOnQueue(getBrokerAdmin(), BrokerAdmin.TEST_QUEUE_NAME, message2);
+            try
+            {
+                // send session flow with echo=true to verify that no message is delivered without issuing a credit
+                interaction.flowIncomingWindow(incomingWindow)
+                           .flowNextIncomingIdFromPeerLatestSessionBeginAndDeliveryCount()
+                           .flowLinkCredit(null)
+                           .flowHandle(null)
+                           .flowDeliveryCount(null)
+                           .flowEcho(Boolean.TRUE)
+                           .flowOutgoingWindow(UnsignedInteger.ZERO)
+                           .flowNextOutgoingId(UnsignedInteger.ZERO)
+                           .flow()
+                           .consumeResponse(null, Flow.class);
+            }
+            finally
+            {
+                assertThat(Utils.receiveMessage(addr, BrokerAdmin.TEST_QUEUE_NAME), is(equalTo(message2)));
+
+                interaction.dispositionSettled(true)
+                           .dispositionRole(Role.RECEIVER)
+                           .dispositionFirst(interaction.getLatestDeliveryId())
+                           .dispositionState(new Accepted())
+                           .disposition()
+                           .sync();
+            }
         }
-        assertThat(Utils.receiveMessage(addr, BrokerAdmin.TEST_QUEUE_NAME), is(equalTo(contents[1])));
     }
 
     @Test
@@ -485,7 +544,7 @@ public class FlowTest extends BrokerAdminUsingTestBase
                           + " available to consume the current link-credit. If set, the sender will"
                           + " (after sending all available messages) advance the delivery-count as much as possible,"
                           + " consuming all link-credit, and send the flow state to the receiver.")
-    public void drainWithZeroCredits() throws Exception
+    public void drain() throws Exception
     {
         BrokerAdmin brokerAdmin = getBrokerAdmin();
         brokerAdmin.createQueue(BrokerAdmin.TEST_QUEUE_NAME);
@@ -507,16 +566,26 @@ public class FlowTest extends BrokerAdminUsingTestBase
             assertThat(remoteHandle, is(notNullValue()));
 
             Flow responseFlow = interaction.flowIncomingWindow(UnsignedInteger.valueOf(2))
-                                           .flowNextIncomingId(UnsignedInteger.ZERO)
-                                           .flowLinkCredit(UnsignedInteger.ZERO)
+                                           .flowNextIncomingIdFromPeerLatestSessionBeginAndDeliveryCount()
+                                           .flowLinkCredit(UnsignedInteger.valueOf(2))
                                            .flowDrain(Boolean.TRUE)
                                            .flowHandleFromLinkHandle()
+                                           .flowOutgoingWindow(UnsignedInteger.ZERO)
+                                           .flowNextOutgoingId(UnsignedInteger.ZERO)
                                            .flow()
-                                           .consumeResponse().getLatestResponse(Flow.class);
+                                           .receiveDelivery()
+                                           .decodeLatestDelivery()
+                                           .consumeResponse(Flow.class).getLatestResponse(Flow.class);
 
             assertThat(responseFlow.getHandle(), is(equalTo(remoteHandle)));
             assertThat(responseFlow.getLinkCredit(), is(equalTo(UnsignedInteger.ZERO)));
+
+            interaction.dispositionSettled(true)
+                       .dispositionRole(Role.RECEIVER)
+                       .dispositionFirstFromLatestDelivery()
+                       .dispositionState(new Accepted())
+                       .disposition()
+                       .sync();
         }
-        assertThat(Utils.receiveMessage(addr, BrokerAdmin.TEST_QUEUE_NAME), is(equalTo(getTestName())));
     }
 }
diff --git a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/link/ResumeDeliveriesTest.java b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/link/ResumeDeliveriesTest.java
index 337c129..61884e3 100644
--- a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/link/ResumeDeliveriesTest.java
+++ b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/link/ResumeDeliveriesTest.java
@@ -591,11 +591,9 @@ public class ResumeDeliveriesTest extends BrokerAdminUsingTestBase
 
             interaction.doCloseConnection();
 
-            if (getBrokerAdmin().isQueueDepthSupported())
-            {
-                assertThat(getBrokerAdmin().getQueueDepthMessages(BrokerAdmin.TEST_QUEUE_NAME),
-                           is(equalTo(0)));
-            }
+            final String content = getTestName() + "_2";
+            Utils.putMessageOnQueue(getBrokerAdmin(), BrokerAdmin.TEST_QUEUE_NAME, content);
+            assertThat(Utils.receiveMessage(_brokerAddress, BrokerAdmin.TEST_QUEUE_NAME), Matchers.is(Matchers.equalTo(content)));
         }
     }
 
@@ -675,11 +673,9 @@ public class ResumeDeliveriesTest extends BrokerAdminUsingTestBase
 
             interaction.doCloseConnection();
 
-            if (getBrokerAdmin().isQueueDepthSupported())
-            {
-                assertThat(getBrokerAdmin().getQueueDepthMessages(BrokerAdmin.TEST_QUEUE_NAME),
-                           Matchers.is(Matchers.equalTo(0)));
-            }
+            final String content = getTestName() + "_2";
+            Utils.putMessageOnQueue(getBrokerAdmin(), BrokerAdmin.TEST_QUEUE_NAME, content);
+            assertThat(Utils.receiveMessage(_brokerAddress, BrokerAdmin.TEST_QUEUE_NAME), Matchers.is(Matchers.equalTo(content)));
         }
     }
 
diff --git a/systests/protocol-tests-core/src/main/java/org/apache/qpid/tests/protocol/AbstractInteraction.java b/systests/protocol-tests-core/src/main/java/org/apache/qpid/tests/protocol/AbstractInteraction.java
index f9640dd..801033e 100644
--- a/systests/protocol-tests-core/src/main/java/org/apache/qpid/tests/protocol/AbstractInteraction.java
+++ b/systests/protocol-tests-core/src/main/java/org/apache/qpid/tests/protocol/AbstractInteraction.java
@@ -44,9 +44,14 @@ public abstract class AbstractInteraction<I extends AbstractInteraction<I>>
 
     public I consumeResponse(final Class<?>... responseTypes) throws Exception
     {
+        final Set<Class<?>> acceptableResponseClasses = new HashSet<>(Arrays.asList(responseTypes));
+        return consumeResponse(acceptableResponseClasses);
+    }
+
+    protected I consumeResponse(final Set<Class<?>> acceptableResponseClasses) throws Exception
+    {
         sync();
         _latestResponse = getNextResponse();
-        final Set<Class<?>> acceptableResponseClasses = new HashSet<>(Arrays.asList(responseTypes));
         if ((acceptableResponseClasses.isEmpty() && _latestResponse != null)
             || (acceptableResponseClasses.contains(null) && _latestResponse == null))
         {


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


[qpid-broker-j] 02/21: QPID-8349: [Tests][AMQP 1.0] Introduce field to count incoming deliveries in order to set flow next-incoming-id based on received message count and begin next-outgoing-id

Posted by or...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

orudyy pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/qpid-broker-j.git

commit 80fc0b80617f06a8119c38cd9057375527eee964
Author: Alex Rudyy <or...@apache.org>
AuthorDate: Mon Aug 19 16:30:35 2019 +0100

    QPID-8349: [Tests][AMQP 1.0] Introduce field to count incoming deliveries in order to set flow next-incoming-id based on received message count and begin next-outgoing-id
---
 .../qpid/tests/protocol/v1_0/Interaction.java      | 29 ++++++++++++++++++++++
 .../qpid/tests/protocol/AbstractInteraction.java   |  4 +--
 2 files changed, 31 insertions(+), 2 deletions(-)

diff --git a/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/Interaction.java b/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/Interaction.java
index ac30068..1437e19 100644
--- a/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/Interaction.java
+++ b/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/Interaction.java
@@ -30,12 +30,14 @@ import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.HashSet;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.atomic.AtomicLong;
 
 import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.MoreExecutors;
@@ -113,6 +115,8 @@ public class Interaction extends AbstractInteraction<Interaction>
     private Object _decodedLatestDelivery;
     private UnsignedInteger _latestDeliveryId;
     private Map<String, Object> _latestDeliveryApplicationProperties;
+    private Map<Class, FrameBody> _latestResponses = new HashMap<>();
+    private AtomicLong _receivedDeliveryCount = new AtomicLong();
 
     Interaction(final FrameTransport frameTransport)
     {
@@ -644,6 +648,12 @@ public class Interaction extends AbstractInteraction<Interaction>
         return flowNextIncomingId(_latestDeliveryId.add(UnsignedInteger.ONE));
     }
 
+    public Interaction flowNextIncomingIdFromPeerLatestSessionBeginAndDeliveryCount()
+    {
+        final Begin begin = (Begin) _latestResponses.get(Begin.class);
+        return flowNextIncomingId(begin.getNextOutgoingId().add(UnsignedInteger.valueOf(_receivedDeliveryCount.get())));
+    }
+
     public Interaction flowOutgoingWindow(final UnsignedInteger outgoingWindow)
     {
         _flow.setOutgoingWindow(outgoingWindow);
@@ -680,6 +690,12 @@ public class Interaction extends AbstractInteraction<Interaction>
         return this;
     }
 
+    public Interaction flowDeliveryCount()
+    {
+        _flow.setDeliveryCount(UnsignedInteger.valueOf(_receivedDeliveryCount.get()));
+        return this;
+    }
+
     public Interaction flowLinkCredit(final UnsignedInteger linkCredit)
     {
         _flow.setLinkCredit(linkCredit);
@@ -1071,6 +1087,7 @@ public class Interaction extends AbstractInteraction<Interaction>
         sync();
         _latestDelivery = receiveAllTransfers(ignore);
         _latestDeliveryId = _latestDelivery.size() > 0 ? _latestDelivery.get(0).getDeliveryId() : null;
+        _receivedDeliveryCount.incrementAndGet();
         return this;
     }
 
@@ -1163,4 +1180,16 @@ public class Interaction extends AbstractInteraction<Interaction>
         while (completed == null);
         return completed;
     }
+
+    @Override
+    protected Response<?> getNextResponse() throws Exception
+    {
+        Response<?> response = super.getNextResponse();
+        if (response != null && response.getBody() instanceof FrameBody)
+        {
+            _latestResponses.put(response.getBody().getClass(), (FrameBody)response.getBody());
+        }
+        return response;
+    }
+
 }
diff --git a/systests/protocol-tests-core/src/main/java/org/apache/qpid/tests/protocol/AbstractInteraction.java b/systests/protocol-tests-core/src/main/java/org/apache/qpid/tests/protocol/AbstractInteraction.java
index 2c977f3..f9640dd 100644
--- a/systests/protocol-tests-core/src/main/java/org/apache/qpid/tests/protocol/AbstractInteraction.java
+++ b/systests/protocol-tests-core/src/main/java/org/apache/qpid/tests/protocol/AbstractInteraction.java
@@ -84,12 +84,12 @@ public abstract class AbstractInteraction<I extends AbstractInteraction<I>>
         return getInteraction();
     }
 
-    public Response<?> getLatestResponse() throws Exception
+    public Response<?> getLatestResponse()
     {
         return _latestResponse;
     }
 
-    public <T> T getLatestResponse(Class<T> type) throws Exception
+    public <T> T getLatestResponse(Class<T> type)
     {
         if (_latestResponse.getBody() == null)
         {


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


[qpid-broker-j] 01/21: QPID-8349: [Tests][AMQP 1.0] Log sent and received performatives in test interaction

Posted by or...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

orudyy pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/qpid-broker-j.git

commit 6e4d71679c92663d1d61fc93d9b17f4c20793bcb
Author: Alex Rudyy <or...@apache.org>
AuthorDate: Mon Aug 19 14:16:09 2019 +0100

    QPID-8349: [Tests][AMQP 1.0] Log sent and received performatives in test interaction
---
 .../java/org/apache/qpid/tests/protocol/v1_0/FrameDecoder.java    | 7 ++++++-
 .../java/org/apache/qpid/tests/protocol/v1_0/FrameEncoder.java    | 8 +++++++-
 2 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/FrameDecoder.java b/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/FrameDecoder.java
index a8ab32e..39b16fa 100644
--- a/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/FrameDecoder.java
+++ b/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/FrameDecoder.java
@@ -60,6 +60,7 @@ import org.apache.qpid.tests.protocol.Response;
 
 public class FrameDecoder implements InputDecoder
 {
+    private static final Logger FRAME_LOGGER = LoggerFactory.getLogger("amqp.frame");
     private static final Logger LOGGER = LoggerFactory.getLogger(FrameDecoder.class);
     private static final AMQPDescribedTypeRegistry TYPE_REGISTRY = AMQPDescribedTypeRegistry.newInstance()
                                                                                             .registerTransportLayer()
@@ -104,7 +105,10 @@ public class FrameDecoder implements InputDecoder
                     {
                         byte[] header = new byte[8];
                         inputBuffer.get(header);
-                        _connectionHandler._responseQueue.add(new HeaderResponse(header));
+
+                        HeaderResponse headerResponse = new HeaderResponse(header);
+                        FRAME_LOGGER.debug("RECV:" + headerResponse);
+                        _connectionHandler._responseQueue.add(headerResponse);
                         _state = ParsingState.PERFORMATIVES;
                     }
                     break;
@@ -250,6 +254,7 @@ public class FrameDecoder implements InputDecoder
                     throw new UnsupportedOperationException("Unexpected frame type : " + val.getClass());
                 }
 
+                FRAME_LOGGER.debug("RECV:" + response.getBody());
                 _responseQueue.add(response);
             }
         }
diff --git a/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/FrameEncoder.java b/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/FrameEncoder.java
index 748407f..1a99d3d 100644
--- a/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/FrameEncoder.java
+++ b/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/FrameEncoder.java
@@ -24,6 +24,9 @@ import java.nio.ByteBuffer;
 import java.util.ArrayList;
 import java.util.List;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import org.apache.qpid.server.bytebuffer.QpidByteBuffer;
 import org.apache.qpid.server.protocol.v1_0.codec.FrameWriter;
 import org.apache.qpid.server.protocol.v1_0.framing.AMQFrame;
@@ -35,6 +38,7 @@ import org.apache.qpid.tests.protocol.v1_0.extensions.type.TestFilterWriter;
 
 public class FrameEncoder implements OutputEncoder
 {
+    private static final Logger FRAME_LOGGER = LoggerFactory.getLogger("amqp.frame");
     private static final AMQPDescribedTypeRegistry TYPE_REGISTRY = AMQPDescribedTypeRegistry.newInstance()
                                                                                             .registerTransportLayer()
                                                                                             .registerMessagingLayer()
@@ -79,7 +83,9 @@ public class FrameEncoder implements OutputEncoder
 
                 }
             });
-            _frameWriter.send(((AMQFrame) msg));
+            AMQFrame frame = (AMQFrame) msg;
+            FRAME_LOGGER.debug("SEND: " + frame.getFrameBody());
+            _frameWriter.send(frame);
 
             int remaining = 0;
             for (ByteBuffer byteBuffer: buffers)


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


[qpid-broker-j] 15/21: QPID-8350: [Tests][AMQP 1.0] Improve ResumeDeliveriesTest

Posted by or...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

orudyy pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/qpid-broker-j.git

commit f91e6990660b8eab3840c31b20fb74c4e5cd7b6b
Author: Alex Rudyy <or...@apache.org>
AuthorDate: Wed Aug 21 17:09:16 2019 +0100

    QPID-8350: [Tests][AMQP 1.0] Improve ResumeDeliveriesTest
---
 .../qpid/tests/protocol/v1_0/transport/link/ResumeDeliveriesTest.java   | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/link/ResumeDeliveriesTest.java b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/link/ResumeDeliveriesTest.java
index db3259b..b58185e 100644
--- a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/link/ResumeDeliveriesTest.java
+++ b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/link/ResumeDeliveriesTest.java
@@ -472,6 +472,7 @@ public class ResumeDeliveriesTest extends BrokerAdminUsingTestBase
                                                      .flowIncomingWindow(UnsignedInteger.ONE)
                                                      .flowLinkCredit(UnsignedInteger.ONE)
                                                      .flowHandleFromLinkHandle()
+                                                     .flowNextIncomingIdFromPeerLatestSessionBeginAndDeliveryCount()
                                                      .flow()
                                                      .receiveDelivery()
                                                      .decodeLatestDelivery();
@@ -495,6 +496,7 @@ public class ResumeDeliveriesTest extends BrokerAdminUsingTestBase
             Attach attach = interaction.getLatestResponse(Attach.class);
 
             Map<Binary, DeliveryState> unsettled = attach.getUnsettled();
+            assumeThat(unsettled, notNullValue());
             assertThat(unsettled.entrySet(), empty());
         }
     }


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


[qpid-broker-j] 06/21: QPID-8349: [Tests][AMQP 1.0] Simplify transaction tests by moving InteractionTransactionalState from tests into Interaction

Posted by or...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

orudyy pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/qpid-broker-j.git

commit a01721df23ee30e3c194afffab549ec55638dcd8
Author: Alex Rudyy <or...@apache.org>
AuthorDate: Tue Aug 20 16:05:54 2019 +0100

    QPID-8349: [Tests][AMQP 1.0] Simplify transaction tests by moving InteractionTransactionalState from tests into Interaction
---
 .../qpid/tests/protocol/v1_0/Interaction.java      |  75 ++++++++----
 .../anonymousterminus/AnonymousTerminusTest.java   |  69 +++++------
 .../extensions/qpid/queue/QueueDeletionTest.java   |  28 ++---
 .../transactiontimeout/TransactionTimeoutTest.java |  15 +--
 .../protocol/v1_0/messaging/TransferTest.java      |  19 ++--
 .../protocol/v1_0/transaction/DischargeTest.java   |  63 +++++------
 .../transaction/TransactionalTransferTest.java     | 126 +++++++++------------
 7 files changed, 191 insertions(+), 204 deletions(-)

diff --git a/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/Interaction.java b/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/Interaction.java
index ab2c959..727b501 100644
--- a/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/Interaction.java
+++ b/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/Interaction.java
@@ -112,6 +112,7 @@ public class Interaction extends AbstractInteraction<Interaction>
     private Map<Class, FrameBody> _latestResponses = new HashMap<>();
     private AtomicLong _receivedDeliveryCount = new AtomicLong();
     private AtomicLong _coordinatorCredits = new AtomicLong();
+    private InteractionTransactionalState _transactionalState;
 
     Interaction(final FrameTransport frameTransport)
     {
@@ -811,6 +812,11 @@ public class Interaction extends AbstractInteraction<Interaction>
         return transferState(transactionalState);
     }
 
+    public Interaction transferTransactionalStateFromCurrentTransaction()
+    {
+        return transferTransactionalState(getCurrentTransactionId());
+    }
+
     public Interaction transferResume(final Boolean resume)
     {
         _transfer.setResume(resume);
@@ -901,6 +907,11 @@ public class Interaction extends AbstractInteraction<Interaction>
         return dispositionState(state);
     }
 
+    public Interaction dispositionTransactionalStateFromCurrentTransaction(final Outcome outcome)
+    {
+        return dispositionTransactionalState(getCurrentTransactionId(), outcome);
+    }
+
     public Interaction dispositionRole(final Role role)
     {
         _disposition.setRole(role);
@@ -948,23 +959,40 @@ public class Interaction extends AbstractInteraction<Interaction>
     // transaction //
     ////////////////
 
-    public Interaction txnAttachCoordinatorLink(InteractionTransactionalState transactionalState) throws Exception
+
+    public UnsignedInteger getCoordinatorHandle()
+    {
+        return _transactionalState == null ? null : _transactionalState.getHandle();
+    }
+
+    public Binary getCurrentTransactionId()
+    {
+        return _transactionalState == null ? null : _transactionalState.getCurrentTransactionId();
+    }
+
+    public DeliveryState getCoordinatorLatestDeliveryState()
     {
-        return txnAttachCoordinatorLink(transactionalState, Accepted.ACCEPTED_SYMBOL, Rejected.REJECTED_SYMBOL);
+        return _transactionalState == null ? null : _transactionalState.getDeliveryState();
     }
 
-    public Interaction txnAttachCoordinatorLink(final InteractionTransactionalState transactionalState,
+    public Interaction txnAttachCoordinatorLink(final UnsignedInteger handle) throws Exception
+    {
+        return txnAttachCoordinatorLink(handle, Accepted.ACCEPTED_SYMBOL, Rejected.REJECTED_SYMBOL);
+    }
+
+    public Interaction txnAttachCoordinatorLink(final UnsignedInteger handle,
                                                 final Symbol... outcomes) throws Exception
     {
         Attach attach = new Attach();
-        attach.setName("testTransactionCoordinator-" + transactionalState.getHandle());
-        attach.setHandle(transactionalState.getHandle());
+        attach.setName("testTransactionCoordinator-" + handle);
+        attach.setHandle(handle);
         attach.setInitialDeliveryCount(UnsignedInteger.ZERO);
         attach.setTarget(new Coordinator());
         attach.setRole(Role.SENDER);
         Source source = new Source();
         attach.setSource(source);
         source.setOutcomes(outcomes);
+        _transactionalState = new InteractionTransactionalState(handle);
         sendPerformativeAndChainFuture(attach, _sessionChannel);
         consumeResponse(Attach.class);
         final Flow flow = consumeResponse(Flow.class).getLatestResponse(Flow.class);
@@ -972,32 +1000,42 @@ public class Interaction extends AbstractInteraction<Interaction>
         return this;
     }
 
-    public Interaction txnDeclare(final InteractionTransactionalState txnState) throws Exception
+    public Interaction txnDeclare() throws Exception
     {
-        sendPayloadToCoordinator(new Declare(), txnState.getHandle());
+        sendPayloadToCoordinator(new Declare(), _transactionalState.getHandle());
         final DeliveryState state = handleCoordinatorResponse();
-        txnState.setDeliveryState(state);
+        _transactionalState.setDeliveryState(state);
         final Binary transactionId = ((Declared) state).getTxnId();
-        txnState.setLastTransactionId(transactionId);
+        _transactionalState.setLastTransactionId(transactionId);
         return this;
     }
 
-    public Interaction txnSendDischarge(final InteractionTransactionalState txnState, final boolean failed)
+    public Interaction txnSendDischarge(final boolean failed)
+            throws Exception
+    {
+        return txnSendDischarge(_transactionalState.getCurrentTransactionId(), failed);
+    }
+
+    public Interaction txnSendDischarge(Binary transactionId, final boolean failed)
             throws Exception
     {
         final Discharge discharge = new Discharge();
-        discharge.setTxnId(txnState.getCurrentTransactionId());
+        discharge.setTxnId(transactionId);
         discharge.setFail(failed);
-        sendPayloadToCoordinator(discharge, txnState.getHandle());
+        sendPayloadToCoordinator(discharge, _transactionalState.getHandle());
         return this;
     }
 
-    public Interaction txnDischarge(final InteractionTransactionalState txnState, boolean failed) throws Exception
+    public Interaction txnDischarge(boolean failed) throws Exception
     {
-        txnSendDischarge(txnState, failed);
+        return txnDischarge(_transactionalState.getCurrentTransactionId(), failed);
+    }
+
+    public Interaction txnDischarge(Binary transactionId, boolean failed) throws Exception
+    {
+        txnSendDischarge(transactionId, failed);
         final DeliveryState state = handleCoordinatorResponse();
-        txnState.setDeliveryState(state);
-        txnState.setLastTransactionId(null);
+        _transactionalState.setDeliveryState(state);
         return this;
     }
 
@@ -1186,11 +1224,6 @@ public class Interaction extends AbstractInteraction<Interaction>
         return transfers;
     }
 
-    public InteractionTransactionalState createTransactionalState(final UnsignedInteger handle)
-    {
-        return new InteractionTransactionalState(handle);
-    }
-
     ///////////
     // Empty //
     ///////////
diff --git a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/extensions/anonymousterminus/AnonymousTerminusTest.java b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/extensions/anonymousterminus/AnonymousTerminusTest.java
index a7ef076..582e7de 100644
--- a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/extensions/anonymousterminus/AnonymousTerminusTest.java
+++ b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/extensions/anonymousterminus/AnonymousTerminusTest.java
@@ -61,7 +61,6 @@ import org.apache.qpid.tests.protocol.Response;
 import org.apache.qpid.tests.protocol.SpecificationTest;
 import org.apache.qpid.tests.protocol.v1_0.FrameTransport;
 import org.apache.qpid.tests.protocol.v1_0.Interaction;
-import org.apache.qpid.tests.protocol.v1_0.InteractionTransactionalState;
 import org.apache.qpid.tests.protocol.v1_0.MessageEncoder;
 import org.apache.qpid.tests.protocol.v1_0.Utils;
 import org.apache.qpid.tests.utils.BrokerAdmin;
@@ -252,12 +251,11 @@ public class AnonymousTerminusTest extends BrokerAdminUsingTestBase
         {
             final Interaction interaction = openInteractionWithAnonymousRelayCapability(transport);
             final UnsignedInteger linkHandle = UnsignedInteger.ONE;
-            final InteractionTransactionalState txnState = interaction.createTransactionalState(UnsignedInteger.ZERO);
             interaction.begin()
                        .consumeResponse(Begin.class)
 
-                       .txnAttachCoordinatorLink(txnState)
-                       .txnDeclare(txnState)
+                       .txnAttachCoordinatorLink(UnsignedInteger.ZERO)
+                       .txnDeclare()
 
                        .attachRole(Role.SENDER)
                        .attachHandle(linkHandle)
@@ -268,13 +266,11 @@ public class AnonymousTerminusTest extends BrokerAdminUsingTestBase
                        .transferHandle(linkHandle)
                        .transferPayload(generateMessagePayloadToDestination(BrokerAdmin.TEST_QUEUE_NAME))
                        .transferDeliveryTag(_deliveryTag)
-                       .transferTransactionalState(txnState.getCurrentTransactionId())
+                       .transferTransactionalStateFromCurrentTransaction()
                        .transferSettled(Boolean.TRUE)
-                       .transfer()
-
-                       .txnDischarge(txnState, false);
+                       .transfer().txnDischarge(false);
 
-            assertThat(txnState.getDeliveryState(), is(instanceOf(Accepted.class)));
+            assertThat(interaction.getCoordinatorLatestDeliveryState(), is(instanceOf(Accepted.class)));
 
             Object receivedMessage = Utils.receiveMessage(_brokerAddress, BrokerAdmin.TEST_QUEUE_NAME);
             assertThat(receivedMessage, is(equalTo(TEST_MESSAGE_CONTENT)));
@@ -288,12 +284,11 @@ public class AnonymousTerminusTest extends BrokerAdminUsingTestBase
         {
             final Interaction interaction = openInteractionWithAnonymousRelayCapability(transport);
             final UnsignedInteger linkHandle = UnsignedInteger.ONE;
-            final InteractionTransactionalState txnState = interaction.createTransactionalState(UnsignedInteger.ZERO);
             interaction.begin()
                        .consumeResponse(Begin.class)
 
-                       .txnAttachCoordinatorLink(txnState)
-                       .txnDeclare(txnState)
+                       .txnAttachCoordinatorLink(UnsignedInteger.ZERO)
+                       .txnDeclare()
 
                        .attachRole(Role.SENDER)
                        .attachHandle(linkHandle)
@@ -304,7 +299,7 @@ public class AnonymousTerminusTest extends BrokerAdminUsingTestBase
                        .transferHandle(linkHandle)
                        .transferPayload(generateMessagePayloadToDestination(BrokerAdmin.TEST_QUEUE_NAME))
                        .transferDeliveryTag(_deliveryTag)
-                       .transferTransactionalState(txnState.getCurrentTransactionId())
+                       .transferTransactionalStateFromCurrentTransaction()
                        .transferSettled(Boolean.FALSE)
                        .transfer();
 
@@ -318,9 +313,9 @@ public class AnonymousTerminusTest extends BrokerAdminUsingTestBase
             final TransactionalState receivedTxnState = (TransactionalState) dispositionState;
             assertThat(receivedTxnState.getOutcome(), is(instanceOf(Accepted.class)));
 
-            interaction.txnDischarge(txnState, false);
+            interaction.txnDischarge(false);
 
-            assertThat(txnState.getDeliveryState(), is(instanceOf(Accepted.class)));
+            assertThat(interaction.getCoordinatorLatestDeliveryState(), is(instanceOf(Accepted.class)));
 
             Object receivedMessage = Utils.receiveMessage(_brokerAddress, BrokerAdmin.TEST_QUEUE_NAME);
             assertThat(receivedMessage, is(equalTo(TEST_MESSAGE_CONTENT)));
@@ -334,12 +329,11 @@ public class AnonymousTerminusTest extends BrokerAdminUsingTestBase
         {
             final Interaction interaction = openInteractionWithAnonymousRelayCapability(transport);
             final UnsignedInteger linkHandle = UnsignedInteger.ONE;
-            final InteractionTransactionalState txnState = interaction.createTransactionalState(UnsignedInteger.ZERO);
             interaction.begin()
                        .consumeResponse(Begin.class)
 
-                       .txnAttachCoordinatorLink(txnState)
-                       .txnDeclare(txnState)
+                       .txnAttachCoordinatorLink(UnsignedInteger.ZERO)
+                       .txnDeclare()
 
                        .attachRole(Role.SENDER)
                        .attachSourceOutcomes(Accepted.ACCEPTED_SYMBOL, Rejected.REJECTED_SYMBOL)
@@ -351,7 +345,7 @@ public class AnonymousTerminusTest extends BrokerAdminUsingTestBase
                        .transferHandle(linkHandle)
                        .transferPayload(generateMessagePayloadToDestination("Unknown"))
                        .transferDeliveryTag(_deliveryTag)
-                       .transferTransactionalState(txnState.getCurrentTransactionId())
+                       .transferTransactionalStateFromCurrentTransaction()
                        .transferSettled(Boolean.FALSE)
                        .transfer();
 
@@ -370,9 +364,9 @@ public class AnonymousTerminusTest extends BrokerAdminUsingTestBase
             assertThat(rejectedError.getInfo(), is(notNullValue()));
             assertThat(rejectedError.getInfo().get(DELIVERY_TAG), is(equalTo(_deliveryTag)));
 
-            interaction.txnDischarge(txnState, false);
+            interaction.txnDischarge(false);
 
-            assertThat(txnState.getDeliveryState(), is(instanceOf(Accepted.class)));
+            assertThat(interaction.getCoordinatorLatestDeliveryState(), is(instanceOf(Accepted.class)));
         }
     }
 
@@ -383,12 +377,11 @@ public class AnonymousTerminusTest extends BrokerAdminUsingTestBase
         {
             final Interaction interaction = openInteractionWithAnonymousRelayCapability(transport);
             final UnsignedInteger linkHandle = UnsignedInteger.ONE;
-            final InteractionTransactionalState txnState = interaction.createTransactionalState(UnsignedInteger.ZERO);
             interaction.begin()
                        .consumeResponse(Begin.class)
 
-                       .txnAttachCoordinatorLink(txnState)
-                       .txnDeclare(txnState)
+                       .txnAttachCoordinatorLink(UnsignedInteger.ZERO)
+                       .txnDeclare()
 
                        .attachRole(Role.SENDER)
                        .attachSourceOutcomes(Accepted.ACCEPTED_SYMBOL)
@@ -401,7 +394,7 @@ public class AnonymousTerminusTest extends BrokerAdminUsingTestBase
                        .transferPayload(generateMessagePayloadToDestination("Unknown"))
                        .transferDeliveryId(UnsignedInteger.valueOf(1))
                        .transferDeliveryTag(_deliveryTag)
-                       .transferTransactionalState(txnState.getCurrentTransactionId())
+                       .transferTransactionalStateFromCurrentTransaction()
                        .transferSettled(Boolean.FALSE)
                        .transfer();
 
@@ -412,9 +405,9 @@ public class AnonymousTerminusTest extends BrokerAdminUsingTestBase
             assertThat(senderLinkDetachError.getInfo(), is(notNullValue()));
             assertThat(senderLinkDetachError.getInfo().get(DELIVERY_TAG), is(equalTo(_deliveryTag)));
 
-            interaction.txnDischarge(txnState, false);
+            interaction.txnDischarge(false);
 
-            DeliveryState txnDischargeDeliveryState = txnState.getDeliveryState();
+            DeliveryState txnDischargeDeliveryState = interaction.getCoordinatorLatestDeliveryState();
             assertThat(txnDischargeDeliveryState, is(instanceOf(Rejected.class)));
             Rejected rejected = (Rejected) txnDischargeDeliveryState;
             Error error = rejected.getError();
@@ -454,13 +447,12 @@ public class AnonymousTerminusTest extends BrokerAdminUsingTestBase
             final Interaction interaction =
                     openInteractionWithAnonymousRelayCapability(transport);
 
-            final InteractionTransactionalState txnState = interaction.createTransactionalState(UnsignedInteger.ZERO);
             interaction.begin()
                        .consumeResponse(Begin.class)
 
                        // attaching coordinator link with supported outcomes Accepted and Rejected
-                       .txnAttachCoordinatorLink(txnState)
-                       .txnDeclare(txnState)
+                       .txnAttachCoordinatorLink(UnsignedInteger.ZERO)
+                       .txnDeclare()
 
                        .attachRole(Role.SENDER)
                        .attachHandle(linkHandle)
@@ -472,13 +464,13 @@ public class AnonymousTerminusTest extends BrokerAdminUsingTestBase
                        .transferHandle(linkHandle)
                        .transferPayload(generateMessagePayloadToDestination("Unknown"))
                        .transferDeliveryTag(_deliveryTag)
-                       .transferTransactionalState(txnState.getCurrentTransactionId())
+                       .transferTransactionalStateFromCurrentTransaction()
                        .transferSettled(Boolean.TRUE)
                        .transfer();
 
-            interaction.txnDischarge(txnState, false);
+            interaction.txnDischarge(false);
 
-            DeliveryState txDischargeDeliveryState = txnState.getDeliveryState();
+            DeliveryState txDischargeDeliveryState = interaction.getCoordinatorLatestDeliveryState();
             assertThat(txDischargeDeliveryState, is(instanceOf(Rejected.class)));
 
             Rejected rejected = (Rejected) txDischargeDeliveryState;
@@ -521,13 +513,11 @@ public class AnonymousTerminusTest extends BrokerAdminUsingTestBase
             final Interaction interaction =
                     openInteractionWithAnonymousRelayCapability(transport);
 
-            final InteractionTransactionalState txnState = interaction.createTransactionalState(UnsignedInteger.ZERO);
-
             interaction.begin()
                        .consumeResponse(Begin.class)
 
-                       .txnAttachCoordinatorLink(txnState, Accepted.ACCEPTED_SYMBOL)
-                       .txnDeclare(txnState)
+                       .txnAttachCoordinatorLink(UnsignedInteger.ZERO, Accepted.ACCEPTED_SYMBOL)
+                       .txnDeclare()
 
                        .attachRole(Role.SENDER)
                        .attachHandle(linkHandle)
@@ -541,10 +531,9 @@ public class AnonymousTerminusTest extends BrokerAdminUsingTestBase
                        .transferHandle(linkHandle)
                        .transferPayload(generateMessagePayloadToDestination("Unknown"))
                        .transferDeliveryTag(_deliveryTag)
-                       .transferTransactionalState(txnState.getCurrentTransactionId())
+                       .transferTransactionalStateFromCurrentTransaction()
                        .transferSettled(Boolean.TRUE)
-                       .transfer()
-                       .txnSendDischarge(txnState, false);
+                       .transfer().txnSendDischarge(false);
 
             Detach transactionCoordinatorDetach = interaction.consumeResponse().getLatestResponse(Detach.class);
             Error transactionCoordinatorDetachError = transactionCoordinatorDetach.getError();
diff --git a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/extensions/qpid/queue/QueueDeletionTest.java b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/extensions/qpid/queue/QueueDeletionTest.java
index 39a8a9b..8cd435b 100644
--- a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/extensions/qpid/queue/QueueDeletionTest.java
+++ b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/extensions/qpid/queue/QueueDeletionTest.java
@@ -51,7 +51,6 @@ import org.apache.qpid.server.protocol.v1_0.type.transport.Role;
 import org.apache.qpid.tests.protocol.Response;
 import org.apache.qpid.tests.protocol.v1_0.FrameTransport;
 import org.apache.qpid.tests.protocol.v1_0.Interaction;
-import org.apache.qpid.tests.protocol.v1_0.InteractionTransactionalState;
 import org.apache.qpid.tests.protocol.v1_0.Utils;
 import org.apache.qpid.tests.utils.BrokerAdmin;
 import org.apache.qpid.tests.utils.BrokerAdminUsingTestBase;
@@ -132,7 +131,6 @@ public class QueueDeletionTest extends BrokerAdminUsingTestBase
             final UnsignedInteger linkHandle = UnsignedInteger.ONE;
 
             final Interaction interaction = transport.newInteraction();
-            final InteractionTransactionalState txnState = interaction.createTransactionalState(UnsignedInteger.ZERO);
 
             Attach attach = interaction.negotiateProtocol()
                                        .consumeResponse()
@@ -141,8 +139,8 @@ public class QueueDeletionTest extends BrokerAdminUsingTestBase
                                        .begin()
                                        .consumeResponse(Begin.class)
 
-                                       .txnAttachCoordinatorLink(txnState)
-                                       .txnDeclare(txnState)
+                                       .txnAttachCoordinatorLink(UnsignedInteger.ZERO)
+                                       .txnDeclare()
 
                                        .attachRole(Role.SENDER)
                                        .attachTargetAddress(BrokerAdmin.TEST_QUEUE_NAME)
@@ -153,7 +151,7 @@ public class QueueDeletionTest extends BrokerAdminUsingTestBase
 
                                                          .transferHandle(linkHandle)
                                                          .transferPayloadData(getTestName())
-                                                         .transferTransactionalState(txnState.getCurrentTransactionId())
+                                                         .transferTransactionalStateFromCurrentTransaction()
                                                          .transfer()
                                                          .consumeResponse(Disposition.class)
                                                          .getLatestResponse(Disposition.class);
@@ -171,9 +169,9 @@ public class QueueDeletionTest extends BrokerAdminUsingTestBase
             assertThat(receivedDetach.getError().getCondition(), is(AmqpError.RESOURCE_DELETED));
             assertThat(receivedDetach.getHandle(), is(equalTo(attach.getHandle())));
 
-            interaction.txnSendDischarge(txnState, false);
+            interaction.txnSendDischarge(false);
 
-            assertTransactionRollbackOnly(interaction, txnState);
+            assertTransactionRollbackOnly(interaction);
         }
     }
 
@@ -187,7 +185,6 @@ public class QueueDeletionTest extends BrokerAdminUsingTestBase
         try (FrameTransport transport = new FrameTransport(_brokerAddress).connect())
         {
             final Interaction interaction = transport.newInteraction();
-            final InteractionTransactionalState txnState = interaction.createTransactionalState(UnsignedInteger.ZERO);
             Attach attach = interaction.negotiateProtocol()
                                        .consumeResponse()
                                        .open()
@@ -195,8 +192,8 @@ public class QueueDeletionTest extends BrokerAdminUsingTestBase
                                        .begin()
                                        .consumeResponse(Begin.class)
 
-                                       .txnAttachCoordinatorLink(txnState)
-                                       .txnDeclare(txnState)
+                                       .txnAttachCoordinatorLink(UnsignedInteger.ZERO)
+                                       .txnDeclare()
 
                                        .attachRole(Role.RECEIVER)
                                        .attachHandle(UnsignedInteger.ONE)
@@ -221,7 +218,7 @@ public class QueueDeletionTest extends BrokerAdminUsingTestBase
 
             interaction.dispositionSettled(true)
                        .dispositionRole(Role.RECEIVER)
-                       .dispositionTransactionalState(txnState.getCurrentTransactionId(), new Accepted())
+                       .dispositionTransactionalStateFromCurrentTransaction(new Accepted())
                        .disposition();
 
             interaction.flowIncomingWindow(UnsignedInteger.valueOf(2))
@@ -244,14 +241,13 @@ public class QueueDeletionTest extends BrokerAdminUsingTestBase
             assertThat(receivedDetach.getError().getCondition(), is(AmqpError.RESOURCE_DELETED));
             assertThat(receivedDetach.getHandle(), is(equalTo(attach.getHandle())));
 
-            interaction.txnSendDischarge(txnState, false);
+            interaction.txnSendDischarge(false);
 
-            assertTransactionRollbackOnly(interaction, txnState);
+            assertTransactionRollbackOnly(interaction);
         }
     }
 
-    private void assertTransactionRollbackOnly(final Interaction interaction,
-                                               final InteractionTransactionalState txnState) throws Exception
+    private void assertTransactionRollbackOnly(final Interaction interaction) throws Exception
     {
         Disposition declareTransactionDisposition = null;
         Flow coordinatorFlow = null;
@@ -266,7 +262,7 @@ public class QueueDeletionTest extends BrokerAdminUsingTestBase
             if (response.getBody() instanceof Flow)
             {
                 final Flow flowResponse = (Flow) response.getBody();
-                if (flowResponse.getHandle().equals(txnState.getHandle()))
+                if (flowResponse.getHandle().equals(interaction.getCoordinatorHandle()))
                 {
                     coordinatorFlow = flowResponse;
                 }
diff --git a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/extensions/qpid/transactiontimeout/TransactionTimeoutTest.java b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/extensions/qpid/transactiontimeout/TransactionTimeoutTest.java
index cd4f896..85dff52 100644
--- a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/extensions/qpid/transactiontimeout/TransactionTimeoutTest.java
+++ b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/extensions/qpid/transactiontimeout/TransactionTimeoutTest.java
@@ -46,7 +46,6 @@ import org.apache.qpid.server.protocol.v1_0.type.transport.Role;
 import org.apache.qpid.tests.protocol.Response;
 import org.apache.qpid.tests.protocol.v1_0.FrameTransport;
 import org.apache.qpid.tests.protocol.v1_0.Interaction;
-import org.apache.qpid.tests.protocol.v1_0.InteractionTransactionalState;
 import org.apache.qpid.tests.protocol.v1_0.Utils;
 import org.apache.qpid.tests.utils.BrokerAdmin;
 import org.apache.qpid.tests.utils.BrokerAdminUsingTestBase;
@@ -74,7 +73,6 @@ public class TransactionTimeoutTest extends BrokerAdminUsingTestBase
             final UnsignedInteger linkHandle = UnsignedInteger.ONE;
 
             final Interaction interaction = transport.newInteraction();
-            final InteractionTransactionalState txnState = interaction.createTransactionalState(UnsignedInteger.ZERO);
             Disposition responseDisposition = interaction.negotiateProtocol()
                                                          .consumeResponse()
                                                          .open()
@@ -82,8 +80,8 @@ public class TransactionTimeoutTest extends BrokerAdminUsingTestBase
                                                          .begin()
                                                          .consumeResponse(Begin.class)
 
-                                                         .txnAttachCoordinatorLink(txnState)
-                                                         .txnDeclare(txnState)
+                                                         .txnAttachCoordinatorLink(UnsignedInteger.ZERO)
+                                                         .txnDeclare()
 
                                                          .attachRole(Role.SENDER)
                                                          .attachTargetAddress(BrokerAdmin.TEST_QUEUE_NAME)
@@ -93,7 +91,7 @@ public class TransactionTimeoutTest extends BrokerAdminUsingTestBase
 
                                                          .transferHandle(linkHandle)
                                                          .transferPayloadData(getTestName())
-                                                         .transferTransactionalState(txnState.getCurrentTransactionId())
+                                                         .transferTransactionalStateFromCurrentTransaction()
                                                          .transfer()
                                                          .consumeResponse(Disposition.class)
                                                          .getLatestResponse(Disposition.class);
@@ -116,7 +114,6 @@ public class TransactionTimeoutTest extends BrokerAdminUsingTestBase
         try (FrameTransport transport = new FrameTransport(_brokerAddress).connect())
         {
             final Interaction interaction = transport.newInteraction();
-            final InteractionTransactionalState txnState = interaction.createTransactionalState(UnsignedInteger.ZERO);
             interaction.negotiateProtocol()
                        .consumeResponse()
                        .open()
@@ -124,8 +121,8 @@ public class TransactionTimeoutTest extends BrokerAdminUsingTestBase
                        .begin()
                        .consumeResponse(Begin.class)
 
-                       .txnAttachCoordinatorLink(txnState)
-                       .txnDeclare(txnState)
+                       .txnAttachCoordinatorLink(UnsignedInteger.ZERO)
+                       .txnDeclare()
 
                        .attachRole(Role.RECEIVER)
                        .attachHandle(UnsignedInteger.ONE)
@@ -150,7 +147,7 @@ public class TransactionTimeoutTest extends BrokerAdminUsingTestBase
 
             interaction.dispositionSettled(true)
                        .dispositionRole(Role.RECEIVER)
-                       .dispositionTransactionalState(txnState.getCurrentTransactionId(), new Accepted())
+                       .dispositionTransactionalStateFromCurrentTransaction(new Accepted())
                        .disposition()
                        .sync();
 
diff --git a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/messaging/TransferTest.java b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/messaging/TransferTest.java
index 42f5dfc..dab344e 100644
--- a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/messaging/TransferTest.java
+++ b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/messaging/TransferTest.java
@@ -83,7 +83,6 @@ import org.apache.qpid.tests.protocol.Response;
 import org.apache.qpid.tests.protocol.SpecificationTest;
 import org.apache.qpid.tests.protocol.v1_0.FrameTransport;
 import org.apache.qpid.tests.protocol.v1_0.Interaction;
-import org.apache.qpid.tests.protocol.v1_0.InteractionTransactionalState;
 import org.apache.qpid.tests.protocol.v1_0.MessageDecoder;
 import org.apache.qpid.tests.protocol.v1_0.MessageEncoder;
 import org.apache.qpid.tests.protocol.v1_0.Utils;
@@ -1056,9 +1055,8 @@ public class TransferTest extends BrokerAdminUsingTestBase
             Flow flow = interaction.getLatestResponse(Flow.class);
             assumeThat("insufficient credit for the test", flow.getLinkCredit().intValue(), is(greaterThan(2)));
 
-            final InteractionTransactionalState txnState = interaction.createTransactionalState(UnsignedInteger.ONE);
-            interaction.txnAttachCoordinatorLink(txnState)
-                       .txnDeclare(txnState);
+            interaction.txnAttachCoordinatorLink(UnsignedInteger.ONE)
+                       .txnDeclare();
 
             interaction.transferDeliveryId()
                        .transferDeliveryTag(new Binary("A".getBytes(StandardCharsets.UTF_8)))
@@ -1070,11 +1068,11 @@ public class TransferTest extends BrokerAdminUsingTestBase
                        .transfer()
                        .transferDeliveryId()
                        .transferDeliveryTag(new Binary("C".getBytes(StandardCharsets.UTF_8)))
-                       .transferTransactionalState(txnState.getCurrentTransactionId())
+                       .transferTransactionalStateFromCurrentTransaction()
                        .transferPayloadData(contents[2])
                        .transfer();
 
-            interaction.txnSendDischarge(txnState, false);
+            interaction.txnSendDischarge(false);
 
             assertDeliveries(interaction, Sets.newTreeSet(Arrays.asList(UnsignedInteger.ONE,
                                                                         UnsignedInteger.valueOf(2),
@@ -1174,9 +1172,8 @@ public class TransferTest extends BrokerAdminUsingTestBase
                 deliveryIds.add(interaction.getLatestDeliveryId());
             }
 
-            final InteractionTransactionalState txnState = interaction.createTransactionalState(UnsignedInteger.ONE);
-            interaction.txnAttachCoordinatorLink(txnState)
-                       .txnDeclare(txnState);
+            interaction.txnAttachCoordinatorLink(UnsignedInteger.ONE)
+                       .txnDeclare();
 
             interaction.dispositionSettled(true)
                        .dispositionRole(Role.RECEIVER)
@@ -1188,10 +1185,10 @@ public class TransferTest extends BrokerAdminUsingTestBase
                        .dispositionRole(Role.RECEIVER)
                        .dispositionFirst(deliveryIds.get(2))
                        .dispositionLast(deliveryIds.get(3))
-                       .dispositionTransactionalState(txnState.getCurrentTransactionId(), new Accepted())
+                       .dispositionTransactionalStateFromCurrentTransaction(new Accepted())
                        .disposition();
 
-            interaction.txnDischarge(txnState, false);
+            interaction.txnDischarge(false);
         }
 
         String messageText = getTestName() + "_" + 4;
diff --git a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transaction/DischargeTest.java b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transaction/DischargeTest.java
index 85040c8..369bd9b 100644
--- a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transaction/DischargeTest.java
+++ b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transaction/DischargeTest.java
@@ -55,7 +55,6 @@ import org.apache.qpid.server.protocol.v1_0.type.transport.Transfer;
 import org.apache.qpid.tests.protocol.SpecificationTest;
 import org.apache.qpid.tests.protocol.v1_0.FrameTransport;
 import org.apache.qpid.tests.protocol.v1_0.Interaction;
-import org.apache.qpid.tests.protocol.v1_0.InteractionTransactionalState;
 import org.apache.qpid.tests.protocol.v1_0.Utils;
 import org.apache.qpid.tests.utils.BrokerAdmin;
 import org.apache.qpid.tests.utils.BrokerAdminUsingTestBase;
@@ -81,24 +80,22 @@ public class DischargeTest extends BrokerAdminUsingTestBase
     {
         try (FrameTransport transport = new FrameTransport(_brokerAddress).connect())
         {
-            final InteractionTransactionalState txnState = new InteractionTransactionalState(UnsignedInteger.ZERO);
             final Interaction interaction = transport.newInteraction();
             interaction.negotiateProtocol().consumeResponse()
                        .open().consumeResponse(Open.class)
                        .begin().consumeResponse(Begin.class)
 
-                       .txnAttachCoordinatorLink(txnState, Rejected.REJECTED_SYMBOL)
-                       .txnDeclare(txnState);
+                       .txnAttachCoordinatorLink(UnsignedInteger.ZERO, Rejected.REJECTED_SYMBOL)
+                       .txnDeclare();
 
-            assertThat(txnState.getDeliveryState(), is(instanceOf(Declared.class)));
-            assertThat(txnState.getCurrentTransactionId(), is(notNullValue()));
+            assertThat(interaction.getCoordinatorLatestDeliveryState(), is(instanceOf(Declared.class)));
+            assertThat(interaction.getCurrentTransactionId(), is(notNullValue()));
 
-            txnState.setLastTransactionId(new Binary("nonExistingTransaction".getBytes(UTF_8)));
-            interaction.txnDischarge(txnState, false);
+            interaction.txnDischarge(new Binary("nonExistingTransaction".getBytes(UTF_8)), false);
             interaction.doCloseConnection();
 
-            assertThat(txnState.getDeliveryState(), is(instanceOf(Rejected.class)));
-            final Error error = ((Rejected) txnState.getDeliveryState()).getError();
+            assertThat(interaction.getCoordinatorLatestDeliveryState(), is(instanceOf(Rejected.class)));
+            final Error error = ((Rejected) interaction.getCoordinatorLatestDeliveryState()).getError();
             assertThat(error, is(notNullValue()));
 
             if (KIND_BROKER_J.equals(getBrokerAdmin().getKind()))
@@ -119,19 +116,17 @@ public class DischargeTest extends BrokerAdminUsingTestBase
     {
         try (FrameTransport transport = new FrameTransport(_brokerAddress).connect())
         {
-            final InteractionTransactionalState txnState = new InteractionTransactionalState(UnsignedInteger.ZERO);
             final Interaction interaction = transport.newInteraction();
             interaction.negotiateProtocol().consumeResponse()
                                            .open().consumeResponse(Open.class)
                                            .begin().consumeResponse(Begin.class)
-                                           .txnAttachCoordinatorLink(txnState, Accepted.ACCEPTED_SYMBOL)
-                                           .txnDeclare(txnState);
+                                           .txnAttachCoordinatorLink(UnsignedInteger.ZERO, Accepted.ACCEPTED_SYMBOL)
+                                           .txnDeclare();
 
-            assertThat(txnState.getDeliveryState(), is(instanceOf(Declared.class)));
-            assertThat(txnState.getCurrentTransactionId(), is(notNullValue()));
+            assertThat(interaction.getCoordinatorLatestDeliveryState(), is(instanceOf(Declared.class)));
+            assertThat(interaction.getCurrentTransactionId(), is(notNullValue()));
 
-            txnState.setLastTransactionId(new Binary("nonExistingTransaction".getBytes(UTF_8)));
-            interaction.txnSendDischarge(txnState, false);
+            interaction.txnSendDischarge(new Binary("nonExistingTransaction".getBytes(UTF_8)), false);
 
             final Detach detachResponse = interaction.consumeResponse(Detach.class).getLatestResponse(Detach.class);
             interaction.doCloseConnection();
@@ -157,13 +152,12 @@ public class DischargeTest extends BrokerAdminUsingTestBase
         try (FrameTransport transport = new FrameTransport(_brokerAddress).connect())
         {
             final Interaction interaction = transport.newInteraction();
-            final InteractionTransactionalState txnState = interaction.createTransactionalState(UnsignedInteger.ZERO);
             interaction.negotiateProtocol().consumeResponse()
                        .open().consumeResponse(Open.class)
                        .begin().consumeResponse(Begin.class)
 
-                       .txnAttachCoordinatorLink(txnState)
-                       .txnDeclare(txnState)
+                       .txnAttachCoordinatorLink(UnsignedInteger.ZERO)
+                       .txnDeclare()
 
                        .attachRole(Role.RECEIVER)
                        .attachHandle(UnsignedInteger.ONE)
@@ -187,12 +181,11 @@ public class DischargeTest extends BrokerAdminUsingTestBase
             final UnsignedInteger deliveryId = transfers.get(0).getDeliveryId();
             interaction.detach().consumeResponse(Detach.class)
                        .dispositionFirst(deliveryId)
-                       .dispositionTransactionalState(txnState.getCurrentTransactionId(), new Accepted())
+                       .dispositionTransactionalStateFromCurrentTransaction(new Accepted())
                        .dispositionRole(Role.RECEIVER)
-                       .disposition()
-                       .txnDischarge(txnState, false);
+                       .disposition().txnDischarge(false);
 
-            assertThat(txnState.getDeliveryState(), is(instanceOf(Accepted.class)));
+            assertThat(interaction.getCoordinatorLatestDeliveryState(), is(instanceOf(Accepted.class)));
 
             interaction.doCloseConnection();
         }
@@ -217,13 +210,12 @@ public class DischargeTest extends BrokerAdminUsingTestBase
         try (FrameTransport transport = new FrameTransport(_brokerAddress).connect())
         {
             final Interaction interaction = transport.newInteraction();
-            final InteractionTransactionalState txnState = interaction.createTransactionalState(UnsignedInteger.ZERO);
             interaction.negotiateProtocol().consumeResponse()
                        .open().consumeResponse(Open.class)
                        .begin().consumeResponse(Begin.class)
 
-                       .txnAttachCoordinatorLink(txnState)
-                       .txnDeclare(txnState)
+                       .txnAttachCoordinatorLink(UnsignedInteger.ZERO)
+                       .txnDeclare()
 
                        .attachRole(Role.SENDER)
                        .attachHandle(UnsignedInteger.ONE)
@@ -232,16 +224,16 @@ public class DischargeTest extends BrokerAdminUsingTestBase
                        .consumeResponse(Flow.class)
 
                        .transferDeliveryId()
-                       .transferTransactionalState(txnState.getCurrentTransactionId())
+                       .transferTransactionalStateFromCurrentTransaction()
                        .transferPayloadData(getTestName())
                        .transferHandle(UnsignedInteger.ONE)
                        .transfer().consumeResponse(Disposition.class)
 
                        .detachHandle(UnsignedInteger.ONE)
                        .detach().consumeResponse(Detach.class);
-            interaction.txnDischarge(txnState, false);
+            interaction.txnDischarge(false);
 
-            assertThat(txnState.getDeliveryState(), is(instanceOf(Accepted.class)));
+            assertThat(interaction.getCoordinatorLatestDeliveryState(), is(instanceOf(Accepted.class)));
         }
 
         final Object receivedMessage = Utils.receiveMessage(_brokerAddress, BrokerAdmin.TEST_QUEUE_NAME);
@@ -259,13 +251,12 @@ public class DischargeTest extends BrokerAdminUsingTestBase
         try (FrameTransport transport = new FrameTransport(_brokerAddress).connect())
         {
             final Interaction interaction = transport.newInteraction();
-            final InteractionTransactionalState txnState = interaction.createTransactionalState(UnsignedInteger.ZERO);
             interaction.negotiateProtocol().consumeResponse()
                        .open().consumeResponse(Open.class)
                        .begin().consumeResponse(Begin.class)
 
-                       .txnAttachCoordinatorLink(txnState)
-                       .txnDeclare(txnState)
+                       .txnAttachCoordinatorLink(UnsignedInteger.ZERO)
+                       .txnDeclare()
 
                        .attachRole(Role.SENDER)
                        .attachHandle(UnsignedInteger.ONE)
@@ -275,7 +266,7 @@ public class DischargeTest extends BrokerAdminUsingTestBase
                        .consumeResponse(Flow.class)
 
                        .transferDeliveryId()
-                       .transferTransactionalState(txnState.getCurrentTransactionId())
+                       .transferTransactionalStateFromCurrentTransaction()
                        .transferPayloadData(getTestName())
                        .transferHandle(UnsignedInteger.ONE)
                        .transfer().consumeResponse(Disposition.class)
@@ -283,9 +274,9 @@ public class DischargeTest extends BrokerAdminUsingTestBase
                        .detachHandle(UnsignedInteger.ONE)
                        .detachClose(true)
                        .detach().consumeResponse(Detach.class);
-            interaction.txnDischarge(txnState, false);
+            interaction.txnDischarge(false);
 
-            assertThat(txnState.getDeliveryState(), is(instanceOf(Accepted.class)));
+            assertThat(interaction.getCoordinatorLatestDeliveryState(), is(instanceOf(Accepted.class)));
         }
 
         final Object receivedMessage = Utils.receiveMessage(_brokerAddress, BrokerAdmin.TEST_QUEUE_NAME);
diff --git a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transaction/TransactionalTransferTest.java b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transaction/TransactionalTransferTest.java
index f44790f..02d28a7 100644
--- a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transaction/TransactionalTransferTest.java
+++ b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transaction/TransactionalTransferTest.java
@@ -58,7 +58,6 @@ import org.apache.qpid.tests.protocol.Response;
 import org.apache.qpid.tests.protocol.SpecificationTest;
 import org.apache.qpid.tests.protocol.v1_0.FrameTransport;
 import org.apache.qpid.tests.protocol.v1_0.Interaction;
-import org.apache.qpid.tests.protocol.v1_0.InteractionTransactionalState;
 import org.apache.qpid.tests.protocol.v1_0.Utils;
 import org.apache.qpid.tests.utils.BrokerAdmin;
 import org.apache.qpid.tests.utils.BrokerAdminUsingTestBase;
@@ -86,7 +85,6 @@ public class TransactionalTransferTest extends BrokerAdminUsingTestBase
             final UnsignedInteger linkHandle = UnsignedInteger.ONE;
 
             final Interaction interaction = transport.newInteraction();
-            final InteractionTransactionalState txnState = interaction.createTransactionalState(UnsignedInteger.ZERO);
             Disposition responseDisposition = interaction.negotiateProtocol()
                                                          .consumeResponse()
                                                          .open()
@@ -94,8 +92,8 @@ public class TransactionalTransferTest extends BrokerAdminUsingTestBase
                                                          .begin()
                                                          .consumeResponse(Begin.class)
 
-                                                         .txnAttachCoordinatorLink(txnState)
-                                                         .txnDeclare(txnState)
+                                                         .txnAttachCoordinatorLink(UnsignedInteger.ZERO)
+                                                         .txnDeclare()
 
                                                          .attachRole(Role.SENDER)
                                                          .attachTargetAddress(BrokerAdmin.TEST_QUEUE_NAME)
@@ -106,7 +104,7 @@ public class TransactionalTransferTest extends BrokerAdminUsingTestBase
                                                          .transferDeliveryId()
                                                          .transferHandle(linkHandle)
                                                          .transferPayloadData(getTestName())
-                                                         .transferTransactionalState(txnState.getCurrentTransactionId())
+                                                         .transferTransactionalStateFromCurrentTransaction()
                                                          .transfer()
                                                          .consumeResponse(Disposition.class)
                                                          .getLatestResponse(Disposition.class);
@@ -116,9 +114,9 @@ public class TransactionalTransferTest extends BrokerAdminUsingTestBase
             assertThat(responseDisposition.getState(), is(instanceOf(TransactionalState.class)));
             assertThat(((TransactionalState) responseDisposition.getState()).getOutcome(), is(instanceOf(Accepted.class)));
 
-            interaction.txnDischarge(txnState, false);
+            interaction.txnDischarge(false);
 
-            assertThat(txnState.getDeliveryState(), is(instanceOf(Accepted.class)));
+            assertThat(interaction.getCoordinatorLatestDeliveryState(), is(instanceOf(Accepted.class)));
         }
         Object receivedMessage = Utils.receiveMessage(_brokerAddress, BrokerAdmin.TEST_QUEUE_NAME);
         assertThat(receivedMessage, is(equalTo(getTestName())));
@@ -136,7 +134,6 @@ public class TransactionalTransferTest extends BrokerAdminUsingTestBase
             final UnsignedInteger linkHandle = UnsignedInteger.ONE;
 
             final Interaction interaction = transport.newInteraction();
-            final InteractionTransactionalState txnState = interaction.createTransactionalState(UnsignedInteger.ZERO);
             Disposition responseDisposition = interaction.negotiateProtocol()
                                                          .consumeResponse()
                                                          .open()
@@ -144,8 +141,8 @@ public class TransactionalTransferTest extends BrokerAdminUsingTestBase
                                                          .begin()
                                                          .consumeResponse(Begin.class)
 
-                                                         .txnAttachCoordinatorLink(txnState)
-                                                         .txnDeclare(txnState)
+                                                         .txnAttachCoordinatorLink(UnsignedInteger.ZERO)
+                                                         .txnDeclare()
 
                                                          .attachRole(Role.SENDER)
                                                          .attachTargetAddress(BrokerAdmin.TEST_QUEUE_NAME)
@@ -156,7 +153,7 @@ public class TransactionalTransferTest extends BrokerAdminUsingTestBase
                                                          .transferDeliveryId()
                                                          .transferHandle(linkHandle)
                                                          .transferPayloadData(getTestName())
-                                                         .transferTransactionalState(txnState.getCurrentTransactionId())
+                                                         .transferTransactionalStateFromCurrentTransaction()
                                                          .transfer()
                                                          .consumeResponse(Disposition.class)
                                                          .getLatestResponse(Disposition.class);
@@ -166,9 +163,9 @@ public class TransactionalTransferTest extends BrokerAdminUsingTestBase
             assertThat(responseDisposition.getState(), is(instanceOf(TransactionalState.class)));
             assertThat(((TransactionalState) responseDisposition.getState()).getOutcome(), is(instanceOf(Accepted.class)));
 
-            interaction.txnDischarge(txnState, true);
+            interaction.txnDischarge(true);
 
-            assertThat(txnState.getDeliveryState(), is(instanceOf(Accepted.class)));
+            assertThat(interaction.getCoordinatorLatestDeliveryState(), is(instanceOf(Accepted.class)));
 
             final String content = getTestName() + "_2";
             Utils.putMessageOnQueue(getBrokerAdmin(), BrokerAdmin.TEST_QUEUE_NAME, content);
@@ -188,7 +185,6 @@ public class TransactionalTransferTest extends BrokerAdminUsingTestBase
             final UnsignedInteger linkHandle = UnsignedInteger.ONE;
 
             final Interaction interaction = transport.newInteraction();
-            final InteractionTransactionalState txnState = interaction.createTransactionalState(UnsignedInteger.ZERO);
             Disposition responseDisposition = interaction.negotiateProtocol()
                                                          .consumeResponse()
                                                          .open()
@@ -196,8 +192,8 @@ public class TransactionalTransferTest extends BrokerAdminUsingTestBase
                                                          .begin()
                                                          .consumeResponse(Begin.class)
 
-                                                         .txnAttachCoordinatorLink(txnState)
-                                                         .txnDeclare(txnState)
+                                                         .txnAttachCoordinatorLink(UnsignedInteger.ZERO)
+                                                         .txnDeclare()
 
                                                          .attachRole(Role.SENDER)
                                                          .attachTargetAddress(BrokerAdmin.TEST_QUEUE_NAME)
@@ -210,7 +206,7 @@ public class TransactionalTransferTest extends BrokerAdminUsingTestBase
                                                          .transferDeliveryId()
                                                          .transferHandle(linkHandle)
                                                          .transferPayloadData(getTestName())
-                                                         .transferTransactionalState(txnState.getCurrentTransactionId())
+                                                         .transferTransactionalStateFromCurrentTransaction()
                                                          .transfer()
                                                          .consumeResponse(Disposition.class)
                                                          .getLatestResponse(Disposition.class);
@@ -222,12 +218,12 @@ public class TransactionalTransferTest extends BrokerAdminUsingTestBase
 
             interaction.dispositionRole(Role.SENDER)
                        .dispositionSettled(true)
-                       .dispositionTransactionalState(txnState.getCurrentTransactionId(), new Accepted())
+                       .dispositionTransactionalStateFromCurrentTransaction(new Accepted())
                        .disposition();
 
-            interaction.txnDischarge(txnState, false);
+            interaction.txnDischarge(false);
 
-            assertThat(txnState.getDeliveryState(), is(instanceOf(Accepted.class)));
+            assertThat(interaction.getCoordinatorLatestDeliveryState(), is(instanceOf(Accepted.class)));
         }
         assertThat(Utils.receiveMessage(_brokerAddress, BrokerAdmin.TEST_QUEUE_NAME), is(equalTo(getTestName())));
     }
@@ -244,13 +240,13 @@ public class TransactionalTransferTest extends BrokerAdminUsingTestBase
             final UnsignedInteger linkHandle = UnsignedInteger.ONE;
 
             final Interaction interaction = transport.newInteraction();
-            final InteractionTransactionalState txnState = interaction.createTransactionalState(UnsignedInteger.ZERO);
+
             Response<?> response = interaction.negotiateProtocol().consumeResponse()
                                               .open().consumeResponse(Open.class)
                                               .begin().consumeResponse(Begin.class)
 
-                                              .txnAttachCoordinatorLink(txnState)
-                                              .txnDeclare(txnState)
+                                              .txnAttachCoordinatorLink(UnsignedInteger.ZERO)
+                                              .txnDeclare()
 
                                               .attachRole(Role.SENDER)
                                               .attachTargetAddress(BrokerAdmin.TEST_QUEUE_NAME)
@@ -280,7 +276,7 @@ public class TransactionalTransferTest extends BrokerAdminUsingTestBase
         try (FrameTransport transport = new FrameTransport(_brokerAddress).connect())
         {
             final Interaction interaction = transport.newInteraction();
-            final InteractionTransactionalState txnState = interaction.createTransactionalState(UnsignedInteger.ZERO);
+
             interaction.negotiateProtocol()
                        .consumeResponse()
                        .open()
@@ -288,8 +284,8 @@ public class TransactionalTransferTest extends BrokerAdminUsingTestBase
                        .begin()
                        .consumeResponse(Begin.class)
 
-                       .txnAttachCoordinatorLink(txnState)
-                       .txnDeclare(txnState)
+                       .txnAttachCoordinatorLink(UnsignedInteger.ZERO)
+                       .txnDeclare()
 
                        .attachRole(Role.RECEIVER)
                        .attachHandle(UnsignedInteger.ONE)
@@ -314,12 +310,10 @@ public class TransactionalTransferTest extends BrokerAdminUsingTestBase
 
             interaction.dispositionSettled(true)
                        .dispositionRole(Role.RECEIVER)
-                       .dispositionTransactionalState(txnState.getCurrentTransactionId(), new Accepted())
-                       .disposition()
-                       .txnDischarge(txnState, false);
-
+                       .dispositionTransactionalStateFromCurrentTransaction(new Accepted())
+                       .disposition().txnDischarge(false);
 
-            assertThat(txnState.getDeliveryState(), is(instanceOf(Accepted.class)));
+            assertThat(interaction.getCoordinatorLatestDeliveryState(), is(instanceOf(Accepted.class)));
         }
     }
 
@@ -332,7 +326,6 @@ public class TransactionalTransferTest extends BrokerAdminUsingTestBase
         try (FrameTransport transport = new FrameTransport(_brokerAddress).connect())
         {
             final Interaction interaction = transport.newInteraction();
-            final InteractionTransactionalState txnState = interaction.createTransactionalState(UnsignedInteger.ZERO);
             interaction.negotiateProtocol()
                        .consumeResponse()
                        .open()
@@ -340,8 +333,8 @@ public class TransactionalTransferTest extends BrokerAdminUsingTestBase
                        .begin()
                        .consumeResponse(Begin.class)
 
-                       .txnAttachCoordinatorLink(txnState)
-                       .txnDeclare(txnState)
+                       .txnAttachCoordinatorLink(UnsignedInteger.ZERO)
+                       .txnDeclare()
 
                        .attachRole(Role.RECEIVER)
                        .attachHandle(UnsignedInteger.ONE)
@@ -366,11 +359,10 @@ public class TransactionalTransferTest extends BrokerAdminUsingTestBase
 
             interaction.dispositionSettled(true)
                        .dispositionRole(Role.RECEIVER)
-                       .dispositionTransactionalState(txnState.getCurrentTransactionId(), new Accepted())
-                       .disposition()
-                       .txnDischarge(txnState, true);
+                       .dispositionTransactionalStateFromCurrentTransaction(new Accepted())
+                       .disposition().txnDischarge(true);
 
-            assertThat(txnState.getDeliveryState(), is(instanceOf(Accepted.class)));
+            assertThat(interaction.getCoordinatorLatestDeliveryState(), is(instanceOf(Accepted.class)));
 
             Object receivedMessage = Utils.receiveMessage(_brokerAddress, BrokerAdmin.TEST_QUEUE_NAME);
             assertThat(receivedMessage, is(equalTo(getTestName())));
@@ -390,13 +382,12 @@ public class TransactionalTransferTest extends BrokerAdminUsingTestBase
         try (FrameTransport transport = new FrameTransport(_brokerAddress).connect())
         {
             final Interaction interaction = transport.newInteraction();
-            final InteractionTransactionalState txnState = interaction.createTransactionalState(UnsignedInteger.ZERO);
             List<Transfer> transfers = interaction.negotiateProtocol().consumeResponse()
                                                   .open().consumeResponse(Open.class)
                                                   .begin().consumeResponse(Begin.class)
 
-                                                  .txnAttachCoordinatorLink(txnState)
-                                                  .txnDeclare(txnState)
+                                                  .txnAttachCoordinatorLink(UnsignedInteger.ZERO)
+                                                  .txnDeclare()
 
                                                   .attachRole(Role.RECEIVER)
                                                   .attachHandle(UnsignedInteger.ONE)
@@ -446,7 +437,6 @@ public class TransactionalTransferTest extends BrokerAdminUsingTestBase
         try (FrameTransport transport = new FrameTransport(_brokerAddress).connect())
         {
             final Interaction interaction = transport.newInteraction();
-            final InteractionTransactionalState txnState = interaction.createTransactionalState(UnsignedInteger.ZERO);
             interaction.negotiateProtocol()
                        .consumeResponse()
                        .open()
@@ -454,8 +444,8 @@ public class TransactionalTransferTest extends BrokerAdminUsingTestBase
                        .begin()
                        .consumeResponse(Begin.class)
 
-                       .txnAttachCoordinatorLink(txnState)
-                       .txnDeclare(txnState)
+                       .txnAttachCoordinatorLink(UnsignedInteger.ZERO)
+                       .txnDeclare()
 
                        .attachRole(Role.RECEIVER)
                        .attachHandle(UnsignedInteger.ONE)
@@ -480,8 +470,7 @@ public class TransactionalTransferTest extends BrokerAdminUsingTestBase
 
             Disposition settledDisposition = interaction.dispositionSettled(false)
                                                     .dispositionRole(Role.RECEIVER)
-                                                    .dispositionTransactionalState(txnState.getCurrentTransactionId(),
-                                                                                   new Accepted())
+                                                    .dispositionTransactionalStateFromCurrentTransaction(new Accepted())
                                                     .disposition()
                                                     .consumeResponse(Disposition.class)
                                                     .getLatestResponse(Disposition.class);
@@ -490,9 +479,8 @@ public class TransactionalTransferTest extends BrokerAdminUsingTestBase
             assertThat(settledDisposition.getState(), is(instanceOf(TransactionalState.class)));
             assertThat(((TransactionalState) settledDisposition.getState()).getOutcome(), is(instanceOf(Accepted.class)));
 
-            interaction.txnDischarge(txnState, false);
-
-            assertThat(txnState.getDeliveryState(), is(instanceOf(Accepted.class)));
+            interaction.txnDischarge(false);
+            assertThat(interaction.getCoordinatorLatestDeliveryState(), is(instanceOf(Accepted.class)));
         }
     }
 
@@ -509,7 +497,6 @@ public class TransactionalTransferTest extends BrokerAdminUsingTestBase
         try (FrameTransport transport = new FrameTransport(_brokerAddress).connect())
         {
             final Interaction interaction = transport.newInteraction();
-            final InteractionTransactionalState txnState = interaction.createTransactionalState(UnsignedInteger.ZERO);
             interaction.negotiateProtocol()
                        .consumeResponse()
                        .open()
@@ -517,8 +504,8 @@ public class TransactionalTransferTest extends BrokerAdminUsingTestBase
                        .begin()
                        .consumeResponse(Begin.class)
 
-                       .txnAttachCoordinatorLink(txnState)
-                       .txnDeclare(txnState)
+                       .txnAttachCoordinatorLink(UnsignedInteger.ZERO)
+                       .txnDeclare()
 
                        .attachRole(Role.RECEIVER)
                        .attachHandle(UnsignedInteger.ONE)
@@ -533,7 +520,8 @@ public class TransactionalTransferTest extends BrokerAdminUsingTestBase
                        .flowNextOutgoingId(UnsignedInteger.ZERO)
                        .flowLinkCredit(UnsignedInteger.ONE)
                        .flowHandleFromLinkHandle()
-                       .flowProperties(Collections.singletonMap(Symbol.valueOf("txn-id"), txnState.getCurrentTransactionId()))
+                       .flowProperties(Collections.singletonMap(Symbol.valueOf("txn-id"),
+                                                                interaction.getCurrentTransactionId()))
                        .flow()
 
                        .receiveDelivery();
@@ -546,17 +534,15 @@ public class TransactionalTransferTest extends BrokerAdminUsingTestBase
 
             interaction.dispositionSettled(true)
                        .dispositionRole(Role.RECEIVER)
-                       .dispositionTransactionalState(txnState.getCurrentTransactionId(), new Accepted())
+                       .dispositionTransactionalStateFromCurrentTransaction(new Accepted())
                        .dispositionFirstFromLatestDelivery()
-                       .disposition()
-                       .txnDischarge(txnState, false);
-
+                       .disposition().txnDischarge(false);
 
-            assertThat(txnState.getDeliveryState(), is(instanceOf(Accepted.class)));
+            assertThat(interaction.getCoordinatorLatestDeliveryState(), is(instanceOf(Accepted.class)));
 
             Transfer transfer = transfers.get(0);
             assumeThat(transfer.getState(), is(instanceOf(TransactionalState.class)));
-            assumeThat(((TransactionalState) transfer.getState()).getTxnId(), is(equalTo(txnState.getCurrentTransactionId())));
+            assumeThat(((TransactionalState) transfer.getState()).getTxnId(), is(equalTo(interaction.getCurrentTransactionId())));
 
             final String content = getTestName() + "_2";
             Utils.putMessageOnQueue(getBrokerAdmin(), BrokerAdmin.TEST_QUEUE_NAME, content);
@@ -577,7 +563,6 @@ public class TransactionalTransferTest extends BrokerAdminUsingTestBase
         try (FrameTransport transport = new FrameTransport(_brokerAddress).connect())
         {
             final Interaction interaction = transport.newInteraction();
-            final InteractionTransactionalState txnState = interaction.createTransactionalState(UnsignedInteger.ZERO);
             interaction.negotiateProtocol()
                        .consumeResponse()
                        .open()
@@ -585,8 +570,8 @@ public class TransactionalTransferTest extends BrokerAdminUsingTestBase
                        .begin()
                        .consumeResponse(Begin.class)
 
-                       .txnAttachCoordinatorLink(txnState)
-                       .txnDeclare(txnState)
+                       .txnAttachCoordinatorLink(UnsignedInteger.ZERO)
+                       .txnDeclare()
 
                        .attachRole(Role.RECEIVER)
                        .attachHandle(UnsignedInteger.ONE)
@@ -601,7 +586,8 @@ public class TransactionalTransferTest extends BrokerAdminUsingTestBase
                        .flowNextOutgoingId(UnsignedInteger.ZERO)
                        .flowLinkCredit(UnsignedInteger.ONE)
                        .flowHandleFromLinkHandle()
-                       .flowProperties(Collections.singletonMap(Symbol.valueOf("txn-id"), txnState.getCurrentTransactionId()))
+                       .flowProperties(Collections.singletonMap(Symbol.valueOf("txn-id"),
+                                                                interaction.getCurrentTransactionId()))
                        .flow()
 
                        .receiveDelivery();
@@ -614,17 +600,16 @@ public class TransactionalTransferTest extends BrokerAdminUsingTestBase
 
             interaction.dispositionSettled(true)
                        .dispositionRole(Role.RECEIVER)
-                       .dispositionTransactionalState(txnState.getCurrentTransactionId(), new Accepted())
-                       .disposition()
-                       .txnDischarge(txnState, true);
+                       .dispositionTransactionalState(interaction.getCurrentTransactionId(), new Accepted())
+                       .disposition().txnDischarge(true);
 
-            assertThat(txnState.getDeliveryState(), is(instanceOf(Accepted.class)));
+            assertThat(interaction.getCoordinatorLatestDeliveryState(), is(instanceOf(Accepted.class)));
 
             assertThat(Utils.receiveMessage(_brokerAddress, BrokerAdmin.TEST_QUEUE_NAME), is(equalTo(getTestName())));
 
             Transfer transfer = transfers.get(0);
             assumeThat(transfer.getState(), is(instanceOf(TransactionalState.class)));
-            assumeThat(((TransactionalState) transfer.getState()).getTxnId(), is(equalTo(txnState.getCurrentTransactionId())));
+            assumeThat(((TransactionalState) transfer.getState()).getTxnId(), is(equalTo(interaction.getCurrentTransactionId())));
         }
     }
 
@@ -643,7 +628,6 @@ public class TransactionalTransferTest extends BrokerAdminUsingTestBase
         try (FrameTransport transport = new FrameTransport(_brokerAddress).connect())
         {
             final Interaction interaction = transport.newInteraction();
-            final InteractionTransactionalState txnState = interaction.createTransactionalState(UnsignedInteger.ZERO);
             Response<?> response = interaction.negotiateProtocol()
                                               .consumeResponse()
                                               .open()
@@ -651,8 +635,8 @@ public class TransactionalTransferTest extends BrokerAdminUsingTestBase
                                               .begin()
                                               .consumeResponse(Begin.class)
 
-                                              .txnAttachCoordinatorLink(txnState)
-                                              .txnDeclare(txnState)
+                                              .txnAttachCoordinatorLink(UnsignedInteger.ZERO)
+                                              .txnDeclare()
 
                                               .attachRole(Role.RECEIVER)
                                               .attachHandle(UnsignedInteger.ONE)


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


[qpid-broker-j] 07/21: QPID-8349: [Tests][AMQP 1.0] Use annotation ConfigItem for setting Qpid Broker-J JVM system properties

Posted by or...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

orudyy pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/qpid-broker-j.git

commit b724eb4730d6d95546129a4bc7d4e9edebec937f
Author: Alex Rudyy <or...@apache.org>
AuthorDate: Tue Aug 20 17:19:39 2019 +0100

    QPID-8349: [Tests][AMQP 1.0] Use annotation ConfigItem for setting Qpid Broker-J JVM system properties
---
 .../v1_0/extensions/filter/FilterTest.java         | 20 ++----------------
 .../protocol/v1_0/messaging/MultiTransferTest.java | 22 ++------------------
 .../protocol/v1_0/messaging/TransferTest.java      | 20 ++----------------
 .../v1_0/transport/link/ResumeDeliveriesTest.java  | 24 ++++------------------
 .../qpid/systests/admin/SpawnBrokerAdmin.java      |  9 +++++++-
 .../org/apache/qpid/tests/utils/ConfigItem.java    |  1 +
 .../utils/EmbeddedBrokerPerClassAdminImpl.java     | 23 ++++++++++++++++++---
 7 files changed, 39 insertions(+), 80 deletions(-)

diff --git a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/extensions/filter/FilterTest.java b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/extensions/filter/FilterTest.java
index 680c7b6..c359e40 100644
--- a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/extensions/filter/FilterTest.java
+++ b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/extensions/filter/FilterTest.java
@@ -37,7 +37,6 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 
-import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -63,36 +62,21 @@ import org.apache.qpid.tests.protocol.v1_0.extensions.type.TestFilter;
 import org.apache.qpid.tests.utils.BrokerAdmin;
 import org.apache.qpid.tests.utils.BrokerAdminUsingTestBase;
 import org.apache.qpid.tests.utils.BrokerSpecific;
+import org.apache.qpid.tests.utils.ConfigItem;
 
+@ConfigItem(name = "qpid.tests.mms.messagestore.persistence", value = "false", jvm = true)
 public class FilterTest extends BrokerAdminUsingTestBase
 {
     public static final String TEST_MESSAGE_CONTENT = "testContent";
     private InetSocketAddress _brokerAddress;
-    private String _originalMmsMessageStorePersistence;
 
     @Before
     public void setUp()
     {
-        _originalMmsMessageStorePersistence = System.getProperty("qpid.tests.mms.messagestore.persistence");
-        System.setProperty("qpid.tests.mms.messagestore.persistence", "false");
-
         getBrokerAdmin().createQueue(BrokerAdmin.TEST_QUEUE_NAME);
         _brokerAddress = getBrokerAdmin().getBrokerAddress(BrokerAdmin.PortType.ANONYMOUS_AMQP);
     }
 
-    @After
-    public void tearDown()
-    {
-        if (_originalMmsMessageStorePersistence != null)
-        {
-            System.setProperty("qpid.tests.mms.messagestore.persistence", _originalMmsMessageStorePersistence);
-        }
-        else
-        {
-            System.clearProperty("qpid.tests.mms.messagestore.persistence");
-        }
-    }
-
     @Test
     @BrokerSpecific(kind = KIND_BROKER_J)
     @SpecificationTest(section = "3.5.1", description = "A source can restrict the messages transferred from a source by specifying a filter.")
diff --git a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/messaging/MultiTransferTest.java b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/messaging/MultiTransferTest.java
index 3b421c7..a5f7e7c 100644
--- a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/messaging/MultiTransferTest.java
+++ b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/messaging/MultiTransferTest.java
@@ -22,7 +22,6 @@ package org.apache.qpid.tests.protocol.v1_0.messaging;
 
 import static java.nio.charset.StandardCharsets.UTF_8;
 import static org.hamcrest.CoreMatchers.instanceOf;
-import static org.hamcrest.CoreMatchers.nullValue;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.equalTo;
 import static org.hamcrest.Matchers.is;
@@ -32,7 +31,6 @@ import java.net.InetSocketAddress;
 import java.util.HashMap;
 import java.util.Map;
 
-import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -54,38 +52,22 @@ import org.apache.qpid.tests.protocol.v1_0.FrameTransport;
 import org.apache.qpid.tests.protocol.v1_0.Interaction;
 import org.apache.qpid.tests.protocol.SpecificationTest;
 import org.apache.qpid.tests.protocol.v1_0.Utils;
-import org.apache.qpid.tests.protocol.Response;
 import org.apache.qpid.tests.utils.BrokerAdmin;
 import org.apache.qpid.tests.utils.BrokerAdminUsingTestBase;
+import org.apache.qpid.tests.utils.ConfigItem;
 
+@ConfigItem(name = "qpid.tests.mms.messagestore.persistence", value = "false", jvm = true)
 public class MultiTransferTest extends BrokerAdminUsingTestBase
 {
     private InetSocketAddress _brokerAddress;
-    private String _originalMmsMessageStorePersistence;
 
     @Before
     public void setUp()
     {
-        _originalMmsMessageStorePersistence = System.getProperty("qpid.tests.mms.messagestore.persistence");
-        System.setProperty("qpid.tests.mms.messagestore.persistence", "false");
-
         getBrokerAdmin().createQueue(BrokerAdmin.TEST_QUEUE_NAME);
         _brokerAddress = getBrokerAdmin().getBrokerAddress(BrokerAdmin.PortType.ANONYMOUS_AMQP);
     }
 
-    @After
-    public void tearDown()
-    {
-        if (_originalMmsMessageStorePersistence != null)
-        {
-            System.setProperty("qpid.tests.mms.messagestore.persistence", _originalMmsMessageStorePersistence);
-        }
-        else
-        {
-            System.clearProperty("qpid.tests.mms.messagestore.persistence");
-        }
-    }
-
     @Test
     @SpecificationTest(section = "2.6.14",
             description = "For messages that are too large to fit within the maximum frame size, additional data MAY"
diff --git a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/messaging/TransferTest.java b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/messaging/TransferTest.java
index dab344e..4ef0f28 100644
--- a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/messaging/TransferTest.java
+++ b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/messaging/TransferTest.java
@@ -48,7 +48,6 @@ import java.util.stream.LongStream;
 import java.util.stream.Stream;
 
 import com.google.common.collect.Sets;
-import org.junit.After;
 import org.junit.Before;
 import org.junit.Ignore;
 import org.junit.Test;
@@ -89,36 +88,21 @@ import org.apache.qpid.tests.protocol.v1_0.Utils;
 import org.apache.qpid.tests.utils.BrokerAdmin;
 import org.apache.qpid.tests.utils.BrokerAdminUsingTestBase;
 import org.apache.qpid.tests.utils.BrokerSpecific;
+import org.apache.qpid.tests.utils.ConfigItem;
 
+@ConfigItem(name = "qpid.tests.mms.messagestore.persistence", value = "false", jvm = true)
 public class TransferTest extends BrokerAdminUsingTestBase
 {
     private static final long MAX_MAX_MESSAGE_SIZE_WE_ARE_WILLING_TO_TEST = 200 * 1024 * 1024L;
     private InetSocketAddress _brokerAddress;
-    private String _originalMmsMessageStorePersistence;
 
     @Before
     public void setUp()
     {
-        _originalMmsMessageStorePersistence = System.getProperty("qpid.tests.mms.messagestore.persistence");
-        System.setProperty("qpid.tests.mms.messagestore.persistence", "false");
-
         getBrokerAdmin().createQueue(BrokerAdmin.TEST_QUEUE_NAME);
         _brokerAddress = getBrokerAdmin().getBrokerAddress(BrokerAdmin.PortType.ANONYMOUS_AMQP);
     }
 
-    @After
-    public void tearDown()
-    {
-        if (_originalMmsMessageStorePersistence != null)
-        {
-            System.setProperty("qpid.tests.mms.messagestore.persistence", _originalMmsMessageStorePersistence);
-        }
-        else
-        {
-            System.clearProperty("qpid.tests.mms.messagestore.persistence");
-        }
-    }
-
     @Test
     @SpecificationTest(section = "1.3.4",
             description = "mandatory [...] a non null value for the field is always encoded.")
diff --git a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/link/ResumeDeliveriesTest.java b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/link/ResumeDeliveriesTest.java
index 61884e3..b38d30e 100644
--- a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/link/ResumeDeliveriesTest.java
+++ b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/link/ResumeDeliveriesTest.java
@@ -44,7 +44,6 @@ import java.util.List;
 import java.util.Map;
 
 import org.hamcrest.Matchers;
-import org.junit.After;
 import org.junit.Before;
 import org.junit.Ignore;
 import org.junit.Test;
@@ -67,43 +66,28 @@ import org.apache.qpid.server.protocol.v1_0.type.transport.ReceiverSettleMode;
 import org.apache.qpid.server.protocol.v1_0.type.transport.Role;
 import org.apache.qpid.server.protocol.v1_0.type.transport.SenderSettleMode;
 import org.apache.qpid.server.protocol.v1_0.type.transport.Transfer;
+import org.apache.qpid.tests.protocol.Response;
+import org.apache.qpid.tests.protocol.SpecificationTest;
 import org.apache.qpid.tests.protocol.v1_0.FrameTransport;
 import org.apache.qpid.tests.protocol.v1_0.Interaction;
-import org.apache.qpid.tests.protocol.SpecificationTest;
 import org.apache.qpid.tests.protocol.v1_0.Utils;
-import org.apache.qpid.tests.protocol.Response;
 import org.apache.qpid.tests.utils.BrokerAdmin;
 import org.apache.qpid.tests.utils.BrokerAdminUsingTestBase;
+import org.apache.qpid.tests.utils.ConfigItem;
 
+@ConfigItem(name = "qpid.tests.mms.messagestore.persistence", value = "false", jvm = true)
 public class ResumeDeliveriesTest extends BrokerAdminUsingTestBase
 {
     private static final int MIN_MAX_FRAME_SIZE = 512;
     private InetSocketAddress _brokerAddress;
-    private String _originalMmsMessageStorePersistence;
 
     @Before
     public void setUp()
     {
-        _originalMmsMessageStorePersistence = System.getProperty("qpid.tests.mms.messagestore.persistence");
-        System.setProperty("qpid.tests.mms.messagestore.persistence", "false");
-
         getBrokerAdmin().createQueue(BrokerAdmin.TEST_QUEUE_NAME);
         _brokerAddress = getBrokerAdmin().getBrokerAddress(BrokerAdmin.PortType.ANONYMOUS_AMQP);
     }
 
-    @After
-    public void tearDown()
-    {
-        if (_originalMmsMessageStorePersistence != null)
-        {
-            System.setProperty("qpid.tests.mms.messagestore.persistence", _originalMmsMessageStorePersistence);
-        }
-        else
-        {
-            System.clearProperty("qpid.tests.mms.messagestore.persistence");
-        }
-    }
-
     @Ignore("QPID-7845")
     @Test
     @SpecificationTest(section = "2.6.13",
diff --git a/systests/qpid-systests-spawn-admin/src/main/java/org/apache/qpid/systests/admin/SpawnBrokerAdmin.java b/systests/qpid-systests-spawn-admin/src/main/java/org/apache/qpid/systests/admin/SpawnBrokerAdmin.java
index 9f8ed5e..0ce90ac 100644
--- a/systests/qpid-systests-spawn-admin/src/main/java/org/apache/qpid/systests/admin/SpawnBrokerAdmin.java
+++ b/systests/qpid-systests-spawn-admin/src/main/java/org/apache/qpid/systests/admin/SpawnBrokerAdmin.java
@@ -742,6 +742,8 @@ public class SpawnBrokerAdmin implements BrokerAdmin, Closeable
             classpath = new String(Files.readAllBytes(file.toPath()), UTF_8);
         }
 
+        final ConfigItem[] configItems = (ConfigItem[]) testClass.getAnnotationsByType(ConfigItem.class);
+
         List<String> jvmArguments = new ArrayList<>();
         jvmArguments.add("java");
         jvmArguments.add("-cp");
@@ -749,6 +751,10 @@ public class SpawnBrokerAdmin implements BrokerAdmin, Closeable
         jvmArguments.add("-Djava.io.tmpdir=" + escape(System.getProperty("java.io.tmpdir")));
         jvmArguments.add("-Dlogback.configurationFile=default-broker-logback.xml");
         jvmArguments.add("-Dqpid.tests.mms.messagestore.persistence=true");
+        jvmArguments.addAll(Arrays.stream(configItems)
+                                  .filter(ConfigItem::jvm)
+                                  .map(ci -> String.format("-D%s=%s", ci.name(), ci.value()))
+                                  .collect(Collectors.toList()));
         jvmArguments.add("org.apache.qpid.server.Main");
         jvmArguments.add("--store-type");
         jvmArguments.add("JSON");
@@ -766,7 +772,8 @@ public class SpawnBrokerAdmin implements BrokerAdmin, Closeable
               .filter(n -> n.startsWith("qpid."))
               .forEach(n -> context.put(n, System.getProperty(n)));
 
-        context.putAll(Arrays.stream((ConfigItem[]) testClass.getAnnotationsByType(ConfigItem.class))
+        context.putAll(Arrays.stream(configItems)
+                             .filter(i -> !i.jvm())
                              .collect(Collectors.toMap(ConfigItem::name,
                                                        ConfigItem::value,
                                                        (name, value) -> value)));
diff --git a/systests/systests-utils/src/main/java/org/apache/qpid/tests/utils/ConfigItem.java b/systests/systests-utils/src/main/java/org/apache/qpid/tests/utils/ConfigItem.java
index 493f865..a57e747 100644
--- a/systests/systests-utils/src/main/java/org/apache/qpid/tests/utils/ConfigItem.java
+++ b/systests/systests-utils/src/main/java/org/apache/qpid/tests/utils/ConfigItem.java
@@ -33,4 +33,5 @@ public @interface ConfigItem
 {
     String name();
     String value();
+    boolean jvm() default false;
 }
diff --git a/systests/systests-utils/src/main/java/org/apache/qpid/tests/utils/EmbeddedBrokerPerClassAdminImpl.java b/systests/systests-utils/src/main/java/org/apache/qpid/tests/utils/EmbeddedBrokerPerClassAdminImpl.java
index f51c970..59cf731 100644
--- a/systests/systests-utils/src/main/java/org/apache/qpid/tests/utils/EmbeddedBrokerPerClassAdminImpl.java
+++ b/systests/systests-utils/src/main/java/org/apache/qpid/tests/utils/EmbeddedBrokerPerClassAdminImpl.java
@@ -77,26 +77,32 @@ public class EmbeddedBrokerPerClassAdminImpl implements BrokerAdmin
     private VirtualHostNode<?> _currentVirtualHostNode;
     private String _currentWorkDirectory;
     private boolean _isPersistentStore;
-    private Map<String, String> _preservedContext;
+    private Map<String, String> _preservedProperties;
 
     @Override
     public void beforeTestClass(final Class testClass)
     {
+        _preservedProperties = new HashMap<>();
         try
         {
             String timestamp = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date(System.currentTimeMillis()));
             _currentWorkDirectory = Files.createTempDirectory(String.format("qpid-work-%s-%s-", timestamp, testClass.getSimpleName())).toString();
 
+            ConfigItem[] configItems = (ConfigItem[]) testClass.getAnnotationsByType(ConfigItem.class);
+            Arrays.stream(configItems).filter(ConfigItem::jvm).forEach(i -> {
+                _preservedProperties.put(i.name(), System.getProperty(i.name()));
+                System.setProperty(i.name(), i.value());
+            });
             Map<String, String> context = new HashMap<>();
             context.put("qpid.work_dir", _currentWorkDirectory);
             context.put("qpid.port.protocol_handshake_timeout", "1000000");
-            context.putAll(Arrays.stream((ConfigItem[]) testClass.getAnnotationsByType(ConfigItem.class))
+            context.putAll(Arrays.stream(configItems)
+                                 .filter(i -> !i.jvm())
                                  .collect(Collectors.toMap(ConfigItem::name,
                                                            ConfigItem::value,
                                                            (name, value) -> value)));
 
             Map<String,Object> systemConfigAttributes = new HashMap<>();
-            //systemConfigAttributes.put(SystemConfig.INITIAL_CONFIGURATION_LOCATION, "classpath:config-protocol-tests.json");
             systemConfigAttributes.put(ConfiguredObject.CONTEXT, context);
             systemConfigAttributes.put(ConfiguredObject.TYPE, System.getProperty("broker.config-store-type", "JSON"));
             systemConfigAttributes.put(SystemConfig.STARTUP_LOGGED_TO_SYSTEM_OUT, Boolean.FALSE);
@@ -187,6 +193,17 @@ public class EmbeddedBrokerPerClassAdminImpl implements BrokerAdmin
         {
             FileUtils.delete(new File(_currentWorkDirectory), true);
         }
+
+        _preservedProperties.forEach((k,v)-> {
+            if (v == null)
+            {
+                System.clearProperty(k);
+            }
+            else
+            {
+                System.setProperty(k, v);
+            }
+        });
     }
 
     @Override


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


[qpid-broker-j] 19/21: QPID-8350: [Tests][AMQP 1.0] Add assumtpion that sasl is supported into ProtocolHeaderTest

Posted by or...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

orudyy pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/qpid-broker-j.git

commit e81d4be4fc17ab7f289a501806dd2448812bf0b8
Author: Alex Rudyy <or...@apache.org>
AuthorDate: Wed Aug 21 17:12:53 2019 +0100

    QPID-8350: [Tests][AMQP 1.0] Add assumtpion that sasl is supported into ProtocolHeaderTest
---
 .../apache/qpid/tests/protocol/v1_0/transport/ProtocolHeaderTest.java | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/ProtocolHeaderTest.java b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/ProtocolHeaderTest.java
index db91db1..8467a51 100644
--- a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/ProtocolHeaderTest.java
+++ b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/ProtocolHeaderTest.java
@@ -20,7 +20,10 @@
 package org.apache.qpid.tests.protocol.v1_0.transport;
 
 
+import static org.hamcrest.CoreMatchers.equalTo;
+import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assume.assumeThat;
 
 import java.net.InetSocketAddress;
 import java.nio.charset.StandardCharsets;
@@ -61,6 +64,7 @@ public class ProtocolHeaderTest extends BrokerAdminUsingTestBase
                           + "(and version) and then close the socket.")
     public void unacceptableProtocolIdSent_SaslAcceptable() throws Exception
     {
+        assumeThat(getBrokerAdmin().isSASLSupported(), is(equalTo(true)));
         final InetSocketAddress addr = getBrokerAdmin().getBrokerAddress(BrokerAdmin.PortType.AMQP);
         try (FrameTransport transport = new FrameTransport(addr).connect())
         {


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


[qpid-broker-j] 16/21: QPID-8350: [Tests][AMQP 1.0] Fix setting of flow next-incoming-id in OutcomeTest

Posted by or...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

orudyy pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/qpid-broker-j.git

commit b0d57094a86a467477a7c1f02d5fb174c36301e2
Author: Alex Rudyy <or...@apache.org>
AuthorDate: Wed Aug 21 17:09:53 2019 +0100

    QPID-8350: [Tests][AMQP 1.0] Fix setting of flow next-incoming-id in OutcomeTest
---
 .../org/apache/qpid/tests/protocol/v1_0/messaging/OutcomeTest.java     | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/messaging/OutcomeTest.java b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/messaging/OutcomeTest.java
index fce9324..2ea7dda 100644
--- a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/messaging/OutcomeTest.java
+++ b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/messaging/OutcomeTest.java
@@ -75,6 +75,7 @@ public class OutcomeTest extends BrokerAdminUsingTestBase
                                                      .flowIncomingWindow(UnsignedInteger.ONE)
                                                      .flowLinkCredit(UnsignedInteger.ONE)
                                                      .flowHandleFromLinkHandle()
+                                                     .flowNextIncomingIdFromPeerLatestSessionBeginAndDeliveryCount()
                                                      .flow()
                                                      .receiveDelivery()
 
@@ -92,7 +93,7 @@ public class OutcomeTest extends BrokerAdminUsingTestBase
                        .disposition()
                        .flowIncomingWindow(UnsignedInteger.valueOf(2))
                        .flowLinkCredit(UnsignedInteger.valueOf(2))
-                       .flowNextIncomingIdFromLatestDelivery()
+                       .flowNextIncomingIdFromPeerLatestSessionBeginAndDeliveryCount()
                        .flow()
                        .receiveDelivery()
                        .decodeLatestDelivery();


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


[qpid-broker-j] 10/21: QPID-8357: [Broker-J][AMQP 1.0][Sole connection] Broker should set open property 'sole-connection-eforcement-policy' when 'close-existing' eforcement policy is requested

Posted by or...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

orudyy pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/qpid-broker-j.git

commit c4fae61eb8d89c9b20122e75691307ce82a8aaeb
Author: Alex Rudyy <or...@apache.org>
AuthorDate: Mon Aug 19 14:22:58 2019 +0100

    QPID-8357: [Broker-J][AMQP 1.0][Sole connection] Broker should set open property 'sole-connection-eforcement-policy' when 'close-existing' eforcement policy is requested
---
 .../org/apache/qpid/server/protocol/v1_0/AMQPConnection_1_0Impl.java | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/AMQPConnection_1_0Impl.java b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/AMQPConnection_1_0Impl.java
index bcb273d..0814382 100644
--- a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/AMQPConnection_1_0Impl.java
+++ b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/AMQPConnection_1_0Impl.java
@@ -1730,6 +1730,11 @@ public class AMQPConnection_1_0Impl extends AbstractAMQPConnection<AMQPConnectio
                             SoleConnectionDetectionPolicy.STRONG);
         }
 
+        if (_soleConnectionEnforcementPolicy == SoleConnectionEnforcementPolicy.CLOSE_EXISTING)
+        {
+            _properties.put(SOLE_CONNECTION_ENFORCEMENT_POLICY, SoleConnectionEnforcementPolicy.CLOSE_EXISTING.getValue());
+        }
+
         open.setProperties(_properties);
 
         sendFrame(CONNECTION_CONTROL_CHANNEL, open);


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


[qpid-broker-j] 03/21: QPID-8349: [Tests][AMQP 1.0] Introduce QueueAdmin to delegate queue related operations in external broker admin

Posted by or...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

orudyy pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/qpid-broker-j.git

commit a8d14bfb38721b3b6674c312d4cc0c552372491b
Author: Alex Rudyy <or...@apache.org>
AuthorDate: Wed Aug 21 16:14:54 2019 +0100

    QPID-8349: [Tests][AMQP 1.0] Introduce QueueAdmin to delegate queue related operations in external broker admin
---
 .../tests/protocol/v1_0/ExistingQueueAdmin.java    | 224 +++++++++++++++++++++
 .../qpid/tests/protocol/v1_0/Interaction.java      |   7 +-
 .../protocol/v1_0/ExistingQueueAdminTest.java      | 146 ++++++++++++++
 ...nBrokerAdmin.java => BrokerAdminException.java} |  21 +-
 .../qpid/tests/utils/BrokerAdminFactory.java       |   2 +-
 .../utils/EmbeddedBrokerPerClassAdminImpl.java     |   2 +-
 .../tests/utils/ExternalQpidBrokerAdminImpl.java   |  29 ++-
 .../apache/qpid/tests/utils/NoOpQueueAdmin.java    |  60 ++++++
 .../utils/{RunBrokerAdmin.java => QueueAdmin.java} |  18 +-
 .../apache/qpid/tests/utils/QueueAdminFactory.java |  50 +++++
 .../apache/qpid/tests/utils/RunBrokerAdmin.java    |   4 +-
 .../qpid/tests/utils/BrokerAdminFactoryTest.java}  |  41 +++-
 .../utils/ExternalQpidBrokerAdminImplTest.java     | 103 ++++++++++
 .../qpid/tests/utils/NoOpQueueAdminTest.java       |  78 +++++++
 .../qpid/tests/utils/QueueAdminFactoryTest.java    | 133 ++++++++++++
 15 files changed, 882 insertions(+), 36 deletions(-)

diff --git a/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/ExistingQueueAdmin.java b/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/ExistingQueueAdmin.java
new file mode 100644
index 0000000..313c4ff
--- /dev/null
+++ b/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/ExistingQueueAdmin.java
@@ -0,0 +1,224 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+package org.apache.qpid.tests.protocol.v1_0;
+
+import static java.nio.charset.StandardCharsets.UTF_8;
+
+import java.net.InetSocketAddress;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.apache.qpid.server.protocol.v1_0.type.Binary;
+import org.apache.qpid.server.protocol.v1_0.type.UnsignedInteger;
+import org.apache.qpid.server.protocol.v1_0.type.transport.Attach;
+import org.apache.qpid.server.protocol.v1_0.type.transport.Begin;
+import org.apache.qpid.server.protocol.v1_0.type.transport.Detach;
+import org.apache.qpid.server.protocol.v1_0.type.transport.End;
+import org.apache.qpid.server.protocol.v1_0.type.transport.Flow;
+import org.apache.qpid.server.protocol.v1_0.type.transport.Open;
+import org.apache.qpid.server.protocol.v1_0.type.transport.Role;
+import org.apache.qpid.server.protocol.v1_0.type.transport.SenderSettleMode;
+import org.apache.qpid.server.protocol.v1_0.type.transport.Transfer;
+import org.apache.qpid.tests.protocol.Response;
+import org.apache.qpid.tests.utils.BrokerAdmin;
+import org.apache.qpid.tests.utils.BrokerAdminException;
+import org.apache.qpid.tests.utils.QueueAdmin;
+
+@SuppressWarnings("unused")
+public class ExistingQueueAdmin implements QueueAdmin
+{
+    private static final Logger LOGGER = LoggerFactory.getLogger(ExistingQueueAdmin.class);
+    private static final String ADMIN_LINK_NAME = "existingQueueAdminLink";
+
+    @Override
+    public void createQueue(final BrokerAdmin brokerAdmin, final String queueName)
+    {
+
+    }
+
+    @Override
+    public void deleteQueue(final BrokerAdmin brokerAdmin, final String queueName)
+    {
+        try
+        {
+            drainQueue(brokerAdmin.getBrokerAddress(BrokerAdmin.PortType.ANONYMOUS_AMQP), queueName);
+        }
+        catch (Exception e)
+        {
+            throw new BrokerAdminException(String.format("Cannot drain queue '%s'", queueName), e);
+        }
+    }
+
+    @Override
+    public void putMessageOnQueue(final BrokerAdmin brokerAdmin, final String queueName, final String... message)
+    {
+        final InetSocketAddress brokerAddress = brokerAdmin.getBrokerAddress(BrokerAdmin.PortType.ANONYMOUS_AMQP);
+        try
+        {
+            putMessageOnQueue(brokerAddress, queueName, message);
+        }
+        catch (Exception e)
+        {
+            throw new BrokerAdminException(String.format("Cannot put %d messages on a queue '%s'",
+                                                         message.length,
+                                                         queueName), e);
+        }
+    }
+
+    @Override
+    public boolean isDeleteQueueSupported()
+    {
+        return false;
+    }
+
+    @Override
+    public boolean isPutMessageOnQueueSupported()
+    {
+        return true;
+    }
+
+    private void putMessageOnQueue(final InetSocketAddress brokerAddress,
+                                   final String queueName,
+                                   final String... message) throws Exception
+    {
+        try (FrameTransport transport = new FrameTransport(brokerAddress).connect())
+        {
+            final Interaction interaction = transport.newInteraction();
+            interaction.negotiateProtocol().consumeResponse()
+                       .open().consumeResponse(Open.class)
+                       .begin().consumeResponse(Begin.class)
+                       .attachName(ADMIN_LINK_NAME)
+                       .attachRole(Role.SENDER)
+                       .attachTargetAddress(queueName)
+                       .attachSndSettleMode(SenderSettleMode.SETTLED)
+                       .attach().consumeResponse(Attach.class)
+                       .consumeResponse(Flow.class)
+                       .getLatestResponse(Flow.class);
+
+            int tag = 0;
+            for (final String payload : message)
+            {
+                interaction.transferPayloadData(payload)
+                           .transferSettled(true)
+                           .transferDeliveryId()
+                           .transferDeliveryTag(new Binary(String.valueOf(tag).getBytes(UTF_8)))
+                           .transfer()
+                           .sync();
+                tag++;
+            }
+            closeInteraction(interaction);
+        }
+    }
+
+    private void closeInteraction(final Interaction interaction) throws Exception
+    {
+        interaction.detachClose(true)
+                   .detach()
+                   .consumeResponse(Detach.class)
+                   .end()
+                   .consumeResponse(End.class)
+                   .doCloseConnection();
+    }
+
+
+    private void drainQueue(final InetSocketAddress brokerAddress, final String queueName) throws Exception
+    {
+        try (FrameTransport transport = new FrameTransport(brokerAddress).connect())
+        {
+            final Interaction interaction = transport.newInteraction();
+            interaction.negotiateProtocol().consumeResponse()
+                       .open().consumeResponse()
+                       .begin().consumeResponse()
+                       .attachName(ADMIN_LINK_NAME)
+                       .attachRole(Role.RECEIVER)
+                       .attachSndSettleMode(SenderSettleMode.SETTLED)
+                       .attachSourceAddress(queueName)
+                       .attach().consumeResponse();
+
+            boolean received;
+            final Begin begin = interaction.getCachedResponse(Begin.class);
+            int nextIncomingId = begin.getNextOutgoingId().intValue();
+            do
+            {
+                received = receive(interaction, queueName, nextIncomingId);
+                nextIncomingId++;
+            }
+            while (received);
+            closeInteraction(interaction);
+        }
+    }
+
+    private boolean receive(final Interaction interaction, String queueName, int nextIncomingId) throws Exception
+    {
+        interaction.flowIncomingWindow(UnsignedInteger.MAX_VALUE)
+                   .flowNextIncomingId(UnsignedInteger.valueOf(nextIncomingId))
+                   .flowLinkCredit(UnsignedInteger.ONE)
+                   .flowDrain(Boolean.TRUE)
+                   .flowHandleFromLinkHandle()
+                   .flowOutgoingWindow(UnsignedInteger.ZERO)
+                   .flowNextOutgoingId(UnsignedInteger.ZERO)
+                   .flow();
+
+        boolean messageReceived = false;
+        boolean flowReceived = false;
+        do
+        {
+            Response<?> latestResponse;
+            try
+            {
+                latestResponse = interaction.consumeResponse(Transfer.class, Flow.class).getLatestResponse();
+            }
+            catch (IllegalStateException e)
+            {
+                if (messageReceived)
+                {
+                    LOGGER.debug(
+                            "Message was received on draining queue '{}' but flow was not. Assuming successful receive...",
+                            queueName,
+                            e);
+                }
+                else
+                {
+                    LOGGER.warn(
+                            "Neither message no flow was received on draining queue '{}'.  Assuming no messages on the queue...",
+                            queueName,
+                            e);
+                }
+                return messageReceived;
+            }
+            if (latestResponse.getBody() instanceof Transfer)
+            {
+                Transfer responseTransfer = (Transfer) latestResponse.getBody();
+                if (!Boolean.TRUE.equals(responseTransfer.getMore()))
+                {
+                    messageReceived = true;
+                }
+            }
+            else if (latestResponse.getBody() instanceof Flow)
+            {
+                flowReceived = true;
+            }
+        }
+        while (!flowReceived);
+        return messageReceived;
+    }
+}
diff --git a/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/Interaction.java b/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/Interaction.java
index 1437e19..4df4db0 100644
--- a/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/Interaction.java
+++ b/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/Interaction.java
@@ -650,10 +650,15 @@ public class Interaction extends AbstractInteraction<Interaction>
 
     public Interaction flowNextIncomingIdFromPeerLatestSessionBeginAndDeliveryCount()
     {
-        final Begin begin = (Begin) _latestResponses.get(Begin.class);
+        final Begin begin = getCachedResponse(Begin.class);
         return flowNextIncomingId(begin.getNextOutgoingId().add(UnsignedInteger.valueOf(_receivedDeliveryCount.get())));
     }
 
+    <T extends FrameBody> T getCachedResponse(final Class<T> responseClass)
+    {
+        return (T)_latestResponses.get(responseClass);
+    }
+
     public Interaction flowOutgoingWindow(final UnsignedInteger outgoingWindow)
     {
         _flow.setOutgoingWindow(outgoingWindow);
diff --git a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/ExistingQueueAdminTest.java b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/ExistingQueueAdminTest.java
new file mode 100644
index 0000000..26b2050
--- /dev/null
+++ b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/ExistingQueueAdminTest.java
@@ -0,0 +1,146 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+package org.apache.qpid.tests.protocol.v1_0;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.net.InetSocketAddress;
+
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import org.apache.qpid.test.utils.UnitTestBase;
+import org.apache.qpid.tests.utils.BrokerAdmin;
+import org.apache.qpid.tests.utils.BrokerAdminException;
+import org.apache.qpid.tests.utils.EmbeddedBrokerPerClassAdminImpl;
+
+public class ExistingQueueAdminTest extends UnitTestBase
+{
+    private static BrokerAdmin _brokerAdmin;
+    private static InetSocketAddress _brokerAddress;
+
+    private ExistingQueueAdmin _queueAdmin;
+    private String _testQueueName;
+
+    @BeforeClass
+    public static void beforeSuite()
+    {
+        _brokerAdmin = new EmbeddedBrokerPerClassAdminImpl();
+        _brokerAdmin.beforeTestClass(ExistingQueueAdminTest.class);
+        _brokerAddress = _brokerAdmin.getBrokerAddress(BrokerAdmin.PortType.ANONYMOUS_AMQP);
+    }
+
+    @AfterClass
+    public static void afterSuite()
+    {
+        _brokerAdmin.afterTestClass(ExistingQueueAdminTest.class);
+    }
+
+    @Before
+    public void before() throws NoSuchMethodException
+    {
+        _brokerAdmin.beforeTestMethod(getClass(), getClass().getMethod(getTestName()));
+        _brokerAdmin.createQueue(getTestName());
+        _queueAdmin = new ExistingQueueAdmin();
+        _testQueueName = getTestName();
+    }
+
+    @After
+    public void after() throws NoSuchMethodException
+    {
+        _brokerAdmin.afterTestMethod(getClass(), getClass().getMethod(getTestName()));
+    }
+
+
+    @Test
+    public void createQueue()
+    {
+        _queueAdmin.createQueue(_brokerAdmin, getTestName());
+    }
+
+    @Test
+    public void deleteQueue() throws Exception
+    {
+        final String[] messages = Utils.createTestMessageContents(2, _testQueueName);
+        _brokerAdmin.putMessageOnQueue(_testQueueName, messages);
+
+        _queueAdmin.deleteQueue(_brokerAdmin, _testQueueName);
+
+        final String controlMessage = String.format("controlMessage %s", _testQueueName);
+        _brokerAdmin.putMessageOnQueue(_testQueueName, controlMessage);
+        assertEquals(controlMessage, Utils.receiveMessage(_brokerAddress, _testQueueName));
+    }
+
+    @Test
+    public void deleteQueueNonExisting()
+    {
+        try
+        {
+            _queueAdmin.deleteQueue(_brokerAdmin, _testQueueName + "_NonExisting");
+            fail("Exception is expected");
+        }
+        catch (BrokerAdminException e)
+        {
+            // pass
+        }
+    }
+
+    @Test
+    public void putMessageOnQueue() throws Exception
+    {
+        final String[] messages = Utils.createTestMessageContents(2, _testQueueName);
+        _queueAdmin.putMessageOnQueue(_brokerAdmin, _testQueueName, messages);
+        assertEquals(messages[0], Utils.receiveMessage(_brokerAddress, _testQueueName));
+        assertEquals(messages[1], Utils.receiveMessage(_brokerAddress, _testQueueName));
+    }
+
+    @Test
+    public void putMessageOnQueueNonExisting()
+    {
+        final String[] messages = Utils.createTestMessageContents(2, _testQueueName);
+        try
+        {
+            _queueAdmin.putMessageOnQueue(_brokerAdmin, _testQueueName + "_NonExisting", messages);
+            fail("Exception is expected"); }
+        catch (BrokerAdminException e)
+        {
+            // pass
+        }
+    }
+
+    @Test
+    public void isDeleteQueueSupported()
+    {
+        assertFalse(_queueAdmin.isDeleteQueueSupported());
+    }
+
+    @Test
+    public void isPutMessageOnQueueSupported()
+    {
+        assertTrue(_queueAdmin.isPutMessageOnQueueSupported());
+    }
+}
diff --git a/systests/systests-utils/src/main/java/org/apache/qpid/tests/utils/RunBrokerAdmin.java b/systests/systests-utils/src/main/java/org/apache/qpid/tests/utils/BrokerAdminException.java
similarity index 71%
copy from systests/systests-utils/src/main/java/org/apache/qpid/tests/utils/RunBrokerAdmin.java
copy to systests/systests-utils/src/main/java/org/apache/qpid/tests/utils/BrokerAdminException.java
index ef8b05a..1d0c65f 100644
--- a/systests/systests-utils/src/main/java/org/apache/qpid/tests/utils/RunBrokerAdmin.java
+++ b/systests/systests-utils/src/main/java/org/apache/qpid/tests/utils/BrokerAdminException.java
@@ -1,4 +1,4 @@
-package org.apache.qpid.tests.utils;/*
+/*
  *
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -19,14 +19,17 @@ package org.apache.qpid.tests.utils;/*
  *
  */
 
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
+package org.apache.qpid.tests.utils;
 
-@Retention(RetentionPolicy.RUNTIME)
-@Target({ElementType.TYPE})
-public @interface RunBrokerAdmin
+public class BrokerAdminException extends RuntimeException
 {
-    String type() default "";
+    public BrokerAdminException(final String message)
+    {
+        super(message);
+    }
+
+    public BrokerAdminException(final String message, final Throwable cause)
+    {
+        super(message, cause);
+    }
 }
diff --git a/systests/systests-utils/src/main/java/org/apache/qpid/tests/utils/BrokerAdminFactory.java b/systests/systests-utils/src/main/java/org/apache/qpid/tests/utils/BrokerAdminFactory.java
index 64d4eff..005b363 100644
--- a/systests/systests-utils/src/main/java/org/apache/qpid/tests/utils/BrokerAdminFactory.java
+++ b/systests/systests-utils/src/main/java/org/apache/qpid/tests/utils/BrokerAdminFactory.java
@@ -32,7 +32,7 @@ public class BrokerAdminFactory
         BrokerAdmin brokerAdmin = adminFacades.get(type);
         if (brokerAdmin == null)
         {
-            throw new RuntimeException(String.format("Could not find BrokerAdmin implementation of type '%s'", type));
+            throw new BrokerAdminException(String.format("Could not find BrokerAdmin implementation of type '%s'", type));
         }
         return brokerAdmin;
     }
diff --git a/systests/systests-utils/src/main/java/org/apache/qpid/tests/utils/EmbeddedBrokerPerClassAdminImpl.java b/systests/systests-utils/src/main/java/org/apache/qpid/tests/utils/EmbeddedBrokerPerClassAdminImpl.java
index 9ba6aed..f51c970 100644
--- a/systests/systests-utils/src/main/java/org/apache/qpid/tests/utils/EmbeddedBrokerPerClassAdminImpl.java
+++ b/systests/systests-utils/src/main/java/org/apache/qpid/tests/utils/EmbeddedBrokerPerClassAdminImpl.java
@@ -118,7 +118,7 @@ public class EmbeddedBrokerPerClassAdminImpl implements BrokerAdmin
         }
         catch (Exception e)
         {
-            throw new RuntimeException("Failed to start broker for test class", e);
+            throw new BrokerAdminException("Failed to start broker for test class", e);
         }
     }
 
diff --git a/systests/systests-utils/src/main/java/org/apache/qpid/tests/utils/ExternalQpidBrokerAdminImpl.java b/systests/systests-utils/src/main/java/org/apache/qpid/tests/utils/ExternalQpidBrokerAdminImpl.java
index db5d44d..e125c21 100644
--- a/systests/systests-utils/src/main/java/org/apache/qpid/tests/utils/ExternalQpidBrokerAdminImpl.java
+++ b/systests/systests-utils/src/main/java/org/apache/qpid/tests/utils/ExternalQpidBrokerAdminImpl.java
@@ -23,6 +23,8 @@ package org.apache.qpid.tests.utils;
 import java.lang.reflect.Method;
 import java.net.InetSocketAddress;
 import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
 
 import com.google.common.util.concurrent.ListenableFuture;
 import org.slf4j.Logger;
@@ -38,6 +40,19 @@ public class ExternalQpidBrokerAdminImpl implements BrokerAdmin
     private static final String EXTERNAL_BROKER = "EXTERNAL_BROKER";
     private static final String KIND_BROKER_UNKNOWN = "unknown";
 
+    private final QueueAdmin _queueAdmin;
+    private final Set<String> _createdQueues;
+
+    public ExternalQpidBrokerAdminImpl()
+    {
+       this(new QueueAdminFactory().create());
+    }
+
+    ExternalQpidBrokerAdminImpl(QueueAdmin queueAdmin)
+    {
+        _queueAdmin = queueAdmin;
+        _createdQueues = new HashSet<>();
+    }
     @Override
     public void beforeTestClass(final Class testClass)
     {
@@ -54,6 +69,8 @@ public class ExternalQpidBrokerAdminImpl implements BrokerAdmin
     public void afterTestMethod(final Class testClass, final Method method)
     {
         LOGGER.debug("afterTestMethod");
+        new HashSet<>(_createdQueues).forEach(this::deleteQueue);
+        _createdQueues.clear();
     }
 
     @Override
@@ -86,19 +103,21 @@ public class ExternalQpidBrokerAdminImpl implements BrokerAdmin
     @Override
     public void createQueue(final String queueName)
     {
-        LOGGER.debug(String.format("creation of queue '%s' requested", queueName));
+        _queueAdmin.createQueue(this, queueName);
+        _createdQueues.add(queueName);
     }
 
     @Override
     public void deleteQueue(final String queueName)
     {
-        LOGGER.debug(String.format("deletion of queue '%s' requested", queueName));
+        _queueAdmin.deleteQueue(this, queueName);
+        _createdQueues.remove(queueName);
     }
 
     @Override
     public void putMessageOnQueue(final String queueName, final String... messages)
     {
-        LOGGER.debug(String.format("puting of %d messages on queue '%s' requested", messages.length, queueName));
+        _queueAdmin.putMessageOnQueue(this, queueName, messages);
     }
 
     @Override
@@ -177,13 +196,13 @@ public class ExternalQpidBrokerAdminImpl implements BrokerAdmin
     @Override
     public boolean isPutMessageOnQueueSupported()
     {
-        return false;
+        return _queueAdmin.isPutMessageOnQueueSupported();
     }
 
     @Override
     public boolean isDeleteQueueSupported()
     {
-        return false;
+        return _queueAdmin.isDeleteQueueSupported();
     }
 
 }
diff --git a/systests/systests-utils/src/main/java/org/apache/qpid/tests/utils/NoOpQueueAdmin.java b/systests/systests-utils/src/main/java/org/apache/qpid/tests/utils/NoOpQueueAdmin.java
new file mode 100644
index 0000000..ed94122
--- /dev/null
+++ b/systests/systests-utils/src/main/java/org/apache/qpid/tests/utils/NoOpQueueAdmin.java
@@ -0,0 +1,60 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+package org.apache.qpid.tests.utils;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class NoOpQueueAdmin implements QueueAdmin
+{
+    private static final Logger LOGGER = LoggerFactory.getLogger(NoOpQueueAdmin.class);
+
+    @Override
+    public void createQueue(BrokerAdmin brokerAdmin, final String queueName)
+    {
+        LOGGER.debug(String.format("creation of queue '%s' requested", queueName));
+    }
+
+    @Override
+    public void deleteQueue(BrokerAdmin brokerAdmin, final String queueName)
+    {
+        LOGGER.debug(String.format("deletion of queue '%s' requested", queueName));
+    }
+
+    @Override
+    public void putMessageOnQueue(BrokerAdmin brokerAdmin, final String queueName, final String... messages)
+    {
+        LOGGER.debug(String.format("putting of %d messages on queue '%s' requested", messages.length, queueName));
+    }
+
+    @Override
+    public boolean isDeleteQueueSupported()
+    {
+        return false;
+    }
+
+    @Override
+    public boolean isPutMessageOnQueueSupported()
+    {
+        return false;
+    }
+}
diff --git a/systests/systests-utils/src/main/java/org/apache/qpid/tests/utils/RunBrokerAdmin.java b/systests/systests-utils/src/main/java/org/apache/qpid/tests/utils/QueueAdmin.java
similarity index 68%
copy from systests/systests-utils/src/main/java/org/apache/qpid/tests/utils/RunBrokerAdmin.java
copy to systests/systests-utils/src/main/java/org/apache/qpid/tests/utils/QueueAdmin.java
index ef8b05a..31266b7 100644
--- a/systests/systests-utils/src/main/java/org/apache/qpid/tests/utils/RunBrokerAdmin.java
+++ b/systests/systests-utils/src/main/java/org/apache/qpid/tests/utils/QueueAdmin.java
@@ -1,4 +1,4 @@
-package org.apache.qpid.tests.utils;/*
+/*
  *
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -19,14 +19,14 @@ package org.apache.qpid.tests.utils;/*
  *
  */
 
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
+package org.apache.qpid.tests.utils;
 
-@Retention(RetentionPolicy.RUNTIME)
-@Target({ElementType.TYPE})
-public @interface RunBrokerAdmin
+public interface QueueAdmin
 {
-    String type() default "";
+    void createQueue(BrokerAdmin brokerAdmin, String queueName);
+    void deleteQueue(BrokerAdmin brokerAdmin, String queueName);
+    void putMessageOnQueue(BrokerAdmin brokerAdmin, String queueName, String... messages);
+
+    boolean isDeleteQueueSupported();
+    boolean isPutMessageOnQueueSupported();
 }
diff --git a/systests/systests-utils/src/main/java/org/apache/qpid/tests/utils/QueueAdminFactory.java b/systests/systests-utils/src/main/java/org/apache/qpid/tests/utils/QueueAdminFactory.java
new file mode 100644
index 0000000..020e805
--- /dev/null
+++ b/systests/systests-utils/src/main/java/org/apache/qpid/tests/utils/QueueAdminFactory.java
@@ -0,0 +1,50 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+package org.apache.qpid.tests.utils;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+class QueueAdminFactory
+{
+    static final String QUEUE_ADMIN_TYPE_PROPERTY_NAME = "qpid.tests.protocol.broker.external.queueAdmin";
+    private static final Logger LOGGER = LoggerFactory.getLogger(QueueAdminFactory.class);
+
+    @SuppressWarnings("unchecked")
+    QueueAdmin create() throws BrokerAdminException
+    {
+        final String queueAdminClassName =
+                System.getProperty(QUEUE_ADMIN_TYPE_PROPERTY_NAME, NoOpQueueAdmin.class.getName());
+        LOGGER.debug(String.format("Using queue admin of type '%s'", queueAdminClassName));
+        try
+        {
+            final Class<? extends QueueAdmin> queueCreatorClass =
+                    (Class<? extends QueueAdmin>) Class.forName(queueAdminClassName);
+            return queueCreatorClass.newInstance();
+        }
+        catch (ClassNotFoundException | InstantiationException | IllegalAccessException e)
+        {
+            throw new BrokerAdminException(String.format("Unable to instantiate queue admin of type '%s'",
+                                                         queueAdminClassName), e);
+        }
+    }
+}
diff --git a/systests/systests-utils/src/main/java/org/apache/qpid/tests/utils/RunBrokerAdmin.java b/systests/systests-utils/src/main/java/org/apache/qpid/tests/utils/RunBrokerAdmin.java
index ef8b05a..4d7104d 100644
--- a/systests/systests-utils/src/main/java/org/apache/qpid/tests/utils/RunBrokerAdmin.java
+++ b/systests/systests-utils/src/main/java/org/apache/qpid/tests/utils/RunBrokerAdmin.java
@@ -1,4 +1,4 @@
-package org.apache.qpid.tests.utils;/*
+/*
  *
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -19,6 +19,8 @@ package org.apache.qpid.tests.utils;/*
  *
  */
 
+package org.apache.qpid.tests.utils;
+
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
diff --git a/systests/systests-utils/src/main/java/org/apache/qpid/tests/utils/BrokerAdminFactory.java b/systests/systests-utils/src/test/java/org/apache/qpid/tests/utils/BrokerAdminFactoryTest.java
similarity index 50%
copy from systests/systests-utils/src/main/java/org/apache/qpid/tests/utils/BrokerAdminFactory.java
copy to systests/systests-utils/src/test/java/org/apache/qpid/tests/utils/BrokerAdminFactoryTest.java
index 64d4eff..45bd733 100644
--- a/systests/systests-utils/src/main/java/org/apache/qpid/tests/utils/BrokerAdminFactory.java
+++ b/systests/systests-utils/src/test/java/org/apache/qpid/tests/utils/BrokerAdminFactoryTest.java
@@ -1,4 +1,5 @@
 /*
+ *
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
@@ -20,20 +21,42 @@
 
 package org.apache.qpid.tests.utils;
 
-import java.util.Map;
+import static junit.framework.TestCase.assertTrue;
+import static org.junit.Assert.fail;
+
+import org.junit.Before;
+import org.junit.Test;
 
-import org.apache.qpid.server.plugin.QpidServiceLoader;
+import org.apache.qpid.test.utils.UnitTestBase;
 
-public class BrokerAdminFactory
+public class BrokerAdminFactoryTest extends UnitTestBase
 {
-    BrokerAdmin createInstance(String type)
+    private BrokerAdminFactory _factory;
+
+    @Before
+    public void setUp()
+    {
+        _factory = new BrokerAdminFactory();
+    }
+
+    @Test
+    public void createInstanceForExistingType()
     {
-        Map<String, BrokerAdmin> adminFacades = new QpidServiceLoader().getInstancesByType(BrokerAdmin.class);
-        BrokerAdmin brokerAdmin = adminFacades.get(type);
-        if (brokerAdmin == null)
+        final BrokerAdmin admin = _factory.createInstance(EmbeddedBrokerPerClassAdminImpl.TYPE);
+        assertTrue(admin instanceof EmbeddedBrokerPerClassAdminImpl);
+    }
+
+    @Test
+    public void createInstanceForNonExistingType()
+    {
+        try
+        {
+            _factory.createInstance("foo");
+            fail("Exception is expected");
+        }
+        catch (BrokerAdminException e)
         {
-            throw new RuntimeException(String.format("Could not find BrokerAdmin implementation of type '%s'", type));
+            // pass
         }
-        return brokerAdmin;
     }
 }
diff --git a/systests/systests-utils/src/test/java/org/apache/qpid/tests/utils/ExternalQpidBrokerAdminImplTest.java b/systests/systests-utils/src/test/java/org/apache/qpid/tests/utils/ExternalQpidBrokerAdminImplTest.java
new file mode 100644
index 0000000..8ebcc22
--- /dev/null
+++ b/systests/systests-utils/src/test/java/org/apache/qpid/tests/utils/ExternalQpidBrokerAdminImplTest.java
@@ -0,0 +1,103 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.qpid.tests.utils;
+
+import static org.junit.Assert.assertFalse;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyZeroInteractions;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import org.apache.qpid.test.utils.UnitTestBase;
+
+public class ExternalQpidBrokerAdminImplTest extends UnitTestBase
+{
+    private ExternalQpidBrokerAdminImpl _admin;
+    private QueueAdmin _queueAdmin;
+
+    @Before
+    public void setUp()
+    {
+        _queueAdmin = mock(QueueAdmin.class);
+        _admin = new ExternalQpidBrokerAdminImpl(_queueAdmin);
+    }
+
+    @Test
+    public void createQueue()
+    {
+        final String queueName = getTestName();
+        _admin.createQueue(queueName);
+        verify(_queueAdmin).createQueue(_admin, queueName);
+    }
+
+
+    @Test
+    public void deleteQueue()
+    {
+        final String queueName = getTestName();
+        _admin.createQueue(queueName);
+        _admin.deleteQueue(queueName);
+        verify(_queueAdmin).deleteQueue(_admin, queueName);
+    }
+
+    @Test
+    public void putMessageOnQueue()
+    {
+        final String queueName = getTestName();
+        final String testMessage = "Test Message";
+        _admin.putMessageOnQueue(queueName, testMessage);
+        verify(_queueAdmin).putMessageOnQueue(_admin, queueName, testMessage);
+    }
+
+    @Test
+    public void isPutMessageOnQueueSupported()
+    {
+        assertFalse(_admin.isPutMessageOnQueueSupported());
+    }
+
+    @Test
+    public void isDeleteQueueSupported()
+    {
+        assertFalse(_admin.isDeleteQueueSupported());
+    }
+
+    @Test
+    public void afterTestMethod()
+    {
+        final String queueName1 = getTestName();
+        final String queueName2= getTestName() + "_2";
+        _admin.createQueue(queueName1);
+        _admin.createQueue(queueName2);
+        _admin.afterTestMethod(null, null);
+        verify(_queueAdmin).deleteQueue(_admin, queueName1);
+        verify(_queueAdmin).deleteQueue(_admin, queueName2);
+    }
+
+    @Test
+    public void beforeTestMethod()
+    {
+        _admin.beforeTestMethod(null, null);
+        verifyZeroInteractions(_queueAdmin);
+    }
+
+}
diff --git a/systests/systests-utils/src/test/java/org/apache/qpid/tests/utils/NoOpQueueAdminTest.java b/systests/systests-utils/src/test/java/org/apache/qpid/tests/utils/NoOpQueueAdminTest.java
new file mode 100644
index 0000000..45f9a5c
--- /dev/null
+++ b/systests/systests-utils/src/test/java/org/apache/qpid/tests/utils/NoOpQueueAdminTest.java
@@ -0,0 +1,78 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+package org.apache.qpid.tests.utils;
+
+import static org.junit.Assert.assertFalse;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verifyZeroInteractions;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import org.apache.qpid.test.utils.UnitTestBase;
+
+public class NoOpQueueAdminTest extends UnitTestBase
+{
+
+    private NoOpQueueAdmin _admin;
+    private BrokerAdmin _brokerAdmin;
+
+    @Before
+    public void setUp()
+    {
+        _admin = new NoOpQueueAdmin();
+        _brokerAdmin = mock(BrokerAdmin.class);
+    }
+
+    @Test
+    public void createQueue()
+    {
+        _admin.createQueue(_brokerAdmin, getTestName());
+        verifyZeroInteractions(_brokerAdmin);
+    }
+
+    @Test
+    public void deleteQueue()
+    {
+        _admin.deleteQueue(_brokerAdmin, getTestName());
+        verifyZeroInteractions(_brokerAdmin);
+    }
+
+    @Test
+    public void putMessageOnQueue()
+    {
+        _admin.putMessageOnQueue(_brokerAdmin, getTestName());
+        verifyZeroInteractions(_brokerAdmin);
+    }
+
+    @Test
+    public void isDeleteQueueSupported()
+    {
+        assertFalse(_admin.isDeleteQueueSupported());
+    }
+
+    @Test
+    public void isPutMessageOnQueueSupported()
+    {
+        assertFalse(_admin.isPutMessageOnQueueSupported());
+    }
+}
diff --git a/systests/systests-utils/src/test/java/org/apache/qpid/tests/utils/QueueAdminFactoryTest.java b/systests/systests-utils/src/test/java/org/apache/qpid/tests/utils/QueueAdminFactoryTest.java
new file mode 100644
index 0000000..5074bd4
--- /dev/null
+++ b/systests/systests-utils/src/test/java/org/apache/qpid/tests/utils/QueueAdminFactoryTest.java
@@ -0,0 +1,133 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+package org.apache.qpid.tests.utils;
+
+import static org.apache.qpid.tests.utils.QueueAdminFactory.QUEUE_ADMIN_TYPE_PROPERTY_NAME;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import org.apache.qpid.test.utils.UnitTestBase;
+
+public class QueueAdminFactoryTest extends UnitTestBase
+{
+    private QueueAdminFactory _factory;
+    private String _preservedAdminType;
+
+    @Before
+    public void setUp()
+    {
+        _factory = new QueueAdminFactory();
+        _preservedAdminType = System.getProperty(QUEUE_ADMIN_TYPE_PROPERTY_NAME);
+    }
+
+    @After
+    public void tearDown()
+    {
+        if (_preservedAdminType == null)
+        {
+            System.clearProperty(QUEUE_ADMIN_TYPE_PROPERTY_NAME);
+        }
+        else
+        {
+            System.setProperty(QUEUE_ADMIN_TYPE_PROPERTY_NAME, _preservedAdminType);
+        }
+    }
+
+    @Test
+    public void testQueueAdminCreationForNonExistingType()
+    {
+        System.setProperty(QUEUE_ADMIN_TYPE_PROPERTY_NAME, "foo");
+        try
+        {
+            _factory.create();
+            fail("Exception is expected");
+        }
+        catch (BrokerAdminException e)
+        {
+            // pass
+        }
+    }
+
+    @Test
+    public void testQueueAdminCreationForExistingTypeWithPrivateConstructor()
+    {
+        System.setProperty(QUEUE_ADMIN_TYPE_PROPERTY_NAME, TestQueueAdmin2.class.getName());
+        try
+        {
+            _factory.create();
+            fail("Exception is expected");
+        }
+        catch (BrokerAdminException e)
+        {
+            // pass
+        }
+    }
+
+    @Test
+    public void testQueueAdminCreationForExistingTypeThrowingInstantiationException()
+    {
+        System.setProperty(QUEUE_ADMIN_TYPE_PROPERTY_NAME, TestQueueAdmin3.class.getName());
+        try
+        {
+            _factory.create();
+            fail("Exception is expected");
+        }
+        catch (BrokerAdminException e)
+        {
+            // pass
+        }
+    }
+
+    @Test
+    public void testQueueAdminCreationForExistingType()
+    {
+        System.setProperty(QUEUE_ADMIN_TYPE_PROPERTY_NAME, TestQueueAdmin.class.getName());
+        final QueueAdmin admin = _factory.create();
+        assertTrue(admin instanceof TestQueueAdmin);
+    }
+
+    @SuppressWarnings("WeakerAccess")
+    public static class TestQueueAdmin extends NoOpQueueAdmin
+    {
+
+    }
+
+    @SuppressWarnings("WeakerAccess")
+    public static class TestQueueAdmin2 extends NoOpQueueAdmin
+    {
+        private TestQueueAdmin2()
+        {
+        }
+    }
+
+    public static class TestQueueAdmin3 extends NoOpQueueAdmin
+    {
+        public TestQueueAdmin3() throws InstantiationException
+        {
+            throw new InstantiationException("Test");
+        }
+    }
+}


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


[qpid-broker-j] 13/21: QPID-8350: [Tests][AMQP 1.0] Improve open tests

Posted by or...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

orudyy pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/qpid-broker-j.git

commit d67424a5171188295023b110c29b0bb9d0cf8f48
Author: Alex Rudyy <or...@apache.org>
AuthorDate: Mon Aug 19 14:31:09 2019 +0100

    QPID-8350: [Tests][AMQP 1.0] Improve open tests
---
 .../v1_0/transport/connection/OpenTest.java        | 56 ++++++++++++----------
 1 file changed, 32 insertions(+), 24 deletions(-)

diff --git a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/connection/OpenTest.java b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/connection/OpenTest.java
index a744cb1..17fdab0 100644
--- a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/connection/OpenTest.java
+++ b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/connection/OpenTest.java
@@ -20,13 +20,13 @@
 
 package org.apache.qpid.tests.protocol.v1_0.transport.connection;
 
+import static org.hamcrest.CoreMatchers.anyOf;
 import static org.hamcrest.CoreMatchers.both;
-import static org.hamcrest.CoreMatchers.either;
+import static org.hamcrest.CoreMatchers.nullValue;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.equalTo;
 import static org.hamcrest.Matchers.greaterThanOrEqualTo;
 import static org.hamcrest.Matchers.is;
-import static org.hamcrest.Matchers.lessThan;
 import static org.hamcrest.Matchers.lessThanOrEqualTo;
 import static org.hamcrest.Matchers.notNullValue;
 
@@ -39,6 +39,7 @@ import org.apache.qpid.server.protocol.v1_0.type.UnsignedShort;
 import org.apache.qpid.server.protocol.v1_0.type.transport.AmqpError;
 import org.apache.qpid.server.protocol.v1_0.type.transport.Close;
 import org.apache.qpid.server.protocol.v1_0.type.transport.ConnectionError;
+import org.apache.qpid.server.protocol.v1_0.type.transport.Error;
 import org.apache.qpid.server.protocol.v1_0.type.transport.Open;
 import org.apache.qpid.tests.utils.BrokerAdmin;
 import org.apache.qpid.tests.protocol.v1_0.FrameTransport;
@@ -46,6 +47,7 @@ import org.apache.qpid.tests.protocol.v1_0.Interaction;
 import org.apache.qpid.tests.protocol.v1_0.EmptyResponse;
 import org.apache.qpid.tests.utils.BrokerAdminUsingTestBase;
 import org.apache.qpid.tests.protocol.SpecificationTest;
+import org.apache.qpid.tests.utils.BrokerSpecific;
 
 
 public class OpenTest extends BrokerAdminUsingTestBase
@@ -66,8 +68,14 @@ public class OpenTest extends BrokerAdminUsingTestBase
             assertThat(responseOpen.getContainerId(), is(notNullValue()));
 
             Close responseClose = interaction.consumeResponse().getLatestResponse(Close.class);
-            assertThat(responseClose.getError(), is(notNullValue()));
-            assertThat(responseClose.getError().getCondition(), equalTo(AmqpError.DECODE_ERROR));
+
+            // 2.7.9: If set, this field indicates that the connection is being closed due to an error condition.
+            // The value of the field SHOULD contain details on the cause of the error.
+            Error error = responseClose.getError();
+            if (error != null)
+            {
+                assertThat(error.getCondition(), equalTo(AmqpError.DECODE_ERROR));
+            }
         }
     }
 
@@ -88,9 +96,9 @@ public class OpenTest extends BrokerAdminUsingTestBase
                                          .getLatestResponse(Open.class);
             assertThat(responseOpen.getContainerId(), is(notNullValue()));
             assertThat(responseOpen.getMaxFrameSize().longValue(),
-                       is(both(greaterThanOrEqualTo(0L)).and(lessThan(UnsignedInteger.MAX_VALUE.longValue()))));
+                       is(both(greaterThanOrEqualTo(0L)).and(lessThanOrEqualTo(UnsignedInteger.MAX_VALUE.longValue()))));
             assertThat(responseOpen.getChannelMax().intValue(),
-                       is(both(greaterThanOrEqualTo(0)).and(lessThan(UnsignedShort.MAX_VALUE.intValue()))));
+                       is(both(greaterThanOrEqualTo(0)).and(lessThanOrEqualTo(UnsignedShort.MAX_VALUE.intValue()))));
 
             interaction.doCloseConnection();
         }
@@ -129,28 +137,21 @@ public class OpenTest extends BrokerAdminUsingTestBase
                                            .open().consumeResponse()
                                            .getLatestResponse(Open.class);
 
-            final int peerIdleTimeOut = responseOpen.getIdleTimeOut().intValue();
-            assertThat(peerIdleTimeOut, is(either(equalTo(0)).or(greaterThanOrEqualTo(idleTimeOut))));
+            final UnsignedInteger peerIdleTimeOut = responseOpen.getIdleTimeOut();
+            assertThat(peerIdleTimeOut, is(anyOf(nullValue(), greaterThanOrEqualTo(UnsignedInteger.ZERO))));
 
-            final long startTime = System.currentTimeMillis();
+            final int timeout = peerIdleTimeOut == null || peerIdleTimeOut.intValue() == 0
+                    ? idleTimeOut
+                    : peerIdleTimeOut.intValue();
+            Thread.sleep(timeout);
             interaction.consumeResponse(EmptyResponse.class);
-            final long actualHeartbeatDelay = System.currentTimeMillis() - startTime;
-            assertThat("Empty frame not received within expected time frame",
-                       ((int)actualHeartbeatDelay / 1000),
-                       is(both(greaterThanOrEqualTo(peerIdleTimeOut)).and(lessThanOrEqualTo(peerIdleTimeOut * 2))));
-
-            if (peerIdleTimeOut > 0)
-            {
-                interaction.emptyFrame();
-            }
-
-            interaction.doCloseConnection();
         }
     }
 
     @Test
     @SpecificationTest(section = "2.4.1",
-            description = "The open frame can only be sent on channel 0. §2.7.1: A peer that receives a channel number outside the supported range MUST close the connection with the framing-error error-code.")
+            description = "The open frame can only be sent on channel 0. §2.7.1: A peer that receives a channel number"
+                          + " outside the supported range MUST close the connection with the framing-error error-code.")
     public void failOpenOnChannelNotZero() throws Exception
     {
         final InetSocketAddress addr = getBrokerAdmin().getBrokerAddress(BrokerAdmin.PortType.ANONYMOUS_AMQP);
@@ -164,14 +165,21 @@ public class OpenTest extends BrokerAdminUsingTestBase
                                            .getLatestResponse(Open.class);
             assertThat(responseOpen.getContainerId(), is(notNullValue()));
 
-            Close responseClose = interaction.consumeResponse().getLatestResponse(Close.class);
-            assertThat(responseClose.getError(), is(notNullValue()));
-            assertThat(responseClose.getError().getCondition(), equalTo(ConnectionError.FRAMING_ERROR));
+            Close responseClose = interaction.consumeResponse(Close.class).getLatestResponse(Close.class);
+
+            // 2.7.9: If set, this field indicates that the connection is being closed due to an error condition.
+            // The value of the field SHOULD contain details on the cause of the error.
+            Error error = responseClose.getError();
+            if (error != null)
+            {
+                assertThat(error.getCondition(), equalTo(ConnectionError.FRAMING_ERROR));
+            }
         }
     }
 
     @Test
     @SpecificationTest(section = "2.7.1", description = "The name of the host (either fully qualified or relative) to which the sending peer is connecting")
+    @BrokerSpecific(kind = BrokerAdmin.KIND_BROKER_J)
     public void failOpenOnNonExistingHostname() throws Exception
     {
         final InetSocketAddress addr = getBrokerAdmin().getBrokerAddress(BrokerAdmin.PortType.ANONYMOUS_AMQP);


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


[qpid-broker-j] 21/21: QPID-8349: [Tests][AMQP 1.0] Remove assertions from Utils

Posted by or...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

orudyy pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/qpid-broker-j.git

commit 5381ed2f64e6e518cb3836ad9ff990d987c54a67
Author: Alex Rudyy <or...@apache.org>
AuthorDate: Wed Aug 21 17:15:47 2019 +0100

    QPID-8349: [Tests][AMQP 1.0] Remove assertions from Utils
---
 .../org/apache/qpid/tests/protocol/v1_0/Utils.java | 39 +++++++++++-----------
 1 file changed, 19 insertions(+), 20 deletions(-)

diff --git a/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/Utils.java b/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/Utils.java
index 2ac50f4..36bc8a7 100644
--- a/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/Utils.java
+++ b/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/Utils.java
@@ -21,9 +21,6 @@
 package org.apache.qpid.tests.protocol.v1_0;
 
 import static java.nio.charset.StandardCharsets.UTF_8;
-import static org.hamcrest.Matchers.greaterThan;
-import static org.hamcrest.Matchers.is;
-import static org.junit.Assume.assumeThat;
 
 import java.net.InetSocketAddress;
 import java.util.stream.IntStream;
@@ -36,6 +33,7 @@ import org.apache.qpid.server.protocol.v1_0.type.messaging.Header;
 import org.apache.qpid.server.protocol.v1_0.type.transport.Attach;
 import org.apache.qpid.server.protocol.v1_0.type.transport.Begin;
 import org.apache.qpid.server.protocol.v1_0.type.transport.Detach;
+import org.apache.qpid.server.protocol.v1_0.type.transport.End;
 import org.apache.qpid.server.protocol.v1_0.type.transport.Flow;
 import org.apache.qpid.server.protocol.v1_0.type.transport.Open;
 import org.apache.qpid.server.protocol.v1_0.type.transport.Role;
@@ -83,6 +81,7 @@ public class Utils
                        .open().consumeResponse()
                        .begin().consumeResponse()
                        .attachRole(Role.RECEIVER)
+                       .attachName("utilsReceiverLink")
                        .attachSourceAddress(queueName)
                        .attach().consumeResponse()
                        .flowIncomingWindow(UnsignedInteger.ONE)
@@ -100,7 +99,10 @@ public class Utils
                        .dispositionLast(interaction.getLatestDeliveryId())
                        .dispositionState(new Accepted())
                        .disposition()
-                       .sync();
+                       .detachClose(true)
+                       .detach().consumeResponse(Detach.class)
+                       .end().consumeResponse(End.class)
+                       .doCloseConnection();
             return interaction.getDecodedLatestDelivery();
         }
     }
@@ -155,21 +157,15 @@ public class Utils
             try (FrameTransport transport = new FrameTransport(brokerAddress).connect())
             {
                 final Interaction interaction = transport.newInteraction();
-                final Flow flow = interaction.negotiateProtocol().consumeResponse()
-                                             .open().consumeResponse(Open.class)
-                                             .begin().consumeResponse(Begin.class)
-                                             .attachRole(Role.SENDER)
-                                             .attachTargetAddress(BrokerAdmin.TEST_QUEUE_NAME)
-                                             .attachSndSettleMode(SenderSettleMode.SETTLED)
-                                             .attach().consumeResponse(Attach.class)
-                                             .consumeResponse(Flow.class)
-                                             .getLatestResponse(Flow.class);
-
-                assumeThat(String.format("insufficient credit (%d) to publish %d messages",
-                                         flow.getLinkCredit().intValue(),
-                                         message.length),
-                           flow.getLinkCredit().intValue(),
-                           is(greaterThan(message.length)));
+                interaction.negotiateProtocol().consumeResponse()
+                           .open().consumeResponse(Open.class)
+                           .begin().consumeResponse(Begin.class)
+                           .attachName("utilsSenderLink")
+                           .attachRole(Role.SENDER)
+                           .attachTargetAddress(BrokerAdmin.TEST_QUEUE_NAME)
+                           .attachSndSettleMode(SenderSettleMode.SETTLED)
+                           .attach().consumeResponse(Attach.class)
+                           .consumeResponse(Flow.class);
 
                 int tag = 0;
                 for (String payload : message)
@@ -182,7 +178,10 @@ public class Utils
                                .sync();
                     tag++;
                 }
-                interaction.doCloseConnection();
+                interaction.detachClose(true)
+                    .detach().consumeResponse(Detach.class)
+                    .end().consumeResponse(End.class)
+                    .doCloseConnection();
             }
         }
     }


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


[qpid-broker-j] 14/21: QPID-8350: [Tests][AMQP 1.0] Verify test assumptions

Posted by or...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

orudyy pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/qpid-broker-j.git

commit fd79bf6e0fc3914cf4689e9590647744d594b3fb
Author: Alex Rudyy <or...@apache.org>
AuthorDate: Tue Aug 20 14:55:41 2019 +0100

    QPID-8350: [Tests][AMQP 1.0] Verify test assumptions
---
 .../tests/protocol/v1_0/transport/security/sasl/SaslTest.java     | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/security/sasl/SaslTest.java b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/security/sasl/SaslTest.java
index 0931b1b..eea2361 100644
--- a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/security/sasl/SaslTest.java
+++ b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/security/sasl/SaslTest.java
@@ -64,7 +64,6 @@ public class SaslTest extends BrokerAdminUsingTestBase
     {
         assumeThat(getBrokerAdmin().isSASLSupported(), is(true));
         assumeThat(getBrokerAdmin().isSASLMechanismSupported(PLAIN.toString()), is(true));
-        assumeThat(getBrokerAdmin().isSASLMechanismSupported(CRAM_MD5.toString()), is(true));
         _username = getBrokerAdmin().getValidUsername();
         _password = getBrokerAdmin().getValidPassword();
     }
@@ -84,7 +83,7 @@ public class SaslTest extends BrokerAdminUsingTestBase
             assertThat(saslHeaderResponse, is(equalTo(SASL_AMQP_HEADER_BYTES)));
 
             SaslMechanisms saslMechanismsResponse = interaction.consumeResponse().getLatestResponse(SaslMechanisms.class);
-            assertThat(Arrays.asList(saslMechanismsResponse.getSaslServerMechanisms()), hasItem(PLAIN));
+            assumeThat(Arrays.asList(saslMechanismsResponse.getSaslServerMechanisms()), hasItem(PLAIN));
 
             final Binary initialResponse = new Binary(String.format("\0%s\0%s", _username, _password).getBytes(StandardCharsets.US_ASCII));
             SaslOutcome saslOutcome = interaction.saslMechanism(PLAIN)
@@ -130,7 +129,7 @@ public class SaslTest extends BrokerAdminUsingTestBase
             assertThat(saslHeaderResponse, is(equalTo(SASL_AMQP_HEADER_BYTES)));
 
             SaslMechanisms saslMechanismsResponse = interaction.consumeResponse().getLatestResponse(SaslMechanisms.class);
-            assertThat(Arrays.asList(saslMechanismsResponse.getSaslServerMechanisms()), hasItem(PLAIN));
+            assumeThat(Arrays.asList(saslMechanismsResponse.getSaslServerMechanisms()), hasItem(PLAIN));
 
             SaslOutcome saslOutcome = interaction.consumeResponse().getLatestResponse(SaslOutcome.class);
             assertThat(saslOutcome.getCode(), equalTo(SaslCode.OK));
@@ -148,6 +147,7 @@ public class SaslTest extends BrokerAdminUsingTestBase
             description = "SASL Negotiation [...] challenge/response step occurs once")
     public void saslSuccessfulAuthenticationWithChallengeResponse() throws Exception
     {
+        assumeThat(getBrokerAdmin().isSASLMechanismSupported(CRAM_MD5.toString()), is(true));
         final InetSocketAddress addr = getBrokerAdmin().getBrokerAddress(BrokerAdmin.PortType.AMQP);
         try (FrameTransport transport = new FrameTransport(addr, true).connect())
         {
@@ -198,7 +198,7 @@ public class SaslTest extends BrokerAdminUsingTestBase
             assertThat(saslHeaderResponse, is(equalTo(SASL_AMQP_HEADER_BYTES)));
 
             SaslMechanisms saslMechanismsResponse = interaction.consumeResponse().getLatestResponse(SaslMechanisms.class);
-            assertThat(Arrays.asList(saslMechanismsResponse.getSaslServerMechanisms()), hasItem(PLAIN));
+            assumeThat(Arrays.asList(saslMechanismsResponse.getSaslServerMechanisms()), hasItem(PLAIN));
 
             final Binary initialResponse =
                     new Binary(String.format("\0%s\0badpassword", _username).getBytes(StandardCharsets.US_ASCII));


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


[qpid-broker-j] 20/21: QPID-8350: [Tests][AMQP 1.0] Remove BrokerSpecific annotation from DecodeErrorTest#illegalMessage()

Posted by or...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

orudyy pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/qpid-broker-j.git

commit 455f23254b204ffc2704ebb7b60cc71c452580f4
Author: Alex Rudyy <or...@apache.org>
AuthorDate: Wed Aug 21 17:14:17 2019 +0100

    QPID-8350: [Tests][AMQP 1.0] Remove BrokerSpecific annotation from DecodeErrorTest#illegalMessage()
---
 .../qpid/tests/protocol/v1_0/DecodeErrorTest.java  | 34 +++++++++-------------
 1 file changed, 14 insertions(+), 20 deletions(-)

diff --git a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/DecodeErrorTest.java b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/DecodeErrorTest.java
index b079122..ce604c9 100644
--- a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/DecodeErrorTest.java
+++ b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/DecodeErrorTest.java
@@ -35,7 +35,6 @@ import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 
-import org.hamcrest.Matchers;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -59,13 +58,11 @@ import org.apache.qpid.server.protocol.v1_0.type.transport.End;
 import org.apache.qpid.server.protocol.v1_0.type.transport.Error;
 import org.apache.qpid.server.protocol.v1_0.type.transport.Flow;
 import org.apache.qpid.server.protocol.v1_0.type.transport.Open;
-import org.apache.qpid.server.protocol.v1_0.type.transport.ReceiverSettleMode;
 import org.apache.qpid.server.protocol.v1_0.type.transport.Role;
 import org.apache.qpid.tests.protocol.Response;
 import org.apache.qpid.tests.protocol.SpecificationTest;
 import org.apache.qpid.tests.utils.BrokerAdmin;
 import org.apache.qpid.tests.utils.BrokerAdminUsingTestBase;
-import org.apache.qpid.tests.utils.BrokerSpecific;
 
 public class DecodeErrorTest extends BrokerAdminUsingTestBase
 {
@@ -82,28 +79,25 @@ public class DecodeErrorTest extends BrokerAdminUsingTestBase
     @SpecificationTest(section = "3.2",
             description = "Altogether a message consists of the following sections: Zero or one header,"
                           + " Zero or one delivery-annotations, [...]")
-    @BrokerSpecific(kind = BrokerAdmin.KIND_BROKER_J)
     public void illegalMessage() throws Exception
     {
         try (FrameTransport transport = new FrameTransport(_brokerAddress).connect())
         {
             final Interaction interaction = transport.newInteraction();
-            final Attach attach = interaction.negotiateProtocol()
-                                             .consumeResponse()
-                                             .open()
-                                             .consumeResponse(Open.class)
-                                             .begin()
-                                             .consumeResponse(Begin.class)
-                                             .attachRole(Role.SENDER)
-                                             .attachTargetAddress(BrokerAdmin.TEST_QUEUE_NAME)
-                                             .attachRcvSettleMode(ReceiverSettleMode.SECOND)
-                                             .attach()
-                                             .consumeResponse(Attach.class)
-                                             .getLatestResponse(Attach.class);
-            assumeThat(attach.getRcvSettleMode(), is(equalTo(ReceiverSettleMode.SECOND)));
-
-            final Flow flow = interaction.consumeResponse(Flow.class).getLatestResponse(Flow.class);
-            assumeThat(flow.getLinkCredit(), is(greaterThan(UnsignedInteger.ZERO)));
+            interaction.negotiateProtocol()
+                       .consumeResponse()
+                       .open()
+                       .consumeResponse(Open.class)
+                       .begin()
+                       .consumeResponse(Begin.class)
+                       .attachRole(Role.SENDER)
+                       .attachTargetAddress(BrokerAdmin.TEST_QUEUE_NAME)
+                       .attach()
+                       .consumeResponse(Attach.class)
+                       .consumeResponse(Flow.class)
+                       .assertLatestResponse(Flow.class,
+                                             flow -> assumeThat(flow.getLinkCredit(),
+                                                                is(greaterThan(UnsignedInteger.ZERO))));
 
             final List<QpidByteBuffer> payloads = buildInvalidMessage();
             try


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


[qpid-broker-j] 04/21: QPID-8349: [Tests][AMQP 1.0] Add methods to set delivery id from internal counter

Posted by or...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

orudyy pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/qpid-broker-j.git

commit a545246d53288521486b51b383b9a44aa4fdc9ff
Author: Alex Rudyy <or...@apache.org>
AuthorDate: Mon Aug 19 16:38:05 2019 +0100

    QPID-8349: [Tests][AMQP 1.0] Add methods to set delivery id from internal counter
---
 .../org/apache/qpid/tests/protocol/v1_0/Interaction.java   | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/Interaction.java b/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/Interaction.java
index 4df4db0..98ffe45 100644
--- a/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/Interaction.java
+++ b/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/Interaction.java
@@ -159,7 +159,7 @@ public class Interaction extends AbstractInteraction<Interaction>
         _transfer = new Transfer();
         _transfer.setHandle(defaultLinkHandle);
         _transfer.setDeliveryTag(new Binary("testDeliveryTag".getBytes(StandardCharsets.UTF_8)));
-        _transfer.setDeliveryId(getNextDeliveryId());
+        _transfer.setDeliveryId(UnsignedInteger.valueOf(_deliveryIdCounter));
 
         _disposition = new Disposition();
         _disposition.setFirst(UnsignedInteger.ZERO);
@@ -671,6 +671,12 @@ public class Interaction extends AbstractInteraction<Interaction>
         return this;
     }
 
+    public Interaction flowNextOutgoingId()
+    {
+        _flow.setNextOutgoingId(UnsignedInteger.valueOf(_deliveryIdCounter));
+        return this;
+    }
+
     public Interaction flowEcho(final Boolean echo)
     {
         _flow.setEcho(echo);
@@ -761,6 +767,12 @@ public class Interaction extends AbstractInteraction<Interaction>
         return this;
     }
 
+    public Interaction transferDeliveryId()
+    {
+        _transfer.setDeliveryId(getNextDeliveryId());
+        return this;
+    }
+
     public Interaction transferDeliveryTag(final Binary deliveryTag)
     {
         _transfer.setDeliveryTag(deliveryTag);


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


[qpid-broker-j] 12/21: QPID-8350: [Tests][AMQP 1.0] Improve attach tests

Posted by or...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

orudyy pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/qpid-broker-j.git

commit 62484c7f297e55435ce2c3288027677255651873
Author: Alex Rudyy <or...@apache.org>
AuthorDate: Mon Aug 19 14:27:31 2019 +0100

    QPID-8350: [Tests][AMQP 1.0] Improve attach tests
---
 .../apache/qpid/tests/protocol/v1_0/transport/link/AttachTest.java   | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/link/AttachTest.java b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/link/AttachTest.java
index c81e950..75f5985 100644
--- a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/link/AttachTest.java
+++ b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/link/AttachTest.java
@@ -46,12 +46,13 @@ import org.apache.qpid.tests.protocol.v1_0.Interaction;
 import org.apache.qpid.tests.protocol.SpecificationTest;
 import org.apache.qpid.tests.utils.BrokerAdmin;
 import org.apache.qpid.tests.utils.BrokerAdminUsingTestBase;
+import org.apache.qpid.tests.utils.BrokerSpecific;
 
 public class AttachTest extends BrokerAdminUsingTestBase
 {
     @Test
     @SpecificationTest(section = "1.3.4",
-            description = "Attach without mandatory fields should result in a decoding error.")
+            description = "mandatory [...] a non null value for the field is always encoded.")
     public void emptyAttach() throws Exception
     {
         final InetSocketAddress addr = getBrokerAdmin().getBrokerAddress(BrokerAdmin.PortType.ANONYMOUS_AMQP);
@@ -128,6 +129,7 @@ public class AttachTest extends BrokerAdminUsingTestBase
                           + " still create a link endpoint and issue an attach indicating that the link endpoint has"
                           + " no associated local terminus. In this case, the session endpoint MUST immediately"
                           + " detach the newly created link endpoint.")
+    @BrokerSpecific(kind = BrokerAdmin.KIND_BROKER_J)
     public void attachReceiverWithNullTarget() throws Exception
     {
         String queueName = BrokerAdmin.TEST_QUEUE_NAME;
@@ -170,6 +172,7 @@ public class AttachTest extends BrokerAdminUsingTestBase
                           + " still create a link endpoint and issue an attach indicating that the link endpoint has"
                           + " no associated local terminus. In this case, the session endpoint MUST immediately"
                           + " detach the newly created link endpoint.")
+    @BrokerSpecific(kind = BrokerAdmin.KIND_BROKER_J)
     public void attachSenderWithNullSource() throws Exception
     {
         String queueName = "testQueue";


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


[qpid-broker-j] 09/21: QPID-8350: [Tests][AMQP 1.0] Add more assertions and validation into sole connection tests

Posted by or...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

orudyy pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/qpid-broker-j.git

commit c8bbebfd146eb1e71c9e02d309e39897e8659bd8
Author: Alex Rudyy <or...@apache.org>
AuthorDate: Mon Aug 19 14:19:03 2019 +0100

    QPID-8350: [Tests][AMQP 1.0] Add more assertions and validation into sole connection tests
---
 .../extensions/soleconn/CloseExistingPolicy.java   |  89 ++++++--------
 .../v1_0/extensions/soleconn/MixedPolicy.java      |  13 ++-
 .../soleconn/RefuseConnectionPolicy.java           | 109 ++++++-----------
 .../extensions/soleconn/SoleConnectionAsserts.java | 129 +++++++++++++++++++++
 4 files changed, 213 insertions(+), 127 deletions(-)

diff --git a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/extensions/soleconn/CloseExistingPolicy.java b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/extensions/soleconn/CloseExistingPolicy.java
index 8e4f676..0427c96 100644
--- a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/extensions/soleconn/CloseExistingPolicy.java
+++ b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/extensions/soleconn/CloseExistingPolicy.java
@@ -24,30 +24,28 @@ import static org.apache.qpid.server.protocol.v1_0.type.extensions.soleconn.Sole
 import static org.apache.qpid.server.protocol.v1_0.type.extensions.soleconn.SoleConnectionConnectionProperties.SOLE_CONNECTION_ENFORCEMENT_POLICY;
 import static org.apache.qpid.server.protocol.v1_0.type.extensions.soleconn.SoleConnectionConnectionProperties.SOLE_CONNECTION_FOR_CONTAINER;
 import static org.apache.qpid.server.protocol.v1_0.type.extensions.soleconn.SoleConnectionEnforcementPolicy.CLOSE_EXISTING;
-import static org.hamcrest.CoreMatchers.hasItem;
-import static org.hamcrest.CoreMatchers.notNullValue;
+import static org.apache.qpid.tests.protocol.v1_0.extensions.soleconn.SoleConnectionAsserts.assertEnforcementPolicyCloseExisting;
+import static org.apache.qpid.tests.protocol.v1_0.extensions.soleconn.SoleConnectionAsserts.assertResourceLocked;
+import static org.apache.qpid.tests.protocol.v1_0.extensions.soleconn.SoleConnectionAsserts.assertSoleConnectionCapability;
+import static org.apache.qpid.tests.protocol.v1_0.extensions.soleconn.SoleConnectionAsserts.assumeDetectionPolicyStrong;
+import static org.apache.qpid.tests.protocol.v1_0.extensions.soleconn.SoleConnectionAsserts.assumeEnforcementPolicyCloseExisting;
+import static org.apache.qpid.tests.protocol.v1_0.extensions.soleconn.SoleConnectionAsserts.assumeSoleConnectionCapability;
 import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.equalTo;
 import static org.hamcrest.Matchers.in;
-import static org.hamcrest.Matchers.is;
-import static org.junit.Assume.assumeThat;
 
 import java.net.InetSocketAddress;
-import java.util.Arrays;
 import java.util.Collections;
 
 import org.junit.Before;
 import org.junit.Test;
 
-import org.apache.qpid.server.protocol.v1_0.type.Symbol;
 import org.apache.qpid.server.protocol.v1_0.type.UnsignedInteger;
 import org.apache.qpid.server.protocol.v1_0.type.extensions.soleconn.SoleConnectionDetectionPolicy;
-import org.apache.qpid.server.protocol.v1_0.type.transport.AmqpError;
 import org.apache.qpid.server.protocol.v1_0.type.transport.Close;
 import org.apache.qpid.server.protocol.v1_0.type.transport.Open;
-import org.apache.qpid.tests.utils.BrokerAdmin;
 import org.apache.qpid.tests.protocol.v1_0.FrameTransport;
 import org.apache.qpid.tests.protocol.v1_0.Interaction;
+import org.apache.qpid.tests.utils.BrokerAdmin;
 import org.apache.qpid.tests.utils.BrokerAdminUsingTestBase;
 
 public class CloseExistingPolicy extends BrokerAdminUsingTestBase
@@ -75,7 +73,9 @@ public class CloseExistingPolicy extends BrokerAdminUsingTestBase
                                          .open().consumeResponse()
                                          .getLatestResponse(Open.class);
 
-            assertThat(Arrays.asList(responseOpen.getOfferedCapabilities()), hasItem(SOLE_CONNECTION_FOR_CONTAINER));
+            assumeSoleConnectionCapability(responseOpen);
+            assumeEnforcementPolicyCloseExisting(responseOpen);
+
             if (responseOpen.getProperties().containsKey(SOLE_CONNECTION_DETECTION_POLICY))
             {
                 assertThat(responseOpen.getProperties().get(SOLE_CONNECTION_DETECTION_POLICY),
@@ -98,6 +98,10 @@ public class CloseExistingPolicy extends BrokerAdminUsingTestBase
                                                                  CLOSE_EXISTING))
                         .open().consumeResponse(Open.class);
 
+            final Open responseOpen = interaction1.getLatestResponse(Open.class);
+            assumeSoleConnectionCapability(responseOpen);
+            assumeEnforcementPolicyCloseExisting(responseOpen);
+
             try (FrameTransport transport2 = new FrameTransport(_brokerAddress).connect())
             {
                 final Interaction interaction2 = transport2.newInteraction();
@@ -109,26 +113,18 @@ public class CloseExistingPolicy extends BrokerAdminUsingTestBase
                             .open()
                             .sync();
 
-                final Close close1 = interaction1.consumeResponse().getLatestResponse(Close.class);
-                assertThat(close1.getError(), is(notNullValue()));
-                assertThat(close1.getError().getCondition(), is(equalTo(AmqpError.RESOURCE_LOCKED)));
-                assertThat(close1.getError().getInfo(), is(equalTo(Collections.singletonMap(Symbol.valueOf("sole-connection-enforcement"), true))));
+                assertResourceLocked(interaction1.consumeResponse().getLatestResponse(Close.class));
 
                 final Open responseOpen2 = interaction2.consumeResponse().getLatestResponse(Open.class);
-                assertThat(Arrays.asList(responseOpen2.getOfferedCapabilities()), hasItem(SOLE_CONNECTION_FOR_CONTAINER));
-                if (responseOpen2.getProperties().containsKey(SOLE_CONNECTION_DETECTION_POLICY))
-                {
-                    assertThat(responseOpen2.getProperties().get(SOLE_CONNECTION_DETECTION_POLICY),
-                               in(new UnsignedInteger[]{SoleConnectionDetectionPolicy.STRONG.getValue(),
-                                       SoleConnectionDetectionPolicy.WEAK.getValue()}));
-                }
+                assertSoleConnectionCapability(responseOpen2);
+                assertEnforcementPolicyCloseExisting(responseOpen2);
             }
         }
     }
 
 
     @Test
-    public void weakDetection() throws Exception
+    public void strongDetectionWhenConnectionWithoutSoleConnectionCapabilityOpened() throws Exception
     {
         try (FrameTransport transport1 = new FrameTransport(_brokerAddress).connect())
         {
@@ -138,6 +134,10 @@ public class CloseExistingPolicy extends BrokerAdminUsingTestBase
                         .openContainerId("testContainerId")
                         .open().consumeResponse(Open.class);
 
+            final Open responseOpen = interaction1.getLatestResponse(Open.class);
+            assumeSoleConnectionCapability(responseOpen);
+            assumeDetectionPolicyStrong(responseOpen);
+
             try (FrameTransport transport2 = new FrameTransport(_brokerAddress).connect())
             {
                 final Interaction interaction2 = transport2.newInteraction();
@@ -147,21 +147,13 @@ public class CloseExistingPolicy extends BrokerAdminUsingTestBase
                             .openProperties(Collections.singletonMap(SOLE_CONNECTION_ENFORCEMENT_POLICY,
                                                                      CLOSE_EXISTING))
                             .open()
-                            .sync();
-
-                final Close close1 = interaction1.consumeResponse().getLatestResponse(Close.class);
-                assertThat(close1.getError(), is(notNullValue()));
-                assertThat(close1.getError().getCondition(), is(equalTo(AmqpError.RESOURCE_LOCKED)));
-                assertThat(close1.getError().getInfo(), is(equalTo(Collections.singletonMap(Symbol.valueOf("sole-connection-enforcement"), true))));
+                            .consumeResponse(Open.class);
 
-                final Open responseOpen2 = interaction2.consumeResponse().getLatestResponse(Open.class);
-                assertThat(Arrays.asList(responseOpen2.getOfferedCapabilities()), hasItem(SOLE_CONNECTION_FOR_CONTAINER));
-                if (responseOpen2.getProperties().containsKey(SOLE_CONNECTION_DETECTION_POLICY))
-                {
-                    assertThat(responseOpen2.getProperties().get(SOLE_CONNECTION_DETECTION_POLICY),
-                               in(new UnsignedInteger[]{SoleConnectionDetectionPolicy.STRONG.getValue(),
-                                       SoleConnectionDetectionPolicy.WEAK.getValue()}));
-                }
+                final Open responseOpen2 = interaction2.getLatestResponse(Open.class);
+                assumeSoleConnectionCapability(responseOpen2);
+                assumeEnforcementPolicyCloseExisting(responseOpen2);
+                assumeDetectionPolicyStrong(responseOpen2);
+                assertResourceLocked(interaction1.consumeResponse().getLatestResponse(Close.class));
             }
         }
     }
@@ -180,12 +172,10 @@ public class CloseExistingPolicy extends BrokerAdminUsingTestBase
                                                     CLOSE_EXISTING))
                                             .open().consumeResponse()
                                             .getLatestResponse(Open.class);
-            assertThat(Arrays.asList(responseOpen.getOfferedCapabilities()), hasItem(SOLE_CONNECTION_FOR_CONTAINER));
-            if (responseOpen.getProperties().containsKey(SOLE_CONNECTION_DETECTION_POLICY))
-            {
-                assumeThat(responseOpen.getProperties().get(SOLE_CONNECTION_DETECTION_POLICY),
-                           is(equalTo(SoleConnectionDetectionPolicy.STRONG.getValue())));
-            }
+
+            assumeSoleConnectionCapability(responseOpen);
+            assumeEnforcementPolicyCloseExisting(responseOpen);
+            assumeDetectionPolicyStrong(responseOpen);
 
             try (FrameTransport transport2 = new FrameTransport(_brokerAddress).connect())
             {
@@ -195,19 +185,8 @@ public class CloseExistingPolicy extends BrokerAdminUsingTestBase
                             .openContainerId("testContainerId")
                             .open().sync();
 
-                final Close close1 = interaction1.consumeResponse().getLatestResponse(Close.class);
-                assertThat(close1.getError(), is(notNullValue()));
-                assertThat(close1.getError().getCondition(), is(equalTo(AmqpError.RESOURCE_LOCKED)));
-                assertThat(close1.getError().getInfo(), is(equalTo(Collections.singletonMap(Symbol.valueOf("sole-connection-enforcement"), true))));
-
-                final Open responseOpen2 = interaction2.consumeResponse().getLatestResponse(Open.class);
-                assertThat(Arrays.asList(responseOpen2.getOfferedCapabilities()), hasItem(SOLE_CONNECTION_FOR_CONTAINER));
-                if (responseOpen2.getProperties().containsKey(SOLE_CONNECTION_DETECTION_POLICY))
-                {
-                    assertThat(responseOpen2.getProperties().get(SOLE_CONNECTION_DETECTION_POLICY),
-                               in(new UnsignedInteger[]{SoleConnectionDetectionPolicy.STRONG.getValue(),
-                                       SoleConnectionDetectionPolicy.WEAK.getValue()}));
-                }
+                assertResourceLocked(interaction1.consumeResponse().getLatestResponse(Close.class));
+                assertSoleConnectionCapability(interaction2.consumeResponse().getLatestResponse(Open.class));
             }
         }
     }
diff --git a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/extensions/soleconn/MixedPolicy.java b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/extensions/soleconn/MixedPolicy.java
index 0c9ce9f..5e32c86 100644
--- a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/extensions/soleconn/MixedPolicy.java
+++ b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/extensions/soleconn/MixedPolicy.java
@@ -24,6 +24,9 @@ import static org.apache.qpid.server.protocol.v1_0.type.extensions.soleconn.Sole
 import static org.apache.qpid.server.protocol.v1_0.type.extensions.soleconn.SoleConnectionConnectionProperties.SOLE_CONNECTION_FOR_CONTAINER;
 import static org.apache.qpid.server.protocol.v1_0.type.extensions.soleconn.SoleConnectionEnforcementPolicy.CLOSE_EXISTING;
 import static org.apache.qpid.server.protocol.v1_0.type.extensions.soleconn.SoleConnectionEnforcementPolicy.REFUSE_CONNECTION;
+import static org.apache.qpid.tests.protocol.v1_0.extensions.soleconn.SoleConnectionAsserts.assumeEnforcementPolicyCloseExisting;
+import static org.apache.qpid.tests.protocol.v1_0.extensions.soleconn.SoleConnectionAsserts.assumeEnforcementPolicyRefuse;
+import static org.apache.qpid.tests.protocol.v1_0.extensions.soleconn.SoleConnectionAsserts.assumeSoleConnectionCapability;
 
 import java.net.InetSocketAddress;
 import java.util.Collections;
@@ -33,9 +36,9 @@ import org.junit.Test;
 
 import org.apache.qpid.server.protocol.v1_0.type.transport.Close;
 import org.apache.qpid.server.protocol.v1_0.type.transport.Open;
-import org.apache.qpid.tests.utils.BrokerAdmin;
 import org.apache.qpid.tests.protocol.v1_0.FrameTransport;
 import org.apache.qpid.tests.protocol.v1_0.Interaction;
+import org.apache.qpid.tests.utils.BrokerAdmin;
 import org.apache.qpid.tests.utils.BrokerAdminUsingTestBase;
 
 public class MixedPolicy extends BrokerAdminUsingTestBase
@@ -61,6 +64,10 @@ public class MixedPolicy extends BrokerAdminUsingTestBase
                                                                  CLOSE_EXISTING))
                         .open().consumeResponse(Open.class);
 
+            Open responseOpen = interaction1.getLatestResponse(Open.class);
+            assumeSoleConnectionCapability(responseOpen);
+            assumeEnforcementPolicyCloseExisting(responseOpen);
+
             try (FrameTransport transport2 = new FrameTransport(_brokerAddress).connect())
             {
                 final Interaction interaction2 = transport2.newInteraction();
@@ -104,6 +111,10 @@ public class MixedPolicy extends BrokerAdminUsingTestBase
                                                                  REFUSE_CONNECTION))
                         .open().consumeResponse(Open.class);
 
+            final Open responseOpen = interaction1.getLatestResponse(Open.class);
+            assumeSoleConnectionCapability(responseOpen);
+            assumeEnforcementPolicyRefuse(responseOpen);
+
             try (FrameTransport transport2 = new FrameTransport(_brokerAddress).connect())
             {
                 final Interaction interaction2 = transport2.newInteraction();
diff --git a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/extensions/soleconn/RefuseConnectionPolicy.java b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/extensions/soleconn/RefuseConnectionPolicy.java
index ca7d4a7..08ebda1 100644
--- a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/extensions/soleconn/RefuseConnectionPolicy.java
+++ b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/extensions/soleconn/RefuseConnectionPolicy.java
@@ -24,31 +24,28 @@ import static org.apache.qpid.server.protocol.v1_0.type.extensions.soleconn.Sole
 import static org.apache.qpid.server.protocol.v1_0.type.extensions.soleconn.SoleConnectionConnectionProperties.SOLE_CONNECTION_ENFORCEMENT_POLICY;
 import static org.apache.qpid.server.protocol.v1_0.type.extensions.soleconn.SoleConnectionConnectionProperties.SOLE_CONNECTION_FOR_CONTAINER;
 import static org.apache.qpid.server.protocol.v1_0.type.extensions.soleconn.SoleConnectionEnforcementPolicy.REFUSE_CONNECTION;
-import static org.hamcrest.CoreMatchers.hasItem;
-import static org.hamcrest.CoreMatchers.notNullValue;
+import static org.apache.qpid.tests.protocol.v1_0.extensions.soleconn.SoleConnectionAsserts.assertConnectionEstablishmentFailed;
+import static org.apache.qpid.tests.protocol.v1_0.extensions.soleconn.SoleConnectionAsserts.assertInvalidContainerId;
+import static org.apache.qpid.tests.protocol.v1_0.extensions.soleconn.SoleConnectionAsserts.assumeConnectionEstablishmentFailed;
+import static org.apache.qpid.tests.protocol.v1_0.extensions.soleconn.SoleConnectionAsserts.assumeDetectionPolicyStrong;
+import static org.apache.qpid.tests.protocol.v1_0.extensions.soleconn.SoleConnectionAsserts.assumeEnforcementPolicyRefuse;
+import static org.apache.qpid.tests.protocol.v1_0.extensions.soleconn.SoleConnectionAsserts.assumeSoleConnectionCapability;
 import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.equalTo;
-import static org.hamcrest.Matchers.hasKey;
 import static org.hamcrest.Matchers.in;
-import static org.hamcrest.Matchers.is;
-import static org.junit.Assume.assumeThat;
 
 import java.net.InetSocketAddress;
-import java.util.Arrays;
 import java.util.Collections;
 
 import org.junit.Before;
 import org.junit.Test;
 
-import org.apache.qpid.server.protocol.v1_0.type.Symbol;
 import org.apache.qpid.server.protocol.v1_0.type.UnsignedInteger;
 import org.apache.qpid.server.protocol.v1_0.type.extensions.soleconn.SoleConnectionDetectionPolicy;
-import org.apache.qpid.server.protocol.v1_0.type.transport.AmqpError;
 import org.apache.qpid.server.protocol.v1_0.type.transport.Close;
 import org.apache.qpid.server.protocol.v1_0.type.transport.Open;
-import org.apache.qpid.tests.utils.BrokerAdmin;
 import org.apache.qpid.tests.protocol.v1_0.FrameTransport;
 import org.apache.qpid.tests.protocol.v1_0.Interaction;
+import org.apache.qpid.tests.utils.BrokerAdmin;
 import org.apache.qpid.tests.utils.BrokerAdminUsingTestBase;
 
 public class RefuseConnectionPolicy extends BrokerAdminUsingTestBase
@@ -76,7 +73,9 @@ public class RefuseConnectionPolicy extends BrokerAdminUsingTestBase
                                                  .open().consumeResponse()
                                                  .getLatestResponse(Open.class);
 
-            assertThat(Arrays.asList(responseOpen.getOfferedCapabilities()), hasItem(SOLE_CONNECTION_FOR_CONTAINER));
+            assumeSoleConnectionCapability(responseOpen);
+            assumeEnforcementPolicyRefuse(responseOpen);
+
             if (responseOpen.getProperties().containsKey(SOLE_CONNECTION_DETECTION_POLICY))
             {
                 assertThat(responseOpen.getProperties().get(SOLE_CONNECTION_DETECTION_POLICY),
@@ -99,6 +98,10 @@ public class RefuseConnectionPolicy extends BrokerAdminUsingTestBase
                                                                  REFUSE_CONNECTION))
                         .open().consumeResponse(Open.class);
 
+            final Open responseOpen = interaction1.getLatestResponse(Open.class);
+            assumeSoleConnectionCapability(responseOpen);
+            assumeEnforcementPolicyRefuse(responseOpen);
+
             try (FrameTransport transport2 = new FrameTransport(_brokerAddress).connect())
             {
                 final Interaction interaction2 = transport2.newInteraction();
@@ -110,26 +113,16 @@ public class RefuseConnectionPolicy extends BrokerAdminUsingTestBase
                                                                REFUSE_CONNECTION))
                                                        .open().consumeResponse()
                                                        .getLatestResponse(Open.class);
-                assertThat(Arrays.asList(responseOpen2.getOfferedCapabilities()),
-                           hasItem(SOLE_CONNECTION_FOR_CONTAINER));
-                assertThat(responseOpen2.getProperties(),
-                           hasKey(Symbol.valueOf("amqp:connection-establishment-failed")));
-                assertThat(responseOpen2.getProperties().get(Symbol.valueOf("amqp:connection-establishment-failed")),
-                           is(true));
-
-                final Close close2 = interaction2.consumeResponse().getLatestResponse(Close.class);
-                assertThat(close2.getError(), is(notNullValue()));
-                assertThat(close2.getError().getCondition(), is(equalTo(AmqpError.INVALID_FIELD)));
-                assertThat(close2.getError().getInfo(),
-                           is(equalTo(Collections.singletonMap(Symbol.valueOf("invalid-field"),
-                                                               Symbol.valueOf("container-id")))));
+
+                assertConnectionEstablishmentFailed(responseOpen2);
+                assertInvalidContainerId(interaction2.consumeResponse().getLatestResponse(Close.class));
             }
         }
     }
 
 
     @Test
-    public void weakDetection() throws Exception
+    public void strongDetectionWhenConnectionWithoutSoleConnectionCapabilityOpened() throws Exception
     {
         try (FrameTransport transport1 = new FrameTransport(_brokerAddress).connect())
         {
@@ -139,6 +132,10 @@ public class RefuseConnectionPolicy extends BrokerAdminUsingTestBase
                         .openContainerId("testContainerId")
                         .open().consumeResponse(Open.class);
 
+            final Open responseOpen = interaction1.getLatestResponse(Open.class);
+            assumeSoleConnectionCapability(responseOpen);
+            assumeDetectionPolicyStrong(responseOpen);
+
             try (FrameTransport transport2 = new FrameTransport(_brokerAddress).connect())
             {
                 final Interaction interaction2 = transport2.newInteraction();
@@ -150,19 +147,9 @@ public class RefuseConnectionPolicy extends BrokerAdminUsingTestBase
                                                                REFUSE_CONNECTION))
                                                        .open().consumeResponse()
                                                        .getLatestResponse(Open.class);
-                assertThat(Arrays.asList(responseOpen2.getOfferedCapabilities()),
-                           hasItem(SOLE_CONNECTION_FOR_CONTAINER));
-                assertThat(responseOpen2.getProperties(),
-                           hasKey(Symbol.valueOf("amqp:connection-establishment-failed")));
-                assertThat(responseOpen2.getProperties().get(Symbol.valueOf("amqp:connection-establishment-failed")),
-                           is(true));
-
-                final Close close2 = interaction2.consumeResponse().getLatestResponse(Close.class);
-                assertThat(close2.getError(), is(notNullValue()));
-                assertThat(close2.getError().getCondition(), is(equalTo(AmqpError.INVALID_FIELD)));
-                assertThat(close2.getError().getInfo(),
-                           is(equalTo(Collections.singletonMap(Symbol.valueOf("invalid-field"),
-                                                               Symbol.valueOf("container-id")))));
+
+                assumeConnectionEstablishmentFailed(responseOpen2);
+                assertInvalidContainerId(interaction2.consumeResponse().getLatestResponse(Close.class));
             }
         }
     }
@@ -178,15 +165,13 @@ public class RefuseConnectionPolicy extends BrokerAdminUsingTestBase
                                                   .openDesiredCapabilities(SOLE_CONNECTION_FOR_CONTAINER)
                                                   .openProperties(Collections.singletonMap(
                                                           SOLE_CONNECTION_ENFORCEMENT_POLICY,
-                                                          REFUSE_CONNECTION))
+                                                          REFUSE_CONNECTION.getValue()))
                                                   .open().consumeResponse()
                                                   .getLatestResponse(Open.class);
-            assertThat(Arrays.asList(responseOpen.getOfferedCapabilities()), hasItem(SOLE_CONNECTION_FOR_CONTAINER));
-            if (responseOpen.getProperties().containsKey(SOLE_CONNECTION_DETECTION_POLICY))
-            {
-                assumeThat(responseOpen.getProperties().get(SOLE_CONNECTION_DETECTION_POLICY),
-                           is(equalTo(SoleConnectionDetectionPolicy.STRONG.getValue())));
-            }
+
+            assumeSoleConnectionCapability(responseOpen);
+            assumeEnforcementPolicyRefuse(responseOpen);
+            assumeDetectionPolicyStrong(responseOpen);
 
             try (FrameTransport transport2 = new FrameTransport(_brokerAddress).connect())
             {
@@ -197,19 +182,8 @@ public class RefuseConnectionPolicy extends BrokerAdminUsingTestBase
                                                        .open().consumeResponse()
                                                        .getLatestResponse(Open.class);
 
-                assertThat(Arrays.asList(responseOpen2.getOfferedCapabilities()),
-                           hasItem(SOLE_CONNECTION_FOR_CONTAINER));
-                assertThat(responseOpen2.getProperties(),
-                           hasKey(Symbol.valueOf("amqp:connection-establishment-failed")));
-                assertThat(responseOpen2.getProperties().get(Symbol.valueOf("amqp:connection-establishment-failed")),
-                           is(true));
-
-                final Close close2 = interaction2.consumeResponse().getLatestResponse(Close.class);
-                assertThat(close2.getError(), is(notNullValue()));
-                assertThat(close2.getError().getCondition(), is(equalTo(AmqpError.INVALID_FIELD)));
-                assertThat(close2.getError().getInfo(),
-                           is(equalTo(Collections.singletonMap(Symbol.valueOf("invalid-field"),
-                                                               Symbol.valueOf("container-id")))));
+                assertConnectionEstablishmentFailed(responseOpen2);
+                assertInvalidContainerId(interaction2.consumeResponse().getLatestResponse(Close.class));
             }
         }
     }
@@ -226,6 +200,10 @@ public class RefuseConnectionPolicy extends BrokerAdminUsingTestBase
                         .openDesiredCapabilities(SOLE_CONNECTION_FOR_CONTAINER)
                         .open().consumeResponse(Open.class);
 
+            final Open responseOpen = interaction1.getLatestResponse(Open.class);
+            assumeSoleConnectionCapability(responseOpen);
+            assumeEnforcementPolicyRefuse(responseOpen);
+
             try (FrameTransport transport2 = new FrameTransport(_brokerAddress).connect())
             {
                 final Interaction interaction2 = transport2.newInteraction();
@@ -236,19 +214,8 @@ public class RefuseConnectionPolicy extends BrokerAdminUsingTestBase
                                                        .open().consumeResponse()
                                                        .getLatestResponse(Open.class);
 
-                assertThat(Arrays.asList(responseOpen2.getOfferedCapabilities()),
-                           hasItem(SOLE_CONNECTION_FOR_CONTAINER));
-                assertThat(responseOpen2.getProperties(),
-                           hasKey(Symbol.valueOf("amqp:connection-establishment-failed")));
-                assertThat(responseOpen2.getProperties().get(Symbol.valueOf("amqp:connection-establishment-failed")),
-                           is(true));
-
-                final Close close2 = interaction2.consumeResponse().getLatestResponse(Close.class);
-                assertThat(close2.getError(), is(notNullValue()));
-                assertThat(close2.getError().getCondition(), is(equalTo(AmqpError.INVALID_FIELD)));
-                assertThat(close2.getError().getInfo(),
-                           is(equalTo(Collections.singletonMap(Symbol.valueOf("invalid-field"),
-                                                               Symbol.valueOf("container-id")))));
+                assertConnectionEstablishmentFailed(responseOpen2);
+                assertInvalidContainerId(interaction2.consumeResponse().getLatestResponse(Close.class));
             }
         }
     }
diff --git a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/extensions/soleconn/SoleConnectionAsserts.java b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/extensions/soleconn/SoleConnectionAsserts.java
new file mode 100644
index 0000000..298ab00
--- /dev/null
+++ b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/extensions/soleconn/SoleConnectionAsserts.java
@@ -0,0 +1,129 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+package org.apache.qpid.tests.protocol.v1_0.extensions.soleconn;
+
+import static org.apache.qpid.server.protocol.v1_0.type.extensions.soleconn.SoleConnectionConnectionProperties.SOLE_CONNECTION_DETECTION_POLICY;
+import static org.apache.qpid.server.protocol.v1_0.type.extensions.soleconn.SoleConnectionConnectionProperties.SOLE_CONNECTION_ENFORCEMENT_POLICY;
+import static org.apache.qpid.server.protocol.v1_0.type.extensions.soleconn.SoleConnectionConnectionProperties.SOLE_CONNECTION_FOR_CONTAINER;
+import static org.apache.qpid.server.protocol.v1_0.type.extensions.soleconn.SoleConnectionEnforcementPolicy.CLOSE_EXISTING;
+import static org.apache.qpid.server.protocol.v1_0.type.extensions.soleconn.SoleConnectionEnforcementPolicy.REFUSE_CONNECTION;
+import static org.hamcrest.CoreMatchers.anyOf;
+import static org.hamcrest.CoreMatchers.not;
+import static org.hamcrest.CoreMatchers.notNullValue;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.hasItemInArray;
+import static org.hamcrest.Matchers.is;
+import static org.hamcrest.collection.IsMapContaining.hasEntry;
+import static org.hamcrest.collection.IsMapContaining.hasKey;
+import static org.junit.Assume.assumeThat;
+
+import java.util.Collections;
+
+import org.hamcrest.Matchers;
+
+import org.apache.qpid.server.protocol.v1_0.type.Symbol;
+import org.apache.qpid.server.protocol.v1_0.type.extensions.soleconn.SoleConnectionDetectionPolicy;
+import org.apache.qpid.server.protocol.v1_0.type.transport.AmqpError;
+import org.apache.qpid.server.protocol.v1_0.type.transport.Close;
+import org.apache.qpid.server.protocol.v1_0.type.transport.Open;
+
+class SoleConnectionAsserts
+{
+    private static final Symbol CONNECTION_ESTABLISHMENT_FAILED = Symbol.valueOf("amqp:connection-establishment-failed");
+    private static final Symbol SOLE_CONNECTION_ENFORCEMENT = Symbol.valueOf("sole-connection-enforcement");
+    private static final Symbol INVALID_FIELD = Symbol.valueOf("invalid-field");
+    private static final Symbol CONTAINER_ID = Symbol.valueOf("container-id");
+
+    private SoleConnectionAsserts()
+    {
+    }
+
+    static void assumeSoleConnectionCapability(Open open)
+    {
+        assumeThat(open.getOfferedCapabilities(), is(notNullValue()));
+        assumeThat(open.getOfferedCapabilities(), hasItemInArray(SOLE_CONNECTION_FOR_CONTAINER));
+    }
+
+    static void assertSoleConnectionCapability(Open open)
+    {
+        assertThat(open.getOfferedCapabilities(), is(notNullValue()));
+        assertThat(open.getOfferedCapabilities(), hasItemInArray(SOLE_CONNECTION_FOR_CONTAINER));
+    }
+
+    static void assumeEnforcementPolicyCloseExisting(Open open)
+    {
+        assumeThat(open.getProperties(), is(notNullValue()));
+        assumeThat(open.getProperties(), hasEntry(SOLE_CONNECTION_ENFORCEMENT_POLICY, CLOSE_EXISTING.getValue()));
+    }
+
+    static void assertEnforcementPolicyCloseExisting(Open open)
+    {
+        assertThat(open.getProperties(), is(notNullValue()));
+        assertThat(open.getProperties(), hasEntry(SOLE_CONNECTION_ENFORCEMENT_POLICY, CLOSE_EXISTING.getValue()));
+    }
+
+    static void assumeEnforcementPolicyRefuse(Open open)
+    {
+        assumeThat(open.getProperties(), is(notNullValue()));
+        assumeThat(open.getProperties(),
+                   anyOf(hasEntry(SOLE_CONNECTION_ENFORCEMENT_POLICY, REFUSE_CONNECTION.getValue()),
+                         is(not(Matchers.hasKey(SOLE_CONNECTION_ENFORCEMENT_POLICY)))));
+    }
+
+    static void assumeDetectionPolicyStrong(Open open)
+    {
+        assumeThat(open.getProperties(), is(notNullValue()));
+        assumeThat(open.getProperties(),
+                   anyOf(hasEntry(SOLE_CONNECTION_DETECTION_POLICY, SoleConnectionDetectionPolicy.STRONG.getValue()),
+                         is(not(hasKey(SOLE_CONNECTION_DETECTION_POLICY)))));
+    }
+
+    static void assertConnectionEstablishmentFailed(final Open open)
+    {
+        assertThat(open.getProperties(), is(notNullValue()));
+        assertThat(open.getProperties(), Matchers.hasKey(CONNECTION_ESTABLISHMENT_FAILED));
+        assertThat(open.getProperties(), hasEntry(CONNECTION_ESTABLISHMENT_FAILED, true));
+    }
+
+    static void assumeConnectionEstablishmentFailed(final Open open)
+    {
+        assumeThat(open.getProperties(), is(notNullValue()));
+        assumeThat(open.getProperties(), Matchers.hasKey(CONNECTION_ESTABLISHMENT_FAILED));
+        assertThat(open.getProperties(), hasEntry(CONNECTION_ESTABLISHMENT_FAILED, true));
+    }
+
+
+    static void assertResourceLocked(final Close close)
+    {
+        assertThat(close.getError(), is(notNullValue()));
+        assertThat(close.getError().getCondition(), is(equalTo(AmqpError.RESOURCE_LOCKED)));
+        assertThat(close.getError().getInfo(), is(equalTo(Collections.singletonMap(SOLE_CONNECTION_ENFORCEMENT, true))));
+    }
+
+
+    static void assertInvalidContainerId(final Close close)
+    {
+        assertThat(close.getError(), is(notNullValue()));
+        assertThat(close.getError().getCondition(), is(equalTo(AmqpError.INVALID_FIELD)));
+        assertThat(close.getError().getInfo(), is(equalTo(Collections.singletonMap(INVALID_FIELD, CONTAINER_ID))));
+    }
+}


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


[qpid-broker-j] 11/21: QPID-8350: [Tests][AMQP 1.0] Improve begin tests

Posted by or...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

orudyy pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/qpid-broker-j.git

commit c3eb4fd8c94cf86a2eacbf06cf480fc3d4763034
Author: Alex Rudyy <or...@apache.org>
AuthorDate: Mon Aug 19 14:26:04 2019 +0100

    QPID-8350: [Tests][AMQP 1.0] Improve begin tests
---
 .../protocol/v1_0/transport/session/BeginTest.java | 33 ++++++++++++++--------
 1 file changed, 22 insertions(+), 11 deletions(-)

diff --git a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/session/BeginTest.java b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/session/BeginTest.java
index 24cb435..f25d275 100644
--- a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/session/BeginTest.java
+++ b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/session/BeginTest.java
@@ -23,7 +23,9 @@ import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.equalTo;
 import static org.hamcrest.Matchers.instanceOf;
 import static org.hamcrest.Matchers.is;
+import static org.hamcrest.Matchers.lessThan;
 import static org.hamcrest.Matchers.notNullValue;
+import static org.junit.Assume.assumeThat;
 
 import java.net.InetSocketAddress;
 
@@ -46,7 +48,7 @@ public class BeginTest extends BrokerAdminUsingTestBase
 {
     @Test
     @SpecificationTest(section = "1.3.4",
-            description = "Begin without mandatory fields should result in a decoding error.")
+            description = "mandatory [...] a non null value for the field is always encoded.")
     public void emptyBegin() throws Exception
     {
         final InetSocketAddress addr = getBrokerAdmin().getBrokerAddress(BrokerAdmin.PortType.ANONYMOUS_AMQP);
@@ -60,7 +62,7 @@ public class BeginTest extends BrokerAdminUsingTestBase
                                            .beginOutgoingWindow(null)
                                            .begin().consumeResponse()
                                            .getLatestResponse(Close.class);
-            assertThat(responseClose.getError(), is(notNullValue()));
+            assumeThat(responseClose.getError(), is(notNullValue()));
             assertThat(responseClose.getError().getCondition(), equalTo(AmqpError.DECODE_ERROR));
         }
     }
@@ -93,20 +95,29 @@ public class BeginTest extends BrokerAdminUsingTestBase
 
     @Test
     @SpecificationTest(section = "2.7.1",
-                       description = "A peer that receives a channel number outside the supported range MUST close "
-                                     + "the connection with the framing-error error-code..")
+            description = "A peer MUST not use channel numbers outside the range that its partner can handle."
+                          + "A peer that receives a channel number outside the supported range MUST close "
+                          + "the connection with the framing-error error-code..")
     public void channelMax() throws Exception
     {
         final InetSocketAddress addr = getBrokerAdmin().getBrokerAddress(BrokerAdmin.PortType.ANONYMOUS_AMQP);
         try (FrameTransport transport = new FrameTransport(addr).connect())
         {
-            Close responseClose = transport.newInteraction()
-                                           .negotiateProtocol().consumeResponse()
-                                           .openChannelMax(UnsignedShort.valueOf(5))
-                                           .open().consumeResponse(Open.class)
-                                           .sessionChannel(UnsignedShort.valueOf(6))
-                                           .begin().consumeResponse()
-                                           .getLatestResponse(Close.class);
+            final Interaction interaction = transport.newInteraction();
+            final int ourChannelMax = 5;
+            final Open responseOpen = interaction.negotiateProtocol().consumeResponse()
+                                                 .openChannelMax(UnsignedShort.valueOf(ourChannelMax))
+                                                 .open().consumeResponse(Open.class).getLatestResponse(Open.class);
+
+            final UnsignedShort remoteChannelMax = responseOpen.getChannelMax();
+            assumeThat(remoteChannelMax, is(notNullValue()));
+            assumeThat(remoteChannelMax.intValue(), is(lessThan(UnsignedShort.MAX_VALUE.intValue())));
+
+            final int illegalSessionChannel =  remoteChannelMax.intValue() + 1;
+
+            final Close responseClose = interaction.sessionChannel(UnsignedShort.valueOf(illegalSessionChannel))
+                                                   .begin().consumeResponse()
+                                                   .getLatestResponse(Close.class);
             assertThat(responseClose.getError(), is(notNullValue()));
             assertThat(responseClose.getError().getCondition(), equalTo(ConnectionError.FRAMING_ERROR));
         }


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


[qpid-broker-j] 18/21: QPID-8350: [Tests][AMQP 1.0] Mark entire FilterTest as broker-j specific

Posted by or...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

orudyy pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/qpid-broker-j.git

commit a56812fc0a0bd88a09da6a8a4799c7db05d4fa58
Author: Alex Rudyy <or...@apache.org>
AuthorDate: Wed Aug 21 17:12:02 2019 +0100

    QPID-8350: [Tests][AMQP 1.0] Mark entire FilterTest as broker-j specific
---
 .../apache/qpid/tests/protocol/v1_0/extensions/filter/FilterTest.java   | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/extensions/filter/FilterTest.java b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/extensions/filter/FilterTest.java
index c359e40..527b20c 100644
--- a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/extensions/filter/FilterTest.java
+++ b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/extensions/filter/FilterTest.java
@@ -64,6 +64,7 @@ import org.apache.qpid.tests.utils.BrokerAdminUsingTestBase;
 import org.apache.qpid.tests.utils.BrokerSpecific;
 import org.apache.qpid.tests.utils.ConfigItem;
 
+@BrokerSpecific(kind = KIND_BROKER_J)
 @ConfigItem(name = "qpid.tests.mms.messagestore.persistence", value = "false", jvm = true)
 public class FilterTest extends BrokerAdminUsingTestBase
 {
@@ -78,7 +79,6 @@ public class FilterTest extends BrokerAdminUsingTestBase
     }
 
     @Test
-    @BrokerSpecific(kind = KIND_BROKER_J)
     @SpecificationTest(section = "3.5.1", description = "A source can restrict the messages transferred from a source by specifying a filter.")
     public void selectorFilter() throws Exception
     {


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