summaryrefslogtreecommitdiff
path: root/qpid/cpp/src/tests
diff options
context:
space:
mode:
Diffstat (limited to 'qpid/cpp/src/tests')
-rw-r--r--qpid/cpp/src/tests/ClusterMapTest.cpp74
-rw-r--r--qpid/cpp/src/tests/DumpClientTest.cpp122
-rw-r--r--qpid/cpp/src/tests/cluster.mk2
-rw-r--r--qpid/cpp/src/tests/cluster_test.cpp90
4 files changed, 174 insertions, 114 deletions
diff --git a/qpid/cpp/src/tests/ClusterMapTest.cpp b/qpid/cpp/src/tests/ClusterMapTest.cpp
index cce0efb69f..f8ac2e22e6 100644
--- a/qpid/cpp/src/tests/ClusterMapTest.cpp
+++ b/qpid/cpp/src/tests/ClusterMapTest.cpp
@@ -38,13 +38,13 @@ Url url(const char* host) { return Url(TcpAddress(host)); }
QPID_AUTO_TEST_CASE(testNotice) {
ClusterMap m;
- BOOST_CHECK(!m.urlNotice(id(0), url("0-ready"))); // id(0) member, no dump.
+ m.ready(id(0), url("0-ready")); // id(0) member, no dump.
BOOST_CHECK(m.isMember(id(0)));
BOOST_CHECK_EQUAL(m.dumps(id(0)), 0);
BOOST_CHECK_EQUAL(m.memberCount(), (unsigned)1);
BOOST_CHECK_EQUAL(m.dumpeeCount(), (unsigned)0);
- BOOST_CHECK_EQUAL(id(0), m.urlNotice(id(1), url("1-dump"))); // Newbie, needs dump
+ BOOST_CHECK_EQUAL(id(0), m.dumpRequest(id(1), url("1-dump"))); // Newbie, needs dump
BOOST_CHECK(m.isMember(id(0)));
BOOST_CHECK(m.isDumpee(id(1)));
BOOST_CHECK_EQUAL(m.dumps(id(0)), 1);
@@ -52,7 +52,7 @@ QPID_AUTO_TEST_CASE(testNotice) {
BOOST_CHECK_EQUAL(m.memberCount(), (unsigned)1);
BOOST_CHECK_EQUAL(m.dumpeeCount(), (unsigned)1);
- BOOST_CHECK(!m.urlNotice(id(1), url("1-ready"))); // id(1) is ready.
+ m.ready(id(1), url("1-ready")); // id(1) is ready.
BOOST_CHECK(m.isMember(id(0)));
BOOST_CHECK(m.isMember(id(1)));
BOOST_CHECK_EQUAL(m.dumps(id(0)), 0);
@@ -60,25 +60,25 @@ QPID_AUTO_TEST_CASE(testNotice) {
BOOST_CHECK_EQUAL(m.memberCount(), (unsigned)2);
BOOST_CHECK_EQUAL(m.dumpeeCount(), (unsigned)0);
- BOOST_CHECK_EQUAL(id(0), m.urlNotice(id(2), url("2-dump"))); // id(2) needs dump
+ BOOST_CHECK_EQUAL(id(0), m.dumpRequest(id(2), url("2-dump"))); // id(2) needs dump
BOOST_CHECK(m.isDumpee(id(2)));
BOOST_CHECK_EQUAL(m.dumps(id(0)), 1);
BOOST_CHECK_EQUAL(m.dumpeeCount(), (unsigned)1);
- BOOST_CHECK_EQUAL(id(1), m.urlNotice(id(3), url("3-dump"))); // 0 busy, dump to id(1).
+ BOOST_CHECK_EQUAL(id(1), m.dumpRequest(id(3), url("3-dump"))); // 0 busy, dump to id(1).
BOOST_CHECK(m.isDumpee(id(3)));
BOOST_CHECK_EQUAL(m.dumps(id(0)), 1);
BOOST_CHECK_EQUAL(m.dumps(id(1)), 1);
BOOST_CHECK_EQUAL(m.dumpeeCount(), (unsigned)2);
- BOOST_CHECK_EQUAL(id(0), m.urlNotice(id(4), url("4-dump"))); // Equally busy, 0 is first on list.
+ BOOST_CHECK_EQUAL(id(0), m.dumpRequest(id(4), url("4-dump"))); // Equally busy, 0 is first on list.
BOOST_CHECK_EQUAL(m.dumps(id(0)), 2);
BOOST_CHECK_EQUAL(m.dumps(id(1)), 1);
BOOST_CHECK_EQUAL(m.dumpeeCount(), (unsigned)3);
// My dumpees both complete
- BOOST_CHECK(!m.urlNotice(id(2), url("2-ready")));
- BOOST_CHECK(!m.urlNotice(id(4), url("4-ready")));
+ m.ready(id(2), url("2-ready"));
+ m.ready(id(4), url("4-ready"));
BOOST_CHECK(m.isMember(id(2)));
BOOST_CHECK(m.isMember(id(4)));
BOOST_CHECK_EQUAL(m.dumps(id(0)), 0);
@@ -86,7 +86,7 @@ QPID_AUTO_TEST_CASE(testNotice) {
BOOST_CHECK_EQUAL(m.dumpeeCount(), (unsigned)1);
// Final dumpee completes.
- BOOST_CHECK(!m.urlNotice(id(3), url("3-ready")));
+ m.ready(id(3), url("3-ready"));
BOOST_CHECK(m.isMember(id(3)));
BOOST_CHECK_EQUAL(m.dumps(id(0)), 0);
BOOST_CHECK_EQUAL(m.dumps(id(1)), 0);
@@ -96,11 +96,11 @@ QPID_AUTO_TEST_CASE(testNotice) {
QPID_AUTO_TEST_CASE(testLeave) {
ClusterMap m;
- BOOST_CHECK(!m.urlNotice(id(0), url("0-ready")));
- BOOST_CHECK_EQUAL(id(0), m.urlNotice(id(1), url("1-dump")));
- BOOST_CHECK(!m.urlNotice(id(1), url("1-ready")));
- BOOST_CHECK_EQUAL(id(0), m.urlNotice(id(2), url("2-dump")));
- BOOST_CHECK(!m.urlNotice(id(2), url("2-ready")));
+ m.ready(id(0), url("0-ready"));
+ BOOST_CHECK_EQUAL(id(0), m.dumpRequest(id(1), url("1-dump")));
+ m.ready(id(1), url("1-ready"));
+ BOOST_CHECK_EQUAL(id(0), m.dumpRequest(id(2), url("2-dump")));
+ m.ready(id(2), url("2-ready"));
BOOST_CHECK_EQUAL(m.memberCount(), (unsigned)3);
BOOST_CHECK_EQUAL(m.dumpeeCount(), (unsigned)0);
@@ -110,13 +110,13 @@ QPID_AUTO_TEST_CASE(testLeave) {
BOOST_CHECK(m.isMember(id(0)));
BOOST_CHECK(m.isMember(id(2)));
- BOOST_CHECK_EQUAL(id(0), m.urlNotice(id(4), url("4-dump")));
+ BOOST_CHECK_EQUAL(id(0), m.dumpRequest(id(4), url("4-dump")));
BOOST_CHECK_EQUAL(m.dumps(id(0)), 1);
BOOST_CHECK(m.isDumpee(id(4)));
BOOST_CHECK_EQUAL(m.memberCount(), (unsigned)2);
BOOST_CHECK_EQUAL(m.dumpeeCount(), (unsigned)1);
- m.dumpFailed(id(4)); // Dumper detected a failure.
+ m.dumpError(id(4)); // Dumper detected a failure.
BOOST_CHECK_EQUAL(m.dumps(id(0)), 0);
BOOST_CHECK(!m.isDumpee(id(4)));
BOOST_CHECK(!m.isMember(id(4)));
@@ -127,7 +127,7 @@ QPID_AUTO_TEST_CASE(testLeave) {
BOOST_CHECK_EQUAL(m.memberCount(), (unsigned)2);
BOOST_CHECK_EQUAL(m.dumpeeCount(), (unsigned)0);
- BOOST_CHECK_EQUAL(id(0), m.urlNotice(id(5), url("5-dump")));
+ BOOST_CHECK_EQUAL(id(0), m.dumpRequest(id(5), url("5-dump")));
BOOST_CHECK_EQUAL(m.dumps(id(0)), 1);
BOOST_CHECK(m.isDumpee(id(5)));
BOOST_CHECK_EQUAL(m.memberCount(), (unsigned)2);
@@ -140,19 +140,19 @@ QPID_AUTO_TEST_CASE(testLeave) {
BOOST_CHECK_EQUAL(m.memberCount(), (unsigned)2);
BOOST_CHECK_EQUAL(m.dumpeeCount(), (unsigned)0);
- m.dumpFailed(id(5)); // Dumper reports failure - no op, we already know.
+ m.dumpError(id(5)); // Dumper reports failure - no op, we already know.
BOOST_CHECK_EQUAL(m.memberCount(), (unsigned)2);
BOOST_CHECK_EQUAL(m.dumpeeCount(), (unsigned)0);
}
QPID_AUTO_TEST_CASE(testToControl) {
ClusterMap m;
- m.urlNotice(id(0), url("0"));
- m.urlNotice(id(1), url("1dump"));
- m.urlNotice(id(1), url("1"));
- m.urlNotice(id(2), url("2dump"));
- m.urlNotice(id(3), url("3dump"));
- m.urlNotice(id(4), url("4dump"));
+ m.ready(id(0), url("0"));
+ m.dumpRequest(id(1), url("1dump"));
+ m.ready(id(1), url("1"));
+ m.dumpRequest(id(2), url("2dump"));
+ m.dumpRequest(id(3), url("3dump"));
+ m.dumpRequest(id(4), url("4dump"));
BOOST_CHECK_EQUAL(m.memberCount(), (unsigned)2);
BOOST_CHECK_EQUAL(m.dumpeeCount(), (unsigned)3);
@@ -188,4 +188,30 @@ QPID_AUTO_TEST_CASE(testToControl) {
BOOST_CHECK_EQUAL(s,s2);
}
+QPID_AUTO_TEST_CASE(testStall) {
+ ClusterMap m;
+ m.ready(id(0), url("0"));
+ BOOST_CHECK_EQUAL(m.memberCount(), 1);
+ BOOST_CHECK_EQUAL(m.dumpeeCount(), 0);
+ m.stall();
+
+ m.dumpRequest(id(1), url("1dump"));
+ m.ready(id(1), url("1"));
+ m.leave(id(0));
+ m.dumpRequest(id(2), url("2dump"));
+ m.ready(id(2), url("2"));
+ m.dumpRequest(id(3), url("3dump"));
+ BOOST_CHECK_EQUAL(m.memberCount(), 1);
+ BOOST_CHECK_EQUAL(m.dumpeeCount(), 0);
+
+ m.unstall();
+ BOOST_CHECK_EQUAL(m.memberCount(), 2);
+ BOOST_CHECK_EQUAL(m.dumpeeCount(), 1);
+ BOOST_CHECK(!m.isMember(id(0)));
+ BOOST_CHECK(m.isMember(id(1)));
+ BOOST_CHECK(m.isMember(id(2)));
+ BOOST_CHECK(m.isDumpee(id(3)));
+}
+
+
QPID_AUTO_TEST_SUITE_END()
diff --git a/qpid/cpp/src/tests/DumpClientTest.cpp b/qpid/cpp/src/tests/DumpClientTest.cpp
new file mode 100644
index 0000000000..27c4174ffe
--- /dev/null
+++ b/qpid/cpp/src/tests/DumpClientTest.cpp
@@ -0,0 +1,122 @@
+/*
+ *
+ * Copyright (c) 2006 The Apache Software Foundation
+ *
+ * Licensed 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.
+ *
+ */
+
+
+#include "unit_test.h"
+#include "test_tools.h"
+#include "BrokerFixture.h"
+#include "qpid/cluster/DumpClient.h"
+#include "qpid/framing/Buffer.h"
+#include "qpid/framing/FieldTable.h"
+#include "qpid/Url.h"
+#include <boost/assign.hpp>
+
+QPID_AUTO_TEST_SUITE(DumpClientTest)
+
+using namespace std;
+using namespace qpid;
+using namespace framing;
+using namespace client;
+using namespace cluster;
+using namespace sys;
+
+// Verify we can copy shared state - wiring + messages - from one
+// broker to another via the DumpClient.
+//
+QPID_AUTO_TEST_CASE(testDumpClientSharedState) {
+ BrokerFixture donor, receiver;
+ {
+ Client c(donor.getPort());
+ FieldTable args;
+ args.setString("x", "y");
+ c.session.queueDeclare("qa", arg::arguments=args);
+ c.session.queueDeclare("qb", arg::alternateExchange="amq.direct");
+
+ c.session.exchangeDeclare(arg::exchange="exd", arg::type="direct", arg::arguments=args);
+ c.session.exchangeBind(arg::exchange="exd", arg::queue="qa", arg::bindingKey="foo");
+ c.session.messageTransfer(arg::destination="exd", arg::content=Message("one", "foo"));
+
+ c.session.exchangeDeclare("ext", arg::type="topic");
+ c.session.exchangeBind(arg::exchange="ext", arg::queue="qb", arg::bindingKey="bar");
+ c.subs.subscribe(c.lq, "qa", FlowControl::messageCredit(0));
+ c.session.messageTransfer(arg::destination="ext", arg::content=Message("one", "bar"));
+ c.session.messageTransfer(arg::destination="ext", arg::content=Message("two", "bar"));
+
+ c.session.close();
+ c.connection.close();
+ }
+ Url url(Url::getIpAddressesUrl(receiver.getPort()));
+ qpid::cluster::DumpClient dump(url, *donor.broker, 0);
+ dump.dump();
+ {
+ Client r(receiver.getPort());
+ // Verify exchanges
+ ExchangeQueryResult ex=r.session.exchangeQuery("exd");
+ BOOST_CHECK_EQUAL(ex.getType(), "direct");
+ BOOST_CHECK_EQUAL(ex.getDurable(), false);
+ BOOST_CHECK_EQUAL(ex.getNotFound(), false);
+ BOOST_CHECK_EQUAL(ex.getArguments().getString("x"), "y");
+
+ ex = r.session.exchangeQuery("ext");
+ BOOST_CHECK_EQUAL(ex.getType(), "topic");
+ BOOST_CHECK_EQUAL(ex.getNotFound(), false);
+
+ // Verify queues
+ QueueQueryResult qq = r.session.queueQuery("qa");
+ BOOST_CHECK_EQUAL(qq.getQueue(), "qa");
+ BOOST_CHECK_EQUAL(qq.getAlternateExchange(), "");
+ BOOST_CHECK_EQUAL(qq.getArguments().getString("x"), "y");
+ BOOST_CHECK_EQUAL(qq.getMessageCount(), (unsigned)1);
+
+ qq = r.session.queueQuery("qb");
+ BOOST_CHECK_EQUAL(qq.getQueue(), "qb");
+ BOOST_CHECK_EQUAL(qq.getAlternateExchange(), "amq.direct");
+ BOOST_CHECK_EQUAL(qq.getMessageCount(), (unsigned)2);
+
+ // Verify messages
+ Message m;
+ BOOST_CHECK(r.subs.get(m, "qa", TIME_SEC));
+ BOOST_CHECK_EQUAL(m.getData(), "one");
+ BOOST_CHECK_EQUAL(m.getDeliveryProperties().getExchange(), "exd");
+ BOOST_CHECK_EQUAL(m.getDeliveryProperties().getRoutingKey(), "foo");
+
+ BOOST_CHECK(r.subs.get(m, "qb", TIME_SEC));
+ BOOST_CHECK_EQUAL(m.getData(), "one");
+ BOOST_CHECK_EQUAL(m.getDeliveryProperties().getExchange(), "ext");
+ BOOST_CHECK_EQUAL(m.getDeliveryProperties().getRoutingKey(), "bar");
+
+ BOOST_CHECK(r.subs.get(m, "qb", TIME_SEC));
+ BOOST_CHECK_EQUAL(m.getData(), "two");
+ BOOST_CHECK_EQUAL(m.getDeliveryProperties().getExchange(), "ext");
+ BOOST_CHECK_EQUAL(m.getDeliveryProperties().getRoutingKey(), "bar");
+
+ // Verify bindings
+ r.session.messageTransfer(arg::destination="exd", arg::content=Message("xxx", "foo"));
+ BOOST_CHECK(r.subs.get(m, "qa"));
+ BOOST_CHECK_EQUAL(m.getData(), "xxx");
+
+ r.session.messageTransfer(arg::destination="ext", arg::content=Message("yyy", "bar"));
+ BOOST_CHECK(r.subs.get(m, "qb"));
+ BOOST_CHECK_EQUAL(m.getData(), "yyy");
+
+ r.session.close();
+ r.connection.close();
+ }
+}
+
+QPID_AUTO_TEST_SUITE_END()
diff --git a/qpid/cpp/src/tests/cluster.mk b/qpid/cpp/src/tests/cluster.mk
index 40d1c0df3e..0fc95b3c7d 100644
--- a/qpid/cpp/src/tests/cluster.mk
+++ b/qpid/cpp/src/tests/cluster.mk
@@ -18,7 +18,7 @@ check_PROGRAMS+=cluster_test
cluster_test_SOURCES=unit_test.cpp cluster_test.cpp
cluster_test_LDADD=$(lib_client) $(lib_cluster) -lboost_unit_test_framework
-unit_test_SOURCES+=ClusterMapTest.cpp
unit_test_LDADD+=$(lib_cluster)
+unit_test_SOURCES+=ClusterMapTest.cpp DumpClientTest.cpp
endif
diff --git a/qpid/cpp/src/tests/cluster_test.cpp b/qpid/cpp/src/tests/cluster_test.cpp
index 28ee439a5d..af380c629d 100644
--- a/qpid/cpp/src/tests/cluster_test.cpp
+++ b/qpid/cpp/src/tests/cluster_test.cpp
@@ -140,94 +140,6 @@ ostream& operator<<(ostream& o, const pair<T*, int>& array) {
return o;
}
-// FIXME aconway 2008-09-11: This test has to be first otherwise
-// it picks up the cluster name from a previous test and runs the
-// brokers as cluster nodes. Something wrong with option parsing...
-//
-QPID_AUTO_TEST_CASE(testDumpClientSharedState) {
- // In this test we don't want the cluster plugin to initialize, so set --cluster-name=""
- const char* argv[] = { "--cluster-name", "" };
- Broker::Options opts = parseOpts(sizeof(argv)/sizeof(*argv), argv);
-
- BrokerFixture donor(opts), receiver(opts);
- {
- Client c(donor.getPort());
- FieldTable args;
- args.setString("x", "y");
- c.session.queueDeclare("qa", arg::arguments=args);
- c.session.queueDeclare("qb", arg::alternateExchange="amq.direct");
-
- c.session.exchangeDeclare(arg::exchange="exd", arg::type="direct", arg::arguments=args);
- c.session.exchangeBind(arg::exchange="exd", arg::queue="qa", arg::bindingKey="foo");
- c.session.messageTransfer(arg::destination="exd", arg::content=Message("one", "foo"));
-
- c.session.exchangeDeclare("ext", arg::type="topic");
- c.session.exchangeBind(arg::exchange="ext", arg::queue="qb", arg::bindingKey="bar");
- c.subs.subscribe(c.lq, "qa", FlowControl::messageCredit(0));
- c.session.messageTransfer(arg::destination="ext", arg::content=Message("one", "bar"));
- c.session.messageTransfer(arg::destination="ext", arg::content=Message("two", "bar"));
-
- c.session.close();
- c.connection.close();
- }
- qpid::cluster::DumpClient dump(Url::getIpAddressesUrl(receiver.getPort()));
- dump.dump(*donor.broker);
- {
- Client r(receiver.getPort());
- // Verify exchanges
- ExchangeQueryResult ex=r.session.exchangeQuery("exd");
- BOOST_CHECK_EQUAL(ex.getType(), "direct");
- BOOST_CHECK_EQUAL(ex.getDurable(), false);
- BOOST_CHECK_EQUAL(ex.getNotFound(), false);
- BOOST_CHECK_EQUAL(ex.getArguments().getString("x"), "y");
-
- ex = r.session.exchangeQuery("ext");
- BOOST_CHECK_EQUAL(ex.getType(), "topic");
- BOOST_CHECK_EQUAL(ex.getNotFound(), false);
-
- // Verify queues
- QueueQueryResult qq = r.session.queueQuery("qa");
- BOOST_CHECK_EQUAL(qq.getQueue(), "qa");
- BOOST_CHECK_EQUAL(qq.getAlternateExchange(), "");
- BOOST_CHECK_EQUAL(qq.getArguments().getString("x"), "y");
- BOOST_CHECK_EQUAL(qq.getMessageCount(), (unsigned)1);
-
- qq = r.session.queueQuery("qb");
- BOOST_CHECK_EQUAL(qq.getQueue(), "qb");
- BOOST_CHECK_EQUAL(qq.getAlternateExchange(), "amq.direct");
- BOOST_CHECK_EQUAL(qq.getMessageCount(), (unsigned)2);
-
- // Verify messages
- Message m;
- BOOST_CHECK(r.subs.get(m, "qa", TIME_SEC));
- BOOST_CHECK_EQUAL(m.getData(), "one");
- BOOST_CHECK_EQUAL(m.getDeliveryProperties().getExchange(), "exd");
- BOOST_CHECK_EQUAL(m.getDeliveryProperties().getRoutingKey(), "foo");
-
- BOOST_CHECK(r.subs.get(m, "qb", TIME_SEC));
- BOOST_CHECK_EQUAL(m.getData(), "one");
- BOOST_CHECK_EQUAL(m.getDeliveryProperties().getExchange(), "ext");
- BOOST_CHECK_EQUAL(m.getDeliveryProperties().getRoutingKey(), "bar");
-
- BOOST_CHECK(r.subs.get(m, "qb", TIME_SEC));
- BOOST_CHECK_EQUAL(m.getData(), "two");
- BOOST_CHECK_EQUAL(m.getDeliveryProperties().getExchange(), "ext");
- BOOST_CHECK_EQUAL(m.getDeliveryProperties().getRoutingKey(), "bar");
-
- // Verify bindings
- r.session.messageTransfer(arg::destination="exd", arg::content=Message("xxx", "foo"));
- BOOST_CHECK(r.subs.get(m, "qa"));
- BOOST_CHECK_EQUAL(m.getData(), "xxx");
-
- r.session.messageTransfer(arg::destination="ext", arg::content=Message("yyy", "bar"));
- BOOST_CHECK(r.subs.get(m, "qb"));
- BOOST_CHECK_EQUAL(m.getData(), "yyy");
-
- r.session.close();
- r.connection.close();
- }
-}
-
// FIXME aconway 2008-09-12: finish the new join protocol.
QPID_AUTO_TEST_CASE_EXPECTED_FAILURES(testCatchUpSharedState, 1) {
@@ -278,7 +190,7 @@ QPID_AUTO_TEST_CASE(testStall) {
BOOST_REQUIRE(q0);
BOOST_CHECK_EQUAL(q0->getMessageCount(), (unsigned)0);
// Now unstall and we should get the message.
- getGlobalCluster().unStall();
+ getGlobalCluster().ready();
Message m;
BOOST_CHECK(c0.subs.get(m, "q", TIME_SEC));
BOOST_CHECK_EQUAL(m.getData(), "foo");