QPID-8350: [Tests][AMQP 1.0] Add more assertions and validation into sole connection tests
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.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 @@
                                          .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 @@
                                                                  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 @@
                             .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 @@
                         .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 @@
                             .openProperties(Collections.singletonMap(SOLE_CONNECTION_ENFORCEMENT_POLICY,
                                                                      CLOSE_EXISTING))
                             .open()
-                            .sync();
+                            .consumeResponse(Open.class);
 
-                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()}));
-                }
+                final Open responseOpen2 = interaction2.getLatestResponse(Open.class);
+                assumeSoleConnectionCapability(responseOpen2);
+                assumeEnforcementPolicyCloseExisting(responseOpen2);
+                assumeDetectionPolicyStrong(responseOpen2);
+                assertResourceLocked(interaction1.consumeResponse().getLatestResponse(Close.class));
             }
         }
     }
@@ -180,12 +172,10 @@
                                                     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 @@
                             .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.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.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 @@
                                                                  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 @@
                                                                  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.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 @@
                                                  .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 @@
                                                                  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 @@
                                                                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 @@
                         .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 @@
                                                                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 @@
                                                   .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 @@
                                                        .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 @@
                         .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 @@
                                                        .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))));
+    }
+}