diff options
author | Rajith Muditha Attapattu <rajith@apache.org> | 2011-05-27 15:44:23 +0000 |
---|---|---|
committer | Rajith Muditha Attapattu <rajith@apache.org> | 2011-05-27 15:44:23 +0000 |
commit | 66765100f4257159622cefe57bed50125a5ad017 (patch) | |
tree | a88ee23bb194eb91f0ebb2d9b23ff423e3ea8e37 /cpp/src/tests/TopicExchangeTest.cpp | |
parent | 1aeaa7b16e5ce54f10c901d75c4d40f9f88b9db6 (diff) | |
parent | 88b98b2f4152ef59a671fad55a0d08338b6b78ca (diff) | |
download | qpid-python-rajith_jms_client.tar.gz |
Creating a branch for experimenting with some ideas for JMS client.rajith_jms_client
git-svn-id: https://svn.apache.org/repos/asf/qpid/branches/rajith_jms_client@1128369 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/tests/TopicExchangeTest.cpp')
-rw-r--r-- | cpp/src/tests/TopicExchangeTest.cpp | 406 |
1 files changed, 0 insertions, 406 deletions
diff --git a/cpp/src/tests/TopicExchangeTest.cpp b/cpp/src/tests/TopicExchangeTest.cpp deleted file mode 100644 index ff8931f9c9..0000000000 --- a/cpp/src/tests/TopicExchangeTest.cpp +++ /dev/null @@ -1,406 +0,0 @@ -/* - * 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. - */ -#include "qpid/broker/TopicExchange.h" -#include "unit_test.h" -#include "test_tools.h" - -using namespace qpid::broker; -using namespace std; - - -namespace qpid { -namespace broker { - -// Class for exercising the pattern match code in the TopicExchange -class TopicExchange::TopicExchangeTester { - -public: - typedef std::vector<std::string> BindingVec; - -private: - // binding node iterator that collects all routes that are bound - class TestFinder : public TopicExchange::BindingNode::TreeIterator { - public: - TestFinder(BindingVec& m) : bv(m) {}; - ~TestFinder() {}; - bool visit(BindingNode& node) { - if (!node.bindings.bindingVector.empty()) - bv.push_back(node.routePattern); - return true; - } - - BindingVec& bv; - }; - -public: - TopicExchangeTester() {}; - ~TopicExchangeTester() {}; - bool addBindingKey(const std::string& bKey) { - string routingPattern = normalize(bKey); - BindingKey *bk = bindingTree.addBindingKey(routingPattern); - if (bk) { - // push a dummy binding to mark this node as "non-leaf" - bk->bindingVector.push_back(Binding::shared_ptr()); - return true; - } - return false; - } - - bool removeBindingKey(const std::string& bKey){ - string routingPattern = normalize(bKey); - BindingKey *bk = bindingTree.getBindingKey(routingPattern); - if (bk) { - bk->bindingVector.pop_back(); - if (bk->bindingVector.empty()) { - // no more bindings - remove this node - bindingTree.removeBindingKey(routingPattern); - } - return true; - } - return false; - } - - void findMatches(const std::string& rKey, BindingVec& matches) { - TestFinder testFinder(matches); - bindingTree.iterateMatch( rKey, testFinder ); - } - - void getAll(BindingVec& bindings) { - TestFinder testFinder(bindings); - bindingTree.iterateAll( testFinder ); - } - -private: - TopicExchange::BindingNode bindingTree; -}; -} // namespace broker - - -namespace tests { - -QPID_AUTO_TEST_SUITE(TopicExchangeTestSuite) - -#define CHECK_NORMALIZED(expect, pattern) BOOST_CHECK_EQUAL(expect, TopicExchange::normalize(pattern)); - -namespace { - // return the count of bindings that match 'pattern' - int match(TopicExchange::TopicExchangeTester &tt, - const std::string& pattern) - { - TopicExchange::TopicExchangeTester::BindingVec bv; - tt.findMatches(pattern, bv); - return int(bv.size()); - } - - // return true if expected contains exactly all bindings that match - // against pattern. - bool compare(TopicExchange::TopicExchangeTester& tt, - const std::string& pattern, - const TopicExchange::TopicExchangeTester::BindingVec& expected) - { - TopicExchange::TopicExchangeTester::BindingVec bv; - tt.findMatches(pattern, bv); - if (expected.size() != bv.size()) { - // std::cout << "match failed 1 f=[" << bv << "]" << std::endl; - // std::cout << "match failed 1 e=[" << expected << "]" << std::endl; - return false; - } - TopicExchange::TopicExchangeTester::BindingVec::const_iterator i; - for (i = expected.begin(); i != expected.end(); i++) { - TopicExchange::TopicExchangeTester::BindingVec::iterator j; - for (j = bv.begin(); j != bv.end(); j++) { - // std::cout << "matched [" << *j << "]" << std::endl; - if (*i == *j) break; - } - if (j == bv.end()) { - // std::cout << "match failed 2 [" << bv << "]" << std::endl; - return false; - } - } - return true; - } -} - - -QPID_AUTO_TEST_CASE(testNormalize) -{ - CHECK_NORMALIZED("", ""); - CHECK_NORMALIZED("a.b.c", "a.b.c"); - CHECK_NORMALIZED("a.*.c", "a.*.c"); - CHECK_NORMALIZED("#", "#"); - CHECK_NORMALIZED("#", "#.#.#.#"); - CHECK_NORMALIZED("*.*.*.#", "#.*.#.*.#.#.*"); - CHECK_NORMALIZED("a.*.*.*.#", "a.*.#.*.#.*.#"); - CHECK_NORMALIZED("a.*.*.*.#", "a.*.#.*.#.*"); - CHECK_NORMALIZED("*.*.*.#", "*.#.#.*.*.#"); -} - -QPID_AUTO_TEST_CASE(testPlain) -{ - TopicExchange::TopicExchangeTester tt; - string pattern("ab.cd.e"); - - BOOST_CHECK(tt.addBindingKey(pattern)); - BOOST_CHECK_EQUAL(1, match(tt, "ab.cd.e")); - BOOST_CHECK_EQUAL(0, match(tt, "abx.cd.e")); - BOOST_CHECK_EQUAL(0, match(tt, "ab.cd")); - BOOST_CHECK_EQUAL(0, match(tt, "ab.cd..e.")); - BOOST_CHECK_EQUAL(0, match(tt, "ab.cd.e.")); - BOOST_CHECK_EQUAL(0, match(tt, ".ab.cd.e")); - BOOST_CHECK(tt.removeBindingKey(pattern)); - - pattern = ""; - BOOST_CHECK(tt.addBindingKey(pattern)); - BOOST_CHECK_EQUAL(1, match(tt, "")); - BOOST_CHECK(tt.removeBindingKey(pattern)); - - pattern = "."; - BOOST_CHECK(tt.addBindingKey(pattern)); - BOOST_CHECK_EQUAL(1, match(tt, ".")); - BOOST_CHECK(tt.removeBindingKey(pattern)); -} - - -QPID_AUTO_TEST_CASE(testStar) -{ - TopicExchange::TopicExchangeTester tt; - string pattern("a.*.b"); - BOOST_CHECK(tt.addBindingKey(pattern)); - BOOST_CHECK_EQUAL(1, match(tt, "a.xx.b")); - BOOST_CHECK_EQUAL(0, match(tt, "a.b")); - BOOST_CHECK(tt.removeBindingKey(pattern)); - - pattern = "*.x"; - BOOST_CHECK(tt.addBindingKey(pattern)); - BOOST_CHECK_EQUAL(1, match(tt, "y.x")); - BOOST_CHECK_EQUAL(1, match(tt, ".x")); - BOOST_CHECK_EQUAL(0, match(tt, "x")); - BOOST_CHECK(tt.removeBindingKey(pattern)); - - pattern = "x.x.*"; - BOOST_CHECK(tt.addBindingKey(pattern)); - BOOST_CHECK_EQUAL(1, match(tt, "x.x.y")); - BOOST_CHECK_EQUAL(1, match(tt, "x.x.")); - BOOST_CHECK_EQUAL(0, match(tt, "x.x")); - BOOST_CHECK_EQUAL(0, match(tt, "q.x.y")); - BOOST_CHECK(tt.removeBindingKey(pattern)); -} - -QPID_AUTO_TEST_CASE(testHash) -{ - TopicExchange::TopicExchangeTester tt; - string pattern("a.#.b"); - BOOST_CHECK(tt.addBindingKey(pattern)); - BOOST_CHECK_EQUAL(1, match(tt, "a.b")); - BOOST_CHECK_EQUAL(1, match(tt, "a.x.b")); - BOOST_CHECK_EQUAL(1, match(tt, "a..x.y.zz.b")); - BOOST_CHECK_EQUAL(0, match(tt, "a.b.")); - BOOST_CHECK_EQUAL(0, match(tt, "q.x.b")); - BOOST_CHECK(tt.removeBindingKey(pattern)); - - pattern = "a.#"; - BOOST_CHECK(tt.addBindingKey(pattern)); - BOOST_CHECK_EQUAL(1, match(tt, "a")); - BOOST_CHECK_EQUAL(1, match(tt, "a.b")); - BOOST_CHECK_EQUAL(1, match(tt, "a.b.c")); - BOOST_CHECK(tt.removeBindingKey(pattern)); - - pattern = "#.a"; - BOOST_CHECK(tt.addBindingKey(pattern)); - BOOST_CHECK_EQUAL(1, match(tt, "a")); - BOOST_CHECK_EQUAL(1, match(tt, "x.y.a")); - BOOST_CHECK(tt.removeBindingKey(pattern)); - - pattern = "a.#.b.#.c"; - BOOST_CHECK(tt.addBindingKey(pattern)); - BOOST_CHECK_EQUAL(1, match(tt, "a.b.c")); - BOOST_CHECK_EQUAL(1, match(tt, "a.x.b.y.c")); - BOOST_CHECK_EQUAL(1, match(tt, "a.x.x.b.y.y.c")); - BOOST_CHECK(tt.removeBindingKey(pattern)); -} - -QPID_AUTO_TEST_CASE(testMixed) -{ - TopicExchange::TopicExchangeTester tt; - string pattern("*.x.#.y"); - BOOST_CHECK(tt.addBindingKey(pattern)); - BOOST_CHECK_EQUAL(1, match(tt, "a.x.y")); - BOOST_CHECK_EQUAL(1, match(tt, "a.x.p.qq.y")); - BOOST_CHECK_EQUAL(0, match(tt, "a.a.x.y")); - BOOST_CHECK_EQUAL(0, match(tt, "aa.x.b.c")); - BOOST_CHECK(tt.removeBindingKey(pattern)); - - pattern = "a.#.b.*"; - BOOST_CHECK(tt.addBindingKey(pattern)); - BOOST_CHECK_EQUAL(1, match(tt, "a.b.x")); - BOOST_CHECK_EQUAL(1, match(tt, "a.x.x.x.b.x")); - BOOST_CHECK(tt.removeBindingKey(pattern)); - - pattern = "*.*.*.#"; - BOOST_CHECK(tt.addBindingKey(pattern)); - BOOST_CHECK_EQUAL(1, match(tt, "x.y.z")); - BOOST_CHECK_EQUAL(1, match(tt, "x.y.z.a.b.c")); - BOOST_CHECK_EQUAL(0, match(tt, "x.y")); - BOOST_CHECK_EQUAL(0, match(tt, "x")); - BOOST_CHECK(tt.removeBindingKey(pattern)); -} - - -QPID_AUTO_TEST_CASE(testMultiple) -{ - TopicExchange::TopicExchangeTester tt; - const std::string bindings[] = - { "a", "b", - "a.b", "b.c", - "a.b.c.d", "b.c.d.e", - "a.*", "a.#", "a.*.#", - "#.b", "*.b", "*.#.b", - "a.*.b", "a.#.b", "a.*.#.b", - "*.b.*", "#.b.#", - }; - const size_t nBindings = sizeof(bindings)/sizeof(bindings[0]); - - // setup bindings - for (size_t idx = 0; idx < nBindings; idx++) { - BOOST_CHECK(tt.addBindingKey(bindings[idx])); - } - - { - // read all bindings, and verify all are present - TopicExchange::TopicExchangeTester::BindingVec b; - tt.getAll(b); - BOOST_CHECK_EQUAL(b.size(), nBindings); - for (size_t idx = 0; idx < nBindings; idx++) { - bool found = false; - for (TopicExchange::TopicExchangeTester::BindingVec::iterator i = b.begin(); - i != b.end(); i++) { - if (*i == bindings[idx]) { - found = true; - break; - } - } - BOOST_CHECK(found); - } - } - - { // test match on pattern "a" - const std::string matches[] = { "a", "a.#" }; - const size_t nMatches = 2; - TopicExchange::TopicExchangeTester::BindingVec expected(matches, matches + nMatches); - BOOST_CHECK(compare(tt, "a", expected)); - } - - { // test match on pattern "a.z" - const std::string matches[] = { "a.*", "a.#", "a.*.#" }; - const size_t nMatches = 3; - TopicExchange::TopicExchangeTester::BindingVec expected(matches, matches + nMatches); - BOOST_CHECK(compare(tt, "a.z", expected)); - } - - { // test match on pattern "a.b" - const std::string matches[] = { - "a.b", "a.*", "a.#", "a.*.#", - "#.b", "#.b.#", "*.#.b", "*.b", - "a.#.b" - }; - const size_t nMatches = 9; - TopicExchange::TopicExchangeTester::BindingVec expected(matches, matches + nMatches); - BOOST_CHECK(compare(tt, "a.b", expected)); - } - - { // test match on pattern "a.c.c.b" - - const std::string matches[] = { - "#.b", "#.b.#", "*.#.b", "a.#.b", - "a.#", "a.*.#.b", "a.*.#" - }; - const size_t nMatches = 7; - TopicExchange::TopicExchangeTester::BindingVec expected(matches, matches + nMatches); - BOOST_CHECK(compare(tt, "a.c.c.b", expected)); - } - - { // test match on pattern "a.b.c" - - const std::string matches[] = { - "#.b.#", "*.b.*", "a.#", "a.*.#" - }; - const size_t nMatches = 4; - TopicExchange::TopicExchangeTester::BindingVec expected(matches, matches + nMatches); - BOOST_CHECK(compare(tt, "a.b.c", expected)); - } - - { // test match on pattern "b" - - const std::string matches[] = { - "#.b", "#.b.#", "b" - }; - const size_t nMatches = 3; - TopicExchange::TopicExchangeTester::BindingVec expected(matches, matches + nMatches); - BOOST_CHECK(compare(tt, "b", expected)); - } - - { // test match on pattern "x.b" - - const std::string matches[] = { - "#.b", "#.b.#", "*.#.b", "*.b" - }; - const size_t nMatches = 4; - TopicExchange::TopicExchangeTester::BindingVec expected(matches, matches + nMatches); - BOOST_CHECK(compare(tt, "x.b", expected)); - } - - { // test match on pattern "x.y.z.b" - - const std::string matches[] = { - "#.b", "#.b.#", "*.#.b" - }; - const size_t nMatches = 3; - TopicExchange::TopicExchangeTester::BindingVec expected(matches, matches + nMatches); - BOOST_CHECK(compare(tt, "x.y.z.b", expected)); - } - - { // test match on pattern "x.y.z.b.a.b.c" - - const std::string matches[] = { - "#.b.#", "#.b.#" - }; - const size_t nMatches = 2; - TopicExchange::TopicExchangeTester::BindingVec expected(matches, matches + nMatches); - BOOST_CHECK(compare(tt, "x.y.z.b.a.b.c", expected)); - } - - { // test match on pattern "a.b.c.d" - - const std::string matches[] = { - "#.b.#", "a.#", "a.*.#", "a.b.c.d", - }; - const size_t nMatches = 4; - TopicExchange::TopicExchangeTester::BindingVec expected(matches, matches + nMatches); - BOOST_CHECK(compare(tt, "a.b.c.d", expected)); - } - - // cleanup bindings - for (size_t idx = 0; idx < nBindings; idx++) { - BOOST_CHECK(tt.removeBindingKey(bindings[idx])); - } -} - -QPID_AUTO_TEST_SUITE_END() - -}} // namespace qpid::tests |