From cd0871c744a4014ed612180ca193e013d8ceead6 Mon Sep 17 00:00:00 2001 From: "Carl C. Trieloff" Date: Mon, 13 Oct 2008 18:07:07 +0000 Subject: QPID-1351 -Support for sequencing messages through an exchange -Related changes - Bug fix for ptr saftey in Headers & FanOut exchange - Added support for int64 and uint64 in fieldvalue / fieldtable - Added tests for fieldtable - Added tests for sequencing message feature. git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk@704192 13f79535-47bb-0310-9956-ffa450edef68 --- qpid/cpp/src/tests/ExchangeTest.cpp | 58 +++++++++++++++++++++++++++++++++++++ qpid/cpp/src/tests/FieldTable.cpp | 13 +++++++++ 2 files changed, 71 insertions(+) (limited to 'qpid/cpp/src/tests') diff --git a/qpid/cpp/src/tests/ExchangeTest.cpp b/qpid/cpp/src/tests/ExchangeTest.cpp index 94ee36065d..711fede950 100644 --- a/qpid/cpp/src/tests/ExchangeTest.cpp +++ b/qpid/cpp/src/tests/ExchangeTest.cpp @@ -165,4 +165,62 @@ QPID_AUTO_TEST_CASE(testDeleteGetAndRedeclare) BOOST_CHECK_EQUAL(string("direct"), response.first->getType()); } +intrusive_ptr cmessage(std::string exchange, std::string routingKey) { + intrusive_ptr msg(new Message()); + AMQFrame method(in_place(ProtocolVersion(), exchange, 0, 0)); + AMQFrame header(in_place()); + msg->getFrames().append(method); + msg->getFrames().append(header); + msg->getFrames().getHeaders()->get(true)->setRoutingKey(routingKey); + return msg; +} + +QPID_AUTO_TEST_CASE(testSequenceOptions) +{ + FieldTable args; + args.setInt("qpid.msg_sequence",1); + + DirectExchange direct("direct1", false, args); + + intrusive_ptr msg1 = cmessage("e", "A"); + intrusive_ptr msg2 = cmessage("e", "B"); + intrusive_ptr msg3 = cmessage("e", "C"); + + DeliverableMessage dmsg1(msg1); + DeliverableMessage dmsg2(msg2); + DeliverableMessage dmsg3(msg3); + + direct.route(dmsg1, "abc", 0); + direct.route(dmsg2, "abc", 0); + direct.route(dmsg3, "abc", 0); + + BOOST_CHECK_EQUAL(1, msg1->getApplicationHeaders()->getAsInt64("qpid.msg_sequence")); + BOOST_CHECK_EQUAL(2, msg2->getApplicationHeaders()->getAsInt64("qpid.msg_sequence")); + BOOST_CHECK_EQUAL(3, msg3->getApplicationHeaders()->getAsInt64("qpid.msg_sequence")); + + FanOutExchange fanout("fanout1", false, args); + HeadersExchange header("headers1", false, args); + TopicExchange topic ("topic1", false, args); + + // check other exchanges, that they preroute + intrusive_ptr msg4 = cmessage("e", "A"); + intrusive_ptr msg5 = cmessage("e", "B"); + intrusive_ptr msg6 = cmessage("e", "C"); + + DeliverableMessage dmsg4(msg4); + DeliverableMessage dmsg5(msg5); + DeliverableMessage dmsg6(msg6); + + fanout.route(dmsg4, "abc", 0); + BOOST_CHECK_EQUAL(1, msg4->getApplicationHeaders()->getAsInt64("qpid.msg_sequence")); + + FieldTable headers; + header.route(dmsg5, "abc", &headers); + BOOST_CHECK_EQUAL(1, msg5->getApplicationHeaders()->getAsInt64("qpid.msg_sequence")); + + topic.route(dmsg6, "abc", 0); + BOOST_CHECK_EQUAL(1, msg6->getApplicationHeaders()->getAsInt64("qpid.msg_sequence")); + +} + QPID_AUTO_TEST_SUITE_END() diff --git a/qpid/cpp/src/tests/FieldTable.cpp b/qpid/cpp/src/tests/FieldTable.cpp index 9c75970278..415461676c 100644 --- a/qpid/cpp/src/tests/FieldTable.cpp +++ b/qpid/cpp/src/tests/FieldTable.cpp @@ -157,4 +157,17 @@ QPID_AUTO_TEST_CASE(testFloatAndDouble) } } +QPID_AUTO_TEST_CASE(test64GetAndSetConverts) +{ + FieldTable args; + args.setInt64("a",100); + + args.setUInt64("b",1u); + BOOST_CHECK_EQUAL(1u, args.getAsUInt64("b")); + BOOST_CHECK_EQUAL(100u, args.getAsUInt64("a")); + BOOST_CHECK_EQUAL(1, args.getAsInt64("b")); + BOOST_CHECK_EQUAL(100, args.getAsInt64("a")); + +} + QPID_AUTO_TEST_SUITE_END() -- cgit v1.2.1