diff options
| author | Charles E. Rolke <chug@apache.org> | 2013-04-29 20:20:23 +0000 |
|---|---|---|
| committer | Charles E. Rolke <chug@apache.org> | 2013-04-29 20:20:23 +0000 |
| commit | 426fad506f4d569626431fe8f61619b12677c3a3 (patch) | |
| tree | 540ad8d1eeadc172907667b24e664b5b5c32c7cb /qpid/cpp/src/tests/HeadersExchangeTest.cpp | |
| parent | 170134a81e51549f2e22c0d96303e5ab8be6fec9 (diff) | |
| download | qpid-python-426fad506f4d569626431fe8f61619b12677c3a3.tar.gz | |
QPID-4720: C++ Broker headers exchange tests not using run-time comaprisons.
Main code modified only slighty so that tests can hook into actual logic.
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1477317 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/cpp/src/tests/HeadersExchangeTest.cpp')
| -rw-r--r-- | qpid/cpp/src/tests/HeadersExchangeTest.cpp | 130 |
1 files changed, 102 insertions, 28 deletions
diff --git a/qpid/cpp/src/tests/HeadersExchangeTest.cpp b/qpid/cpp/src/tests/HeadersExchangeTest.cpp index 40deb59c86..3e68b84bc3 100644 --- a/qpid/cpp/src/tests/HeadersExchangeTest.cpp +++ b/qpid/cpp/src/tests/HeadersExchangeTest.cpp @@ -21,12 +21,15 @@ #include "qpid/Exception.h" #include "qpid/broker/HeadersExchange.h" +#include "qpid/broker/Message.h" #include "qpid/framing/FieldTable.h" #include "qpid/framing/FieldValue.h" +#include "MessageUtils.h" #include "unit_test.h" using namespace qpid::broker; using namespace qpid::framing; +using namespace qpid::types; namespace qpid { namespace tests { @@ -35,70 +38,80 @@ QPID_AUTO_TEST_SUITE(HeadersExchangeTestSuite) QPID_AUTO_TEST_CASE(testMatchAll) { - FieldTable b, m, n; + FieldTable b; b.setString("x-match", "all"); b.setString("foo", "FOO"); b.setInt("n", 42); - m.setString("foo", "FOO"); - m.setInt("n", 42); - BOOST_CHECK(HeadersExchange::match(b, m)); + + Variant::Map m; + const int32_t int_n(42); + m["foo"] = "FOO"; + m["n"] = int_n; + BOOST_CHECK(HeadersExchange::match(b, MessageUtils::createMessage(m, "", "", true))); // Ignore extras. - m.setString("extra", "x"); - BOOST_CHECK(HeadersExchange::match(b, m)); + m["extra"] = "x"; + BOOST_CHECK(HeadersExchange::match(b, MessageUtils::createMessage(m, "", "", true))); // Fail mismatch, wrong value. - m.setString("foo", "NotFoo"); - BOOST_CHECK(!HeadersExchange::match(b, m)); + m["foo"] = "NotFoo"; + BOOST_CHECK(!HeadersExchange::match(b, MessageUtils::createMessage(m, "", "", true))); // Fail mismatch, missing value - n.setInt("n", 42); - n.setString("extra", "x"); - BOOST_CHECK(!HeadersExchange::match(b, n)); + Variant::Map n; + n["n"] = int_n; + n["extra"] = "x"; + BOOST_CHECK(!HeadersExchange::match(b, MessageUtils::createMessage(n, "", "", true))); } QPID_AUTO_TEST_CASE(testMatchAny) { - FieldTable b, m, n; + FieldTable b; b.setString("x-match", "any"); b.setString("foo", "FOO"); b.setInt("n", 42); - m.setString("foo", "FOO"); - BOOST_CHECK(!HeadersExchange::match(b, n)); - BOOST_CHECK(HeadersExchange::match(b, m)); - m.setInt("n", 42); - BOOST_CHECK(HeadersExchange::match(b, m)); + + Variant::Map n; + Variant::Map m; + m["foo"] = "FOO"; + BOOST_CHECK(!HeadersExchange::match(b, MessageUtils::createMessage(n, "", "", true))); + BOOST_CHECK(HeadersExchange::match(b, MessageUtils::createMessage(m, "", "", true))); + const int32_t int_n(42); + m["n"] = int_n; + BOOST_CHECK(HeadersExchange::match(b, MessageUtils::createMessage(m, "", "", true))); } QPID_AUTO_TEST_CASE(testMatchEmptyValue) { - FieldTable b, m; + FieldTable b; b.setString("x-match", "all"); b.set("foo", FieldTable::ValuePtr()); b.set("n", FieldTable::ValuePtr()); - BOOST_CHECK(!HeadersExchange::match(b, m)); - m.setString("foo", "blah"); - m.setInt("n", 123); + Variant::Map m; + BOOST_CHECK(!HeadersExchange::match(b, MessageUtils::createMessage(m, "", "", true))); } QPID_AUTO_TEST_CASE(testMatchEmptyArgs) { - FieldTable b, m; - m.setString("foo", "FOO"); + FieldTable b; + Variant::Map m; + m["foo"] = "FOO"; + Message msg = MessageUtils::createMessage(m, "", "", true); b.setString("x-match", "all"); - BOOST_CHECK(HeadersExchange::match(b, m)); + BOOST_CHECK(HeadersExchange::match(b, msg)); b.setString("x-match", "any"); - BOOST_CHECK(!HeadersExchange::match(b, m)); + BOOST_CHECK(!HeadersExchange::match(b, msg)); } QPID_AUTO_TEST_CASE(testMatchNoXMatch) { - FieldTable b, m; + FieldTable b; b.setString("foo", "FOO"); - m.setString("foo", "FOO"); - BOOST_CHECK(!HeadersExchange::match(b, m)); + Variant::Map m; + m["foo"] = "FOO"; + BOOST_CHECK(!HeadersExchange::match(b, MessageUtils::createMessage(m, "", "", true))); } QPID_AUTO_TEST_CASE(testBindNoXMatch) @@ -115,6 +128,67 @@ QPID_AUTO_TEST_CASE(testBindNoXMatch) } } + +QPID_AUTO_TEST_CASE(testMatchSizedIntUint) +{ + typedef std::list<Variant::Map> vml; + + const int8_t i8(1); + const int16_t i16(1); + const int32_t i32(1); + const int64_t i64(1); + const uint8_t u8(1); + const uint16_t u16(1); + const uint32_t u32(1); + const uint64_t u64(1); + + Variant::Map mi8, mi16, mi32, mi64; + Variant::Map mu8, mu16, mu32, mu64; + + mi8["bk"] = i8; + mi16["bk"] = i16; + mi32["bk"] = i32; + mi64["bk"] = i64; + mu8["bk"] = u8; + mu16["bk"] = u16; + mu32["bk"] = u32; + mu64["bk"] = u64; + + vml mMap; + mMap.push_back(mi8); + mMap.push_back(mi16); + mMap.push_back(mi32); + mMap.push_back(mi64); + mMap.push_back(mu8); + mMap.push_back(mu16); + mMap.push_back(mu32); + mMap.push_back(mu64); + + for (vml::iterator bVal=mMap.begin(); bVal!=mMap.end(); ++bVal) { + FieldTable b; + qpid::amqp_0_10::translate(*bVal, b); + b.setString("x-match", "all"); + for (vml::iterator mVal=mMap.begin(); mVal!=mMap.end(); ++mVal) { + BOOST_CHECK(HeadersExchange::match(b, MessageUtils::createMessage(*mVal, "", "", true))); + } + } +} + +// TODO: Headers exchange match on single + +QPID_AUTO_TEST_CASE(testMatchFloatDouble) +{ + const double iFloat(1.0); + Variant::Map m; + m["bk"] = iFloat; + + FieldTable b; + qpid::amqp_0_10::translate(m, b); + b.setString("x-match", "all"); + BOOST_CHECK(HeadersExchange::match(b, MessageUtils::createMessage(m, "", "", true))); +} + + QPID_AUTO_TEST_SUITE_END() }} // namespace qpid::tests |
