Repository: qpid-broker-j Updated Branches: refs/heads/master 0ec8be159 -> c82574b9a
QPID-8158: [Broker-J] [System Tests] Simplify GroupBrokerAdmin Project: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/repo Commit: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/commit/c82574b9 Tree: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/tree/c82574b9 Diff: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/diff/c82574b9 Branch: refs/heads/master Commit: c82574b9a651dde1c8f07428212e0312a63e685d Parents: ebf33b3 Author: Alex Rudyy <oru...@apache.org> Authored: Thu Apr 12 00:58:20 2018 +0100 Committer: Alex Rudyy <oru...@apache.org> Committed: Thu Apr 12 01:06:29 2018 +0100 ---------------------------------------------------------------------- .../replication/GroupBrokerAdmin.java | 174 ++----------------- .../replication/GroupJmsTestBase.java | 86 +++++++-- .../berkeleydb/replication/MultiNodeTest.java | 3 +- .../berkeleydb/replication/TwoNodeTest.java | 2 - 4 files changed, 88 insertions(+), 177 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/c82574b9/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/GroupBrokerAdmin.java ---------------------------------------------------------------------- diff --git a/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/GroupBrokerAdmin.java b/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/GroupBrokerAdmin.java index c11666d..f82a9ad 100644 --- a/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/GroupBrokerAdmin.java +++ b/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/GroupBrokerAdmin.java @@ -23,7 +23,6 @@ package org.apache.qpid.server.store.berkeleydb.replication; import static org.apache.qpid.systests.admin.SpawnBrokerAdmin.SYSTEST_PROPERTY_SPAWN_BROKER_STARTUP_TIME; import java.lang.reflect.Method; -import java.net.InetSocketAddress; import java.util.Arrays; import java.util.Collection; import java.util.Collections; @@ -49,7 +48,6 @@ import com.google.common.util.concurrent.ListeningExecutorService; import com.google.common.util.concurrent.MoreExecutors; import com.sleepycat.je.rep.ReplicationConfig; -import org.apache.qpid.server.plugin.PluggableService; import org.apache.qpid.server.virtualhostnode.AbstractVirtualHostNode; import org.apache.qpid.server.virtualhostnode.berkeleydb.BDBHARemoteReplicationNode; import org.apache.qpid.server.virtualhostnode.berkeleydb.BDBHAVirtualHostNode; @@ -59,14 +57,11 @@ import org.apache.qpid.systests.admin.SpawnBrokerAdmin; import org.apache.qpid.test.utils.PortHelper; import org.apache.qpid.tests.utils.BrokerAdmin; -@SuppressWarnings("unused") -@PluggableService -public class GroupBrokerAdmin implements BrokerAdmin +public class GroupBrokerAdmin { private static final int WAIT_LIMIT = Integer.getInteger("qpid.test.ha.await", 10000); private static final String AMQP_NODE_TYPE = "org.apache.qpid.VirtualHostNode"; private static final String AMQP_REMOTE_NODE_TYPE = "org.apache.qpid.server.model.RemoteReplicationNode"; - private static final String ROLE_UNKNOWN = "UNKNOWN"; private static final String ROLE_MASTER = "MASTER"; private static final String ROLE_REPLICA = "REPLICA"; private static final String NODE_TYPE = "BDB_HA"; @@ -74,9 +69,7 @@ public class GroupBrokerAdmin implements BrokerAdmin private GroupMember[] _members; private ListeningExecutorService _executorService; - private Map<String, String> _lastKnownRoles = new ConcurrentHashMap<>(); - @Override public void beforeTestClass(final Class testClass) { GroupConfig runBrokerAdmin = (GroupConfig) testClass.getAnnotation(GroupConfig.class); @@ -112,20 +105,16 @@ public class GroupBrokerAdmin implements BrokerAdmin } } - @Override public void beforeTestMethod(final Class testClass, final Method method) { - _lastKnownRoles.clear(); GroupMember first = _members[0]; first.getAdmin().beforeTestMethod(_members[0].getName(), NODE_TYPE, _members[0].getNodeAttributes()); - Object role = awaitNodeRoleReplicaOrMaster(first); - _lastKnownRoles.put(first.getName(), String.valueOf(role)); + awaitNodeRoleReplicaOrMaster(first); ListenableFuture<Void> f; if (_members.length > 2) { f = invokeParallel(Arrays.stream(_members).skip(1).map(m -> (Callable<Void>) () -> { m.getAdmin().beforeTestMethod(m.getName(), NODE_TYPE, m.getNodeAttributes()); - _lastKnownRoles.put(m.getName(), ROLE_UNKNOWN); return null; }).collect(Collectors.toList())); } @@ -135,7 +124,6 @@ public class GroupBrokerAdmin implements BrokerAdmin { _members[i].getAdmin() .beforeTestMethod(_members[i].getName(), NODE_TYPE, _members[i].getNodeAttributes()); - _lastKnownRoles.put(_members[i].getName(), ROLE_UNKNOWN); } f = Futures.immediateFuture(null); } @@ -144,18 +132,14 @@ public class GroupBrokerAdmin implements BrokerAdmin awaitAllTransitionIntoReplicaOrMaster(); } - - @Override public void afterTestMethod(final Class testClass, final Method method) { awaitFuture(WAIT_LIMIT, invokeParallel(Arrays.stream(_members).map(m -> (Callable<Void>) () -> { m.getAdmin().afterTestMethod(testClass, method); return null; }).collect(Collectors.toList()))); - _lastKnownRoles.clear(); } - @Override public void afterTestClass(final Class testClass) { try @@ -174,47 +158,9 @@ public class GroupBrokerAdmin implements BrokerAdmin } } - @Override - public InetSocketAddress getBrokerAddress(final PortType portType) - { - return getLastKnownMasterAdmin().getBrokerAddress(portType); - } - - @Override - public void createQueue(final String queueName) - { - getLastKnownMasterAdmin().createQueue(queueName); - } - - @Override - public void deleteQueue(final String queueName) - { - getLastKnownMasterAdmin().deleteQueue(queueName); - } - - @Override - public void putMessageOnQueue(final String queueName, final String... messages) - { - getLastKnownMasterAdmin().putMessageOnQueue(queueName, messages); - } - - @Override - public int getQueueDepthMessages(final String testQueueName) - { - return getLastKnownMasterAdmin().getQueueDepthMessages(testQueueName); - } - - @Override - public boolean supportsRestart() - { - return getLastKnownMasterAdmin().supportsRestart(); - } - - @Override public ListenableFuture<Void> restart() { awaitFuture(WAIT_LIMIT, invokeParallel(Arrays.stream(_members).map(m -> (Callable<Void>) () -> { - _lastKnownRoles.put(m.getName(), ROLE_UNKNOWN); m.getAdmin().restart(); return null; }).collect(Collectors.toList()))); @@ -223,64 +169,9 @@ public class GroupBrokerAdmin implements BrokerAdmin return Futures.immediateFuture(null); } - @Override - public boolean isSASLSupported() - { - return getLastKnownMasterAdmin().isSASLSupported(); - } - - @Override - public boolean isSASLMechanismSupported(final String mechanismName) - { - return getLastKnownMasterAdmin().isSASLMechanismSupported(mechanismName); - } - - @Override - public boolean isWebSocketSupported() - { - return getLastKnownMasterAdmin().isWebSocketSupported(); - } - - @Override - public boolean isQueueDepthSupported() - { - return getLastKnownMasterAdmin().isQueueDepthSupported(); - } - - @Override - public boolean isManagementSupported() - { - return getLastKnownMasterAdmin().isManagementSupported(); - } - - @Override - public String getValidUsername() - { - return getLastKnownMasterAdmin().getValidUsername(); - } - - @Override - public String getValidPassword() - { - return getLastKnownMasterAdmin().getValidPassword(); - } - - @Override - public String getKind() - { - return KIND_BROKER_J; - } - - @Override - public String getType() - { - return "BDB-HA"; - } - public void stop() { awaitFuture(WAIT_LIMIT, invokeParallel(Arrays.stream(_members).map(m -> (Callable<Void>) () -> { - _lastKnownRoles.put(m.getName(), ROLE_UNKNOWN); m.getAdmin().stop(); return null; }).collect(Collectors.toList()))); @@ -288,20 +179,12 @@ public class GroupBrokerAdmin implements BrokerAdmin public void start() { - start(true); - } - - public void start(boolean assertRoles) - { awaitFuture(WAIT_LIMIT, invokeParallel(Arrays.stream(_members).map(m -> (Callable<Void>) () -> { m.getAdmin().start(); return null; }).collect(Collectors.toList()))); - if (assertRoles) - { - awaitAllTransitionIntoReplicaOrMaster(); - } + awaitAllTransitionIntoReplicaOrMaster(); } public void startNode(final int amqpPort) @@ -315,7 +198,6 @@ public class GroupBrokerAdmin implements BrokerAdmin { GroupMember member = getMemberByAmqpPort(amqpPort); member.getAdmin().stop(); - _lastKnownRoles.put(member.getName(), ROLE_UNKNOWN); } public int[] getGroupAmqpPorts() @@ -390,8 +272,7 @@ public class GroupBrokerAdmin implements BrokerAdmin public void awaitNodeRole(final int amqpPort, String... role) { - Object actualRole = awaitNodeToAttainAttributeValue(amqpPort, BDBHAVirtualHostNode.ROLE, (Object[]) role); - _lastKnownRoles.put(getMemberByAmqpPort(amqpPort).getName(), String.valueOf(actualRole)); + awaitNodeToAttainAttributeValue(amqpPort, BDBHAVirtualHostNode.ROLE, (Object[]) role); } public Object awaitNodeToAttainAttributeValue(final int amqpPort, @@ -451,11 +332,6 @@ public class GroupBrokerAdmin implements BrokerAdmin return member.getAdmin(); } - private SpawnBrokerAdmin getLastKnownMasterAdmin() - { - return getLastKnownMaster().getAdmin(); - } - private GroupMember[] initializeGroupData(final String groupName, final SpawnBrokerAdmin[] admins) { PortHelper helper = new PortHelper(); @@ -496,7 +372,7 @@ public class GroupBrokerAdmin implements BrokerAdmin nodeAttributes.put(BDBHAVirtualHostNode.PERMITTED_NODES, permitted); nodeAttributes.put(BDBHAVirtualHostNode.CONTEXT, contextAsString); members[i] = new GroupMember(nodeName, - admins[i].getBrokerAddress(PortType.AMQP).getPort(), + admins[i].getBrokerAddress(BrokerAdmin.PortType.AMQP).getPort(), port, admins[i], nodeAttributes); @@ -552,45 +428,29 @@ public class GroupBrokerAdmin implements BrokerAdmin private void awaitAllTransitionIntoReplicaOrMaster() { + Map<String, Object> roles = new ConcurrentHashMap<>(); awaitFuture(WAIT_LIMIT, invokeParallel(Arrays.stream(_members).map(m -> (Callable<Void>) () -> { - awaitNodeRoleReplicaOrMaster(m); + Object role = awaitNodeRoleReplicaOrMaster(m); + roles.put(m.getName(), String.valueOf(role)); return null; }).collect(Collectors.toList()))); - if (_lastKnownRoles.values().stream().noneMatch(role -> ROLE_MASTER.equals(role) || ROLE_REPLICA.equals(role))) + if (roles.values().stream().noneMatch(role -> ROLE_MASTER.equals(role) || ROLE_REPLICA.equals(role))) { throw new BrokerAdminException("Unexpected node roles " + Joiner.on(", ").withKeyValueSeparator(" -> ") - .join(_lastKnownRoles)); + .join(roles)); } } private Object awaitNodeRoleReplicaOrMaster(final GroupMember m) { - Object result = m.getAdmin().awaitAttributeValue(WAIT_LIMIT, - true, - m.getName(), - AMQP_NODE_TYPE, - BDBHAVirtualHostNode.ROLE, - ROLE_REPLICA, - ROLE_MASTER); - _lastKnownRoles.put(m.getName(), String.valueOf(result)); - return result; - } - - - private GroupMember getLastKnownMaster() - { - final Map.Entry<String, String> entry = - _lastKnownRoles.entrySet() - .stream() - .filter(e -> ROLE_MASTER.equals(e.getValue())) - .findFirst() - .orElseThrow(() -> new BrokerAdminException("Master node is not found")); - - return Arrays.stream(_members) - .filter(m -> entry.getKey().equals(m.getName())) - .findFirst() - .orElseThrow(() -> new BrokerAdminException("Master node is not found")); + return m.getAdmin().awaitAttributeValue(WAIT_LIMIT, + true, + m.getName(), + AMQP_NODE_TYPE, + BDBHAVirtualHostNode.ROLE, + ROLE_REPLICA, + ROLE_MASTER); } private String objectToJson(final Object object) http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/c82574b9/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/GroupJmsTestBase.java ---------------------------------------------------------------------- diff --git a/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/GroupJmsTestBase.java b/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/GroupJmsTestBase.java index e209dd2..820c7ae 100644 --- a/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/GroupJmsTestBase.java +++ b/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/GroupJmsTestBase.java @@ -25,43 +25,97 @@ import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; import static org.junit.Assume.assumeThat; +import java.util.concurrent.atomic.AtomicReference; + import javax.jms.Connection; import javax.jms.JMSException; import javax.jms.Queue; import javax.jms.Session; +import org.junit.After; +import org.junit.AfterClass; +import org.junit.Before; import org.junit.BeforeClass; +import org.junit.Rule; +import org.junit.rules.ExternalResource; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.apache.qpid.systests.ConnectionBuilder; import org.apache.qpid.systests.JmsProvider; -import org.apache.qpid.systests.JmsTestBase; import org.apache.qpid.systests.Utils; -import org.apache.qpid.tests.utils.RunBrokerAdmin; +import org.apache.qpid.test.utils.UnitTestBase; -@RunBrokerAdmin(type = "BDB-HA") -public class GroupJmsTestBase extends JmsTestBase +public class GroupJmsTestBase extends UnitTestBase { private static final int FAILOVER_CYCLECOUNT = 40; private static final int FAILOVER_CONNECTDELAY = 1000; static final int SHORT_FAILOVER_CYCLECOUNT = 2; static final int SHORT_FAILOVER_CONNECTDELAY = 200; + private static final Logger LOGGER = LoggerFactory.getLogger(GroupJmsTestBase.class); + private static JmsProvider _jmsProvider; + private static GroupBrokerAdmin _groupBrokerAdmin; + private static AtomicReference<Class<?>> _testClass = new AtomicReference<>(); + @BeforeClass - public static void verify() + public static void setUpTestBase() { assumeThat(System.getProperty("virtualhostnode.type", "BDB"), is(equalTo("BDB"))); + + _jmsProvider = Utils.getJmsProvider(); + } + + @AfterClass + public static void tearDownTestBase() + { + Class<?> testClass = _testClass.get(); + if (testClass != null && _testClass.compareAndSet(testClass, null)) + { + _groupBrokerAdmin.afterTestClass(testClass); + } + } + + @Rule + public final ExternalResource resource = new ExternalResource() + { + @Override + protected void before() + { + if (_testClass.compareAndSet(null, GroupJmsTestBase.this.getClass() )) + { + _groupBrokerAdmin = new GroupBrokerAdmin(); + _groupBrokerAdmin.beforeTestClass(GroupJmsTestBase.this.getClass()); + } + } + + @Override + protected void after() + { + + } + }; + + @Before + public void beforeTestMethod() throws Exception + { + _groupBrokerAdmin.beforeTestMethod(getClass(), getClass().getMethod(getTestName())); + } + + @After + public void afterTestMethod() throws Exception + { + _groupBrokerAdmin.afterTestMethod(getClass(), getClass().getMethod(getTestName())); } - @Override - public GroupBrokerAdmin getBrokerAdmin() + GroupBrokerAdmin getBrokerAdmin() { - return (GroupBrokerAdmin) super.getBrokerAdmin(); + return _groupBrokerAdmin; } - @Override - public ConnectionBuilder getConnectionBuilder() + ConnectionBuilder getConnectionBuilder() { - final ConnectionBuilder connectionBuilder = getJmsProvider().getConnectionBuilder() + final ConnectionBuilder connectionBuilder = _jmsProvider.getConnectionBuilder() .setClientId(getTestName()) .setFailoverReconnectDelay(FAILOVER_CONNECTDELAY) .setFailoverReconnectAttempts(FAILOVER_CYCLECOUNT) @@ -84,7 +138,7 @@ public class GroupJmsTestBase extends JmsTestBase return connectionBuilder; } - protected void assertProduceConsume(final Queue queue) throws Exception + void assertProduceConsume(final Queue queue) throws Exception { final Connection connection = getConnectionBuilder().build(); try @@ -97,13 +151,13 @@ public class GroupJmsTestBase extends JmsTestBase } } - - protected JmsProvider getJmsProvider() + JmsProvider getJmsProvider() { - return Utils.getJmsProvider(); + return _jmsProvider; } - protected Queue createTestQueue(final Connection connection) throws JMSException + + Queue createTestQueue(final Connection connection) throws JMSException { Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); try http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/c82574b9/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/MultiNodeTest.java ---------------------------------------------------------------------- diff --git a/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/MultiNodeTest.java b/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/MultiNodeTest.java index 0a3df8f..c2009b0 100644 --- a/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/MultiNodeTest.java +++ b/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/MultiNodeTest.java @@ -21,6 +21,7 @@ package org.apache.qpid.server.store.berkeleydb.replication; import static junit.framework.TestCase.assertEquals; import static org.apache.qpid.systests.Utils.INDEX; +import static org.apache.qpid.systests.Utils.getReceiveTimeout; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.nullValue; @@ -77,9 +78,7 @@ import org.apache.qpid.systests.Utils; import org.apache.qpid.test.utils.PortHelper; import org.apache.qpid.test.utils.TestUtils; import org.apache.qpid.tests.utils.ConfigItem; -import org.apache.qpid.tests.utils.RunBrokerAdmin; -@RunBrokerAdmin(type = "BDB-HA") @GroupConfig(numberOfNodes = 3, groupName = "test") @ConfigItem(name = Broker.BROKER_FAIL_STARTUP_WITH_ERRORED_CHILD, value = "false") public class MultiNodeTest extends GroupJmsTestBase http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/c82574b9/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/TwoNodeTest.java ---------------------------------------------------------------------- diff --git a/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/TwoNodeTest.java b/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/TwoNodeTest.java index 151592c..87585e7 100644 --- a/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/TwoNodeTest.java +++ b/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/TwoNodeTest.java @@ -34,9 +34,7 @@ import org.junit.Test; import org.apache.qpid.server.virtualhostnode.berkeleydb.BDBHAVirtualHostNode; import org.apache.qpid.systests.Utils; -import org.apache.qpid.tests.utils.RunBrokerAdmin; -@RunBrokerAdmin(type = "BDB-HA") @GroupConfig(numberOfNodes = 2, groupName = "test") public class TwoNodeTest extends GroupJmsTestBase { --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org