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-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org