summaryrefslogtreecommitdiff
path: root/cpp/src/tests
diff options
context:
space:
mode:
authorAlan Conway <aconway@apache.org>2007-06-07 14:29:24 +0000
committerAlan Conway <aconway@apache.org>2007-06-07 14:29:24 +0000
commit50cd0cd44deb7b5c90e71eed1c9f3cf1666a70fe (patch)
tree640da8126854a4e07c11ca73216b932c84e9d445 /cpp/src/tests
parentfca1397c9ee37e92b57fd419186182cbec567435 (diff)
downloadqpid-python-50cd0cd44deb7b5c90e71eed1c9f3cf1666a70fe.tar.gz
Build support for clustering, initial CPG wrapper & tests.
- src/qpid/cluster/Cpg.cpp: C++ wrapper for the openais CPG library. - src/tests/unit/Cpg.cpp: verify CPG functions in make check. - makefiles etc.: build cluster stuff only if openais is installed. git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@545190 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/tests')
-rw-r--r--cpp/src/tests/Makefile.am14
-rw-r--r--cpp/src/tests/README2
-rwxr-xr-xcpp/src/tests/ais_unit_tests2
-rw-r--r--cpp/src/tests/cluster.mk23
-rwxr-xr-xcpp/src/tests/run-python-tests0
-rw-r--r--cpp/src/tests/unit/Cpg.cpp97
-rw-r--r--cpp/src/tests/unit/logging.cpp1
-rw-r--r--cpp/src/tests/unit/test_tools.h2
8 files changed, 135 insertions, 6 deletions
diff --git a/cpp/src/tests/Makefile.am b/cpp/src/tests/Makefile.am
index c351408988..9649ce354f 100644
--- a/cpp/src/tests/Makefile.am
+++ b/cpp/src/tests/Makefile.am
@@ -1,14 +1,19 @@
AM_CXXFLAGS = $(WARNING_CFLAGS) $(CPPUNIT_CXXFLAGS) $(APR_CXXFLAGS)
INCLUDES = -I$(srcdir)/.. -I$(srcdir)/../gen -I$(top_builddir)/src/gen
-
-# Unit test programs
+#
+# Unit test programs.
+#
UNIT_TESTS=
UNIT_TESTS+=logging
logging_SOURCES=unit/logging.cpp unit/test_tools.h
logging_LDADD=-lboost_unit_test_framework -lboost_regex $(lib_common)
+if CLUSTER
+include cluster.mk
+endif
+
# NB: CppUnit test libraries below will be migrated to boost test programs.
# UNIT_TESTS+= ...
@@ -63,7 +68,8 @@ testprogs = \
topic_listener \
topic_publisher
-check_PROGRAMS = $(UNIT_TESTS) $(testprogs) interop_runner
+
+check_PROGRAMS = $(UNIT_TESTS) $(AIS_UNIT_TESTS) $(testprogs) interop_runner
# FIXME aconway 2007-05-30: TESTS_ENVIRONMENT should have ./run_test
# as below to run valgrind on all test programs.
@@ -73,7 +79,7 @@ check_PROGRAMS = $(UNIT_TESTS) $(testprogs) interop_runner
TESTS_ENVIRONMENT = VALGRIND=$(VALGRIND) srcdir=$(srcdir)
SYSTEM_TESTS = client_test quick_topictest
-TESTS = $(UNIT_TESTS) run-unit-tests start_broker $(SYSTEM_TESTS) python_tests kill_broker daemon_test
+TESTS = $(UNIT_TESTS) run-unit-tests $(RUN_AIS_TESTS) start_broker $(SYSTEM_TESTS) python_tests kill_broker daemon_test
EXTRA_DIST = \
test_env \
diff --git a/cpp/src/tests/README b/cpp/src/tests/README
index d0552a2ddd..2501ba1f21 100644
--- a/cpp/src/tests/README
+++ b/cpp/src/tests/README
@@ -57,7 +57,7 @@ They are listed in the TESTS make variable, which can be over-ridden.
The ./start_broker "test" launches the broker, ./kill_broker" kills it.
Tests in between assume the broker is running.
-./run-python-tests: runs ../python/run_tests. This is the main set of
+./python_tests: runs ../python/run_tests. This is the main set of
system testss for the broker.
Other C++ client test executables and scripts under client/test are
diff --git a/cpp/src/tests/ais_unit_tests b/cpp/src/tests/ais_unit_tests
new file mode 100755
index 0000000000..9758891891
--- /dev/null
+++ b/cpp/src/tests/ais_unit_tests
@@ -0,0 +1,2 @@
+#!/bin/sh
+make check-ais
diff --git a/cpp/src/tests/cluster.mk b/cpp/src/tests/cluster.mk
new file mode 100644
index 0000000000..489eec748e
--- /dev/null
+++ b/cpp/src/tests/cluster.mk
@@ -0,0 +1,23 @@
+#-*-Makefile-*-
+# Cluster tests makefile fragment, to be included in Makefile.am
+#
+
+lib_cluster = $(abs_builddir)/../libqpidcluster.la
+#
+# AIS_UNIT_TESTS must be called with gid=ais. They are run
+# separately under sudo -u ais.
+#
+AIS_UNIT_TESTS=
+
+AIS_UNIT_TESTS+=Cpg
+Cpg_SOURCES=unit/Cpg.cpp
+Cpg_LDADD=-lboost_unit_test_framework $(lib_cluster)
+
+RUN_AIS_TESTS=ais_unit_tests # Run ais unit tests via check-ais.
+
+# The chmod is a horrible hack to allow libtools annoying wrapers to
+# relink the executable when run as user ais.
+check-ais: $(AIS_UNIT_TESTS)
+ chmod a+rwx . .libs
+ sudo -u ais $(MAKE) check TESTS=$(AIS_UNIT_TESTS)
+
diff --git a/cpp/src/tests/run-python-tests b/cpp/src/tests/run-python-tests
deleted file mode 100755
index e69de29bb2..0000000000
--- a/cpp/src/tests/run-python-tests
+++ /dev/null
diff --git a/cpp/src/tests/unit/Cpg.cpp b/cpp/src/tests/unit/Cpg.cpp
new file mode 100644
index 0000000000..74c6532338
--- /dev/null
+++ b/cpp/src/tests/unit/Cpg.cpp
@@ -0,0 +1,97 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+#define BOOST_AUTO_TEST_MAIN // Must come before #include<boost/test/*>
+#include "test_tools.h"
+#include "qpid/cluster/Cpg.h"
+#include <string>
+#include <iostream>
+#include <iterator>
+#include <vector>
+#include <algorithm>
+
+using namespace std;
+using namespace qpid::cluster;
+
+// For debugging: op << for CPG types.
+
+ostream& operator<<(ostream& o, const cpg_name* n) {
+ return o << qpid::cluster::Cpg::str(*n);
+}
+
+ostream& operator<<(ostream& o, const cpg_address& a) {
+ return o << "(" << a.nodeid <<","<<a.pid<<","<<a.reason<<")";
+}
+
+template <class T>
+ostream& operator<<(ostream& o, const pair<T*, int>& array) {
+ o << "{ ";
+ ostream_iterator<cpg_address> i(o, " ");
+ copy(array.first, array.first+array.second, i);
+ cout << "}";
+ return o;
+}
+
+const string testGroup("foo");
+vector<string> delivered;
+vector<int> configChanges;
+
+void testDeliver (
+ cpg_handle_t /*handle*/,
+ struct cpg_name *group,
+ uint32_t /*nodeid*/,
+ uint32_t /*pid*/,
+ void* msg,
+ int msg_len)
+{
+ BOOST_CHECK_EQUAL(testGroup, Cpg::str(*group));
+ delivered.push_back(string((char*)msg,msg_len));
+}
+
+void testConfigChange(
+ cpg_handle_t /*handle*/,
+ struct cpg_name *group,
+ struct cpg_address */*members*/, int nMembers,
+ struct cpg_address */*left*/, int /*nLeft*/,
+ struct cpg_address */*joined*/, int /*nJoined*/
+)
+{
+ BOOST_CHECK_EQUAL(testGroup, Cpg::str(*group));
+ configChanges.push_back(nMembers);
+}
+
+BOOST_AUTO_TEST_CASE(basic) {
+ // Verify basic functionality of cpg. This will catch any
+ // openais configuration or permission errors.
+ //
+ Cpg cpg(&testDeliver, &testConfigChange);
+ Cpg::Name group("foo");
+
+ cpg.join(group);
+ iovec iov = { (void*)"Hello!", 6 };
+ cpg.mcast(group, &iov, 1);
+ cpg.leave(group);
+
+ cpg.dispatch(CPG_DISPATCH_ONE); // Wait for at least one.
+ cpg.dispatch(CPG_DISPATCH_ALL);
+ BOOST_REQUIRE_EQUAL(1u, delivered.size());
+ BOOST_CHECK_EQUAL("Hello!", delivered.front());
+ BOOST_REQUIRE_EQUAL(2u, configChanges.size());
+ BOOST_CHECK_EQUAL(1, configChanges[0]);
+ BOOST_CHECK_EQUAL(0, configChanges[1]);
+}
diff --git a/cpp/src/tests/unit/logging.cpp b/cpp/src/tests/unit/logging.cpp
index 3dbe68ad2b..c80bf7b337 100644
--- a/cpp/src/tests/unit/logging.cpp
+++ b/cpp/src/tests/unit/logging.cpp
@@ -16,6 +16,7 @@
*
*/
+#define BOOST_AUTO_TEST_MAIN // Must come before #include<boost/test/*>
#include "test_tools.h"
#include "qpid/log/Logger.h"
#include "qpid/log/Options.h"
diff --git a/cpp/src/tests/unit/test_tools.h b/cpp/src/tests/unit/test_tools.h
index a941cf40eb..faa198af9a 100644
--- a/cpp/src/tests/unit/test_tools.h
+++ b/cpp/src/tests/unit/test_tools.h
@@ -19,7 +19,6 @@
*
*/
-#define BOOST_AUTO_TEST_MAIN // Must come before #include<boost/test/*>
#include <boost/test/auto_unit_test.hpp>
#include <boost/assign/list_of.hpp>
#include <boost/regex.hpp>
@@ -51,3 +50,4 @@ inline bool regexPredicate(const std::string& re, const std::string& text) {
BOOST_CHECK_PREDICATE(regexPredicate, (re)(text))
#endif /*!TEST_TOOLS_H*/
+