diff options
Diffstat (limited to 'cpp/src/tests')
-rw-r--r-- | cpp/src/tests/TopicExchangeTest.cpp | 192 |
1 files changed, 73 insertions, 119 deletions
diff --git a/cpp/src/tests/TopicExchangeTest.cpp b/cpp/src/tests/TopicExchangeTest.cpp index af4263de34..d707066534 100644 --- a/cpp/src/tests/TopicExchangeTest.cpp +++ b/cpp/src/tests/TopicExchangeTest.cpp @@ -21,147 +21,101 @@ #include "test_tools.h" using namespace qpid::broker; - -Tokens makeTokens(const char** begin, const char** end) -{ - Tokens t; - t.insert(t.end(), begin, end); - return t; -} - -// Calculate size of an array. -#define LEN(a) (sizeof(a)/sizeof(a[0])) - -// Convert array to token vector -#define TOKENS(a) makeTokens(a, a + LEN(a)) - -#define ASSERT_NORMALIZED(expect, pattern) \ - BOOST_CHECK_EQUAL(Tokens(expect), static_cast<Tokens>(TopicPattern(pattern))) - - +using namespace std; QPID_AUTO_TEST_SUITE(TopicExchangeTestSuite) -QPID_AUTO_TEST_CASE(testTokens) -{ - Tokens tokens("hello.world"); - const char* expect[] = {"hello", "world"}; - BOOST_CHECK_EQUAL(TOKENS(expect), tokens); - - tokens = "a.b.c"; - const char* expect2[] = { "a", "b", "c" }; - BOOST_CHECK_EQUAL(TOKENS(expect2), tokens); - - tokens = ""; - BOOST_CHECK(tokens.empty()); - - tokens = "x"; - const char* expect3[] = { "x" }; - BOOST_CHECK_EQUAL(TOKENS(expect3), tokens); - - tokens = (".x"); - const char* expect4[] = { "", "x" }; - BOOST_CHECK_EQUAL(TOKENS(expect4), tokens); - - tokens = ("x."); - const char* expect5[] = { "x", "" }; - BOOST_CHECK_EQUAL(TOKENS(expect5), tokens); - - tokens = ("."); - const char* expect6[] = { "", "" }; - BOOST_CHECK_EQUAL(TOKENS(expect6), tokens); - - tokens = (".."); - const char* expect7[] = { "", "", "" }; - BOOST_CHECK_EQUAL(TOKENS(expect7), tokens); -} +#define CHECK_NORMALIZED(expect, pattern) BOOST_CHECK_EQUAL(expect, TopicExchange::normalize(pattern)); QPID_AUTO_TEST_CASE(testNormalize) { - BOOST_CHECK(TopicPattern("").empty()); - ASSERT_NORMALIZED("a.b.c", "a.b.c"); - ASSERT_NORMALIZED("a.*.c", "a.*.c"); - ASSERT_NORMALIZED("#", "#"); - ASSERT_NORMALIZED("#", "#.#.#.#"); - ASSERT_NORMALIZED("*.*.*.#", "#.*.#.*.#.#.*"); - ASSERT_NORMALIZED("a.*.*.*.#", "a.*.#.*.#.*.#"); - ASSERT_NORMALIZED("a.*.*.*.#", "a.*.#.*.#.*"); + 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) { - TopicPattern p("ab.cd.e"); - BOOST_CHECK(p.match("ab.cd.e")); - BOOST_CHECK(!p.match("abx.cd.e")); - BOOST_CHECK(!p.match("ab.cd")); - BOOST_CHECK(!p.match("ab.cd..e.")); - BOOST_CHECK(!p.match("ab.cd.e.")); - BOOST_CHECK(!p.match(".ab.cd.e")); - - p = ""; - BOOST_CHECK(p.match("")); - - p = "."; - BOOST_CHECK(p.match(".")); + string pattern("ab.cd.e"); + BOOST_CHECK(TopicExchange::match(pattern, "ab.cd.e")); + BOOST_CHECK(!TopicExchange::match(pattern, "abx.cd.e")); + BOOST_CHECK(!TopicExchange::match(pattern, "ab.cd")); + BOOST_CHECK(!TopicExchange::match(pattern, "ab.cd..e.")); + BOOST_CHECK(!TopicExchange::match(pattern, "ab.cd.e.")); + BOOST_CHECK(!TopicExchange::match(pattern, ".ab.cd.e")); + + pattern = ""; + BOOST_CHECK(TopicExchange::match(pattern, "")); + + pattern = "."; + BOOST_CHECK(TopicExchange::match(pattern, ".")); } QPID_AUTO_TEST_CASE(testStar) { - TopicPattern p("a.*.b"); - BOOST_CHECK(p.match("a.xx.b")); - BOOST_CHECK(!p.match("a.b")); - - p = "*.x"; - BOOST_CHECK(p.match("y.x")); - BOOST_CHECK(p.match(".x")); - BOOST_CHECK(!p.match("x")); - - p = "x.x.*"; - BOOST_CHECK(p.match("x.x.y")); - BOOST_CHECK(p.match("x.x.")); - BOOST_CHECK(!p.match("x.x")); - BOOST_CHECK(!p.match("q.x.y")); + string pattern("a.*.b"); + BOOST_CHECK(TopicExchange::match(pattern, "a.xx.b")); + BOOST_CHECK(!TopicExchange::match(pattern, "a.b")); + + pattern = "*.x"; + BOOST_CHECK(TopicExchange::match(pattern, "y.x")); + BOOST_CHECK(TopicExchange::match(pattern, ".x")); + BOOST_CHECK(!TopicExchange::match(pattern, "x")); + + pattern = "x.x.*"; + BOOST_CHECK(TopicExchange::match(pattern, "x.x.y")); + BOOST_CHECK(TopicExchange::match(pattern, "x.x.")); + BOOST_CHECK(!TopicExchange::match(pattern, "x.x")); + BOOST_CHECK(!TopicExchange::match(pattern, "q.x.y")); } QPID_AUTO_TEST_CASE(testHash) { - TopicPattern p("a.#.b"); - BOOST_CHECK(p.match("a.b")); - BOOST_CHECK(p.match("a.x.b")); - BOOST_CHECK(p.match("a..x.y.zz.b")); - BOOST_CHECK(!p.match("a.b.")); - BOOST_CHECK(!p.match("q.x.b")); - - p = "a.#"; - BOOST_CHECK(p.match("a")); - BOOST_CHECK(p.match("a.b")); - BOOST_CHECK(p.match("a.b.c")); - - p = "#.a"; - BOOST_CHECK(p.match("a")); - BOOST_CHECK(p.match("x.y.a")); + string pattern("a.#.b"); + BOOST_CHECK(TopicExchange::match(pattern, "a.b")); + BOOST_CHECK(TopicExchange::match(pattern, "a.x.b")); + BOOST_CHECK(TopicExchange::match(pattern, "a..x.y.zz.b")); + BOOST_CHECK(!TopicExchange::match(pattern, "a.b.")); + BOOST_CHECK(!TopicExchange::match(pattern, "q.x.b")); + + pattern = "a.#"; + BOOST_CHECK(TopicExchange::match(pattern, "a")); + BOOST_CHECK(TopicExchange::match(pattern, "a.b")); + BOOST_CHECK(TopicExchange::match(pattern, "a.b.c")); + + pattern = "#.a"; + BOOST_CHECK(TopicExchange::match(pattern, "a")); + BOOST_CHECK(TopicExchange::match(pattern, "x.y.a")); + + pattern = "a.#.b.#.c"; + BOOST_CHECK(TopicExchange::match(pattern, "a.b.c")); + BOOST_CHECK(TopicExchange::match(pattern, "a.x.b.y.c")); + BOOST_CHECK(TopicExchange::match(pattern, "a.x.x.b.y.y.c")); } QPID_AUTO_TEST_CASE(testMixed) { - TopicPattern p("*.x.#.y"); - BOOST_CHECK(p.match("a.x.y")); - BOOST_CHECK(p.match("a.x.p.qq.y")); - BOOST_CHECK(!p.match("a.a.x.y")); - BOOST_CHECK(!p.match("aa.x.b.c")); - - p = "a.#.b.*"; - BOOST_CHECK(p.match("a.b.x")); - BOOST_CHECK(p.match("a.x.x.x.b.x")); -} - -QPID_AUTO_TEST_CASE(testCombo) -{ - TopicPattern p("*.#.#.*.*.#"); - BOOST_CHECK(p.match("x.y.z")); - BOOST_CHECK(p.match("x.y.z.a.b.c")); - BOOST_CHECK(!p.match("x.y")); - BOOST_CHECK(!p.match("x")); + string pattern("*.x.#.y"); + BOOST_CHECK(TopicExchange::match(pattern, "a.x.y")); + BOOST_CHECK(TopicExchange::match(pattern, "a.x.p.qq.y")); + BOOST_CHECK(!TopicExchange::match(pattern, "a.a.x.y")); + BOOST_CHECK(!TopicExchange::match(pattern, "aa.x.b.c")); + + pattern = "a.#.b.*"; + BOOST_CHECK(TopicExchange::match(pattern, "a.b.x")); + BOOST_CHECK(TopicExchange::match(pattern, "a.x.x.x.b.x")); + + pattern = "*.*.*.#"; + BOOST_CHECK(TopicExchange::match(pattern, "x.y.z")); + BOOST_CHECK(TopicExchange::match(pattern, "x.y.z.a.b.c")); + BOOST_CHECK(!TopicExchange::match(pattern, "x.y")); + BOOST_CHECK(!TopicExchange::match(pattern, "x")); } QPID_AUTO_TEST_SUITE_END() |