You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by lq...@apache.org on 2017/08/23 15:36:47 UTC

[2/4] qpid-broker-j git commit: QPID-7896: [Java System Tests] Create system tests testing end-to-end message conversion

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/a7e4a716/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transaction/TransactionalTransferTest.java
----------------------------------------------------------------------
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 6fe0b55..64094aa 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
@@ -46,15 +46,15 @@ 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.v1_0.BrokerAdmin;
+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.protocol.v1_0.InteractionTransactionalState;
-import org.apache.qpid.tests.protocol.v1_0.ProtocolTestBase;
+import org.apache.qpid.tests.utils.BrokerAdminUsingTestBase;
 import org.apache.qpid.tests.protocol.v1_0.SpecificationTest;
 import org.apache.qpid.tests.protocol.v1_0.Utils;
 
-public class TransactionalTransferTest extends ProtocolTestBase
+public class TransactionalTransferTest extends BrokerAdminUsingTestBase
 {
     private static final String TEST_MESSAGE_CONTENT = "testMessageContent";
     private InetSocketAddress _brokerAddress;

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/a7e4a716/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/ProtocolHeaderTest.java
----------------------------------------------------------------------
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 3b8f03b..619e5d9 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
@@ -27,13 +27,12 @@ import java.nio.charset.StandardCharsets;
 
 import org.junit.Test;
 
-import org.apache.qpid.tests.protocol.v1_0.BrokerAdmin;
+import org.apache.qpid.tests.utils.BrokerAdmin;
 import org.apache.qpid.tests.protocol.v1_0.FrameTransport;
-import org.apache.qpid.tests.protocol.v1_0.HeaderResponse;
-import org.apache.qpid.tests.protocol.v1_0.ProtocolTestBase;
+import org.apache.qpid.tests.utils.BrokerAdminUsingTestBase;
 import org.apache.qpid.tests.protocol.v1_0.SpecificationTest;
 
-public class ProtocolHeaderTest extends ProtocolTestBase
+public class ProtocolHeaderTest extends BrokerAdminUsingTestBase
 {
     @Test
     @SpecificationTest(section = "2.2",

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/a7e4a716/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/connection/OpenTest.java
----------------------------------------------------------------------
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 56d9eb1..b3f57c1 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
@@ -38,14 +38,14 @@ 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.Open;
-import org.apache.qpid.tests.protocol.v1_0.BrokerAdmin;
+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.protocol.v1_0.ProtocolTestBase;
+import org.apache.qpid.tests.utils.BrokerAdminUsingTestBase;
 import org.apache.qpid.tests.protocol.v1_0.SpecificationTest;
 
 
-public class OpenTest extends ProtocolTestBase
+public class OpenTest extends BrokerAdminUsingTestBase
 {
     @Test
     @SpecificationTest(section = "1.3.4",

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/a7e4a716/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/link/AttachTest.java
----------------------------------------------------------------------
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 eb17d2b..0e33f3a 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
@@ -38,12 +38,12 @@ import org.apache.qpid.server.protocol.v1_0.type.transport.Begin;
 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.server.protocol.v1_0.type.transport.Role;
-import org.apache.qpid.tests.protocol.v1_0.BrokerAdmin;
+import org.apache.qpid.tests.utils.BrokerAdmin;
 import org.apache.qpid.tests.protocol.v1_0.FrameTransport;
-import org.apache.qpid.tests.protocol.v1_0.ProtocolTestBase;
+import org.apache.qpid.tests.utils.BrokerAdminUsingTestBase;
 import org.apache.qpid.tests.protocol.v1_0.SpecificationTest;
 
-public class AttachTest extends ProtocolTestBase
+public class AttachTest extends BrokerAdminUsingTestBase
 {
     @Test
     @SpecificationTest(section = "1.3.4",

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/a7e4a716/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/link/FlowTest.java
----------------------------------------------------------------------
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 52b5011..a5537f0 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
@@ -39,13 +39,13 @@ import org.apache.qpid.server.protocol.v1_0.type.transport.Close;
 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.v1_0.BrokerAdmin;
+import org.apache.qpid.tests.utils.BrokerAdmin;
 import org.apache.qpid.tests.protocol.v1_0.FrameTransport;
-import org.apache.qpid.tests.protocol.v1_0.ProtocolTestBase;
+import org.apache.qpid.tests.utils.BrokerAdminUsingTestBase;
 import org.apache.qpid.tests.protocol.v1_0.SpecificationTest;
 import org.apache.qpid.tests.protocol.v1_0.Utils;
 
-public class FlowTest extends ProtocolTestBase
+public class FlowTest extends BrokerAdminUsingTestBase
 {
     @Test
     @SpecificationTest(section = "1.3.4",

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/a7e4a716/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/link/ResumeDeliveriesTest.java
----------------------------------------------------------------------
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 6124ae9..5769255 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
@@ -67,15 +67,15 @@ 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.v1_0.BrokerAdmin;
+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.protocol.v1_0.ProtocolTestBase;
+import org.apache.qpid.tests.utils.BrokerAdminUsingTestBase;
 import org.apache.qpid.tests.protocol.v1_0.Response;
 import org.apache.qpid.tests.protocol.v1_0.SpecificationTest;
 import org.apache.qpid.tests.protocol.v1_0.Utils;
 
-public class ResumeDeliveriesTest extends ProtocolTestBase
+public class ResumeDeliveriesTest extends BrokerAdminUsingTestBase
 {
     private static final int MIN_MAX_FRAME_SIZE = 512;
     private static final String TEST_MESSAGE_CONTENT = "foo";

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/a7e4a716/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/security/sasl/SaslTest.java
----------------------------------------------------------------------
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 bc89d96..cf12b05 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
@@ -45,13 +45,13 @@ import org.apache.qpid.server.protocol.v1_0.type.security.SaslChallenge;
 import org.apache.qpid.server.protocol.v1_0.type.security.SaslCode;
 import org.apache.qpid.server.protocol.v1_0.type.security.SaslMechanisms;
 import org.apache.qpid.server.protocol.v1_0.type.security.SaslOutcome;
-import org.apache.qpid.tests.protocol.v1_0.BrokerAdmin;
+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.protocol.v1_0.ProtocolTestBase;
+import org.apache.qpid.tests.utils.BrokerAdminUsingTestBase;
 import org.apache.qpid.tests.protocol.v1_0.SpecificationTest;
 
-public class SaslTest extends ProtocolTestBase
+public class SaslTest extends BrokerAdminUsingTestBase
 {
     private static final Symbol CRAM_MD5 = Symbol.getSymbol("CRAM-MD5");
     private static final Symbol PLAIN = Symbol.getSymbol("PLAIN");

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/a7e4a716/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/session/BeginTest.java
----------------------------------------------------------------------
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 e3f83f6..352fd19 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
@@ -36,12 +36,12 @@ import org.apache.qpid.server.protocol.v1_0.type.transport.Begin;
 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.Open;
-import org.apache.qpid.tests.protocol.v1_0.BrokerAdmin;
+import org.apache.qpid.tests.utils.BrokerAdmin;
 import org.apache.qpid.tests.protocol.v1_0.FrameTransport;
-import org.apache.qpid.tests.protocol.v1_0.ProtocolTestBase;
+import org.apache.qpid.tests.utils.BrokerAdminUsingTestBase;
 import org.apache.qpid.tests.protocol.v1_0.SpecificationTest;
 
-public class BeginTest extends ProtocolTestBase
+public class BeginTest extends BrokerAdminUsingTestBase
 {
     @Test
     @SpecificationTest(section = "1.3.4",

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/a7e4a716/systests/systests-utils/pom.xml
----------------------------------------------------------------------
diff --git a/systests/systests-utils/pom.xml b/systests/systests-utils/pom.xml
new file mode 100644
index 0000000..1e42dd4
--- /dev/null
+++ b/systests/systests-utils/pom.xml
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ 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.
+  ~
+  -->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <groupId>org.apache.qpid</groupId>
+        <artifactId>qpid-systests-parent</artifactId>
+        <version>7.0.0-SNAPSHOT</version>
+        <relativePath>../../qpid-systests-parent/pom.xml</relativePath>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>qpid-systests-utils</artifactId>
+    <name>Apache Qpid System Test Utils</name>
+    <description>Utility classes for Apache Qpid system tests</description>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.qpid</groupId>
+            <artifactId>qpid-broker-core</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.qpid</groupId>
+            <artifactId>qpid-broker-codegen</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.qpid</groupId>
+            <artifactId>qpid-test-utils</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.qpid</groupId>
+            <artifactId>qpid-broker-plugins-logging-logback</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.qpid</groupId>
+            <artifactId>qpid-broker-plugins-memory-store</artifactId>
+        </dependency>
+
+
+        <dependency>
+            <groupId>com.google.guava</groupId>
+            <artifactId>guava</artifactId>
+        </dependency>
+    </dependencies>
+
+</project>

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/a7e4a716/systests/systests-utils/src/main/java/org/apache/qpid/tests/utils/BrokerAdmin.java
----------------------------------------------------------------------
diff --git a/systests/systests-utils/src/main/java/org/apache/qpid/tests/utils/BrokerAdmin.java b/systests/systests-utils/src/main/java/org/apache/qpid/tests/utils/BrokerAdmin.java
new file mode 100644
index 0000000..6875460
--- /dev/null
+++ b/systests/systests-utils/src/main/java/org/apache/qpid/tests/utils/BrokerAdmin.java
@@ -0,0 +1,66 @@
+/*
+ * 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 java.lang.reflect.Method;
+import java.net.InetSocketAddress;
+
+import com.google.common.util.concurrent.ListenableFuture;
+
+import org.apache.qpid.server.plugin.Pluggable;
+
+public interface BrokerAdmin extends Pluggable
+{
+    String TEST_QUEUE_NAME = "testQueue";
+    Long RESTART_TIMEOUT = Long.getLong("brokerAdmin.restart_timeout", 10000);
+
+    void beforeTestClass(final Class testClass);
+    void beforeTestMethod(final Class testClass, final Method method);
+    void afterTestMethod(final Class testClass, final Method method);
+    void afterTestClass(final Class testClass);
+
+    InetSocketAddress getBrokerAddress(PortType portType);
+
+    void createQueue(String queueName);
+    void deleteQueue(String queueName);
+    void putMessageOnQueue(String queueName, String... messages);
+    int getQueueDepthMessages(String testQueueName);
+
+    boolean supportsRestart();
+    ListenableFuture<Void> restart();
+
+    boolean isSASLSupported();
+    boolean isSASLMechanismSupported(String mechanismName);
+    boolean isWebSocketSupported();
+    boolean isQueueDepthSupported();
+
+    String getValidUsername();
+    String getValidPassword();
+
+
+
+    enum PortType
+    {
+        ANONYMOUS_AMQP,
+        ANONYMOUS_AMQPWS,
+        AMQP
+    }
+}

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/a7e4a716/systests/systests-utils/src/main/java/org/apache/qpid/tests/utils/BrokerAdminFactory.java
----------------------------------------------------------------------
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
new file mode 100644
index 0000000..64d4eff
--- /dev/null
+++ b/systests/systests-utils/src/main/java/org/apache/qpid/tests/utils/BrokerAdminFactory.java
@@ -0,0 +1,39 @@
+/*
+ * 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 java.util.Map;
+
+import org.apache.qpid.server.plugin.QpidServiceLoader;
+
+public class BrokerAdminFactory
+{
+    BrokerAdmin createInstance(String type)
+    {
+        Map<String, BrokerAdmin> adminFacades = new QpidServiceLoader().getInstancesByType(BrokerAdmin.class);
+        BrokerAdmin brokerAdmin = adminFacades.get(type);
+        if (brokerAdmin == null)
+        {
+            throw new RuntimeException(String.format("Could not find BrokerAdmin implementation of type '%s'", type));
+        }
+        return brokerAdmin;
+    }
+}

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/a7e4a716/systests/systests-utils/src/main/java/org/apache/qpid/tests/utils/BrokerAdminUsingTestBase.java
----------------------------------------------------------------------
diff --git a/systests/systests-utils/src/main/java/org/apache/qpid/tests/utils/BrokerAdminUsingTestBase.java b/systests/systests-utils/src/main/java/org/apache/qpid/tests/utils/BrokerAdminUsingTestBase.java
new file mode 100644
index 0000000..73149af
--- /dev/null
+++ b/systests/systests-utils/src/main/java/org/apache/qpid/tests/utils/BrokerAdminUsingTestBase.java
@@ -0,0 +1,43 @@
+/*
+ * 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.junit.runner.RunWith;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@RunWith(QpidTestRunner.class)
+public abstract class BrokerAdminUsingTestBase
+{
+    private static final Logger LOGGER = LoggerFactory.getLogger(BrokerAdminUsingTestBase.class);
+
+    private BrokerAdmin _brokerAdmin;
+
+    public void init(final BrokerAdmin brokerAdmin)
+    {
+        _brokerAdmin = brokerAdmin;
+    }
+
+    public BrokerAdmin getBrokerAdmin()
+    {
+        return _brokerAdmin;
+    }
+}

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/a7e4a716/systests/systests-utils/src/main/java/org/apache/qpid/tests/utils/EmbeddedBrokerPerClassAdminImpl.java
----------------------------------------------------------------------
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
new file mode 100644
index 0000000..68f0ab4
--- /dev/null
+++ b/systests/systests-utils/src/main/java/org/apache/qpid/tests/utils/EmbeddedBrokerPerClassAdminImpl.java
@@ -0,0 +1,508 @@
+/*
+ * 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 java.io.File;
+import java.lang.reflect.Method;
+import java.net.InetSocketAddress;
+import java.nio.file.Files;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import ch.qos.logback.classic.LoggerContext;
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.apache.qpid.server.SystemLauncher;
+import org.apache.qpid.server.SystemLauncherListener;
+import org.apache.qpid.server.logging.logback.LogbackLoggingSystemLauncherListener;
+import org.apache.qpid.server.model.ConfiguredObject;
+import org.apache.qpid.server.model.Container;
+import org.apache.qpid.server.model.Exchange;
+import org.apache.qpid.server.model.IllegalStateTransitionException;
+import org.apache.qpid.server.model.ManageableMessage;
+import org.apache.qpid.server.model.NotFoundException;
+import org.apache.qpid.server.model.Port;
+import org.apache.qpid.server.model.Queue;
+import org.apache.qpid.server.model.SystemConfig;
+import org.apache.qpid.server.model.VirtualHostNode;
+import org.apache.qpid.server.plugin.PluggableService;
+import org.apache.qpid.server.store.MemoryConfigurationStore;
+import org.apache.qpid.server.util.FileUtils;
+import org.apache.qpid.server.virtualhost.QueueManagingVirtualHost;
+import org.apache.qpid.server.virtualhostnode.JsonVirtualHostNode;
+import org.apache.qpid.test.utils.LogbackPropertyValueDiscriminator;
+
+@SuppressWarnings("unused")
+@PluggableService
+public class EmbeddedBrokerPerClassAdminImpl implements BrokerAdmin
+{
+    private static final Logger LOGGER = LoggerFactory.getLogger(EmbeddedBrokerPerClassAdminImpl.class);
+    private final Map<String, Integer> _ports = new HashMap<>();
+    private SystemLauncher _systemLauncher;
+    private Container<?> _broker;
+    private VirtualHostNode<?> _currentVirtualHostNode;
+    private String _currentWorkDirectory;
+    private boolean _isPersistentStore;
+
+    @Override
+    public void beforeTestClass(final Class testClass)
+    {
+        setClassQualifiedTestName(testClass.getName());
+        LOGGER.info("========================= starting broker for test class : " + testClass.getSimpleName());
+        try
+        {
+            String timestamp = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date(System.currentTimeMillis()));
+            _currentWorkDirectory = Files.createTempDirectory(String.format("qpid-work-%s-%s-", timestamp, testClass.getSimpleName())).toString();
+
+            Map<String,String> context = new HashMap<>();
+            context.put("qpid.work_dir", _currentWorkDirectory);
+            context.put("qpid.port.protocol_handshake_timeout", "1000000");
+
+            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);
+
+            if (Thread.getDefaultUncaughtExceptionHandler() == null)
+            {
+                Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler());
+            }
+
+            LOGGER.info("Starting internal broker (same JVM)");
+
+            List<SystemLauncherListener> systemLauncherListeners = new ArrayList<>();
+            systemLauncherListeners.add(new LogbackLoggingSystemLauncherListener());
+            systemLauncherListeners.add(new ShutdownLoggingSystemLauncherListener());
+            systemLauncherListeners.add(new PortExtractingLauncherListener());
+            _systemLauncher = new SystemLauncher(systemLauncherListeners.toArray(new SystemLauncherListener[systemLauncherListeners.size()]));
+
+            _systemLauncher.startup(systemConfigAttributes);
+        }
+        catch (Exception e)
+        {
+            throw new RuntimeException("Failed to start broker for test class", e);
+        }
+    }
+
+    @Override
+    public void beforeTestMethod(final Class testClass, final Method method)
+    {
+        LOGGER.info("========================= prepare test environment for test : " + testClass.getSimpleName() + "#" + method.getName());
+
+        final String virtualHostNodeName = testClass.getSimpleName() + "_" + method.getName();
+        final String storeType = System.getProperty("virtualhostnode.type");
+        _isPersistentStore = !"Memory".equals(storeType);
+
+        String storeDir = null;
+        if (System.getProperty("profile", "").startsWith("java-dby-mem"))
+        {
+            storeDir = ":memory:";
+        }
+        else if (!MemoryConfigurationStore.TYPE.equals(storeType))
+        {
+            storeDir = "${qpid.work_dir}" + File.separator + virtualHostNodeName;
+        }
+
+        String blueprint = System.getProperty("virtualhostnode.context.blueprint");
+
+        Map<String, Object> attributes = new HashMap<>();
+        attributes.put(VirtualHostNode.NAME, virtualHostNodeName);
+        attributes.put(VirtualHostNode.TYPE, storeType);
+        attributes.put(VirtualHostNode.CONTEXT, Collections.singletonMap("virtualhostBlueprint", blueprint));
+        attributes.put(VirtualHostNode.DEFAULT_VIRTUAL_HOST_NODE, true);
+        attributes.put(VirtualHostNode.VIRTUALHOST_INITIAL_CONFIGURATION, blueprint);
+        if (storeDir != null)
+        {
+            attributes.put(JsonVirtualHostNode.STORE_PATH, storeDir);
+        }
+
+        _currentVirtualHostNode = _broker.createChild(VirtualHostNode.class, attributes);
+
+        LOGGER.info("========================= executing test : " + testClass.getSimpleName() + "#" + method.getName());
+        setClassQualifiedTestName(testClass.getName() + "." + method.getName());
+        LOGGER.info("========================= start executing test : " + testClass.getSimpleName() + "#" + method.getName());
+    }
+
+    @Override
+    public void afterTestMethod(final Class testClass, final Method method)
+    {
+        LOGGER.info("========================= stop executing test : " + testClass.getSimpleName() + "#" + method.getName());
+        setClassQualifiedTestName(testClass.getName());
+        LOGGER.info("========================= cleaning up test environment for test : " + testClass.getSimpleName() + "#" + method.getName());
+        if (Boolean.getBoolean("broker.clean.between.tests"))
+        {
+            _currentVirtualHostNode.delete();
+        }
+        else
+        {
+            _currentVirtualHostNode.setAttributes(Collections.singletonMap(VirtualHostNode.DEFAULT_VIRTUAL_HOST_NODE,
+                                                                           false));
+        }
+        setClassQualifiedTestName(testClass.getName());
+        LOGGER.info("========================= cleaning done for test : " + testClass.getSimpleName() + "#" + method.getName());
+    }
+
+    @Override
+    public void afterTestClass(final Class testClass)
+    {
+        LOGGER.info("========================= stopping broker for test class: " + testClass.getSimpleName());
+        _systemLauncher.shutdown();
+        _ports.clear();
+        if (Boolean.getBoolean("broker.clean.between.tests"))
+        {
+            FileUtils.delete(new File(_currentWorkDirectory), true);
+        }
+        LOGGER.info("========================= stopping broker done for test class : " + testClass.getSimpleName());
+        setClassQualifiedTestName(null);
+    }
+
+    @Override
+    public InetSocketAddress getBrokerAddress(final PortType portType)
+    {
+        Integer port = _ports.get(portType.name());
+        if (port == null)
+        {
+            throw new IllegalStateException(String.format("Could not find port with name '%s' on the Broker", portType.name()));
+        }
+        return new InetSocketAddress(port);
+    }
+
+    @Override
+    public void createQueue(final String queueName)
+    {
+        final Map<String, Object> attributes = new HashMap<>();
+        attributes.put(Queue.NAME, queueName);
+        attributes.put(Queue.TYPE, "standard");
+        final Queue queue = _currentVirtualHostNode.getVirtualHost().createChild(Queue.class, attributes);
+        final Exchange exchange = _currentVirtualHostNode.getVirtualHost().getChildByName(Exchange.class, "amq.direct");
+        exchange.bind(queueName, queueName, Collections.emptyMap(), false);
+    }
+
+    @Override
+    public void deleteQueue(final String queueName)
+    {
+        getQueue(queueName).delete();
+    }
+
+    @Override
+    public void putMessageOnQueue(final String queueName, final String... messages)
+    {
+        for (String message : messages)
+        {
+            ((QueueManagingVirtualHost<?>) _currentVirtualHostNode.getVirtualHost()).publishMessage(new ManageableMessage()
+            {
+                @Override
+                public String getAddress()
+                {
+                    return queueName;
+                }
+
+                @Override
+                public boolean isPersistent()
+                {
+                    return false;
+                }
+
+                @Override
+                public Date getExpiration()
+                {
+                    return null;
+                }
+
+                @Override
+                public String getCorrelationId()
+                {
+                    return null;
+                }
+
+                @Override
+                public String getAppId()
+                {
+                    return null;
+                }
+
+                @Override
+                public String getMessageId()
+                {
+                    return null;
+                }
+
+                @Override
+                public String getMimeType()
+                {
+                    return "text/plain";
+                }
+
+                @Override
+                public String getEncoding()
+                {
+                    return null;
+                }
+
+                @Override
+                public int getPriority()
+                {
+                    return 0;
+                }
+
+                @Override
+                public Date getNotValidBefore()
+                {
+                    return null;
+                }
+
+                @Override
+                public String getReplyTo()
+                {
+                    return null;
+                }
+
+                @Override
+                public Map<String, Object> getHeaders()
+                {
+                    return null;
+                }
+
+                @Override
+                public Object getContent()
+                {
+                    return message;
+                }
+
+                @Override
+                public String getContentTransferEncoding()
+                {
+                    return null;
+                }
+            });
+        }
+
+    }
+
+    @Override
+    public int getQueueDepthMessages(final String testQueueName)
+    {
+        Queue queue = _currentVirtualHostNode.getVirtualHost().getChildByName(Queue.class, testQueueName);
+        return queue.getQueueDepthMessages();
+    }
+
+    @Override
+    public boolean supportsRestart()
+    {
+        return _isPersistentStore;
+    }
+
+    @Override
+    public ListenableFuture<Void> restart()
+    {
+        try
+        {
+            LOGGER.info("Stopping VirtualHostNode for restart");
+            _currentVirtualHostNode.stop();
+            LOGGER.info("Starting VirtualHostNode for restart");
+            _currentVirtualHostNode.start();
+            LOGGER.info("Restarting VirtualHostNode completed");
+        }
+        catch (Exception e)
+        {
+            return Futures.immediateFailedFuture(e);
+        }
+        return Futures.immediateFuture(null);
+    }
+
+    @Override
+    public boolean isSASLSupported()
+    {
+        return true;
+    }
+
+    @Override
+    public boolean isSASLMechanismSupported(final String mechanismName)
+    {
+        return true;
+    }
+
+    @Override
+    public boolean isWebSocketSupported()
+    {
+        return true;
+    }
+
+    @Override
+    public boolean isQueueDepthSupported()
+    {
+        return true;
+    }
+
+    @Override
+    public String getValidUsername()
+    {
+        return "guest";
+    }
+
+    @Override
+    public String getValidPassword()
+    {
+        return "guest";
+    }
+
+    @Override
+    public String getType()
+    {
+        return "EMBEDDED_BROKER_PER_CLASS";
+    }
+
+    private Queue getQueue(final String queueName)
+    {
+        Collection<Queue> queues = _currentVirtualHostNode.getVirtualHost().getChildren(Queue.class);
+        for (Queue queue : queues)
+        {
+            if (queue.getName().equals(queueName))
+            {
+                return queue;
+            }
+        }
+        throw new NotFoundException(String.format("Queue '%s' not found", queueName));
+    }
+
+    private void setClassQualifiedTestName(final String name)
+    {
+        final LoggerContext loggerContext = ((ch.qos.logback.classic.Logger) LOGGER).getLoggerContext();
+        loggerContext.putProperty(LogbackPropertyValueDiscriminator.CLASS_QUALIFIED_TEST_NAME, name);
+    }
+
+    private class PortExtractingLauncherListener implements SystemLauncherListener
+    {
+        private SystemConfig<?> _systemConfig;
+
+        @Override
+        public void beforeStartup()
+        {
+
+        }
+
+        @Override
+        public void errorOnStartup(final RuntimeException e)
+        {
+
+        }
+
+        @Override
+        public void afterStartup()
+        {
+
+            if (_systemConfig == null)
+            {
+                throw new IllegalStateException("System config is required");
+            }
+
+            _broker = _systemConfig.getContainer();
+            Collection<Port> ports = _broker.getChildren(Port.class);
+            for (Port port : ports)
+            {
+                _ports.put(port.getName(), port.getBoundPort());
+            }
+        }
+
+        @Override
+        public void onContainerResolve(final SystemConfig<?> systemConfig)
+        {
+            _systemConfig = systemConfig;
+        }
+
+        @Override
+        public void onContainerClose(final SystemConfig<?> systemConfig)
+        {
+
+        }
+
+        @Override
+        public void onShutdown(final int exitCode)
+        {
+
+        }
+
+        @Override
+        public void exceptionOnShutdown(final Exception e)
+        {
+
+        }
+    }
+
+
+    private static class UncaughtExceptionHandler implements Thread.UncaughtExceptionHandler
+    {
+        private final AtomicInteger _count = new AtomicInteger(0);
+
+        @Override
+        public void uncaughtException(final Thread t, final Throwable e)
+        {
+            System.err.print("Thread terminated due to uncaught exception");
+            e.printStackTrace();
+
+            LOGGER.error("Uncaught exception from thread {}", t.getName(), e);
+            _count.getAndIncrement();
+        }
+
+        public int getAndResetCount()
+        {
+            int count;
+            do
+            {
+                count = _count.get();
+            }
+            while (!_count.compareAndSet(count, 0));
+            return count;
+        }
+    }
+
+    private class ShutdownLoggingSystemLauncherListener extends SystemLauncherListener.DefaultSystemLauncherListener
+    {
+        @Override
+        public void onShutdown(final int exitCode)
+        {
+            _systemLauncher = null;
+        }
+
+        @Override
+        public void exceptionOnShutdown(final Exception e)
+        {
+            if (e instanceof IllegalStateException
+                || e instanceof IllegalStateTransitionException)
+            {
+                System.out.println(
+                        "IllegalStateException occurred on broker shutdown in test ");
+            }
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/a7e4a716/systests/systests-utils/src/main/java/org/apache/qpid/tests/utils/ExternalQpidBrokerAdminImpl.java
----------------------------------------------------------------------
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
new file mode 100644
index 0000000..e935067
--- /dev/null
+++ b/systests/systests-utils/src/main/java/org/apache/qpid/tests/utils/ExternalQpidBrokerAdminImpl.java
@@ -0,0 +1,157 @@
+/*
+ * 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 java.lang.reflect.Method;
+import java.net.InetSocketAddress;
+
+import com.google.common.util.concurrent.ListenableFuture;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.apache.qpid.server.plugin.PluggableService;
+
+@SuppressWarnings("unused")
+@PluggableService
+public class ExternalQpidBrokerAdminImpl implements BrokerAdmin
+{
+    private static final Logger LOGGER = LoggerFactory.getLogger(ExternalQpidBrokerAdminImpl.class);
+
+    @Override
+    public void beforeTestClass(final Class testClass)
+    {
+        LOGGER.debug("beforeTestClass");
+    }
+
+    @Override
+    public void beforeTestMethod(final Class testClass, final Method method)
+    {
+        LOGGER.debug("beforeTestMethod");
+    }
+
+    @Override
+    public void afterTestMethod(final Class testClass, final Method method)
+    {
+        LOGGER.debug("afterTestMethod");
+    }
+
+    @Override
+    public void afterTestClass(final Class testClass)
+    {
+        LOGGER.debug("afterTestClass");
+    }
+
+    @Override
+    public InetSocketAddress getBrokerAddress(final PortType portType)
+    {
+        Integer port;
+        switch (portType)
+        {
+            case AMQP:
+                port = Integer.getInteger("qpid.tests.protocol.broker.external.port.standard");
+                break;
+            case ANONYMOUS_AMQP:
+                port = Integer.getInteger("qpid.tests.protocol.broker.external.port.anonymous");
+                break;
+            default:
+                throw new IllegalArgumentException(String.format("Unknown port type '%s'", portType));
+        }
+        return new InetSocketAddress(port);
+    }
+
+    @Override
+    public void createQueue(final String queueName)
+    {
+        LOGGER.debug(String.format("creation of queue '%s' requested", queueName));
+    }
+
+    @Override
+    public void deleteQueue(final String queueName)
+    {
+        LOGGER.debug(String.format("deletion of queue '%s' requested", 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));
+    }
+
+    @Override
+    public int getQueueDepthMessages(final String testQueueName)
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public boolean supportsRestart()
+    {
+        return false;
+    }
+
+    @Override
+    public ListenableFuture<Void> restart()
+    {
+        throw new UnsupportedOperationException("External Qpid Broker does not support restart.");
+    }
+
+    @Override
+    public boolean isSASLSupported()
+    {
+        return true;
+    }
+
+    @Override
+    public boolean isWebSocketSupported()
+    {
+        return true;
+    }
+
+    @Override
+    public boolean isQueueDepthSupported()
+    {
+        return false;
+    }
+
+    @Override
+    public boolean isSASLMechanismSupported(final String mechanismName)
+    {
+        return true;
+    }
+
+    @Override
+    public String getValidUsername()
+    {
+        return "guest";
+    }
+
+    @Override
+    public String getValidPassword()
+    {
+        return "guest";
+    }
+
+    @Override
+    public String getType()
+    {
+        return "EXTERNAL_BROKER";
+    }
+}

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/a7e4a716/systests/systests-utils/src/main/java/org/apache/qpid/tests/utils/QpidTestRunner.java
----------------------------------------------------------------------
diff --git a/systests/systests-utils/src/main/java/org/apache/qpid/tests/utils/QpidTestRunner.java b/systests/systests-utils/src/main/java/org/apache/qpid/tests/utils/QpidTestRunner.java
new file mode 100644
index 0000000..02cec34
--- /dev/null
+++ b/systests/systests-utils/src/main/java/org/apache/qpid/tests/utils/QpidTestRunner.java
@@ -0,0 +1,76 @@
+/*
+ * 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.junit.runner.notification.RunNotifier;
+import org.junit.runners.BlockJUnit4ClassRunner;
+import org.junit.runners.model.FrameworkMethod;
+import org.junit.runners.model.InitializationError;
+
+public class QpidTestRunner extends BlockJUnit4ClassRunner
+{
+    private final BrokerAdmin _brokerAdmin;
+    private final Class _testClass;
+
+    public QpidTestRunner(final Class<?> klass) throws InitializationError
+    {
+        super(klass);
+        _testClass = klass;
+        _brokerAdmin = (new BrokerAdminFactory()).createInstance("EMBEDDED_BROKER_PER_CLASS");
+    }
+
+    @Override
+    protected Object createTest() throws Exception
+    {
+        Object test = super.createTest();
+        BrokerAdminUsingTestBase qpidTest = ((BrokerAdminUsingTestBase) test);
+        qpidTest.init(_brokerAdmin);
+        return test;
+    }
+
+    @Override
+    public void run(final RunNotifier notifier)
+    {
+        _brokerAdmin.beforeTestClass(_testClass);
+        try
+        {
+            super.run(notifier);
+        }
+        finally
+        {
+            _brokerAdmin.afterTestClass(_testClass);
+        }
+    }
+
+    @Override
+    protected void runChild(final FrameworkMethod method, final RunNotifier notifier)
+    {
+        _brokerAdmin.beforeTestMethod(_testClass, method.getMethod());
+        try
+        {
+            super.runChild(method, notifier);
+        }
+        finally
+        {
+            _brokerAdmin.afterTestMethod(_testClass, method.getMethod());
+        }
+    }
+}


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