diff options
Diffstat (limited to 'cpp/src')
-rw-r--r-- | cpp/src/tests/AccumulatedAckTest.cpp | 372 | ||||
-rw-r--r-- | cpp/src/tests/DeliveryRecordTest.cpp | 54 | ||||
-rw-r--r-- | cpp/src/tests/DtxWorkRecordTest.cpp | 323 | ||||
-rw-r--r-- | cpp/src/tests/ExchangeTest.cpp | 261 | ||||
-rw-r--r-- | cpp/src/tests/FramingTest.cpp | 197 | ||||
-rw-r--r-- | cpp/src/tests/HeaderTest.cpp | 172 | ||||
-rw-r--r-- | cpp/src/tests/HeadersExchangeTest.cpp | 164 | ||||
-rw-r--r-- | cpp/src/tests/Makefile.am | 113 | ||||
-rw-r--r-- | cpp/src/tests/MessageBuilderTest.cpp | 337 | ||||
-rw-r--r-- | cpp/src/tests/MessageTest.cpp | 100 | ||||
-rw-r--r-- | cpp/src/tests/QueuePolicyTest.cpp | 110 | ||||
-rw-r--r-- | cpp/src/tests/QueueRegistryTest.cpp | 121 | ||||
-rw-r--r-- | cpp/src/tests/QueueTest.cpp | 351 | ||||
-rw-r--r-- | cpp/src/tests/SequenceNumberTest.cpp | 329 | ||||
-rw-r--r-- | cpp/src/tests/TimerTest.cpp | 154 | ||||
-rw-r--r-- | cpp/src/tests/TopicExchangeTest.cpp | 269 | ||||
-rw-r--r-- | cpp/src/tests/TxAckTest.cpp | 91 | ||||
-rw-r--r-- | cpp/src/tests/TxBufferTest.cpp | 303 | ||||
-rw-r--r-- | cpp/src/tests/TxMocks.h | 4 | ||||
-rw-r--r-- | cpp/src/tests/TxPublishTest.cpp | 103 |
20 files changed, 1842 insertions, 2086 deletions
diff --git a/cpp/src/tests/AccumulatedAckTest.cpp b/cpp/src/tests/AccumulatedAckTest.cpp index cbe44e6814..028ce71907 100644 --- a/cpp/src/tests/AccumulatedAckTest.cpp +++ b/cpp/src/tests/AccumulatedAckTest.cpp @@ -20,231 +20,213 @@ * */ #include "qpid/framing/AccumulatedAck.h" -#include "qpid_test_plugin.h" +#include "unit_test.h" #include <iostream> #include <list> using std::list; using namespace qpid::framing; -class AccumulatedAckTest : public CppUnit::TestCase + +bool covers(const AccumulatedAck& ack, int i) { - CPPUNIT_TEST_SUITE(AccumulatedAckTest); - CPPUNIT_TEST(testGeneral); - CPPUNIT_TEST(testCovers); - CPPUNIT_TEST(testUpdateFromCompletionData); - CPPUNIT_TEST(testCase1); - CPPUNIT_TEST(testCase2); - CPPUNIT_TEST(testCase3); - CPPUNIT_TEST(testCase4); - CPPUNIT_TEST(testConsolidation1); - CPPUNIT_TEST(testConsolidation2); - CPPUNIT_TEST(testConsolidation3); - CPPUNIT_TEST(testConsolidation4); - CPPUNIT_TEST_SUITE_END(); - -public: - bool covers(const AccumulatedAck& ack, int i) - { - return ack.covers(SequenceNumber(i)); - } + return ack.covers(SequenceNumber(i)); +} - void update(AccumulatedAck& ack, int start, int end) - { - ack.update(SequenceNumber(start), SequenceNumber(end)); - } +void update(AccumulatedAck& ack, int start, int end) +{ + ack.update(SequenceNumber(start), SequenceNumber(end)); +} - void testGeneral() - { - AccumulatedAck ack(0); - ack.clear(); - update(ack, 3,3); - update(ack, 7,7); - update(ack, 9,9); - update(ack, 1,2); - update(ack, 4,5); - update(ack, 6,6); +QPID_AUTO_TEST_SUITE(AccumulatedAckTestSuite) - for(int i = 1; i <= 7; i++) CPPUNIT_ASSERT(covers(ack, i)); - CPPUNIT_ASSERT(covers(ack, 9)); +QPID_AUTO_TEST_CASE(testGeneral) +{ + AccumulatedAck ack(0); + ack.clear(); + update(ack, 3,3); + update(ack, 7,7); + update(ack, 9,9); + update(ack, 1,2); + update(ack, 4,5); + update(ack, 6,6); - CPPUNIT_ASSERT(!covers(ack, 8)); - CPPUNIT_ASSERT(!covers(ack, 10)); + for(int i = 1; i <= 7; i++) BOOST_CHECK(covers(ack, i)); + BOOST_CHECK(covers(ack, 9)); - ack.consolidate(); + BOOST_CHECK(!covers(ack, 8)); + BOOST_CHECK(!covers(ack, 10)); - for(int i = 1; i <= 7; i++) CPPUNIT_ASSERT(covers(ack, i)); - CPPUNIT_ASSERT(covers(ack, 9)); + ack.consolidate(); - CPPUNIT_ASSERT(!covers(ack, 8)); - CPPUNIT_ASSERT(!covers(ack, 10)); - } + for(int i = 1; i <= 7; i++) BOOST_CHECK(covers(ack, i)); + BOOST_CHECK(covers(ack, 9)); - void testCovers() - { - AccumulatedAck ack(5); - update(ack, 7, 7); - update(ack, 9, 9); - - CPPUNIT_ASSERT(covers(ack, 1)); - CPPUNIT_ASSERT(covers(ack, 2)); - CPPUNIT_ASSERT(covers(ack, 3)); - CPPUNIT_ASSERT(covers(ack, 4)); - CPPUNIT_ASSERT(covers(ack, 5)); - CPPUNIT_ASSERT(covers(ack, 7)); - CPPUNIT_ASSERT(covers(ack, 9)); - - CPPUNIT_ASSERT(!covers(ack, 6)); - CPPUNIT_ASSERT(!covers(ack, 8)); - CPPUNIT_ASSERT(!covers(ack, 10)); - } + BOOST_CHECK(!covers(ack, 8)); + BOOST_CHECK(!covers(ack, 10)); +} - void testUpdateFromCompletionData() - { - AccumulatedAck ack(0); - SequenceNumber mark(2); - SequenceNumberSet ranges; - ranges.addRange(SequenceNumber(5), SequenceNumber(8)); - ranges.addRange(SequenceNumber(10), SequenceNumber(15)); - ranges.addRange(SequenceNumber(9), SequenceNumber(9)); - ranges.addRange(SequenceNumber(3), SequenceNumber(4)); - - ack.update(mark, ranges); - - for(int i = 0; i <= 15; i++) { - CPPUNIT_ASSERT(covers(ack, i)); - } - CPPUNIT_ASSERT(!covers(ack, 16)); - CPPUNIT_ASSERT_EQUAL((uint32_t) 15, ack.mark.getValue()); +QPID_AUTO_TEST_CASE(testCovers) +{ + AccumulatedAck ack(5); + update(ack, 7, 7); + update(ack, 9, 9); + + BOOST_CHECK(covers(ack, 1)); + BOOST_CHECK(covers(ack, 2)); + BOOST_CHECK(covers(ack, 3)); + BOOST_CHECK(covers(ack, 4)); + BOOST_CHECK(covers(ack, 5)); + BOOST_CHECK(covers(ack, 7)); + BOOST_CHECK(covers(ack, 9)); + + BOOST_CHECK(!covers(ack, 6)); + BOOST_CHECK(!covers(ack, 8)); + BOOST_CHECK(!covers(ack, 10)); +} + +QPID_AUTO_TEST_CASE(testUpdateFromCompletionData) +{ + AccumulatedAck ack(0); + SequenceNumber mark(2); + SequenceNumberSet ranges; + ranges.addRange(SequenceNumber(5), SequenceNumber(8)); + ranges.addRange(SequenceNumber(10), SequenceNumber(15)); + ranges.addRange(SequenceNumber(9), SequenceNumber(9)); + ranges.addRange(SequenceNumber(3), SequenceNumber(4)); + + ack.update(mark, ranges); + + for(int i = 0; i <= 15; i++) { + BOOST_CHECK(covers(ack, i)); } + BOOST_CHECK(!covers(ack, 16)); + BOOST_CHECK_EQUAL((uint32_t) 15, ack.mark.getValue()); +} - void testCase1() - { - AccumulatedAck ack(3); - update(ack, 1,2); - for(int i = 1; i <= 3; i++) CPPUNIT_ASSERT(covers(ack, i)); - CPPUNIT_ASSERT(!covers(ack, 4)); - } +QPID_AUTO_TEST_CASE(testCase1) +{ + AccumulatedAck ack(3); + update(ack, 1,2); + for(int i = 1; i <= 3; i++) BOOST_CHECK(covers(ack, i)); + BOOST_CHECK(!covers(ack, 4)); +} - void testCase2() - { - AccumulatedAck ack(3); - update(ack, 3,6); - for(int i = 1; i <= 6; i++) CPPUNIT_ASSERT(covers(ack, i)); - CPPUNIT_ASSERT(!covers(ack, 7)); - } +QPID_AUTO_TEST_CASE(testCase2) +{ + AccumulatedAck ack(3); + update(ack, 3,6); + for(int i = 1; i <= 6; i++) BOOST_CHECK(covers(ack, i)); + BOOST_CHECK(!covers(ack, 7)); +} - void testCase3() - { - AccumulatedAck ack(3); - update(ack, 4,6); - for(int i = 1; i <= 6; i++) { - CPPUNIT_ASSERT(covers(ack, i)); - } - CPPUNIT_ASSERT(!covers(ack, 7)); +QPID_AUTO_TEST_CASE(testCase3) +{ + AccumulatedAck ack(3); + update(ack, 4,6); + for(int i = 1; i <= 6; i++) { + BOOST_CHECK(covers(ack, i)); } + BOOST_CHECK(!covers(ack, 7)); +} - void testCase4() - { - AccumulatedAck ack(3); - update(ack, 5,6); - for(int i = 1; i <= 6; i++) { - if (i == 4) CPPUNIT_ASSERT(!covers(ack, i)); - else CPPUNIT_ASSERT(covers(ack, i)); - } - CPPUNIT_ASSERT(!covers(ack, 7)); +QPID_AUTO_TEST_CASE(testCase4) +{ + AccumulatedAck ack(3); + update(ack, 5,6); + for(int i = 1; i <= 6; i++) { + if (i == 4) BOOST_CHECK(!covers(ack, i)); + else BOOST_CHECK(covers(ack, i)); } + BOOST_CHECK(!covers(ack, 7)); +} - void testConsolidation1() - { - AccumulatedAck ack(3); - update(ack, 7,7); - CPPUNIT_ASSERT_EQUAL((uint32_t) 3, ack.mark.getValue()); - CPPUNIT_ASSERT_EQUAL((size_t) 1, ack.ranges.size()); - - update(ack, 8,9); - CPPUNIT_ASSERT_EQUAL((uint32_t) 3, ack.mark.getValue()); - CPPUNIT_ASSERT_EQUAL((size_t) 1, ack.ranges.size()); - - update(ack, 1,2); - CPPUNIT_ASSERT_EQUAL((uint32_t) 3, ack.mark.getValue()); - CPPUNIT_ASSERT_EQUAL((size_t) 1, ack.ranges.size()); +QPID_AUTO_TEST_CASE(testConsolidation1) +{ + AccumulatedAck ack(3); + update(ack, 7,7); + BOOST_CHECK_EQUAL((uint32_t) 3, ack.mark.getValue()); + BOOST_CHECK_EQUAL((size_t) 1, ack.ranges.size()); - update(ack, 4,5); - CPPUNIT_ASSERT_EQUAL((uint32_t) 5, ack.mark.getValue()); - CPPUNIT_ASSERT_EQUAL((size_t) 1, ack.ranges.size()); + update(ack, 8,9); + BOOST_CHECK_EQUAL((uint32_t) 3, ack.mark.getValue()); + BOOST_CHECK_EQUAL((size_t) 1, ack.ranges.size()); - update(ack, 6,6); - CPPUNIT_ASSERT_EQUAL((uint32_t) 9, ack.mark.getValue()); - CPPUNIT_ASSERT_EQUAL((size_t) 0, ack.ranges.size()); + update(ack, 1,2); + BOOST_CHECK_EQUAL((uint32_t) 3, ack.mark.getValue()); + BOOST_CHECK_EQUAL((size_t) 1, ack.ranges.size()); - for(int i = 1; i <= 9; i++) CPPUNIT_ASSERT(covers(ack, i)); - CPPUNIT_ASSERT(!covers(ack, 10)); - } + update(ack, 4,5); + BOOST_CHECK_EQUAL((uint32_t) 5, ack.mark.getValue()); + BOOST_CHECK_EQUAL((size_t) 1, ack.ranges.size()); - void testConsolidation2() - { - AccumulatedAck ack(0); - update(ack, 10,12); - CPPUNIT_ASSERT_EQUAL((uint32_t) 0, ack.mark.getValue()); - CPPUNIT_ASSERT_EQUAL((size_t) 1, ack.ranges.size()); - - update(ack, 7,9); - CPPUNIT_ASSERT_EQUAL((uint32_t) 0, ack.mark.getValue()); - CPPUNIT_ASSERT_EQUAL((size_t) 1, ack.ranges.size()); - CPPUNIT_ASSERT_EQUAL((uint32_t) 7, ack.ranges.front().start.getValue()); - CPPUNIT_ASSERT_EQUAL((uint32_t) 12, ack.ranges.front().end.getValue()); - - update(ack, 5,7); - CPPUNIT_ASSERT_EQUAL((uint32_t) 0, ack.mark.getValue()); - CPPUNIT_ASSERT_EQUAL((size_t) 1, ack.ranges.size()); - CPPUNIT_ASSERT_EQUAL((uint32_t) 5, ack.ranges.front().start.getValue()); - CPPUNIT_ASSERT_EQUAL((uint32_t) 12, ack.ranges.front().end.getValue()); - - update(ack, 3,4); - CPPUNIT_ASSERT_EQUAL((uint32_t) 0, ack.mark.getValue()); - CPPUNIT_ASSERT_EQUAL((size_t) 1, ack.ranges.size()); - CPPUNIT_ASSERT_EQUAL((uint32_t) 3, ack.ranges.front().start.getValue()); - CPPUNIT_ASSERT_EQUAL((uint32_t) 12, ack.ranges.front().end.getValue()); - - update(ack, 1,2); - CPPUNIT_ASSERT_EQUAL((uint32_t) 12, ack.mark.getValue()); - CPPUNIT_ASSERT_EQUAL((size_t) 0, ack.ranges.size()); - - for(int i = 1; i <= 12; i++) CPPUNIT_ASSERT(covers(ack, i)); - CPPUNIT_ASSERT(!covers(ack, 13)); - } + update(ack, 6,6); + BOOST_CHECK_EQUAL((uint32_t) 9, ack.mark.getValue()); + BOOST_CHECK_EQUAL((size_t) 0, ack.ranges.size()); - void testConsolidation3() - { - AccumulatedAck ack(0); - update(ack, 10,12); - update(ack, 6,7); - update(ack, 3,4); - update(ack, 1,15); - CPPUNIT_ASSERT_EQUAL((uint32_t) 15, ack.mark.getValue()); - CPPUNIT_ASSERT_EQUAL((size_t) 0, ack.ranges.size()); - } + for(int i = 1; i <= 9; i++) BOOST_CHECK(covers(ack, i)); + BOOST_CHECK(!covers(ack, 10)); +} - void testConsolidation4() - { - AccumulatedAck ack(0); - ack.update(SequenceNumber(0), SequenceNumber(2)); - ack.update(SequenceNumber(5), SequenceNumber(8)); - ack.update(SequenceNumber(10), SequenceNumber(15)); - ack.update(SequenceNumber(9), SequenceNumber(9)); - ack.update(SequenceNumber(3), SequenceNumber(4)); - - for(int i = 0; i <= 15; i++) { - CPPUNIT_ASSERT(covers(ack, i)); - } - CPPUNIT_ASSERT(!covers(ack, 16)); - CPPUNIT_ASSERT_EQUAL((uint32_t) 15, ack.mark.getValue()); +QPID_AUTO_TEST_CASE(testConsolidation2) +{ + AccumulatedAck ack(0); + update(ack, 10,12); + BOOST_CHECK_EQUAL((uint32_t) 0, ack.mark.getValue()); + BOOST_CHECK_EQUAL((size_t) 1, ack.ranges.size()); + + update(ack, 7,9); + BOOST_CHECK_EQUAL((uint32_t) 0, ack.mark.getValue()); + BOOST_CHECK_EQUAL((size_t) 1, ack.ranges.size()); + BOOST_CHECK_EQUAL((uint32_t) 7, ack.ranges.front().start.getValue()); + BOOST_CHECK_EQUAL((uint32_t) 12, ack.ranges.front().end.getValue()); + + update(ack, 5,7); + BOOST_CHECK_EQUAL((uint32_t) 0, ack.mark.getValue()); + BOOST_CHECK_EQUAL((size_t) 1, ack.ranges.size()); + BOOST_CHECK_EQUAL((uint32_t) 5, ack.ranges.front().start.getValue()); + BOOST_CHECK_EQUAL((uint32_t) 12, ack.ranges.front().end.getValue()); + + update(ack, 3,4); + BOOST_CHECK_EQUAL((uint32_t) 0, ack.mark.getValue()); + BOOST_CHECK_EQUAL((size_t) 1, ack.ranges.size()); + BOOST_CHECK_EQUAL((uint32_t) 3, ack.ranges.front().start.getValue()); + BOOST_CHECK_EQUAL((uint32_t) 12, ack.ranges.front().end.getValue()); + + update(ack, 1,2); + BOOST_CHECK_EQUAL((uint32_t) 12, ack.mark.getValue()); + BOOST_CHECK_EQUAL((size_t) 0, ack.ranges.size()); + + for(int i = 1; i <= 12; i++) BOOST_CHECK(covers(ack, i)); + BOOST_CHECK(!covers(ack, 13)); +} + +QPID_AUTO_TEST_CASE(testConsolidation3) +{ + AccumulatedAck ack(0); + update(ack, 10,12); + update(ack, 6,7); + update(ack, 3,4); + update(ack, 1,15); + BOOST_CHECK_EQUAL((uint32_t) 15, ack.mark.getValue()); + BOOST_CHECK_EQUAL((size_t) 0, ack.ranges.size()); +} + +QPID_AUTO_TEST_CASE(testConsolidation4) +{ + AccumulatedAck ack(0); + ack.update(SequenceNumber(0), SequenceNumber(2)); + ack.update(SequenceNumber(5), SequenceNumber(8)); + ack.update(SequenceNumber(10), SequenceNumber(15)); + ack.update(SequenceNumber(9), SequenceNumber(9)); + ack.update(SequenceNumber(3), SequenceNumber(4)); + + for(int i = 0; i <= 15; i++) { + BOOST_CHECK(covers(ack, i)); } + BOOST_CHECK(!covers(ack, 16)); + BOOST_CHECK_EQUAL((uint32_t) 15, ack.mark.getValue()); +} -}; - -// Make this test suite a plugin. -CPPUNIT_PLUGIN_IMPLEMENT(); -CPPUNIT_TEST_SUITE_REGISTRATION(AccumulatedAckTest); +QPID_AUTO_TEST_SUITE_END() diff --git a/cpp/src/tests/DeliveryRecordTest.cpp b/cpp/src/tests/DeliveryRecordTest.cpp index 9487f743d6..43161b4065 100644 --- a/cpp/src/tests/DeliveryRecordTest.cpp +++ b/cpp/src/tests/DeliveryRecordTest.cpp @@ -20,7 +20,7 @@ * */ #include "qpid/broker/DeliveryRecord.h" -#include "qpid_test_plugin.h" +#include "unit_test.h" #include <iostream> #include <memory> #include <boost/format.hpp> @@ -31,38 +31,30 @@ using namespace qpid::framing; using boost::dynamic_pointer_cast; using std::list; -class DeliveryRecordTest : public CppUnit::TestCase -{ - CPPUNIT_TEST_SUITE(DeliveryRecordTest); - CPPUNIT_TEST(testSort); - CPPUNIT_TEST_SUITE_END(); - -public: - - void testSort() - { - list<SequenceNumber> ids; - ids.push_back(SequenceNumber(6)); - ids.push_back(SequenceNumber(2)); - ids.push_back(SequenceNumber(4)); - ids.push_back(SequenceNumber(5)); - ids.push_back(SequenceNumber(1)); - ids.push_back(SequenceNumber(3)); +QPID_AUTO_TEST_SUITE(DeliveryRecordTestSuite) - list<DeliveryRecord> records; - for (list<SequenceNumber>::iterator i = ids.begin(); i != ids.end(); i++) { - records.push_back(DeliveryRecord(QueuedMessage(0), Queue::shared_ptr(), "tag", DeliveryToken::shared_ptr(), *i, false, false)); - } - records.sort(); +QPID_AUTO_TEST_CASE(testSort) +{ + list<SequenceNumber> ids; + ids.push_back(SequenceNumber(6)); + ids.push_back(SequenceNumber(2)); + ids.push_back(SequenceNumber(4)); + ids.push_back(SequenceNumber(5)); + ids.push_back(SequenceNumber(1)); + ids.push_back(SequenceNumber(3)); + + list<DeliveryRecord> records; + for (list<SequenceNumber>::iterator i = ids.begin(); i != ids.end(); i++) { + records.push_back(DeliveryRecord(QueuedMessage(0), Queue::shared_ptr(), "tag", DeliveryToken::shared_ptr(), *i, false, false)); + } + records.sort(); - SequenceNumber expected(0); - for (list<DeliveryRecord>::iterator i = records.begin(); i != records.end(); i++) { - CPPUNIT_ASSERT(i->matches(++expected)); - } + SequenceNumber expected(0); + for (list<DeliveryRecord>::iterator i = records.begin(); i != records.end(); i++) { + BOOST_CHECK(i->matches(++expected)); } -}; +} + -// Make this test suite a plugin. -CPPUNIT_PLUGIN_IMPLEMENT(); -CPPUNIT_TEST_SUITE_REGISTRATION(DeliveryRecordTest); +QPID_AUTO_TEST_SUITE_END() diff --git a/cpp/src/tests/DtxWorkRecordTest.cpp b/cpp/src/tests/DtxWorkRecordTest.cpp index d7d151f8d6..c7c1b460ff 100644 --- a/cpp/src/tests/DtxWorkRecordTest.cpp +++ b/cpp/src/tests/DtxWorkRecordTest.cpp @@ -19,7 +19,7 @@ * */ #include "qpid/broker/DtxWorkRecord.h" -#include "qpid_test_plugin.h" +#include "unit_test.h" #include <iostream> #include <vector> #include "TxMocks.h" @@ -27,176 +27,163 @@ using namespace qpid::broker; using boost::static_pointer_cast; -class DtxWorkRecordTest : public CppUnit::TestCase -{ - CPPUNIT_TEST_SUITE(DtxWorkRecordTest); - CPPUNIT_TEST(testOnePhaseCommit); - CPPUNIT_TEST(testFailOnOnePhaseCommit); - CPPUNIT_TEST(testTwoPhaseCommit); - CPPUNIT_TEST(testFailOnTwoPhaseCommit); - CPPUNIT_TEST(testRollback); - CPPUNIT_TEST_SUITE_END(); - - public: - - void testOnePhaseCommit(){ - MockTransactionalStore store; - store.expectBegin().expectCommit(); - - MockTxOp::shared_ptr opA(new MockTxOp()); - opA->expectPrepare().expectCommit(); - MockTxOp::shared_ptr opB(new MockTxOp()); - opB->expectPrepare().expectCommit(); - - DtxBuffer::shared_ptr bufferA(new DtxBuffer()); - bufferA->enlist(static_pointer_cast<TxOp>(opA)); - bufferA->markEnded(); - DtxBuffer::shared_ptr bufferB(new DtxBuffer()); - bufferB->enlist(static_pointer_cast<TxOp>(opB)); - bufferB->markEnded(); +QPID_AUTO_TEST_SUITE(DtxWorkRecordTestSuite) + +QPID_AUTO_TEST_CASE(testOnePhaseCommit){ + MockTransactionalStore store; + store.expectBegin().expectCommit(); + + MockTxOp::shared_ptr opA(new MockTxOp()); + opA->expectPrepare().expectCommit(); + MockTxOp::shared_ptr opB(new MockTxOp()); + opB->expectPrepare().expectCommit(); + + DtxBuffer::shared_ptr bufferA(new DtxBuffer()); + bufferA->enlist(static_pointer_cast<TxOp>(opA)); + bufferA->markEnded(); + DtxBuffer::shared_ptr bufferB(new DtxBuffer()); + bufferB->enlist(static_pointer_cast<TxOp>(opB)); + bufferB->markEnded(); - DtxWorkRecord work("my-xid", &store); - work.add(bufferA); - work.add(bufferB); - - work.commit(true); - - store.check(); - CPPUNIT_ASSERT(store.isCommitted()); - opA->check(); - opB->check(); - } - - void testFailOnOnePhaseCommit(){ - MockTransactionalStore store; - store.expectBegin().expectAbort(); - - MockTxOp::shared_ptr opA(new MockTxOp()); - opA->expectPrepare().expectRollback(); - MockTxOp::shared_ptr opB(new MockTxOp(true)); - opB->expectPrepare().expectRollback(); - MockTxOp::shared_ptr opC(new MockTxOp()); - opC->expectRollback(); - - DtxBuffer::shared_ptr bufferA(new DtxBuffer()); - bufferA->enlist(static_pointer_cast<TxOp>(opA)); - bufferA->markEnded(); - DtxBuffer::shared_ptr bufferB(new DtxBuffer()); - bufferB->enlist(static_pointer_cast<TxOp>(opB)); - bufferB->markEnded(); - DtxBuffer::shared_ptr bufferC(new DtxBuffer()); - bufferC->enlist(static_pointer_cast<TxOp>(opC)); - bufferC->markEnded(); + DtxWorkRecord work("my-xid", &store); + work.add(bufferA); + work.add(bufferB); + + work.commit(true); + + store.check(); + BOOST_CHECK(store.isCommitted()); + opA->check(); + opB->check(); +} + +QPID_AUTO_TEST_CASE(testFailOnOnePhaseCommit){ + MockTransactionalStore store; + store.expectBegin().expectAbort(); + + MockTxOp::shared_ptr opA(new MockTxOp()); + opA->expectPrepare().expectRollback(); + MockTxOp::shared_ptr opB(new MockTxOp(true)); + opB->expectPrepare().expectRollback(); + MockTxOp::shared_ptr opC(new MockTxOp()); + opC->expectRollback(); + + DtxBuffer::shared_ptr bufferA(new DtxBuffer()); + bufferA->enlist(static_pointer_cast<TxOp>(opA)); + bufferA->markEnded(); + DtxBuffer::shared_ptr bufferB(new DtxBuffer()); + bufferB->enlist(static_pointer_cast<TxOp>(opB)); + bufferB->markEnded(); + DtxBuffer::shared_ptr bufferC(new DtxBuffer()); + bufferC->enlist(static_pointer_cast<TxOp>(opC)); + bufferC->markEnded(); - DtxWorkRecord work("my-xid", &store); - work.add(bufferA); - work.add(bufferB); - work.add(bufferC); - - work.commit(true); - - CPPUNIT_ASSERT(store.isAborted()); - store.check(); - - opA->check(); - opB->check(); - opC->check(); - } - - void testTwoPhaseCommit(){ - MockTransactionalStore store; - store.expectBegin2PC().expectPrepare().expectCommit(); - - MockTxOp::shared_ptr opA(new MockTxOp()); - opA->expectPrepare().expectCommit(); - MockTxOp::shared_ptr opB(new MockTxOp()); - opB->expectPrepare().expectCommit(); - - DtxBuffer::shared_ptr bufferA(new DtxBuffer()); - bufferA->enlist(static_pointer_cast<TxOp>(opA)); - bufferA->markEnded(); - DtxBuffer::shared_ptr bufferB(new DtxBuffer()); - bufferB->enlist(static_pointer_cast<TxOp>(opB)); - bufferB->markEnded(); + DtxWorkRecord work("my-xid", &store); + work.add(bufferA); + work.add(bufferB); + work.add(bufferC); + + work.commit(true); + + BOOST_CHECK(store.isAborted()); + store.check(); + + opA->check(); + opB->check(); + opC->check(); +} + +QPID_AUTO_TEST_CASE(testTwoPhaseCommit){ + MockTransactionalStore store; + store.expectBegin2PC().expectPrepare().expectCommit(); + + MockTxOp::shared_ptr opA(new MockTxOp()); + opA->expectPrepare().expectCommit(); + MockTxOp::shared_ptr opB(new MockTxOp()); + opB->expectPrepare().expectCommit(); + + DtxBuffer::shared_ptr bufferA(new DtxBuffer()); + bufferA->enlist(static_pointer_cast<TxOp>(opA)); + bufferA->markEnded(); + DtxBuffer::shared_ptr bufferB(new DtxBuffer()); + bufferB->enlist(static_pointer_cast<TxOp>(opB)); + bufferB->markEnded(); - DtxWorkRecord work("my-xid", &store); - work.add(bufferA); - work.add(bufferB); - - CPPUNIT_ASSERT(work.prepare()); - CPPUNIT_ASSERT(store.isPrepared()); - work.commit(false); - store.check(); - CPPUNIT_ASSERT(store.isCommitted()); - opA->check(); - opB->check(); - } - - void testFailOnTwoPhaseCommit(){ - MockTransactionalStore store; - store.expectBegin2PC().expectAbort(); - - MockTxOp::shared_ptr opA(new MockTxOp()); - opA->expectPrepare().expectRollback(); - MockTxOp::shared_ptr opB(new MockTxOp(true)); - opB->expectPrepare().expectRollback(); - MockTxOp::shared_ptr opC(new MockTxOp()); - opC->expectRollback(); - - DtxBuffer::shared_ptr bufferA(new DtxBuffer()); - bufferA->enlist(static_pointer_cast<TxOp>(opA)); - bufferA->markEnded(); - DtxBuffer::shared_ptr bufferB(new DtxBuffer()); - bufferB->enlist(static_pointer_cast<TxOp>(opB)); - bufferB->markEnded(); - DtxBuffer::shared_ptr bufferC(new DtxBuffer()); - bufferC->enlist(static_pointer_cast<TxOp>(opC)); - bufferC->markEnded(); + DtxWorkRecord work("my-xid", &store); + work.add(bufferA); + work.add(bufferB); + + BOOST_CHECK(work.prepare()); + BOOST_CHECK(store.isPrepared()); + work.commit(false); + store.check(); + BOOST_CHECK(store.isCommitted()); + opA->check(); + opB->check(); +} + +QPID_AUTO_TEST_CASE(testFailOnTwoPhaseCommit){ + MockTransactionalStore store; + store.expectBegin2PC().expectAbort(); + + MockTxOp::shared_ptr opA(new MockTxOp()); + opA->expectPrepare().expectRollback(); + MockTxOp::shared_ptr opB(new MockTxOp(true)); + opB->expectPrepare().expectRollback(); + MockTxOp::shared_ptr opC(new MockTxOp()); + opC->expectRollback(); + + DtxBuffer::shared_ptr bufferA(new DtxBuffer()); + bufferA->enlist(static_pointer_cast<TxOp>(opA)); + bufferA->markEnded(); + DtxBuffer::shared_ptr bufferB(new DtxBuffer()); + bufferB->enlist(static_pointer_cast<TxOp>(opB)); + bufferB->markEnded(); + DtxBuffer::shared_ptr bufferC(new DtxBuffer()); + bufferC->enlist(static_pointer_cast<TxOp>(opC)); + bufferC->markEnded(); - DtxWorkRecord work("my-xid", &store); - work.add(bufferA); - work.add(bufferB); - work.add(bufferC); - - CPPUNIT_ASSERT(!work.prepare()); - CPPUNIT_ASSERT(store.isAborted()); - store.check(); - opA->check(); - opB->check(); - opC->check(); - } - - void testRollback(){ - MockTransactionalStore store; - store.expectBegin2PC().expectPrepare().expectAbort(); - - MockTxOp::shared_ptr opA(new MockTxOp()); - opA->expectPrepare().expectRollback(); - MockTxOp::shared_ptr opB(new MockTxOp()); - opB->expectPrepare().expectRollback(); - - DtxBuffer::shared_ptr bufferA(new DtxBuffer()); - bufferA->enlist(static_pointer_cast<TxOp>(opA)); - bufferA->markEnded(); - DtxBuffer::shared_ptr bufferB(new DtxBuffer()); - bufferB->enlist(static_pointer_cast<TxOp>(opB)); - bufferB->markEnded(); + DtxWorkRecord work("my-xid", &store); + work.add(bufferA); + work.add(bufferB); + work.add(bufferC); + + BOOST_CHECK(!work.prepare()); + BOOST_CHECK(store.isAborted()); + store.check(); + opA->check(); + opB->check(); + opC->check(); +} + +QPID_AUTO_TEST_CASE(testRollback){ + MockTransactionalStore store; + store.expectBegin2PC().expectPrepare().expectAbort(); + + MockTxOp::shared_ptr opA(new MockTxOp()); + opA->expectPrepare().expectRollback(); + MockTxOp::shared_ptr opB(new MockTxOp()); + opB->expectPrepare().expectRollback(); + + DtxBuffer::shared_ptr bufferA(new DtxBuffer()); + bufferA->enlist(static_pointer_cast<TxOp>(opA)); + bufferA->markEnded(); + DtxBuffer::shared_ptr bufferB(new DtxBuffer()); + bufferB->enlist(static_pointer_cast<TxOp>(opB)); + bufferB->markEnded(); - DtxWorkRecord work("my-xid", &store); - work.add(bufferA); - work.add(bufferB); - - CPPUNIT_ASSERT(work.prepare()); - CPPUNIT_ASSERT(store.isPrepared()); - work.rollback(); - store.check(); - CPPUNIT_ASSERT(store.isAborted()); - opA->check(); - opB->check(); - } -}; - -// Make this test suite a plugin. -CPPUNIT_PLUGIN_IMPLEMENT(); -CPPUNIT_TEST_SUITE_REGISTRATION(DtxWorkRecordTest); + DtxWorkRecord work("my-xid", &store); + work.add(bufferA); + work.add(bufferB); + + BOOST_CHECK(work.prepare()); + BOOST_CHECK(store.isPrepared()); + work.rollback(); + store.check(); + BOOST_CHECK(store.isAborted()); + opA->check(); + opB->check(); +} + +QPID_AUTO_TEST_SUITE_END() diff --git a/cpp/src/tests/ExchangeTest.cpp b/cpp/src/tests/ExchangeTest.cpp index 0b69f76a76..e496f0c478 100644 --- a/cpp/src/tests/ExchangeTest.cpp +++ b/cpp/src/tests/ExchangeTest.cpp @@ -29,7 +29,7 @@ #include "qpid/broker/HeadersExchange.h" #include "qpid/broker/TopicExchange.h" #include "qpid/framing/reply_exceptions.h" -#include "qpid_test_plugin.h" +#include "unit_test.h" #include <iostream> #include "MessageUtils.h" @@ -39,141 +39,130 @@ using namespace qpid::framing; using namespace qpid::sys; using namespace qpid; -class ExchangeTest : public CppUnit::TestCase +QPID_AUTO_TEST_SUITE(ExchangeTestSuite) + +QPID_AUTO_TEST_CASE(testMe) { - CPPUNIT_TEST_SUITE(ExchangeTest); - CPPUNIT_TEST(testMe); - CPPUNIT_TEST(testIsBound); - CPPUNIT_TEST(testDeleteGetAndRedeclare); - CPPUNIT_TEST_SUITE_END(); - - public: - - void testMe() - { - Queue::shared_ptr queue(new Queue("queue", true)); - Queue::shared_ptr queue2(new Queue("queue2", true)); - - TopicExchange topic("topic"); - topic.bind(queue, "abc", 0); - topic.bind(queue2, "abc", 0); - - DirectExchange direct("direct"); - direct.bind(queue, "abc", 0); - direct.bind(queue2, "abc", 0); - - queue.reset(); - queue2.reset(); - - intrusive_ptr<Message> msgPtr(MessageUtils::createMessage("exchange", "key", "id")); - DeliverableMessage msg(msgPtr); - topic.route(msg, "abc", 0); - direct.route(msg, "abc", 0); - - } - - void testIsBound() - { - Queue::shared_ptr a(new Queue("a", true)); - Queue::shared_ptr b(new Queue("b", true)); - Queue::shared_ptr c(new Queue("c", true)); - Queue::shared_ptr d(new Queue("d", true)); + Queue::shared_ptr queue(new Queue("queue", true)); + Queue::shared_ptr queue2(new Queue("queue2", true)); + + TopicExchange topic("topic"); + topic.bind(queue, "abc", 0); + topic.bind(queue2, "abc", 0); + + DirectExchange direct("direct"); + direct.bind(queue, "abc", 0); + direct.bind(queue2, "abc", 0); + + queue.reset(); + queue2.reset(); + + intrusive_ptr<Message> msgPtr(MessageUtils::createMessage("exchange", "key", "id")); + DeliverableMessage msg(msgPtr); + topic.route(msg, "abc", 0); + direct.route(msg, "abc", 0); + +} + +QPID_AUTO_TEST_CASE(testIsBound) +{ + Queue::shared_ptr a(new Queue("a", true)); + Queue::shared_ptr b(new Queue("b", true)); + Queue::shared_ptr c(new Queue("c", true)); + Queue::shared_ptr d(new Queue("d", true)); - string k1("abc"); - string k2("def"); - string k3("xyz"); - - FanOutExchange fanout("fanout"); - fanout.bind(a, "", 0); - fanout.bind(b, "", 0); - fanout.bind(c, "", 0); - - CPPUNIT_ASSERT(fanout.isBound(a, 0, 0)); - CPPUNIT_ASSERT(fanout.isBound(b, 0, 0)); - CPPUNIT_ASSERT(fanout.isBound(c, 0, 0)); - CPPUNIT_ASSERT(!fanout.isBound(d, 0, 0)); - - DirectExchange direct("direct"); - direct.bind(a, k1, 0); - direct.bind(a, k3, 0); - direct.bind(b, k2, 0); - direct.bind(c, k1, 0); - - CPPUNIT_ASSERT(direct.isBound(a, 0, 0)); - CPPUNIT_ASSERT(direct.isBound(a, &k1, 0)); - CPPUNIT_ASSERT(direct.isBound(a, &k3, 0)); - CPPUNIT_ASSERT(!direct.isBound(a, &k2, 0)); - CPPUNIT_ASSERT(direct.isBound(b, 0, 0)); - CPPUNIT_ASSERT(direct.isBound(b, &k2, 0)); - CPPUNIT_ASSERT(direct.isBound(c, &k1, 0)); - CPPUNIT_ASSERT(!direct.isBound(d, 0, 0)); - CPPUNIT_ASSERT(!direct.isBound(d, &k1, 0)); - CPPUNIT_ASSERT(!direct.isBound(d, &k2, 0)); - CPPUNIT_ASSERT(!direct.isBound(d, &k3, 0)); - - TopicExchange topic("topic"); - topic.bind(a, k1, 0); - topic.bind(a, k3, 0); - topic.bind(b, k2, 0); - topic.bind(c, k1, 0); - - CPPUNIT_ASSERT(topic.isBound(a, 0, 0)); - CPPUNIT_ASSERT(topic.isBound(a, &k1, 0)); - CPPUNIT_ASSERT(topic.isBound(a, &k3, 0)); - CPPUNIT_ASSERT(!topic.isBound(a, &k2, 0)); - CPPUNIT_ASSERT(topic.isBound(b, 0, 0)); - CPPUNIT_ASSERT(topic.isBound(b, &k2, 0)); - CPPUNIT_ASSERT(topic.isBound(c, &k1, 0)); - CPPUNIT_ASSERT(!topic.isBound(d, 0, 0)); - CPPUNIT_ASSERT(!topic.isBound(d, &k1, 0)); - CPPUNIT_ASSERT(!topic.isBound(d, &k2, 0)); - CPPUNIT_ASSERT(!topic.isBound(d, &k3, 0)); - - HeadersExchange headers("headers"); - FieldTable args1; - args1.setString("x-match", "all"); - args1.setString("a", "A"); - args1.setInt("b", 1); - FieldTable args2; - args2.setString("x-match", "any"); - args2.setString("a", "A"); - args2.setInt("b", 1); - FieldTable args3; - args3.setString("x-match", "any"); - args3.setString("c", "C"); - args3.setInt("b", 6); - - headers.bind(a, "", &args1); - headers.bind(a, "", &args3); - headers.bind(b, "", &args2); - headers.bind(c, "", &args1); + string k1("abc"); + string k2("def"); + string k3("xyz"); + + FanOutExchange fanout("fanout"); + fanout.bind(a, "", 0); + fanout.bind(b, "", 0); + fanout.bind(c, "", 0); + + BOOST_CHECK(fanout.isBound(a, 0, 0)); + BOOST_CHECK(fanout.isBound(b, 0, 0)); + BOOST_CHECK(fanout.isBound(c, 0, 0)); + BOOST_CHECK(!fanout.isBound(d, 0, 0)); + + DirectExchange direct("direct"); + direct.bind(a, k1, 0); + direct.bind(a, k3, 0); + direct.bind(b, k2, 0); + direct.bind(c, k1, 0); + + BOOST_CHECK(direct.isBound(a, 0, 0)); + BOOST_CHECK(direct.isBound(a, &k1, 0)); + BOOST_CHECK(direct.isBound(a, &k3, 0)); + BOOST_CHECK(!direct.isBound(a, &k2, 0)); + BOOST_CHECK(direct.isBound(b, 0, 0)); + BOOST_CHECK(direct.isBound(b, &k2, 0)); + BOOST_CHECK(direct.isBound(c, &k1, 0)); + BOOST_CHECK(!direct.isBound(d, 0, 0)); + BOOST_CHECK(!direct.isBound(d, &k1, 0)); + BOOST_CHECK(!direct.isBound(d, &k2, 0)); + BOOST_CHECK(!direct.isBound(d, &k3, 0)); + + TopicExchange topic("topic"); + topic.bind(a, k1, 0); + topic.bind(a, k3, 0); + topic.bind(b, k2, 0); + topic.bind(c, k1, 0); + + BOOST_CHECK(topic.isBound(a, 0, 0)); + BOOST_CHECK(topic.isBound(a, &k1, 0)); + BOOST_CHECK(topic.isBound(a, &k3, 0)); + BOOST_CHECK(!topic.isBound(a, &k2, 0)); + BOOST_CHECK(topic.isBound(b, 0, 0)); + BOOST_CHECK(topic.isBound(b, &k2, 0)); + BOOST_CHECK(topic.isBound(c, &k1, 0)); + BOOST_CHECK(!topic.isBound(d, 0, 0)); + BOOST_CHECK(!topic.isBound(d, &k1, 0)); + BOOST_CHECK(!topic.isBound(d, &k2, 0)); + BOOST_CHECK(!topic.isBound(d, &k3, 0)); + + HeadersExchange headers("headers"); + FieldTable args1; + args1.setString("x-match", "all"); + args1.setString("a", "A"); + args1.setInt("b", 1); + FieldTable args2; + args2.setString("x-match", "any"); + args2.setString("a", "A"); + args2.setInt("b", 1); + FieldTable args3; + args3.setString("x-match", "any"); + args3.setString("c", "C"); + args3.setInt("b", 6); + + headers.bind(a, "", &args1); + headers.bind(a, "", &args3); + headers.bind(b, "", &args2); + headers.bind(c, "", &args1); - CPPUNIT_ASSERT(headers.isBound(a, 0, 0)); - CPPUNIT_ASSERT(headers.isBound(a, 0, &args1)); - CPPUNIT_ASSERT(headers.isBound(a, 0, &args3)); - CPPUNIT_ASSERT(!headers.isBound(a, 0, &args2)); - CPPUNIT_ASSERT(headers.isBound(b, 0, 0)); - CPPUNIT_ASSERT(headers.isBound(b, 0, &args2)); - CPPUNIT_ASSERT(headers.isBound(c, 0, &args1)); - CPPUNIT_ASSERT(!headers.isBound(d, 0, 0)); - CPPUNIT_ASSERT(!headers.isBound(d, 0, &args1)); - CPPUNIT_ASSERT(!headers.isBound(d, 0, &args2)); - CPPUNIT_ASSERT(!headers.isBound(d, 0, &args3)); - } - - void testDeleteGetAndRedeclare() { - ExchangeRegistry exchanges; - exchanges.declare("my-exchange", "direct", false, FieldTable()); - exchanges.destroy("my-exchange"); - try { - exchanges.get("my-exchange"); - } catch (const NotFoundException&) {} - std::pair<Exchange::shared_ptr, bool> response = exchanges.declare("my-exchange", "direct", false, FieldTable()); - CPPUNIT_ASSERT_EQUAL(string("direct"), response.first->getType()); - - } -}; - -// Make this test suite a plugin. -CPPUNIT_PLUGIN_IMPLEMENT(); -CPPUNIT_TEST_SUITE_REGISTRATION(ExchangeTest); + BOOST_CHECK(headers.isBound(a, 0, 0)); + BOOST_CHECK(headers.isBound(a, 0, &args1)); + BOOST_CHECK(headers.isBound(a, 0, &args3)); + BOOST_CHECK(!headers.isBound(a, 0, &args2)); + BOOST_CHECK(headers.isBound(b, 0, 0)); + BOOST_CHECK(headers.isBound(b, 0, &args2)); + BOOST_CHECK(headers.isBound(c, 0, &args1)); + BOOST_CHECK(!headers.isBound(d, 0, 0)); + BOOST_CHECK(!headers.isBound(d, 0, &args1)); + BOOST_CHECK(!headers.isBound(d, 0, &args2)); + BOOST_CHECK(!headers.isBound(d, 0, &args3)); +} + +QPID_AUTO_TEST_CASE(testDeleteGetAndRedeclare) +{ + ExchangeRegistry exchanges; + exchanges.declare("my-exchange", "direct", false, FieldTable()); + exchanges.destroy("my-exchange"); + try { + exchanges.get("my-exchange"); + } catch (const NotFoundException&) {} + std::pair<Exchange::shared_ptr, bool> response = exchanges.declare("my-exchange", "direct", false, FieldTable()); + BOOST_CHECK_EQUAL(string("direct"), response.first->getType()); +} + +QPID_AUTO_TEST_SUITE_END() diff --git a/cpp/src/tests/FramingTest.cpp b/cpp/src/tests/FramingTest.cpp index 275d32acfe..21918f2bdd 100644 --- a/cpp/src/tests/FramingTest.cpp +++ b/cpp/src/tests/FramingTest.cpp @@ -27,7 +27,7 @@ #include "qpid/framing/all_method_bodies.h" #include "qpid/framing/amqp_framing.h" #include "qpid/framing/reply_exceptions.h" -#include "qpid_test_plugin.h" +#include "unit_test.h" #include <boost/bind.hpp> #include <boost/lexical_cast.hpp> @@ -49,118 +49,105 @@ std::string tostring(const T& x) return out.str(); } -class FramingTest : public CppUnit::TestCase -{ - CPPUNIT_TEST_SUITE(FramingTest); - CPPUNIT_TEST(testMessageTransferBody); - CPPUNIT_TEST(testConnectionSecureBody); - CPPUNIT_TEST(testConnectionRedirectBody); - CPPUNIT_TEST(testQueueDeclareBody); - CPPUNIT_TEST(testConnectionRedirectBodyFrame); - CPPUNIT_TEST(testMessageCancelBodyFrame); - CPPUNIT_TEST_SUITE_END(); +QPID_AUTO_TEST_SUITE(FramingTestSuite) - private: +QPID_AUTO_TEST_CASE(testMessageTransferBody) +{ char buffer[1024]; - ProtocolVersion version; - - public: - - FramingTest() : version(highestProtocolVersion) {} - - void testMessageTransferBody() - { - Buffer wbuff(buffer, sizeof(buffer)); - MessageTransferBody in(version, "my-exchange", 1, 1); - in.encode(wbuff); - - Buffer rbuff(buffer, sizeof(buffer)); - MessageTransferBody out(version); - out.decode(rbuff); - CPPUNIT_ASSERT_EQUAL(tostring(in), tostring(out)); - } + ProtocolVersion version(highestProtocolVersion); + Buffer wbuff(buffer, sizeof(buffer)); + MessageTransferBody in(version, "my-exchange", 1, 1); + in.encode(wbuff); + + Buffer rbuff(buffer, sizeof(buffer)); + MessageTransferBody out(version); + out.decode(rbuff); + BOOST_CHECK_EQUAL(tostring(in), tostring(out)); +} - void testConnectionSecureBody() - { - Buffer wbuff(buffer, sizeof(buffer)); - std::string s = "security credential"; - ConnectionSecureBody in(version, s); - in.encode(wbuff); - - Buffer rbuff(buffer, sizeof(buffer)); - ConnectionSecureBody out(version); - out.decode(rbuff); - CPPUNIT_ASSERT_EQUAL(tostring(in), tostring(out)); - } +QPID_AUTO_TEST_CASE(testConnectionSecureBody) +{ + char buffer[1024]; + ProtocolVersion version(highestProtocolVersion); + Buffer wbuff(buffer, sizeof(buffer)); + std::string s = "security credential"; + ConnectionSecureBody in(version, s); + in.encode(wbuff); + + Buffer rbuff(buffer, sizeof(buffer)); + ConnectionSecureBody out(version); + out.decode(rbuff); + BOOST_CHECK_EQUAL(tostring(in), tostring(out)); +} - void testConnectionRedirectBody() - { - Buffer wbuff(buffer, sizeof(buffer)); - std::string a = "hostA"; - std::string b = "hostB"; - Array hosts(0x95); - hosts.add(boost::shared_ptr<FieldValue>(new Str16Value(a))); - hosts.add(boost::shared_ptr<FieldValue>(new Str16Value(b))); +QPID_AUTO_TEST_CASE(testConnectionRedirectBody) +{ + char buffer[1024]; + ProtocolVersion version(highestProtocolVersion); + Buffer wbuff(buffer, sizeof(buffer)); + std::string a = "hostA"; + std::string b = "hostB"; + Array hosts(0x95); + hosts.add(boost::shared_ptr<FieldValue>(new Str16Value(a))); + hosts.add(boost::shared_ptr<FieldValue>(new Str16Value(b))); - ConnectionRedirectBody in(version, a, hosts); - in.encode(wbuff); + ConnectionRedirectBody in(version, a, hosts); + in.encode(wbuff); - Buffer rbuff(buffer, sizeof(buffer)); - ConnectionRedirectBody out(version); - out.decode(rbuff); - CPPUNIT_ASSERT_EQUAL(tostring(in), tostring(out)); - } - - void testQueueDeclareBody() - { - Buffer wbuff(buffer, sizeof(buffer)); - QueueDeclareBody in(version, "name", "dlq", true, false, true, false, FieldTable()); - in.encode(wbuff); + Buffer rbuff(buffer, sizeof(buffer)); + ConnectionRedirectBody out(version); + out.decode(rbuff); + BOOST_CHECK_EQUAL(tostring(in), tostring(out)); +} - Buffer rbuff(buffer, sizeof(buffer)); - QueueDeclareBody out(version); - out.decode(rbuff); - CPPUNIT_ASSERT_EQUAL(tostring(in), tostring(out)); - } +QPID_AUTO_TEST_CASE(testQueueDeclareBody) +{ + char buffer[1024]; + ProtocolVersion version(highestProtocolVersion); + Buffer wbuff(buffer, sizeof(buffer)); + QueueDeclareBody in(version, "name", "dlq", true, false, true, false, FieldTable()); + in.encode(wbuff); + + Buffer rbuff(buffer, sizeof(buffer)); + QueueDeclareBody out(version); + out.decode(rbuff); + BOOST_CHECK_EQUAL(tostring(in), tostring(out)); +} - void testConnectionRedirectBodyFrame() - { - Buffer wbuff(buffer, sizeof(buffer)); - std::string a = "hostA"; - std::string b = "hostB"; - Array hosts(0x95); - hosts.add(boost::shared_ptr<FieldValue>(new Str16Value(a))); - hosts.add(boost::shared_ptr<FieldValue>(new Str16Value(b))); +QPID_AUTO_TEST_CASE(testConnectionRedirectBodyFrame) +{ + char buffer[1024]; + ProtocolVersion version(highestProtocolVersion); + Buffer wbuff(buffer, sizeof(buffer)); + std::string a = "hostA"; + std::string b = "hostB"; + Array hosts(0x95); + hosts.add(boost::shared_ptr<FieldValue>(new Str16Value(a))); + hosts.add(boost::shared_ptr<FieldValue>(new Str16Value(b))); - AMQFrame in(in_place<ConnectionRedirectBody>(version, a, hosts)); - in.setChannel(999); - in.encode(wbuff); - - Buffer rbuff(buffer, sizeof(buffer)); - AMQFrame out; - out.decode(rbuff); - CPPUNIT_ASSERT_EQUAL(tostring(in), tostring(out)); - } - - void testMessageCancelBodyFrame() - { - Buffer wbuff(buffer, sizeof(buffer)); - AMQFrame in(in_place<MessageCancelBody>(version, "tag")); - in.setChannel(999); - in.encode(wbuff); - - Buffer rbuff(buffer, sizeof(buffer)); - AMQFrame out; - out.decode(rbuff); - CPPUNIT_ASSERT_EQUAL(tostring(in), tostring(out)); - } - - }; - - -// Make this test suite a plugin. -CPPUNIT_PLUGIN_IMPLEMENT(); -CPPUNIT_TEST_SUITE_REGISTRATION(FramingTest); - + AMQFrame in(in_place<ConnectionRedirectBody>(version, a, hosts)); + in.setChannel(999); + in.encode(wbuff); + + Buffer rbuff(buffer, sizeof(buffer)); + AMQFrame out; + out.decode(rbuff); + BOOST_CHECK_EQUAL(tostring(in), tostring(out)); +} +QPID_AUTO_TEST_CASE(testMessageCancelBodyFrame) +{ + char buffer[1024]; + ProtocolVersion version(highestProtocolVersion); + Buffer wbuff(buffer, sizeof(buffer)); + AMQFrame in(in_place<MessageCancelBody>(version, "tag")); + in.setChannel(999); + in.encode(wbuff); + + Buffer rbuff(buffer, sizeof(buffer)); + AMQFrame out; + out.decode(rbuff); + BOOST_CHECK_EQUAL(tostring(in), tostring(out)); +} +QPID_AUTO_TEST_SUITE_END() diff --git a/cpp/src/tests/HeaderTest.cpp b/cpp/src/tests/HeaderTest.cpp index 56be38a302..c3b64419ed 100644 --- a/cpp/src/tests/HeaderTest.cpp +++ b/cpp/src/tests/HeaderTest.cpp @@ -21,100 +21,90 @@ #include <iostream> #include "qpid/framing/amqp_framing.h" #include "qpid/framing/FieldValue.h" -#include "qpid_test_plugin.h" +#include "unit_test.h" using namespace qpid::framing; using namespace std; -class HeaderTest : public CppUnit::TestCase +QPID_AUTO_TEST_SUITE(HeaderTestSuite) + +QPID_AUTO_TEST_CASE(testGenericProperties) +{ + AMQHeaderBody body; + body.get<MessageProperties>(true)->getApplicationHeaders().setString( + "A", "BCDE"); + char buff[100]; + Buffer wbuffer(buff, 100); + body.encode(wbuffer); + + Buffer rbuffer(buff, 100); + AMQHeaderBody body2; + body2.decode(rbuffer, body.size()); + MessageProperties* props = + body2.get<MessageProperties>(true); + BOOST_CHECK_EQUAL( + string("BCDE"), + props->getApplicationHeaders().get("A")->get<string>()); +} + +QPID_AUTO_TEST_CASE(testMessageProperties) { - CPPUNIT_TEST_SUITE(HeaderTest); - CPPUNIT_TEST(testGenericProperties); - CPPUNIT_TEST(testMessageProperties); - CPPUNIT_TEST(testDeliveryProperies); - CPPUNIT_TEST_SUITE_END(); - - public: - - void testGenericProperties() - { - AMQHeaderBody body; - body.get<MessageProperties>(true)->getApplicationHeaders().setString( - "A", "BCDE"); - char buff[100]; - Buffer wbuffer(buff, 100); - body.encode(wbuffer); - - Buffer rbuffer(buff, 100); - AMQHeaderBody body2; - body2.decode(rbuffer, body.size()); - MessageProperties* props = - body2.get<MessageProperties>(true); - CPPUNIT_ASSERT_EQUAL( - string("BCDE"), - props->getApplicationHeaders().get("A")->get<string>()); - } - - void testMessageProperties() { - AMQFrame out(in_place<AMQHeaderBody>()); - MessageProperties* props1 = - out.castBody<AMQHeaderBody>()->get<MessageProperties>(true); - - props1->setContentLength(42); - props1->setMessageId(Uuid(true)); - props1->setCorrelationId("correlationId"); - props1->setReplyTo(ReplyTo("ex","key")); - props1->setContentType("contentType"); - props1->setContentEncoding("contentEncoding"); - props1->setUserId("userId"); - props1->setAppId("appId"); - - char buff[10000]; - Buffer wbuffer(buff, 10000); - out.encode(wbuffer); - - Buffer rbuffer(buff, 10000); - AMQFrame in; - in.decode(rbuffer); - MessageProperties* props2 = - in.castBody<AMQHeaderBody>()->get<MessageProperties>(true); - - CPPUNIT_ASSERT_EQUAL(props1->getContentLength(), props2->getContentLength()); - CPPUNIT_ASSERT_EQUAL(props1->getMessageId(), props2->getMessageId()); - CPPUNIT_ASSERT_EQUAL(props1->getCorrelationId(), props2->getCorrelationId()); - CPPUNIT_ASSERT_EQUAL(props1->getContentType(), props2->getContentType()); - CPPUNIT_ASSERT_EQUAL(props1->getContentEncoding(), props2->getContentEncoding()); - CPPUNIT_ASSERT_EQUAL(props1->getUserId(), props2->getUserId()); - CPPUNIT_ASSERT_EQUAL(props1->getAppId(), props2->getAppId()); - - } - - void testDeliveryProperies() { - AMQFrame out(in_place<AMQHeaderBody>()); - DeliveryProperties* props1 = - out.castBody<AMQHeaderBody>()->get<DeliveryProperties>(true); - - props1->setDiscardUnroutable(true); - props1->setExchange("foo"); - - char buff[10000]; - Buffer wbuffer(buff, 10000); - out.encode(wbuffer); - - Buffer rbuffer(buff, 10000); - AMQFrame in; - in.decode(rbuffer); - DeliveryProperties* props2 = - in.castBody<AMQHeaderBody>()->get<DeliveryProperties>(true); - - CPPUNIT_ASSERT(props2->getDiscardUnroutable()); - CPPUNIT_ASSERT_EQUAL(string("foo"), props2->getExchange()); - CPPUNIT_ASSERT(!props2->hasTimestamp()); - } - -}; - -// Make this test suite a plugin. -CPPUNIT_PLUGIN_IMPLEMENT(); -CPPUNIT_TEST_SUITE_REGISTRATION(HeaderTest); + AMQFrame out(in_place<AMQHeaderBody>()); + MessageProperties* props1 = + out.castBody<AMQHeaderBody>()->get<MessageProperties>(true); + + props1->setContentLength(42); + props1->setMessageId(Uuid(true)); + props1->setCorrelationId("correlationId"); + props1->setReplyTo(ReplyTo("ex","key")); + props1->setContentType("contentType"); + props1->setContentEncoding("contentEncoding"); + props1->setUserId("userId"); + props1->setAppId("appId"); + + char buff[10000]; + Buffer wbuffer(buff, 10000); + out.encode(wbuffer); + + Buffer rbuffer(buff, 10000); + AMQFrame in; + in.decode(rbuffer); + MessageProperties* props2 = + in.castBody<AMQHeaderBody>()->get<MessageProperties>(true); + + BOOST_CHECK_EQUAL(props1->getContentLength(), props2->getContentLength()); + BOOST_CHECK_EQUAL(props1->getMessageId(), props2->getMessageId()); + BOOST_CHECK_EQUAL(props1->getCorrelationId(), props2->getCorrelationId()); + BOOST_CHECK_EQUAL(props1->getContentType(), props2->getContentType()); + BOOST_CHECK_EQUAL(props1->getContentEncoding(), props2->getContentEncoding()); + BOOST_CHECK_EQUAL(props1->getUserId(), props2->getUserId()); + BOOST_CHECK_EQUAL(props1->getAppId(), props2->getAppId()); + +} + +QPID_AUTO_TEST_CASE(testDeliveryProperies) +{ + AMQFrame out(in_place<AMQHeaderBody>()); + DeliveryProperties* props1 = + out.castBody<AMQHeaderBody>()->get<DeliveryProperties>(true); + + props1->setDiscardUnroutable(true); + props1->setExchange("foo"); + + char buff[10000]; + Buffer wbuffer(buff, 10000); + out.encode(wbuffer); + + Buffer rbuffer(buff, 10000); + AMQFrame in; + in.decode(rbuffer); + DeliveryProperties* props2 = + in.castBody<AMQHeaderBody>()->get<DeliveryProperties>(true); + + BOOST_CHECK(props2->getDiscardUnroutable()); + BOOST_CHECK_EQUAL(string("foo"), props2->getExchange()); + BOOST_CHECK(!props2->hasTimestamp()); +} + +QPID_AUTO_TEST_SUITE_END() diff --git a/cpp/src/tests/HeadersExchangeTest.cpp b/cpp/src/tests/HeadersExchangeTest.cpp index f07f238ee4..46933f955a 100644 --- a/cpp/src/tests/HeadersExchangeTest.cpp +++ b/cpp/src/tests/HeadersExchangeTest.cpp @@ -23,109 +23,93 @@ #include "qpid/broker/HeadersExchange.h" #include "qpid/framing/FieldTable.h" #include "qpid/framing/FieldValue.h" -#include "qpid_test_plugin.h" +#include "unit_test.h" using namespace qpid::broker; using namespace qpid::framing; -class HeadersExchangeTest : public CppUnit::TestCase +QPID_AUTO_TEST_SUITE(HeadersExchangeTestSuite) + +QPID_AUTO_TEST_CASE(testMatchAll) { - CPPUNIT_TEST_SUITE(HeadersExchangeTest); - CPPUNIT_TEST(testMatchAll); - CPPUNIT_TEST(testMatchAny); - CPPUNIT_TEST(testMatchEmptyValue); - CPPUNIT_TEST(testMatchEmptyArgs); - CPPUNIT_TEST(testMatchNoXMatch); - CPPUNIT_TEST(testBindNoXMatch); - CPPUNIT_TEST_SUITE_END(); - - public: - - void testMatchAll() - { - FieldTable b, m, n; - b.setString("x-match", "all"); - b.setString("foo", "FOO"); - b.setInt("n", 42); - m.setString("foo", "FOO"); - m.setInt("n", 42); - CPPUNIT_ASSERT(HeadersExchange::match(b, m)); + FieldTable b, m, n; + 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)); - // Ignore extras. - m.setString("extra", "x"); - CPPUNIT_ASSERT(HeadersExchange::match(b, m)); + // Ignore extras. + m.setString("extra", "x"); + BOOST_CHECK(HeadersExchange::match(b, m)); - // Fail mismatch, wrong value. - m.setString("foo", "NotFoo"); - CPPUNIT_ASSERT(!HeadersExchange::match(b, m)); + // Fail mismatch, wrong value. + m.setString("foo", "NotFoo"); + BOOST_CHECK(!HeadersExchange::match(b, m)); - // Fail mismatch, missing value - n.setInt("n", 42); - n.setString("extra", "x"); - CPPUNIT_ASSERT(!HeadersExchange::match(b, n)); - } + // Fail mismatch, missing value + n.setInt("n", 42); + n.setString("extra", "x"); + BOOST_CHECK(!HeadersExchange::match(b, n)); +} - void testMatchAny() - { - FieldTable b, m, n; - b.setString("x-match", "any"); - b.setString("foo", "FOO"); - b.setInt("n", 42); - m.setString("foo", "FOO"); - CPPUNIT_ASSERT(!HeadersExchange::match(b, n)); - CPPUNIT_ASSERT(HeadersExchange::match(b, m)); - m.setInt("n", 42); - CPPUNIT_ASSERT(HeadersExchange::match(b, m)); - } +QPID_AUTO_TEST_CASE(testMatchAny) +{ + FieldTable b, m, n; + 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)); +} - void testMatchEmptyValue() - { - FieldTable b, m; - b.setString("x-match", "all"); - b.set("foo", FieldTable::ValuePtr()); - b.set("n", FieldTable::ValuePtr()); - CPPUNIT_ASSERT(!HeadersExchange::match(b, m)); - m.setString("foo", "blah"); - m.setInt("n", 123); - } +QPID_AUTO_TEST_CASE(testMatchEmptyValue) +{ + FieldTable b, m; + 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); +} - void testMatchEmptyArgs() - { - FieldTable b, m; - m.setString("foo", "FOO"); +QPID_AUTO_TEST_CASE(testMatchEmptyArgs) +{ + FieldTable b, m; + m.setString("foo", "FOO"); - b.setString("x-match", "all"); - CPPUNIT_ASSERT(HeadersExchange::match(b, m)); - b.setString("x-match", "any"); - CPPUNIT_ASSERT(!HeadersExchange::match(b, m)); - } + b.setString("x-match", "all"); + BOOST_CHECK(HeadersExchange::match(b, m)); + b.setString("x-match", "any"); + BOOST_CHECK(!HeadersExchange::match(b, m)); +} - void testMatchNoXMatch() - { - FieldTable b, m; - b.setString("foo", "FOO"); - m.setString("foo", "FOO"); - CPPUNIT_ASSERT(!HeadersExchange::match(b, m)); - } +QPID_AUTO_TEST_CASE(testMatchNoXMatch) +{ + FieldTable b, m; + b.setString("foo", "FOO"); + m.setString("foo", "FOO"); + BOOST_CHECK(!HeadersExchange::match(b, m)); +} - void testBindNoXMatch() - { - HeadersExchange exchange("test"); - Queue::shared_ptr queue; - std::string key; - FieldTable args; - try { - //just checking this doesn't cause assertion etc - exchange.bind(queue, key, &args); - } catch(qpid::Exception&) { - //expected - } +QPID_AUTO_TEST_CASE(testBindNoXMatch) +{ + HeadersExchange exchange("test"); + Queue::shared_ptr queue; + std::string key; + FieldTable args; + try { + //just checking this doesn't cause assertion etc + exchange.bind(queue, key, &args); + } catch(qpid::Exception&) { + //expected } - - -}; - -// make this test suite a plugin. -CPPUNIT_PLUGIN_IMPLEMENT(); -CPPUNIT_TEST_SUITE_REGISTRATION(HeadersExchangeTest); +} + +QPID_AUTO_TEST_SUITE_END() diff --git a/cpp/src/tests/Makefile.am b/cpp/src/tests/Makefile.am index 6c68a9d648..41e7c525cf 100644 --- a/cpp/src/tests/Makefile.am +++ b/cpp/src/tests/Makefile.am @@ -1,8 +1,8 @@ -AM_CXXFLAGS = $(WARNING_CFLAGS) $(CPPUNIT_CXXFLAGS) $(CFLAGS) $(APR_CXXFLAGS) -DBOOST_TEST_DYN_LINK +AM_CXXFLAGS = $(WARNING_CFLAGS) $(CFLAGS) $(APR_CXXFLAGS) -DBOOST_TEST_DYN_LINK INCLUDES = -I$(srcdir)/.. -I$(srcdir)/../gen -I$(top_builddir)/src/gen abs_builddir=@abs_builddir@ -extra_libs = $(CPPUNIT_LIBS) +extra_libs = lib_client = $(abs_builddir)/../libqpidclient.la lib_common = $(abs_builddir)/../libqpidcommon.la lib_broker = $(abs_builddir)/../libqpidbroker.la @@ -45,7 +45,25 @@ unit_test_SOURCES= unit_test.cpp unit_test.h \ StringUtils.cpp \ IncompleteMessageList.cpp \ RangeSet.cpp \ - AtomicValue.cpp + AtomicValue.cpp \ + QueueTest.cpp \ + AccumulatedAckTest.cpp \ + DtxWorkRecordTest.cpp \ + DeliveryRecordTest.cpp \ + ExchangeTest.cpp \ + HeadersExchangeTest.cpp \ + MessageTest.cpp \ + QueueRegistryTest.cpp \ + QueuePolicyTest.cpp \ + FramingTest.cpp \ + HeaderTest.cpp \ + SequenceNumberTest.cpp + TimerTest.cpp \ + TopicExchangeTest.cpp \ + TxAckTest.cpp \ + TxBufferTest.cpp \ + TxPublishTest.cpp \ + MessageBuilderTest.cpp if HAVE_XML unit_test_SOURCES+= XmlClientSessionTest.cpp @@ -78,54 +96,33 @@ txtest_SOURCES=txtest.cpp TestOptions.h txtest_LDADD=$(lib_client) check_PROGRAMS+=latencytest -latencytest_SOURCES=latencytest.cpp TestOptions.h +latencytest_SOURCES=latencytest.cpp TestOptions.h latencytest_LDADD=$(lib_client) -# NB: CppUnit test libraries below will be migrated to boost test programs. -# +check_PROGRAMS+=client_test +client_test_SOURCES=client_test.cpp TestOptions.h +client_test_LDADD=$(lib_client) + +check_PROGRAMS+=topic_listener +topic_listener_SOURCES=topic_listener.cpp TestOptions.h +topic_listener_LDADD=$(lib_client) + +check_PROGRAMS+=topic_publisher +topic_publisher_SOURCES=topic_publisher.cpp TestOptions.h +topic_publisher_LDADD=$(lib_client) -# cppunit tests -broker_unit_tests = \ - AccumulatedAckTest \ - DtxWorkRecordTest \ - DeliveryRecordTest \ - ExchangeTest \ - HeadersExchangeTest \ - MessageTest \ - QueueRegistryTest \ - QueueTest \ - QueuePolicyTest \ - TimerTest \ - TopicExchangeTest \ - TxAckTest \ - TxBufferTest \ - TxPublishTest \ - MessageBuilderTest - -framing_unit_tests = \ - FramingTest \ - HeaderTest \ - SequenceNumberTest - -unit_tests = \ - $(broker_unit_tests) \ - $(client_unit_tests) \ - $(framing_unit_tests) \ - $(misc_unit_tests) - -# Executables for client tests - -testprogs= \ - client_test \ - topic_listener \ - topic_publisher - -check_PROGRAMS += $(testprogs) publish consume +check_PROGRAMS+=publish +publish_SOURCES=publish.cpp TestOptions.h +publish_LDADD=$(lib_client) + +check_PROGRAMS+=consume +consume_SOURCES=consume.cpp TestOptions.h +consume_LDADD=$(lib_client) TESTS_ENVIRONMENT = VALGRIND=$(VALGRIND) srcdir=$(srcdir) QPID_DATA_DIR= $(srcdir)/run_test system_tests = client_test quick_perftest quick_topictest -TESTS += run-unit-tests start_broker $(system_tests) python_tests stop_broker run_federation_tests +TESTS += start_broker $(system_tests) python_tests stop_broker run_federation_tests EXTRA_DIST += \ run_test vg_check \ @@ -141,32 +138,11 @@ EXTRA_DIST += \ TxMocks.h \ qpid_test_plugin.h -include gen.mk - check_LTLIBRARIES += libdlclose_noop.la libdlclose_noop_la_LDFLAGS = -module -rpath $(abs_builddir) libdlclose_noop_la_SOURCES = dlclose_noop.c -gen.mk: Makefile.am - ( \ - for i in $(testprogs); do \ - echo $${i}_SOURCES = $$i.cpp; \ - echo $${i}_LDADD = '$$(lib_client) $$(lib_common) $$(extra_libs)'; \ - done; \ - libs=; \ - for i in $(unit_tests); do \ - echo "check_LTLIBRARIES +=$${i}.la"; \ - echo $${i}_la_SOURCES = $$i.cpp; \ - echo $${i}_la_LIBADD = '$$(lib_common) $$(lib_client)'; \ - echo $${i}_la_LIBADD += '$$(lib_broker) $$(extra_libs)'; \ - echo $${i}_la_LDFLAGS = "-module -rpath `pwd`"; \ - done; \ - ) \ - > $@-t - mv $@-t $@ - CLEANFILES+=valgrind.out *.log *.vglog dummy_test $(unit_wrappers) -MAINTAINERCLEANFILES=gen.mk # FIXME aconway 2008-05-23: Disabled interop_runner because it uses # the obsolete Channel class. Convert to Session and re-enable. @@ -185,13 +161,6 @@ MAINTAINERCLEANFILES=gen.mk # TestOptions.h # interop_runner_LDADD = $(lib_client) $(lib_common) $(extra_libs) -publish_SOURCES = publish.cpp -publish_LDADD = $(lib_client) $(lib_common) $(extra_libs) - -consume_SOURCES = consume.cpp -consume_LDADD = $(lib_client) $(lib_common) $(extra_libs) - - # Longer running stability tests, not run by default check: target. # Not run under valgrind, too slow diff --git a/cpp/src/tests/MessageBuilderTest.cpp b/cpp/src/tests/MessageBuilderTest.cpp index 69e2ec1c1e..35b147a875 100644 --- a/cpp/src/tests/MessageBuilderTest.cpp +++ b/cpp/src/tests/MessageBuilderTest.cpp @@ -24,7 +24,7 @@ #include "qpid/framing/frame_functors.h" #include "qpid/framing/MessageTransferBody.h" #include "qpid/framing/TypeFilter.h" -#include "qpid_test_plugin.h" +#include "unit_test.h" #include <list> using namespace boost; @@ -32,194 +32,185 @@ using namespace qpid::broker; using namespace qpid::framing; using namespace qpid::sys; -class MessageBuilderTest : public CppUnit::TestCase +class MockMessageStore : public NullMessageStore { - class MockMessageStore : public NullMessageStore - { - enum Op {STAGE=1, APPEND=2}; + enum Op {STAGE=1, APPEND=2}; - uint64_t id; - intrusive_ptr<PersistableMessage> expectedMsg; - string expectedData; - std::list<Op> ops; + uint64_t id; + intrusive_ptr<PersistableMessage> expectedMsg; + string expectedData; + std::list<Op> ops; - void checkExpectation(Op actual) - { - CPPUNIT_ASSERT_EQUAL(ops.front(), actual); - ops.pop_front(); - } - - public: - MockMessageStore() : id(0), expectedMsg(0) {} - - void expectStage(PersistableMessage& msg) - { - expectedMsg = &msg; - ops.push_back(STAGE); - } - - void expectAppendContent(PersistableMessage& msg, const string& data) - { - expectedMsg = &msg; - expectedData = data; - ops.push_back(APPEND); - } - - void stage(intrusive_ptr<PersistableMessage>& msg) - { - checkExpectation(STAGE); - CPPUNIT_ASSERT_EQUAL(expectedMsg, msg); - msg->setPersistenceId(++id); - } - - void appendContent(intrusive_ptr<const PersistableMessage>& msg, const string& data) - { - checkExpectation(APPEND); - CPPUNIT_ASSERT_EQUAL(static_pointer_cast<const PersistableMessage>(expectedMsg), msg); - CPPUNIT_ASSERT_EQUAL(expectedData, data); - } - - bool expectationsMet() - { - return ops.empty(); - } - }; - - CPPUNIT_TEST_SUITE(MessageBuilderTest); - CPPUNIT_TEST(testHeaderOnly); - CPPUNIT_TEST(test1ContentFrame); - CPPUNIT_TEST(test2ContentFrames); - CPPUNIT_TEST(testStaging); - CPPUNIT_TEST_SUITE_END(); + void checkExpectation(Op actual) + { + BOOST_CHECK_EQUAL(ops.front(), actual); + ops.pop_front(); + } public: + MockMessageStore() : id(0), expectedMsg(0) {} - void testHeaderOnly(){ - MessageBuilder builder(0, 0); - builder.start(SequenceNumber()); - - std::string exchange("builder-exchange"); - std::string key("builder-exchange"); - - AMQFrame method(in_place<MessageTransferBody>( - ProtocolVersion(), exchange, 0, 0)); - AMQFrame header(in_place<AMQHeaderBody>()); - - header.castBody<AMQHeaderBody>()->get<MessageProperties>(true)->setContentLength(0); - header.castBody<AMQHeaderBody>()->get<DeliveryProperties>(true)->setRoutingKey(key); + void expectStage(PersistableMessage& msg) + { + expectedMsg = &msg; + ops.push_back(STAGE); + } - builder.handle(method); - builder.handle(header); + void expectAppendContent(PersistableMessage& msg, const string& data) + { + expectedMsg = &msg; + expectedData = data; + ops.push_back(APPEND); + } - CPPUNIT_ASSERT(builder.getMessage()); - CPPUNIT_ASSERT_EQUAL(exchange, builder.getMessage()->getExchangeName()); - CPPUNIT_ASSERT_EQUAL(key, builder.getMessage()->getRoutingKey()); - CPPUNIT_ASSERT(builder.getMessage()->getFrames().isComplete()); + void stage(intrusive_ptr<PersistableMessage>& msg) + { + checkExpectation(STAGE); + BOOST_CHECK_EQUAL(expectedMsg, msg); + msg->setPersistenceId(++id); } - void test1ContentFrame(){ - MessageBuilder builder(0, 0); - builder.start(SequenceNumber()); + void appendContent(intrusive_ptr<const PersistableMessage>& msg, const string& data) + { + checkExpectation(APPEND); + BOOST_CHECK_EQUAL(static_pointer_cast<const PersistableMessage>(expectedMsg), msg); + BOOST_CHECK_EQUAL(expectedData, data); + } - std::string data("abcdefg"); - std::string exchange("builder-exchange"); - std::string key("builder-exchange"); + bool expectationsMet() + { + return ops.empty(); + } +}; - AMQFrame method(in_place<MessageTransferBody>(ProtocolVersion(), exchange, 0, 0)); - AMQFrame header(in_place<AMQHeaderBody>()); - AMQFrame content(in_place<AMQContentBody>(data)); - method.setEof(false); - header.setBof(false); - header.setEof(false); - content.setBof(false); +QPID_AUTO_TEST_SUITE(MessageBuilderTestSuite) + +QPID_AUTO_TEST_CASE(testHeaderOnly) +{ + MessageBuilder builder(0, 0); + builder.start(SequenceNumber()); - header.castBody<AMQHeaderBody>()->get<MessageProperties>(true)->setContentLength(data.size()); - header.castBody<AMQHeaderBody>()->get<DeliveryProperties>(true)->setRoutingKey(key); + std::string exchange("builder-exchange"); + std::string key("builder-exchange"); - builder.handle(method); - CPPUNIT_ASSERT(builder.getMessage()); - CPPUNIT_ASSERT(!builder.getMessage()->getFrames().isComplete()); + AMQFrame method(in_place<MessageTransferBody>( + ProtocolVersion(), exchange, 0, 0)); + AMQFrame header(in_place<AMQHeaderBody>()); - builder.handle(header); - CPPUNIT_ASSERT(builder.getMessage()); - CPPUNIT_ASSERT(!builder.getMessage()->getFrames().isComplete()); + header.castBody<AMQHeaderBody>()->get<MessageProperties>(true)->setContentLength(0); + header.castBody<AMQHeaderBody>()->get<DeliveryProperties>(true)->setRoutingKey(key); - builder.handle(content); - CPPUNIT_ASSERT(builder.getMessage()); - CPPUNIT_ASSERT(builder.getMessage()->getFrames().isComplete()); - } + builder.handle(method); + builder.handle(header); - void test2ContentFrames(){ - MessageBuilder builder(0, 0); - builder.start(SequenceNumber()); - - std::string data1("abcdefg"); - std::string data2("hijklmn"); - std::string exchange("builder-exchange"); - std::string key("builder-exchange"); - - AMQFrame method(in_place<MessageTransferBody>( - ProtocolVersion(), exchange, 0, 0)); - AMQFrame header(in_place<AMQHeaderBody>()); - AMQFrame content1(in_place<AMQContentBody>(data1)); - AMQFrame content2(in_place<AMQContentBody>(data2)); - method.setEof(false); - header.setBof(false); - header.setEof(false); - content1.setBof(false); - content1.setEof(false); - content2.setBof(false); - - header.castBody<AMQHeaderBody>()->get<MessageProperties>(true)->setContentLength(data1.size() + data2.size()); - header.castBody<AMQHeaderBody>()->get<DeliveryProperties>(true)->setRoutingKey(key); - - builder.handle(method); - builder.handle(header); - builder.handle(content1); - CPPUNIT_ASSERT(builder.getMessage()); - CPPUNIT_ASSERT(!builder.getMessage()->getFrames().isComplete()); - - builder.handle(content2); - CPPUNIT_ASSERT(builder.getMessage()); - CPPUNIT_ASSERT(builder.getMessage()->getFrames().isComplete()); - } + BOOST_CHECK(builder.getMessage()); + BOOST_CHECK_EQUAL(exchange, builder.getMessage()->getExchangeName()); + BOOST_CHECK_EQUAL(key, builder.getMessage()->getRoutingKey()); + BOOST_CHECK(builder.getMessage()->getFrames().isComplete()); +} - void testStaging(){ - MockMessageStore store; - MessageBuilder builder(&store, 5); - builder.start(SequenceNumber()); +QPID_AUTO_TEST_CASE(test1ContentFrame) +{ + MessageBuilder builder(0, 0); + builder.start(SequenceNumber()); + + std::string data("abcdefg"); + std::string exchange("builder-exchange"); + std::string key("builder-exchange"); + + AMQFrame method(in_place<MessageTransferBody>(ProtocolVersion(), exchange, 0, 0)); + AMQFrame header(in_place<AMQHeaderBody>()); + AMQFrame content(in_place<AMQContentBody>(data)); + method.setEof(false); + header.setBof(false); + header.setEof(false); + content.setBof(false); + + header.castBody<AMQHeaderBody>()->get<MessageProperties>(true)->setContentLength(data.size()); + header.castBody<AMQHeaderBody>()->get<DeliveryProperties>(true)->setRoutingKey(key); + + builder.handle(method); + BOOST_CHECK(builder.getMessage()); + BOOST_CHECK(!builder.getMessage()->getFrames().isComplete()); + + builder.handle(header); + BOOST_CHECK(builder.getMessage()); + BOOST_CHECK(!builder.getMessage()->getFrames().isComplete()); + + builder.handle(content); + BOOST_CHECK(builder.getMessage()); + BOOST_CHECK(builder.getMessage()->getFrames().isComplete()); +} + +QPID_AUTO_TEST_CASE(test2ContentFrames) +{ + MessageBuilder builder(0, 0); + builder.start(SequenceNumber()); + + std::string data1("abcdefg"); + std::string data2("hijklmn"); + std::string exchange("builder-exchange"); + std::string key("builder-exchange"); + + AMQFrame method(in_place<MessageTransferBody>( + ProtocolVersion(), exchange, 0, 0)); + AMQFrame header(in_place<AMQHeaderBody>()); + AMQFrame content1(in_place<AMQContentBody>(data1)); + AMQFrame content2(in_place<AMQContentBody>(data2)); + method.setEof(false); + header.setBof(false); + header.setEof(false); + content1.setBof(false); + content1.setEof(false); + content2.setBof(false); + + header.castBody<AMQHeaderBody>()->get<MessageProperties>(true)->setContentLength(data1.size() + data2.size()); + header.castBody<AMQHeaderBody>()->get<DeliveryProperties>(true)->setRoutingKey(key); + + builder.handle(method); + builder.handle(header); + builder.handle(content1); + BOOST_CHECK(builder.getMessage()); + BOOST_CHECK(!builder.getMessage()->getFrames().isComplete()); + + builder.handle(content2); + BOOST_CHECK(builder.getMessage()); + BOOST_CHECK(builder.getMessage()->getFrames().isComplete()); +} + +QPID_AUTO_TEST_CASE(testStaging) +{ + MockMessageStore store; + MessageBuilder builder(&store, 5); + builder.start(SequenceNumber()); - std::string data1("abcdefg"); - std::string data2("hijklmn"); - std::string exchange("builder-exchange"); - std::string key("builder-exchange"); - - AMQFrame method(in_place<MessageTransferBody>( - ProtocolVersion(), exchange, 0, 0)); - AMQFrame header(in_place<AMQHeaderBody>()); - AMQFrame content1(in_place<AMQContentBody>(data1)); - AMQFrame content2(in_place<AMQContentBody>(data2)); - - header.castBody<AMQHeaderBody>()->get<MessageProperties>(true)->setContentLength(data1.size() + data2.size()); - header.castBody<AMQHeaderBody>()->get<DeliveryProperties>(true)->setRoutingKey(key); - - builder.handle(method); - builder.handle(header); - - store.expectStage(*builder.getMessage()); - builder.handle(content1); - CPPUNIT_ASSERT(store.expectationsMet()); - CPPUNIT_ASSERT_EQUAL((uint64_t) 1, builder.getMessage()->getPersistenceId()); - - store.expectAppendContent(*builder.getMessage(), data2); - builder.handle(content2); - CPPUNIT_ASSERT(store.expectationsMet()); - - //were the content frames dropped? - CPPUNIT_ASSERT(!builder.getMessage()->isContentLoaded()); - } -}; - -// Make this test suite a plugin. -CPPUNIT_PLUGIN_IMPLEMENT(); -CPPUNIT_TEST_SUITE_REGISTRATION(MessageBuilderTest); + std::string data1("abcdefg"); + std::string data2("hijklmn"); + std::string exchange("builder-exchange"); + std::string key("builder-exchange"); + + AMQFrame method(in_place<MessageTransferBody>( + ProtocolVersion(), exchange, 0, 0)); + AMQFrame header(in_place<AMQHeaderBody>()); + AMQFrame content1(in_place<AMQContentBody>(data1)); + AMQFrame content2(in_place<AMQContentBody>(data2)); + + header.castBody<AMQHeaderBody>()->get<MessageProperties>(true)->setContentLength(data1.size() + data2.size()); + header.castBody<AMQHeaderBody>()->get<DeliveryProperties>(true)->setRoutingKey(key); + + builder.handle(method); + builder.handle(header); + + store.expectStage(*builder.getMessage()); + builder.handle(content1); + BOOST_CHECK(store.expectationsMet()); + BOOST_CHECK_EQUAL((uint64_t) 1, builder.getMessage()->getPersistenceId()); + + store.expectAppendContent(*builder.getMessage(), data2); + builder.handle(content2); + BOOST_CHECK(store.expectationsMet()); + //were the content frames dropped? + BOOST_CHECK_ASSERT(!builder.getMessage()->isContentLoaded()); +} + +QPID_AUTO_TEST_SUITE_END() diff --git a/cpp/src/tests/MessageTest.cpp b/cpp/src/tests/MessageTest.cpp index f642658825..582844e6dc 100644 --- a/cpp/src/tests/MessageTest.cpp +++ b/cpp/src/tests/MessageTest.cpp @@ -25,7 +25,7 @@ #include "qpid/framing/FieldValue.h" #include "qpid/framing/Uuid.h" -#include "qpid_test_plugin.h" +#include "unit_test.h" #include <iostream> @@ -33,67 +33,57 @@ using namespace boost; using namespace qpid::broker; using namespace qpid::framing; +QPID_AUTO_TEST_SUITE(MessageTestSuite) -class MessageTest : public CppUnit::TestCase +QPID_AUTO_TEST_CASE(testEncodeDecode) { - CPPUNIT_TEST_SUITE(MessageTest); - CPPUNIT_TEST(testEncodeDecode); - CPPUNIT_TEST_SUITE_END(); + string exchange = "MyExchange"; + string routingKey = "MyRoutingKey"; + Uuid messageId(true); + string data1("abcdefg"); + string data2("hijklmn"); - public: + intrusive_ptr<Message> msg(new Message()); - void testEncodeDecode() - { - string exchange = "MyExchange"; - string routingKey = "MyRoutingKey"; - Uuid messageId(true); - string data1("abcdefg"); - string data2("hijklmn"); + AMQFrame method(in_place<MessageTransferBody>( + ProtocolVersion(), exchange, 0, 0)); + AMQFrame header(in_place<AMQHeaderBody>()); + AMQFrame content1(in_place<AMQContentBody>(data1)); + AMQFrame content2(in_place<AMQContentBody>(data2)); - intrusive_ptr<Message> msg(new Message()); + msg->getFrames().append(method); + msg->getFrames().append(header); + msg->getFrames().append(content1); + msg->getFrames().append(content2); - AMQFrame method(in_place<MessageTransferBody>( - ProtocolVersion(), exchange, 0, 0)); - AMQFrame header(in_place<AMQHeaderBody>()); - AMQFrame content1(in_place<AMQContentBody>(data1)); - AMQFrame content2(in_place<AMQContentBody>(data2)); + MessageProperties* mProps = msg->getFrames().getHeaders()->get<MessageProperties>(true); + mProps->setContentLength(data1.size() + data2.size()); + mProps->setMessageId(messageId); + FieldTable applicationHeaders; + applicationHeaders.setString("abc", "xyz"); + mProps->setApplicationHeaders(applicationHeaders); + DeliveryProperties* dProps = msg->getFrames().getHeaders()->get<DeliveryProperties>(true); + dProps->setRoutingKey(routingKey); + dProps->setDeliveryMode(PERSISTENT); + BOOST_CHECK(msg->isPersistent()); - msg->getFrames().append(method); - msg->getFrames().append(header); - msg->getFrames().append(content1); - msg->getFrames().append(content2); - - MessageProperties* mProps = msg->getFrames().getHeaders()->get<MessageProperties>(true); - mProps->setContentLength(data1.size() + data2.size()); - mProps->setMessageId(messageId); - FieldTable applicationHeaders; - applicationHeaders.setString("abc", "xyz"); - mProps->setApplicationHeaders(applicationHeaders); - DeliveryProperties* dProps = msg->getFrames().getHeaders()->get<DeliveryProperties>(true); - dProps->setRoutingKey(routingKey); - dProps->setDeliveryMode(PERSISTENT); - CPPUNIT_ASSERT(msg->isPersistent()); - - char* buff = static_cast<char*>(::alloca(msg->encodedSize())); - Buffer wbuffer(buff, msg->encodedSize()); - msg->encode(wbuffer); + char* buff = static_cast<char*>(::alloca(msg->encodedSize())); + Buffer wbuffer(buff, msg->encodedSize()); + msg->encode(wbuffer); - Buffer rbuffer(buff, msg->encodedSize()); - msg = new Message(); - msg->decodeHeader(rbuffer); - msg->decodeContent(rbuffer); - CPPUNIT_ASSERT_EQUAL(exchange, msg->getExchangeName()); - CPPUNIT_ASSERT_EQUAL(routingKey, msg->getRoutingKey()); - CPPUNIT_ASSERT_EQUAL((uint64_t) data1.size() + data2.size(), msg->contentSize()); - CPPUNIT_ASSERT_EQUAL((uint64_t) data1.size() + data2.size(), msg->getProperties<MessageProperties>()->getContentLength()); - CPPUNIT_ASSERT_EQUAL(messageId, msg->getProperties<MessageProperties>()->getMessageId()); - CPPUNIT_ASSERT_EQUAL(string("xyz"), msg->getProperties<MessageProperties>()->getApplicationHeaders().getString("abc")); - CPPUNIT_ASSERT_EQUAL((uint8_t) PERSISTENT, msg->getProperties<DeliveryProperties>()->getDeliveryMode()); - CPPUNIT_ASSERT(msg->isPersistent()); - } -}; + Buffer rbuffer(buff, msg->encodedSize()); + msg = new Message(); + msg->decodeHeader(rbuffer); + msg->decodeContent(rbuffer); + BOOST_CHECK_EQUAL(exchange, msg->getExchangeName()); + BOOST_CHECK_EQUAL(routingKey, msg->getRoutingKey()); + BOOST_CHECK_EQUAL((uint64_t) data1.size() + data2.size(), msg->contentSize()); + BOOST_CHECK_EQUAL((uint64_t) data1.size() + data2.size(), msg->getProperties<MessageProperties>()->getContentLength()); + BOOST_CHECK_EQUAL(messageId, msg->getProperties<MessageProperties>()->getMessageId()); + BOOST_CHECK_EQUAL(string("xyz"), msg->getProperties<MessageProperties>()->getApplicationHeaders().getString("abc")); + BOOST_CHECK_EQUAL((uint8_t) PERSISTENT, msg->getProperties<DeliveryProperties>()->getDeliveryMode()); + BOOST_CHECK(msg->isPersistent()); +} -// Make this test suite a plugin. -CPPUNIT_PLUGIN_IMPLEMENT(); -CPPUNIT_TEST_SUITE_REGISTRATION(MessageTest); +QPID_AUTO_TEST_SUITE_END() diff --git a/cpp/src/tests/QueuePolicyTest.cpp b/cpp/src/tests/QueuePolicyTest.cpp index 467f43638f..db88682010 100644 --- a/cpp/src/tests/QueuePolicyTest.cpp +++ b/cpp/src/tests/QueuePolicyTest.cpp @@ -19,71 +19,63 @@ * */ #include "qpid/broker/QueuePolicy.h" -#include "qpid_test_plugin.h" +#include "unit_test.h" using namespace qpid::broker; using namespace qpid::framing; -class QueuePolicyTest : public CppUnit::TestCase -{ - CPPUNIT_TEST_SUITE(QueuePolicyTest); - CPPUNIT_TEST(testCount); - CPPUNIT_TEST(testSize); - CPPUNIT_TEST(testBoth); - CPPUNIT_TEST(testSettings); - CPPUNIT_TEST_SUITE_END(); - - public: - void testCount(){ - QueuePolicy policy(5, 0); - CPPUNIT_ASSERT(!policy.limitExceeded()); - for (int i = 0; i < 5; i++) policy.enqueued(10); - CPPUNIT_ASSERT_EQUAL((uint64_t) 0, policy.getMaxSize()); - CPPUNIT_ASSERT_EQUAL((uint32_t) 5, policy.getMaxCount()); - CPPUNIT_ASSERT(!policy.limitExceeded()); - policy.enqueued(10); - CPPUNIT_ASSERT(policy.limitExceeded()); - policy.dequeued(10); - CPPUNIT_ASSERT(!policy.limitExceeded()); - policy.enqueued(10); - CPPUNIT_ASSERT(policy.limitExceeded()); - } +QPID_AUTO_TEST_SUITE(QueuePolicyTestSuite) - void testSize(){ - QueuePolicy policy(0, 50); - for (int i = 0; i < 5; i++) policy.enqueued(10); - CPPUNIT_ASSERT(!policy.limitExceeded()); - policy.enqueued(10); - CPPUNIT_ASSERT(policy.limitExceeded()); - policy.dequeued(10); - CPPUNIT_ASSERT(!policy.limitExceeded()); - policy.enqueued(10); - CPPUNIT_ASSERT(policy.limitExceeded()); - } +QPID_AUTO_TEST_CASE(testCount) +{ + QueuePolicy policy(5, 0); + BOOST_CHECK(!policy.limitExceeded()); + for (int i = 0; i < 5; i++) policy.enqueued(10); + BOOST_CHECK_EQUAL((uint64_t) 0, policy.getMaxSize()); + BOOST_CHECK_EQUAL((uint32_t) 5, policy.getMaxCount()); + BOOST_CHECK(!policy.limitExceeded()); + policy.enqueued(10); + BOOST_CHECK(policy.limitExceeded()); + policy.dequeued(10); + BOOST_CHECK(!policy.limitExceeded()); + policy.enqueued(10); + BOOST_CHECK(policy.limitExceeded()); +} - void testBoth(){ - QueuePolicy policy(5, 50); - for (int i = 0; i < 5; i++) policy.enqueued(11); - CPPUNIT_ASSERT(policy.limitExceeded()); - policy.dequeued(20); - CPPUNIT_ASSERT(!policy.limitExceeded());//fails - policy.enqueued(5); - policy.enqueued(10); - CPPUNIT_ASSERT(policy.limitExceeded()); - } +QPID_AUTO_TEST_CASE(testSize) +{ + QueuePolicy policy(0, 50); + for (int i = 0; i < 5; i++) policy.enqueued(10); + BOOST_CHECK(!policy.limitExceeded()); + policy.enqueued(10); + BOOST_CHECK(policy.limitExceeded()); + policy.dequeued(10); + BOOST_CHECK(!policy.limitExceeded()); + policy.enqueued(10); + BOOST_CHECK(policy.limitExceeded()); +} - void testSettings(){ - //test reading and writing the policy from/to field table - FieldTable settings; - QueuePolicy a(101, 303); - a.update(settings); - QueuePolicy b(settings); - CPPUNIT_ASSERT_EQUAL(a.getMaxCount(), b.getMaxCount()); - CPPUNIT_ASSERT_EQUAL(a.getMaxSize(), b.getMaxSize()); - } -}; +QPID_AUTO_TEST_CASE(testBoth) +{ + QueuePolicy policy(5, 50); + for (int i = 0; i < 5; i++) policy.enqueued(11); + BOOST_CHECK(policy.limitExceeded()); + policy.dequeued(20); + BOOST_CHECK(!policy.limitExceeded());//fails + policy.enqueued(5); + policy.enqueued(10); + BOOST_CHECK(policy.limitExceeded()); +} -// Make this test suite a plugin. -CPPUNIT_PLUGIN_IMPLEMENT(); -CPPUNIT_TEST_SUITE_REGISTRATION(QueuePolicyTest); +QPID_AUTO_TEST_CASE(testSettings) +{ + //test reading and writing the policy from/to field table + FieldTable settings; + QueuePolicy a(101, 303); + a.update(settings); + QueuePolicy b(settings); + BOOST_CHECK_EQUAL(a.getMaxCount(), b.getMaxCount()); + BOOST_CHECK_EQUAL(a.getMaxSize(), b.getMaxSize()); +} +QPID_AUTO_TEST_SUITE_END() diff --git a/cpp/src/tests/QueueRegistryTest.cpp b/cpp/src/tests/QueueRegistryTest.cpp index 5fd861d6be..7ad4e0b89d 100644 --- a/cpp/src/tests/QueueRegistryTest.cpp +++ b/cpp/src/tests/QueueRegistryTest.cpp @@ -18,78 +18,77 @@ */ #include "qpid/broker/QueueRegistry.h" -#include "qpid_test_plugin.h" +#include "unit_test.h" #include <string> using namespace qpid::broker; -class QueueRegistryTest : public CppUnit::TestCase -{ - CPPUNIT_TEST_SUITE(QueueRegistryTest); - CPPUNIT_TEST(testDeclare); - CPPUNIT_TEST(testDeclareTmp); - CPPUNIT_TEST(testFind); - CPPUNIT_TEST(testDestroy); - CPPUNIT_TEST_SUITE_END(); +QPID_AUTO_TEST_SUITE(QueueRegistryTest) - private: - std::string foo, bar; +QPID_AUTO_TEST_CASE(testDeclare) +{ + std::string foo("foo"); + std::string bar("bar"); QueueRegistry reg; std::pair<Queue::shared_ptr, bool> qc; - - public: - void setUp() { - foo = "foo"; - bar = "bar"; - } - - void testDeclare() { - qc = reg.declare(foo, false, 0, 0); - Queue::shared_ptr q = qc.first; - CPPUNIT_ASSERT(q); - CPPUNIT_ASSERT(qc.second); // New queue - CPPUNIT_ASSERT_EQUAL(foo, q->getName()); - qc = reg.declare(foo, false, 0, 0); - CPPUNIT_ASSERT_EQUAL(q, qc.first); - CPPUNIT_ASSERT(!qc.second); + qc = reg.declare(foo, false, 0, 0); + Queue::shared_ptr q = qc.first; + BOOST_CHECK(q); + BOOST_CHECK(qc.second); // New queue + BOOST_CHECK_EQUAL(foo, q->getName()); + + qc = reg.declare(foo, false, 0, 0); + BOOST_CHECK_EQUAL(q, qc.first); + BOOST_CHECK(!qc.second); - qc = reg.declare(bar, false, 0, 0); - q = qc.first; - CPPUNIT_ASSERT(q); - CPPUNIT_ASSERT_EQUAL(true, qc.second); - CPPUNIT_ASSERT_EQUAL(bar, q->getName()); - } + qc = reg.declare(bar, false, 0, 0); + q = qc.first; + BOOST_CHECK(q); + BOOST_CHECK_EQUAL(true, qc.second); + BOOST_CHECK_EQUAL(bar, q->getName()); +} + +QPID_AUTO_TEST_CASE(testDeclareTmp) +{ + QueueRegistry reg; + std::pair<Queue::shared_ptr, bool> qc; - void testDeclareTmp() - { - qc = reg.declare(std::string(), false, 0, 0); - CPPUNIT_ASSERT(qc.second); - CPPUNIT_ASSERT_EQUAL(std::string("tmp_1"), qc.first->getName()); - } + qc = reg.declare(std::string(), false, 0, 0); + BOOST_CHECK(qc.second); + BOOST_CHECK_EQUAL(std::string("tmp_1"), qc.first->getName()); +} - void testFind() { - CPPUNIT_ASSERT(reg.find(foo) == 0); +QPID_AUTO_TEST_CASE(testFind) +{ + std::string foo("foo"); + std::string bar("bar"); + QueueRegistry reg; + std::pair<Queue::shared_ptr, bool> qc; + + BOOST_CHECK(reg.find(foo) == 0); - reg.declare(foo, false, 0, 0); - reg.declare(bar, false, 0, 0); - Queue::shared_ptr q = reg.find(bar); - CPPUNIT_ASSERT(q); - CPPUNIT_ASSERT_EQUAL(bar, q->getName()); - } + reg.declare(foo, false, 0, 0); + reg.declare(bar, false, 0, 0); + Queue::shared_ptr q = reg.find(bar); + BOOST_CHECK(q); + BOOST_CHECK_EQUAL(bar, q->getName()); +} + +QPID_AUTO_TEST_CASE(testDestroy) +{ + std::string foo("foo"); + QueueRegistry reg; + std::pair<Queue::shared_ptr, bool> qc; - void testDestroy() { - qc = reg.declare(foo, false, 0, 0); - reg.destroy(foo); - // Queue is gone from the registry. - CPPUNIT_ASSERT(reg.find(foo) == 0); - // Queue is not actually destroyed till we drop our reference. - CPPUNIT_ASSERT_EQUAL(foo, qc.first->getName()); - // We shoud be the only reference. - CPPUNIT_ASSERT_EQUAL(1L, qc.first.use_count()); - } -}; + qc = reg.declare(foo, false, 0, 0); + reg.destroy(foo); + // Queue is gone from the registry. + BOOST_CHECK(reg.find(foo) == 0); + // Queue is not actually destroyed till we drop our reference. + BOOST_CHECK_EQUAL(foo, qc.first->getName()); + // We shoud be the only reference. + BOOST_CHECK_EQUAL(1L, qc.first.use_count()); +} -// Make this test suite a plugin. -CPPUNIT_PLUGIN_IMPLEMENT(); -CPPUNIT_TEST_SUITE_REGISTRATION(QueueRegistryTest); +QPID_AUTO_TEST_SUITE_END() diff --git a/cpp/src/tests/QueueTest.cpp b/cpp/src/tests/QueueTest.cpp index 9abf863ad4..39696707f4 100644 --- a/cpp/src/tests/QueueTest.cpp +++ b/cpp/src/tests/QueueTest.cpp @@ -18,13 +18,13 @@ * under the License. * */ +#include "unit_test.h" #include "qpid/Exception.h" #include "qpid/broker/Queue.h" #include "qpid/broker/Deliverable.h" #include "qpid/broker/ExchangeRegistry.h" #include "qpid/broker/QueueRegistry.h" #include "qpid/framing/MessageTransferBody.h" -#include "qpid_test_plugin.h" #include <iostream> #include "boost/format.hpp" @@ -34,7 +34,6 @@ using namespace qpid::broker; using namespace qpid::framing; using namespace qpid::sys; - class TestConsumer : public virtual Consumer{ public: typedef boost::shared_ptr<TestConsumer> shared_ptr; @@ -63,200 +62,180 @@ public: Message& getMessage() { return msg; } }; -class QueueTest : public CppUnit::TestCase -{ - CPPUNIT_TEST_SUITE(QueueTest); - CPPUNIT_TEST(testConsumers); - CPPUNIT_TEST(testRegistry); - CPPUNIT_TEST(testDequeue); - CPPUNIT_TEST(testBound); - CPPUNIT_TEST(testAsyncMessage); - CPPUNIT_TEST(testAsyncMessageCount); - CPPUNIT_TEST_SUITE_END(); - - - public: - intrusive_ptr<Message> message(std::string exchange, std::string routingKey) { - intrusive_ptr<Message> msg(new Message()); - AMQFrame method(in_place<MessageTransferBody>( - ProtocolVersion(), exchange, 0, 0)); - AMQFrame header(in_place<AMQHeaderBody>()); - msg->getFrames().append(method); - msg->getFrames().append(header); - msg->getFrames().getHeaders()->get<DeliveryProperties>(true)->setRoutingKey(routingKey); - return msg; - } +intrusive_ptr<Message> message(std::string exchange, std::string routingKey) { + intrusive_ptr<Message> msg(new Message()); + AMQFrame method(in_place<MessageTransferBody>(ProtocolVersion(), exchange, 0, 0)); + AMQFrame header(in_place<AMQHeaderBody>()); + msg->getFrames().append(method); + msg->getFrames().append(header); + msg->getFrames().getHeaders()->get<DeliveryProperties>(true)->setRoutingKey(routingKey); + return msg; +} + +QPID_AUTO_TEST_SUITE(QueueTestSuite) + +QPID_AUTO_TEST_CASE(testAsyncMessage) { + Queue::shared_ptr queue(new Queue("my_test_queue", true)); + intrusive_ptr<Message> received; + TestConsumer c1; + queue->consume(c1); - void testAsyncMessage(){ - Queue::shared_ptr queue(new Queue("my_test_queue", true)); - intrusive_ptr<Message> received; - - TestConsumer c1; - queue->consume(c1); - - - //Test basic delivery: - intrusive_ptr<Message> msg1 = message("e", "A"); - msg1->enqueueAsync();//this is done on enqueue which is not called from process - queue->process(msg1); - sleep(2); - - CPPUNIT_ASSERT(!c1.received); - msg1->enqueueComplete(); - - received = queue->dequeue().payload; - CPPUNIT_ASSERT_EQUAL(msg1.get(), received.get()); - - - } + //Test basic delivery: + intrusive_ptr<Message> msg1 = message("e", "A"); + msg1->enqueueAsync();//this is done on enqueue which is not called from process + queue->process(msg1); + sleep(2); + BOOST_CHECK(!c1.received); + msg1->enqueueComplete(); - void testAsyncMessageCount(){ - Queue::shared_ptr queue(new Queue("my_test_queue", true)); - intrusive_ptr<Message> msg1 = message("e", "A"); - msg1->enqueueAsync();//this is done on enqueue which is not called from process - - queue->process(msg1); - sleep(2); - uint32_t compval=0; - CPPUNIT_ASSERT_EQUAL(compval, queue->getMessageCount()); - msg1->enqueueComplete(); - compval=1; - CPPUNIT_ASSERT_EQUAL(compval, queue->getMessageCount()); + received = queue->dequeue().payload; + BOOST_CHECK_EQUAL(msg1.get(), received.get()); +} - } - void testConsumers(){ - Queue::shared_ptr queue(new Queue("my_queue", true)); +QPID_AUTO_TEST_CASE(testAsyncMessageCount){ + Queue::shared_ptr queue(new Queue("my_test_queue", true)); + intrusive_ptr<Message> msg1 = message("e", "A"); + msg1->enqueueAsync();//this is done on enqueue which is not called from process - //Test adding consumers: - TestConsumer c1; - TestConsumer c2; - queue->consume(c1); - queue->consume(c2); - - CPPUNIT_ASSERT_EQUAL(uint32_t(2), queue->getConsumerCount()); - - //Test basic delivery: - intrusive_ptr<Message> msg1 = message("e", "A"); - intrusive_ptr<Message> msg2 = message("e", "B"); - intrusive_ptr<Message> msg3 = message("e", "C"); - - queue->deliver(msg1); - CPPUNIT_ASSERT(queue->dispatch(c1)); - CPPUNIT_ASSERT_EQUAL(msg1.get(), c1.last.get()); - - queue->deliver(msg2); - CPPUNIT_ASSERT(queue->dispatch(c2)); - CPPUNIT_ASSERT_EQUAL(msg2.get(), c2.last.get()); - - c1.received = false; - queue->deliver(msg3); - CPPUNIT_ASSERT(queue->dispatch(c1)); - CPPUNIT_ASSERT_EQUAL(msg3.get(), c1.last.get()); + queue->process(msg1); + sleep(2); + uint32_t compval=0; + BOOST_CHECK_EQUAL(compval, queue->getMessageCount()); + msg1->enqueueComplete(); + compval=1; + BOOST_CHECK_EQUAL(compval, queue->getMessageCount()); +} + +QPID_AUTO_TEST_CASE(testConsumers){ + Queue::shared_ptr queue(new Queue("my_queue", true)); - //Test cancellation: - queue->cancel(c1); - CPPUNIT_ASSERT_EQUAL(uint32_t(1), queue->getConsumerCount()); - queue->cancel(c2); - CPPUNIT_ASSERT_EQUAL(uint32_t(0), queue->getConsumerCount()); - } - - void testRegistry(){ - //Test use of queues in registry: - QueueRegistry registry; - registry.declare("queue1", true, true); - registry.declare("queue2", true, true); - registry.declare("queue3", true, true); - - CPPUNIT_ASSERT(registry.find("queue1")); - CPPUNIT_ASSERT(registry.find("queue2")); - CPPUNIT_ASSERT(registry.find("queue3")); - - registry.destroy("queue1"); - registry.destroy("queue2"); - registry.destroy("queue3"); - - CPPUNIT_ASSERT(!registry.find("queue1")); - CPPUNIT_ASSERT(!registry.find("queue2")); - CPPUNIT_ASSERT(!registry.find("queue3")); - } - - void testDequeue(){ - Queue::shared_ptr queue(new Queue("my_queue", true)); - intrusive_ptr<Message> msg1 = message("e", "A"); - intrusive_ptr<Message> msg2 = message("e", "B"); - intrusive_ptr<Message> msg3 = message("e", "C"); - intrusive_ptr<Message> received; - - queue->deliver(msg1); - queue->deliver(msg2); - queue->deliver(msg3); - - CPPUNIT_ASSERT_EQUAL(uint32_t(3), queue->getMessageCount()); - - received = queue->dequeue().payload; - CPPUNIT_ASSERT_EQUAL(msg1.get(), received.get()); - CPPUNIT_ASSERT_EQUAL(uint32_t(2), queue->getMessageCount()); - - received = queue->dequeue().payload; - CPPUNIT_ASSERT_EQUAL(msg2.get(), received.get()); - CPPUNIT_ASSERT_EQUAL(uint32_t(1), queue->getMessageCount()); - - TestConsumer consumer; - queue->consume(consumer); - queue->dispatch(consumer); - if (!consumer.received) - sleep(2); - - CPPUNIT_ASSERT_EQUAL(msg3.get(), consumer.last.get()); - CPPUNIT_ASSERT_EQUAL(uint32_t(0), queue->getMessageCount()); - - received = queue->dequeue().payload; - CPPUNIT_ASSERT(!received); - CPPUNIT_ASSERT_EQUAL(uint32_t(0), queue->getMessageCount()); + //Test adding consumers: + TestConsumer c1; + TestConsumer c2; + queue->consume(c1); + queue->consume(c2); + + BOOST_CHECK_EQUAL(uint32_t(2), queue->getConsumerCount()); + + //Test basic delivery: + intrusive_ptr<Message> msg1 = message("e", "A"); + intrusive_ptr<Message> msg2 = message("e", "B"); + intrusive_ptr<Message> msg3 = message("e", "C"); + + queue->deliver(msg1); + BOOST_CHECK(queue->dispatch(c1)); + BOOST_CHECK_EQUAL(msg1.get(), c1.last.get()); + + queue->deliver(msg2); + BOOST_CHECK(queue->dispatch(c2)); + BOOST_CHECK_EQUAL(msg2.get(), c2.last.get()); + + c1.received = false; + queue->deliver(msg3); + BOOST_CHECK(queue->dispatch(c1)); + BOOST_CHECK_EQUAL(msg3.get(), c1.last.get()); + + //Test cancellation: + queue->cancel(c1); + BOOST_CHECK_EQUAL(uint32_t(1), queue->getConsumerCount()); + queue->cancel(c2); + BOOST_CHECK_EQUAL(uint32_t(0), queue->getConsumerCount()); +} + +QPID_AUTO_TEST_CASE(testRegistry){ + //Test use of queues in registry: + QueueRegistry registry; + registry.declare("queue1", true, true); + registry.declare("queue2", true, true); + registry.declare("queue3", true, true); + + BOOST_CHECK(registry.find("queue1")); + BOOST_CHECK(registry.find("queue2")); + BOOST_CHECK(registry.find("queue3")); + + registry.destroy("queue1"); + registry.destroy("queue2"); + registry.destroy("queue3"); + + BOOST_CHECK(!registry.find("queue1")); + BOOST_CHECK(!registry.find("queue2")); + BOOST_CHECK(!registry.find("queue3")); +} + +QPID_AUTO_TEST_CASE(testDequeue){ + Queue::shared_ptr queue(new Queue("my_queue", true)); + intrusive_ptr<Message> msg1 = message("e", "A"); + intrusive_ptr<Message> msg2 = message("e", "B"); + intrusive_ptr<Message> msg3 = message("e", "C"); + intrusive_ptr<Message> received; + + queue->deliver(msg1); + queue->deliver(msg2); + queue->deliver(msg3); + + BOOST_CHECK_EQUAL(uint32_t(3), queue->getMessageCount()); + + received = queue->dequeue().payload; + BOOST_CHECK_EQUAL(msg1.get(), received.get()); + BOOST_CHECK_EQUAL(uint32_t(2), queue->getMessageCount()); + + received = queue->dequeue().payload; + BOOST_CHECK_EQUAL(msg2.get(), received.get()); + BOOST_CHECK_EQUAL(uint32_t(1), queue->getMessageCount()); + + TestConsumer consumer; + queue->consume(consumer); + queue->dispatch(consumer); + if (!consumer.received) + sleep(2); + + BOOST_CHECK_EQUAL(msg3.get(), consumer.last.get()); + BOOST_CHECK_EQUAL(uint32_t(0), queue->getMessageCount()); + + received = queue->dequeue().payload; + BOOST_CHECK(!received); + BOOST_CHECK_EQUAL(uint32_t(0), queue->getMessageCount()); - } - - void testBound() - { - //test the recording of bindings, and use of those to allow a queue to be unbound - string key("my-key"); - FieldTable args; - - Queue::shared_ptr queue(new Queue("my-queue", true)); - ExchangeRegistry exchanges; - //establish bindings from exchange->queue and notify the queue as it is bound: - Exchange::shared_ptr exchange1 = exchanges.declare("my-exchange-1", "direct").first; - exchange1->bind(queue, key, &args); - queue->bound(exchange1->getName(), key, args); - - Exchange::shared_ptr exchange2 = exchanges.declare("my-exchange-2", "fanout").first; - exchange2->bind(queue, key, &args); - queue->bound(exchange2->getName(), key, args); - - Exchange::shared_ptr exchange3 = exchanges.declare("my-exchange-3", "topic").first; - exchange3->bind(queue, key, &args); - queue->bound(exchange3->getName(), key, args); +} - //delete one of the exchanges: - exchanges.destroy(exchange2->getName()); - exchange2.reset(); - - //unbind the queue from all exchanges it knows it has been bound to: - queue->unbind(exchanges, queue); - - //ensure the remaining exchanges don't still have the queue bound to them: - FailOnDeliver deliverable; - exchange1->route(deliverable, key, &args); - exchange3->route(deliverable, key, &args); - } -}; - -// Make this test suite a plugin. -CPPUNIT_PLUGIN_IMPLEMENT(); -CPPUNIT_TEST_SUITE_REGISTRATION(QueueTest); +QPID_AUTO_TEST_CASE(testBound) +{ + //test the recording of bindings, and use of those to allow a queue to be unbound + string key("my-key"); + FieldTable args; + + Queue::shared_ptr queue(new Queue("my-queue", true)); + ExchangeRegistry exchanges; + //establish bindings from exchange->queue and notify the queue as it is bound: + Exchange::shared_ptr exchange1 = exchanges.declare("my-exchange-1", "direct").first; + exchange1->bind(queue, key, &args); + queue->bound(exchange1->getName(), key, args); + + Exchange::shared_ptr exchange2 = exchanges.declare("my-exchange-2", "fanout").first; + exchange2->bind(queue, key, &args); + queue->bound(exchange2->getName(), key, args); + + Exchange::shared_ptr exchange3 = exchanges.declare("my-exchange-3", "topic").first; + exchange3->bind(queue, key, &args); + queue->bound(exchange3->getName(), key, args); + + //delete one of the exchanges: + exchanges.destroy(exchange2->getName()); + exchange2.reset(); + + //unbind the queue from all exchanges it knows it has been bound to: + queue->unbind(exchanges, queue); + + //ensure the remaining exchanges don't still have the queue bound to them: + FailOnDeliver deliverable; + exchange1->route(deliverable, key, &args); + exchange3->route(deliverable, key, &args); +} + +QPID_AUTO_TEST_SUITE_END() diff --git a/cpp/src/tests/SequenceNumberTest.cpp b/cpp/src/tests/SequenceNumberTest.cpp index d227b78323..e4c6d066ef 100644 --- a/cpp/src/tests/SequenceNumberTest.cpp +++ b/cpp/src/tests/SequenceNumberTest.cpp @@ -19,202 +19,187 @@ * */ -#include "qpid_test_plugin.h" +#include "unit_test.h" #include <iostream> #include "qpid/framing/SequenceNumber.h" #include "qpid/framing/SequenceNumberSet.h" using namespace qpid::framing; -class SequenceNumberTest : public CppUnit::TestCase + +void checkDifference(SequenceNumber& a, SequenceNumber& b, int gap) { - CPPUNIT_TEST_SUITE(SequenceNumberTest); - CPPUNIT_TEST(testIncrementPostfix); - CPPUNIT_TEST(testIncrementPrefix); - CPPUNIT_TEST(testWrapAround); - CPPUNIT_TEST(testCondense); - CPPUNIT_TEST(testCondenseSingleRange); - CPPUNIT_TEST(testCondenseSingleItem); - CPPUNIT_TEST(testDifference); - CPPUNIT_TEST(testDifferenceWithWrapAround1); - CPPUNIT_TEST(testDifferenceWithWrapAround2); - CPPUNIT_TEST_SUITE_END(); - - public: - - void testIncrementPostfix() - { - SequenceNumber a; - SequenceNumber b; - CPPUNIT_ASSERT(!(a > b)); - CPPUNIT_ASSERT(!(b < a)); - CPPUNIT_ASSERT(a == b); - - SequenceNumber c = a++; - CPPUNIT_ASSERT(a > b); - CPPUNIT_ASSERT(b < a); - CPPUNIT_ASSERT(a != b); - CPPUNIT_ASSERT(c < a); - CPPUNIT_ASSERT(a != c); - - b++; - CPPUNIT_ASSERT(!(a > b)); - CPPUNIT_ASSERT(!(b < a)); - CPPUNIT_ASSERT(a == b); - CPPUNIT_ASSERT(c < b); - CPPUNIT_ASSERT(b != c); - } + BOOST_CHECK_EQUAL(gap, a - b); + BOOST_CHECK_EQUAL(-gap, b - a); - void testIncrementPrefix() - { - SequenceNumber a; - SequenceNumber b; - CPPUNIT_ASSERT(!(a > b)); - CPPUNIT_ASSERT(!(b < a)); - CPPUNIT_ASSERT(a == b); - - SequenceNumber c = ++a; - CPPUNIT_ASSERT(a > b); - CPPUNIT_ASSERT(b < a); - CPPUNIT_ASSERT(a != b); - CPPUNIT_ASSERT(a == c); - - ++b; - CPPUNIT_ASSERT(!(a > b)); - CPPUNIT_ASSERT(!(b < a)); - CPPUNIT_ASSERT(a == b); + //increment until b wraps around + for (int i = 0; i < (gap + 2); i++, ++a, ++b) { + BOOST_CHECK_EQUAL(gap, a - b); } - - void testWrapAround() - { - const uint32_t max = 0xFFFFFFFF; - SequenceNumber a(max - 10); - SequenceNumber b(max - 5); - checkComparison(a, b, 5); - - const uint32_t max_signed = 0x7FFFFFFF; - SequenceNumber c(max_signed - 10); - SequenceNumber d(max_signed - 5); - checkComparison(c, d, 5); + //keep incrementing until a also wraps around + for (int i = 0; i < (gap + 2); i++, ++a, ++b) { + BOOST_CHECK_EQUAL(gap, a - b); } - - void checkComparison(SequenceNumber& a, SequenceNumber& b, int gap) - { - //increment until b wraps around - for (int i = 0; i < (gap + 2); i++) { - CPPUNIT_ASSERT(++a < ++b);//test prefix - } - //keep incrementing until a also wraps around - for (int i = 0; i < (gap + 2); i++) { - CPPUNIT_ASSERT(a++ < b++);//test postfix - } - //let a 'catch up' - for (int i = 0; i < gap; i++) { - a++; - } - CPPUNIT_ASSERT(a == b); - CPPUNIT_ASSERT(++a > b); + //let b catch up and overtake + for (int i = 0; i < (gap*2); i++, ++b) { + BOOST_CHECK_EQUAL(gap - i, a - b); + BOOST_CHECK_EQUAL(i - gap, b - a); } +} - void testCondense() - { - SequenceNumberSet set; - for (uint i = 0; i < 6; i++) { - set.push_back(SequenceNumber(i)); - } - set.push_back(SequenceNumber(7)); - for (uint i = 9; i < 13; i++) { - set.push_back(SequenceNumber(i)); - } - set.push_back(SequenceNumber(13)); - SequenceNumberSet actual = set.condense(); - - SequenceNumberSet expected; - expected.addRange(SequenceNumber(0), SequenceNumber(5)); - expected.addRange(SequenceNumber(7), SequenceNumber(7)); - expected.addRange(SequenceNumber(9), SequenceNumber(13)); - CPPUNIT_ASSERT_EQUAL(expected, actual); +void checkComparison(SequenceNumber& a, SequenceNumber& b, int gap) +{ + //increment until b wraps around + for (int i = 0; i < (gap + 2); i++) { + BOOST_CHECK(++a < ++b);//test prefix + } + //keep incrementing until a also wraps around + for (int i = 0; i < (gap + 2); i++) { + BOOST_CHECK(a++ < b++);//test postfix } + //let a 'catch up' + for (int i = 0; i < gap; i++) { + a++; + } + BOOST_CHECK(a == b); + BOOST_CHECK(++a > b); +} + + +QPID_AUTO_TEST_SUITE(SequenceNumberTestSuite) - void testCondenseSingleRange() - { - SequenceNumberSet set; - for (uint i = 0; i < 6; i++) { - set.push_back(SequenceNumber(i)); - } - SequenceNumberSet actual = set.condense(); - - SequenceNumberSet expected; - expected.addRange(SequenceNumber(0), SequenceNumber(5)); - CPPUNIT_ASSERT_EQUAL(expected, actual); +QPID_AUTO_TEST_CASE(testIncrementPostfix) +{ + SequenceNumber a; + SequenceNumber b; + BOOST_CHECK(!(a > b)); + BOOST_CHECK(!(b < a)); + BOOST_CHECK(a == b); + + SequenceNumber c = a++; + BOOST_CHECK(a > b); + BOOST_CHECK(b < a); + BOOST_CHECK(a != b); + BOOST_CHECK(c < a); + BOOST_CHECK(a != c); + + b++; + BOOST_CHECK(!(a > b)); + BOOST_CHECK(!(b < a)); + BOOST_CHECK(a == b); + BOOST_CHECK(c < b); + BOOST_CHECK(b != c); +} + +QPID_AUTO_TEST_CASE(testIncrementPrefix) +{ + SequenceNumber a; + SequenceNumber b; + BOOST_CHECK(!(a > b)); + BOOST_CHECK(!(b < a)); + BOOST_CHECK(a == b); + + SequenceNumber c = ++a; + BOOST_CHECK(a > b); + BOOST_CHECK(b < a); + BOOST_CHECK(a != b); + BOOST_CHECK(a == c); + + ++b; + BOOST_CHECK(!(a > b)); + BOOST_CHECK(!(b < a)); + BOOST_CHECK(a == b); +} + +QPID_AUTO_TEST_CASE(testWrapAround) +{ + const uint32_t max = 0xFFFFFFFF; + SequenceNumber a(max - 10); + SequenceNumber b(max - 5); + checkComparison(a, b, 5); + + const uint32_t max_signed = 0x7FFFFFFF; + SequenceNumber c(max_signed - 10); + SequenceNumber d(max_signed - 5); + checkComparison(c, d, 5); +} + +QPID_AUTO_TEST_CASE(testCondense) +{ + SequenceNumberSet set; + for (uint i = 0; i < 6; i++) { + set.push_back(SequenceNumber(i)); + } + set.push_back(SequenceNumber(7)); + for (uint i = 9; i < 13; i++) { + set.push_back(SequenceNumber(i)); } + set.push_back(SequenceNumber(13)); + SequenceNumberSet actual = set.condense(); - void testCondenseSingleItem() - { - SequenceNumberSet set; - set.push_back(SequenceNumber(1)); - SequenceNumberSet actual = set.condense(); + SequenceNumberSet expected; + expected.addRange(SequenceNumber(0), SequenceNumber(5)); + expected.addRange(SequenceNumber(7), SequenceNumber(7)); + expected.addRange(SequenceNumber(9), SequenceNumber(13)); + BOOST_CHECK_EQUAL(expected, actual); +} - SequenceNumberSet expected; - expected.addRange(SequenceNumber(1), SequenceNumber(1)); - CPPUNIT_ASSERT_EQUAL(expected, actual); +QPID_AUTO_TEST_CASE(testCondenseSingleRange) +{ + SequenceNumberSet set; + for (uint i = 0; i < 6; i++) { + set.push_back(SequenceNumber(i)); } + SequenceNumberSet actual = set.condense(); - void testDifference() - { - SequenceNumber a; - SequenceNumber b; + SequenceNumberSet expected; + expected.addRange(SequenceNumber(0), SequenceNumber(5)); + BOOST_CHECK_EQUAL(expected, actual); +} - for (int i = 0; i < 10; i++, ++a) { - CPPUNIT_ASSERT_EQUAL(i, a - b); - CPPUNIT_ASSERT_EQUAL(-i, b - a); - } +QPID_AUTO_TEST_CASE(testCondenseSingleItem) +{ + SequenceNumberSet set; + set.push_back(SequenceNumber(1)); + SequenceNumberSet actual = set.condense(); - b = a; + SequenceNumberSet expected; + expected.addRange(SequenceNumber(1), SequenceNumber(1)); + BOOST_CHECK_EQUAL(expected, actual); +} - for (int i = 0; i < 10; i++, ++b) { - CPPUNIT_ASSERT_EQUAL(-i, a - b); - CPPUNIT_ASSERT_EQUAL(i, b - a); - } - } +QPID_AUTO_TEST_CASE(testDifference) +{ + SequenceNumber a; + SequenceNumber b; - void testDifferenceWithWrapAround1() - { - const uint32_t max = 0xFFFFFFFF; - SequenceNumber a(max - 5); - SequenceNumber b(max - 10); - checkDifference(a, b, 5); + for (int i = 0; i < 10; i++, ++a) { + BOOST_CHECK_EQUAL(i, a - b); + BOOST_CHECK_EQUAL(-i, b - a); } - void testDifferenceWithWrapAround2() - { - const uint32_t max_signed = 0x7FFFFFFF; - SequenceNumber c(max_signed - 5); - SequenceNumber d(max_signed - 10); - checkDifference(c, d, 5); - } + b = a; - void checkDifference(SequenceNumber& a, SequenceNumber& b, int gap) - { - CPPUNIT_ASSERT_EQUAL(gap, a - b); - CPPUNIT_ASSERT_EQUAL(-gap, b - a); - - //increment until b wraps around - for (int i = 0; i < (gap + 2); i++, ++a, ++b) { - CPPUNIT_ASSERT_EQUAL(gap, a - b); - } - //keep incrementing until a also wraps around - for (int i = 0; i < (gap + 2); i++, ++a, ++b) { - CPPUNIT_ASSERT_EQUAL(gap, a - b); - } - //let b catch up and overtake - for (int i = 0; i < (gap*2); i++, ++b) { - CPPUNIT_ASSERT_EQUAL(gap - i, a - b); - CPPUNIT_ASSERT_EQUAL(i - gap, b - a); - } + for (int i = 0; i < 10; i++, ++b) { + BOOST_CHECK_EQUAL(-i, a - b); + BOOST_CHECK_EQUAL(i, b - a); } -}; - -// Make this test suite a plugin. -CPPUNIT_PLUGIN_IMPLEMENT(); -CPPUNIT_TEST_SUITE_REGISTRATION(SequenceNumberTest); +} + +QPID_AUTO_TEST_CASE(testDifferenceWithWrapAround1) +{ + const uint32_t max = 0xFFFFFFFF; + SequenceNumber a(max - 5); + SequenceNumber b(max - 10); + checkDifference(a, b, 5); +} + +QPID_AUTO_TEST_CASE(testDifferenceWithWrapAround2) +{ + const uint32_t max_signed = 0x7FFFFFFF; + SequenceNumber c(max_signed - 5); + SequenceNumber d(max_signed - 10); + checkDifference(c, d, 5); +} + +QPID_AUTO_TEST_SUITE_END() diff --git a/cpp/src/tests/TimerTest.cpp b/cpp/src/tests/TimerTest.cpp index 2693d4a787..50712ff79c 100644 --- a/cpp/src/tests/TimerTest.cpp +++ b/cpp/src/tests/TimerTest.cpp @@ -21,7 +21,7 @@ */ #include "qpid/broker/Timer.h" #include "qpid/sys/Monitor.h" -#include "qpid_test_plugin.h" +#include "unit_test.h" #include <math.h> #include <iostream> #include <memory> @@ -33,98 +33,88 @@ using namespace qpid::sys; using boost::intrusive_ptr; using boost::dynamic_pointer_cast; -class TimerTest : public CppUnit::TestCase +class Counter { - CPPUNIT_TEST_SUITE(TimerTest); - CPPUNIT_TEST(testGeneral); - CPPUNIT_TEST_SUITE_END(); - - class Counter + Mutex lock; + uint counter; + public: + Counter() : counter(0) {} + uint next() { - Mutex lock; - uint counter; - public: - Counter() : counter(0) {} - uint next() - { - Mutex::ScopedLock l(lock); - return ++counter; - } - }; + Mutex::ScopedLock l(lock); + return ++counter; + } +}; - class TestTask : public TimerTask - { - const AbsTime start; - const Duration expected; - AbsTime end; - bool fired; - uint position; - Monitor monitor; - Counter& counter; - - public: - TestTask(Duration timeout, Counter& _counter) - : TimerTask(timeout), start(now()), expected(timeout), end(start), fired(false), counter(_counter) {} +class TestTask : public TimerTask +{ + const AbsTime start; + const Duration expected; + AbsTime end; + bool fired; + uint position; + Monitor monitor; + Counter& counter; - void fire() - { - Monitor::ScopedLock l(monitor); - fired = true; - position = counter.next(); - end = now(); - monitor.notify(); - } + public: + TestTask(Duration timeout, Counter& _counter) + : TimerTask(timeout), start(now()), expected(timeout), end(start), fired(false), counter(_counter) {} - void check(uint expected_position, uint64_t tolerance = 500 * TIME_MSEC) - { - Monitor::ScopedLock l(monitor); - CPPUNIT_ASSERT(fired); - CPPUNIT_ASSERT_EQUAL(expected_position, position); - Duration actual(start, end); - uint64_t difference = abs(expected - actual); - std::string msg(boost::lexical_cast<std::string>(boost::format("tolerance = %1%, difference = %2%") % tolerance % difference)); - CPPUNIT_ASSERT_MESSAGE(msg, difference < tolerance); - } + void fire() + { + Monitor::ScopedLock l(monitor); + fired = true; + position = counter.next(); + end = now(); + monitor.notify(); + } - void wait(Duration d) - { - Monitor::ScopedLock l(monitor); - monitor.wait(AbsTime(now(), d)); - } - }; + void check(uint expected_position, uint64_t tolerance = 500 * TIME_MSEC) + { + Monitor::ScopedLock l(monitor); + BOOST_CHECK(fired); + BOOST_CHECK_EQUAL(expected_position, position); + Duration actual(start, end); + uint64_t difference = abs(expected - actual); + std::string msg(boost::lexical_cast<std::string>(boost::format("tolerance = %1%, difference = %2%") % tolerance % difference)); + BOOST_CHECK_MESSAGE(difference < tolerance, msg); + } - class DummyRunner : public Runnable + void wait(Duration d) { - public: - void run() {} - }; + Monitor::ScopedLock l(monitor); + monitor.wait(AbsTime(now(), d)); + } +}; -public: +class DummyRunner : public Runnable +{ + public: + void run() {} +}; - void testGeneral() - { - Counter counter; - Timer timer; - intrusive_ptr<TestTask> task1(new TestTask(Duration(3 * TIME_SEC), counter)); - intrusive_ptr<TestTask> task2(new TestTask(Duration(1 * TIME_SEC), counter)); - intrusive_ptr<TestTask> task3(new TestTask(Duration(4 * TIME_SEC), counter)); - intrusive_ptr<TestTask> task4(new TestTask(Duration(2 * TIME_SEC), counter)); +QPID_AUTO_TEST_SUITE(TimerTestSuite) + +QPID_AUTO_TEST_CASE(testGeneral) +{ + Counter counter; + Timer timer; + intrusive_ptr<TestTask> task1(new TestTask(Duration(3 * TIME_SEC), counter)); + intrusive_ptr<TestTask> task2(new TestTask(Duration(1 * TIME_SEC), counter)); + intrusive_ptr<TestTask> task3(new TestTask(Duration(4 * TIME_SEC), counter)); + intrusive_ptr<TestTask> task4(new TestTask(Duration(2 * TIME_SEC), counter)); - timer.add(task1); - timer.add(task2); - timer.add(task3); - timer.add(task4); + timer.add(task1); + timer.add(task2); + timer.add(task3); + timer.add(task4); - dynamic_pointer_cast<TestTask>(task3)->wait(Duration(6 * TIME_SEC)); + dynamic_pointer_cast<TestTask>(task3)->wait(Duration(6 * TIME_SEC)); - dynamic_pointer_cast<TestTask>(task1)->check(3); - dynamic_pointer_cast<TestTask>(task2)->check(1); - dynamic_pointer_cast<TestTask>(task3)->check(4); - dynamic_pointer_cast<TestTask>(task4)->check(2); - } -}; - -// Make this test suite a plugin. -CPPUNIT_PLUGIN_IMPLEMENT(); -CPPUNIT_TEST_SUITE_REGISTRATION(TimerTest); + dynamic_pointer_cast<TestTask>(task1)->check(3); + dynamic_pointer_cast<TestTask>(task2)->check(1); + dynamic_pointer_cast<TestTask>(task3)->check(4); + dynamic_pointer_cast<TestTask>(task4)->check(2); +} +QPID_AUTO_TEST_SUITE_END() diff --git a/cpp/src/tests/TopicExchangeTest.cpp b/cpp/src/tests/TopicExchangeTest.cpp index adb937179f..af4263de34 100644 --- a/cpp/src/tests/TopicExchangeTest.cpp +++ b/cpp/src/tests/TopicExchangeTest.cpp @@ -17,7 +17,8 @@ * under the License. */ #include "qpid/broker/TopicExchange.h" -#include "qpid_test_plugin.h" +#include "unit_test.h" +#include "test_tools.h" using namespace qpid::broker; @@ -34,167 +35,133 @@ Tokens makeTokens(const char** begin, const char** end) // Convert array to token vector #define TOKENS(a) makeTokens(a, a + LEN(a)) -// Allow CPPUNIT_EQUALS to print a Tokens. -CppUnit::OStringStream& operator <<(CppUnit::OStringStream& out, const Tokens& v) -{ - out << "[ "; - for (Tokens::const_iterator i = v.begin(); - i != v.end(); ++i) - { - out << '"' << *i << '"' << (i+1 == v.end() ? "]" : ", "); - } - return out; -} +#define ASSERT_NORMALIZED(expect, pattern) \ + BOOST_CHECK_EQUAL(Tokens(expect), static_cast<Tokens>(TopicPattern(pattern))) + +QPID_AUTO_TEST_SUITE(TopicExchangeTestSuite) -class TokensTest : public CppUnit::TestCase +QPID_AUTO_TEST_CASE(testTokens) { - CPPUNIT_TEST_SUITE(TokensTest); - CPPUNIT_TEST(testTokens); - CPPUNIT_TEST_SUITE_END(); - - public: - void testTokens() - { - Tokens tokens("hello.world"); - const char* expect[] = {"hello", "world"}; - CPPUNIT_ASSERT_EQUAL(TOKENS(expect), tokens); + 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" }; - CPPUNIT_ASSERT_EQUAL(TOKENS(expect2), tokens); + tokens = "a.b.c"; + const char* expect2[] = { "a", "b", "c" }; + BOOST_CHECK_EQUAL(TOKENS(expect2), tokens); - tokens = ""; - CPPUNIT_ASSERT(tokens.empty()); + tokens = ""; + BOOST_CHECK(tokens.empty()); - tokens = "x"; - const char* expect3[] = { "x" }; - CPPUNIT_ASSERT_EQUAL(TOKENS(expect3), tokens); + tokens = "x"; + const char* expect3[] = { "x" }; + BOOST_CHECK_EQUAL(TOKENS(expect3), tokens); - tokens = (".x"); - const char* expect4[] = { "", "x" }; - CPPUNIT_ASSERT_EQUAL(TOKENS(expect4), tokens); + tokens = (".x"); + const char* expect4[] = { "", "x" }; + BOOST_CHECK_EQUAL(TOKENS(expect4), tokens); - tokens = ("x."); - const char* expect5[] = { "x", "" }; - CPPUNIT_ASSERT_EQUAL(TOKENS(expect5), tokens); + tokens = ("x."); + const char* expect5[] = { "x", "" }; + BOOST_CHECK_EQUAL(TOKENS(expect5), tokens); - tokens = ("."); - const char* expect6[] = { "", "" }; - CPPUNIT_ASSERT_EQUAL(TOKENS(expect6), tokens); + tokens = ("."); + const char* expect6[] = { "", "" }; + BOOST_CHECK_EQUAL(TOKENS(expect6), tokens); - tokens = (".."); - const char* expect7[] = { "", "", "" }; - CPPUNIT_ASSERT_EQUAL(TOKENS(expect7), tokens); - } - -}; + tokens = (".."); + const char* expect7[] = { "", "", "" }; + BOOST_CHECK_EQUAL(TOKENS(expect7), tokens); +} -#define ASSERT_NORMALIZED(expect, pattern) \ - CPPUNIT_ASSERT_EQUAL(Tokens(expect), static_cast<Tokens>(TopicPattern(pattern))) -class TopicPatternTest : public CppUnit::TestCase +QPID_AUTO_TEST_CASE(testNormalize) { - CPPUNIT_TEST_SUITE(TopicPatternTest); - CPPUNIT_TEST(testNormalize); - CPPUNIT_TEST(testPlain); - CPPUNIT_TEST(testStar); - CPPUNIT_TEST(testHash); - CPPUNIT_TEST(testMixed); - CPPUNIT_TEST(testCombo); - CPPUNIT_TEST_SUITE_END(); - - public: - - void testNormalize() - { - CPPUNIT_ASSERT(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.*.#.*.#.*"); - } + 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.*.#.*.#.*"); +} - void testPlain() { - TopicPattern p("ab.cd.e"); - CPPUNIT_ASSERT(p.match("ab.cd.e")); - CPPUNIT_ASSERT(!p.match("abx.cd.e")); - CPPUNIT_ASSERT(!p.match("ab.cd")); - CPPUNIT_ASSERT(!p.match("ab.cd..e.")); - CPPUNIT_ASSERT(!p.match("ab.cd.e.")); - CPPUNIT_ASSERT(!p.match(".ab.cd.e")); - - p = ""; - CPPUNIT_ASSERT(p.match("")); - - p = "."; - CPPUNIT_ASSERT(p.match(".")); - } - - - void testStar() - { - TopicPattern p("a.*.b"); - CPPUNIT_ASSERT(p.match("a.xx.b")); - CPPUNIT_ASSERT(!p.match("a.b")); - - p = "*.x"; - CPPUNIT_ASSERT(p.match("y.x")); - CPPUNIT_ASSERT(p.match(".x")); - CPPUNIT_ASSERT(!p.match("x")); - - p = "x.x.*"; - CPPUNIT_ASSERT(p.match("x.x.y")); - CPPUNIT_ASSERT(p.match("x.x.")); - CPPUNIT_ASSERT(!p.match("x.x")); - CPPUNIT_ASSERT(!p.match("q.x.y")); - } - - void testHash() - { - TopicPattern p("a.#.b"); - CPPUNIT_ASSERT(p.match("a.b")); - CPPUNIT_ASSERT(p.match("a.x.b")); - CPPUNIT_ASSERT(p.match("a..x.y.zz.b")); - CPPUNIT_ASSERT(!p.match("a.b.")); - CPPUNIT_ASSERT(!p.match("q.x.b")); - - p = "a.#"; - CPPUNIT_ASSERT(p.match("a")); - CPPUNIT_ASSERT(p.match("a.b")); - CPPUNIT_ASSERT(p.match("a.b.c")); - - p = "#.a"; - CPPUNIT_ASSERT(p.match("a")); - CPPUNIT_ASSERT(p.match("x.y.a")); - } - - void testMixed() - { - TopicPattern p("*.x.#.y"); - CPPUNIT_ASSERT(p.match("a.x.y")); - CPPUNIT_ASSERT(p.match("a.x.p.qq.y")); - CPPUNIT_ASSERT(!p.match("a.a.x.y")); - CPPUNIT_ASSERT(!p.match("aa.x.b.c")); - - p = "a.#.b.*"; - CPPUNIT_ASSERT(p.match("a.b.x")); - CPPUNIT_ASSERT(p.match("a.x.x.x.b.x")); - } - - void testCombo() { - TopicPattern p("*.#.#.*.*.#"); - CPPUNIT_ASSERT(p.match("x.y.z")); - CPPUNIT_ASSERT(p.match("x.y.z.a.b.c")); - CPPUNIT_ASSERT(!p.match("x.y")); - CPPUNIT_ASSERT(!p.match("x")); - } -}; +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(".")); +} - -// Make this test suite a plugin. -CPPUNIT_PLUGIN_IMPLEMENT(); -CPPUNIT_TEST_SUITE_REGISTRATION(TopicPatternTest); -CPPUNIT_TEST_SUITE_REGISTRATION(TokensTest); + +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")); +} + +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")); +} + +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")); +} + +QPID_AUTO_TEST_SUITE_END() diff --git a/cpp/src/tests/TxAckTest.cpp b/cpp/src/tests/TxAckTest.cpp index b86f3d75e0..d232976fe8 100644 --- a/cpp/src/tests/TxAckTest.cpp +++ b/cpp/src/tests/TxAckTest.cpp @@ -22,7 +22,7 @@ #include "qpid/broker/NullMessageStore.h" #include "qpid/broker/RecoveryManager.h" #include "qpid/broker/TxAck.h" -#include "qpid_test_plugin.h" +#include "unit_test.h" #include <iostream> #include <list> #include <vector> @@ -34,29 +34,23 @@ using namespace qpid; using namespace qpid::broker; using namespace qpid::framing; -class TxAckTest : public CppUnit::TestCase -{ - class TestMessageStore : public NullMessageStore +class TestMessageStore : public NullMessageStore +{ + public: + vector<intrusive_ptr<PersistableMessage> > dequeued; + + void dequeue(TransactionContext*, intrusive_ptr<PersistableMessage>& msg, const PersistableQueue& /*queue*/) { - public: - vector<intrusive_ptr<PersistableMessage> > dequeued; - - void dequeue(TransactionContext*, intrusive_ptr<PersistableMessage>& msg, const PersistableQueue& /*queue*/) - { - dequeued.push_back(msg); - } - - TestMessageStore() : NullMessageStore() {} - ~TestMessageStore(){} - }; - - CPPUNIT_TEST_SUITE(TxAckTest); - CPPUNIT_TEST(testPrepare); - CPPUNIT_TEST(testCommit); - CPPUNIT_TEST_SUITE_END(); + dequeued.push_back(msg); + } + TestMessageStore() : NullMessageStore() {} + ~TestMessageStore(){} +}; +struct TxAckTest +{ AccumulatedAck acked; TestMessageStore store; Queue::shared_ptr queue; @@ -64,9 +58,6 @@ class TxAckTest : public CppUnit::TestCase list<DeliveryRecord> deliveries; TxAck op; - -public: - TxAckTest() : acked(0), queue(new Queue("my_queue", false, &store, 0)), op(acked, deliveries) { for(int i = 0; i < 10; i++){ @@ -84,31 +75,35 @@ public: acked.update(9, 9); } - void testPrepare() - { - //ensure acked messages are discarded, i.e. dequeued from store - op.prepare(0); - CPPUNIT_ASSERT_EQUAL((size_t) 7, store.dequeued.size()); - CPPUNIT_ASSERT_EQUAL((size_t) 10, deliveries.size()); - int dequeued[] = {0, 1, 2, 3, 4, 6, 8}; - for (int i = 0; i < 7; i++) { - CPPUNIT_ASSERT_EQUAL(static_pointer_cast<PersistableMessage>(messages[dequeued[i]]), store.dequeued[i]); - } - } - - void testCommit() - { - //emsure acked messages are removed from list - op.commit(); - CPPUNIT_ASSERT_EQUAL((size_t) 3, deliveries.size()); - list<DeliveryRecord>::iterator i = deliveries.begin(); - CPPUNIT_ASSERT(i->matches(6));//msg 6 - CPPUNIT_ASSERT((++i)->matches(8));//msg 8 - CPPUNIT_ASSERT((++i)->matches(10));//msg 10 - } }; -// Make this test suite a plugin. -CPPUNIT_PLUGIN_IMPLEMENT(); -CPPUNIT_TEST_SUITE_REGISTRATION(TxAckTest); +QPID_AUTO_TEST_SUITE(TxAckTestSuite) +QPID_AUTO_TEST_CASE(testPrepare) +{ + TxAckTest t; + + //ensure acked messages are discarded, i.e. dequeued from store + t.op.prepare(0); + BOOST_CHECK_EQUAL((size_t) 7, t.store.dequeued.size()); + BOOST_CHECK_EQUAL((size_t) 10, t.deliveries.size()); + int dequeued[] = {0, 1, 2, 3, 4, 6, 8}; + for (int i = 0; i < 7; i++) { + BOOST_CHECK_EQUAL(static_pointer_cast<PersistableMessage>(t.messages[dequeued[i]]), t.store.dequeued[i]); + } +} + +QPID_AUTO_TEST_CASE(testCommit) +{ + TxAckTest t; + + //ensure acked messages are removed from list + t.op.commit(); + BOOST_CHECK_EQUAL((size_t) 3, t.deliveries.size()); + list<DeliveryRecord>::iterator i = t.deliveries.begin(); + BOOST_CHECK(i->matches(6));//msg 6 + BOOST_CHECK((++i)->matches(8));//msg 8 + BOOST_CHECK((++i)->matches(10));//msg 10 +} + +QPID_AUTO_TEST_SUITE_END() diff --git a/cpp/src/tests/TxBufferTest.cpp b/cpp/src/tests/TxBufferTest.cpp index afe6d2b0fc..3d6a12cacc 100644 --- a/cpp/src/tests/TxBufferTest.cpp +++ b/cpp/src/tests/TxBufferTest.cpp @@ -19,7 +19,7 @@ * */ #include "qpid/broker/TxBuffer.h" -#include "qpid_test_plugin.h" +#include "unit_test.h" #include <iostream> #include <vector> #include "TxMocks.h" @@ -27,159 +27,150 @@ using namespace qpid::broker; using boost::static_pointer_cast; -class TxBufferTest : public CppUnit::TestCase -{ - CPPUNIT_TEST_SUITE(TxBufferTest); - CPPUNIT_TEST(testCommitLocal); - CPPUNIT_TEST(testFailOnCommitLocal); - CPPUNIT_TEST(testPrepare); - CPPUNIT_TEST(testFailOnPrepare); - CPPUNIT_TEST(testRollback); - CPPUNIT_TEST(testBufferIsClearedAfterRollback); - CPPUNIT_TEST(testBufferIsClearedAfterCommit); - CPPUNIT_TEST_SUITE_END(); - - public: - - void testCommitLocal(){ - MockTransactionalStore store; - store.expectBegin().expectCommit(); - - MockTxOp::shared_ptr opA(new MockTxOp()); - opA->expectPrepare().expectCommit(); - MockTxOp::shared_ptr opB(new MockTxOp()); - opB->expectPrepare().expectPrepare().expectCommit().expectCommit();//opB enlisted twice to test relative order - MockTxOp::shared_ptr opC(new MockTxOp()); - opC->expectPrepare().expectCommit(); - - TxBuffer buffer; - buffer.enlist(static_pointer_cast<TxOp>(opA)); - buffer.enlist(static_pointer_cast<TxOp>(opB)); - buffer.enlist(static_pointer_cast<TxOp>(opB));//opB enlisted twice - buffer.enlist(static_pointer_cast<TxOp>(opC)); - - CPPUNIT_ASSERT(buffer.commitLocal(&store)); - store.check(); - CPPUNIT_ASSERT(store.isCommitted()); - opA->check(); - opB->check(); - opC->check(); - } - - void testFailOnCommitLocal(){ - MockTransactionalStore store; - store.expectBegin().expectAbort(); - - MockTxOp::shared_ptr opA(new MockTxOp()); - opA->expectPrepare().expectRollback(); - MockTxOp::shared_ptr opB(new MockTxOp(true)); - opB->expectPrepare().expectRollback(); - MockTxOp::shared_ptr opC(new MockTxOp());//will never get prepare as b will fail - opC->expectRollback(); - - TxBuffer buffer; - buffer.enlist(static_pointer_cast<TxOp>(opA)); - buffer.enlist(static_pointer_cast<TxOp>(opB)); - buffer.enlist(static_pointer_cast<TxOp>(opC)); - - CPPUNIT_ASSERT(!buffer.commitLocal(&store)); - CPPUNIT_ASSERT(store.isAborted()); - store.check(); - opA->check(); - opB->check(); - opC->check(); - } - - void testPrepare(){ - MockTxOp::shared_ptr opA(new MockTxOp()); - opA->expectPrepare(); - MockTxOp::shared_ptr opB(new MockTxOp()); - opB->expectPrepare(); - MockTxOp::shared_ptr opC(new MockTxOp()); - opC->expectPrepare(); - - TxBuffer buffer; - buffer.enlist(static_pointer_cast<TxOp>(opA)); - buffer.enlist(static_pointer_cast<TxOp>(opB)); - buffer.enlist(static_pointer_cast<TxOp>(opC)); - - CPPUNIT_ASSERT(buffer.prepare(0)); - opA->check(); - opB->check(); - opC->check(); - } - - void testFailOnPrepare(){ - MockTxOp::shared_ptr opA(new MockTxOp()); - opA->expectPrepare(); - MockTxOp::shared_ptr opB(new MockTxOp(true)); - opB->expectPrepare(); - MockTxOp::shared_ptr opC(new MockTxOp());//will never get prepare as b will fail - - TxBuffer buffer; - buffer.enlist(static_pointer_cast<TxOp>(opA)); - buffer.enlist(static_pointer_cast<TxOp>(opB)); - buffer.enlist(static_pointer_cast<TxOp>(opC)); - - CPPUNIT_ASSERT(!buffer.prepare(0)); - opA->check(); - opB->check(); - opC->check(); - } - - void testRollback(){ - MockTxOp::shared_ptr opA(new MockTxOp()); - opA->expectRollback(); - MockTxOp::shared_ptr opB(new MockTxOp(true)); - opB->expectRollback(); - MockTxOp::shared_ptr opC(new MockTxOp()); - opC->expectRollback(); - - TxBuffer buffer; - buffer.enlist(static_pointer_cast<TxOp>(opA)); - buffer.enlist(static_pointer_cast<TxOp>(opB)); - buffer.enlist(static_pointer_cast<TxOp>(opC)); - - buffer.rollback(); - opA->check(); - opB->check(); - opC->check(); - } - - void testBufferIsClearedAfterRollback(){ - MockTxOp::shared_ptr opA(new MockTxOp()); - opA->expectRollback(); - MockTxOp::shared_ptr opB(new MockTxOp()); - opB->expectRollback(); - - TxBuffer buffer; - buffer.enlist(static_pointer_cast<TxOp>(opA)); - buffer.enlist(static_pointer_cast<TxOp>(opB)); - - buffer.rollback(); - buffer.commit();//second call should not reach ops - opA->check(); - opB->check(); - } - - void testBufferIsClearedAfterCommit(){ - MockTxOp::shared_ptr opA(new MockTxOp()); - opA->expectCommit(); - MockTxOp::shared_ptr opB(new MockTxOp()); - opB->expectCommit(); - - TxBuffer buffer; - buffer.enlist(static_pointer_cast<TxOp>(opA)); - buffer.enlist(static_pointer_cast<TxOp>(opB)); - - buffer.commit(); - buffer.rollback();//second call should not reach ops - opA->check(); - opB->check(); - } -}; - -// Make this test suite a plugin. -CPPUNIT_PLUGIN_IMPLEMENT(); -CPPUNIT_TEST_SUITE_REGISTRATION(TxBufferTest); +QPID_AUTO_TEST_SUITE(TxBufferTestSuite) +QPID_AUTO_TEST_CASE(testCommitLocal) +{ + MockTransactionalStore store; + store.expectBegin().expectCommit(); + + MockTxOp::shared_ptr opA(new MockTxOp()); + opA->expectPrepare().expectCommit(); + MockTxOp::shared_ptr opB(new MockTxOp()); + opB->expectPrepare().expectPrepare().expectCommit().expectCommit();//opB enlisted twice to test relative order + MockTxOp::shared_ptr opC(new MockTxOp()); + opC->expectPrepare().expectCommit(); + + TxBuffer buffer; + buffer.enlist(static_pointer_cast<TxOp>(opA)); + buffer.enlist(static_pointer_cast<TxOp>(opB)); + buffer.enlist(static_pointer_cast<TxOp>(opB));//opB enlisted twice + buffer.enlist(static_pointer_cast<TxOp>(opC)); + + BOOST_CHECK(buffer.commitLocal(&store)); + store.check(); + BOOST_CHECK(store.isCommitted()); + opA->check(); + opB->check(); + opC->check(); +} + +QPID_AUTO_TEST_CASE(testFailOnCommitLocal) +{ + MockTransactionalStore store; + store.expectBegin().expectAbort(); + + MockTxOp::shared_ptr opA(new MockTxOp()); + opA->expectPrepare().expectRollback(); + MockTxOp::shared_ptr opB(new MockTxOp(true)); + opB->expectPrepare().expectRollback(); + MockTxOp::shared_ptr opC(new MockTxOp());//will never get prepare as b will fail + opC->expectRollback(); + + TxBuffer buffer; + buffer.enlist(static_pointer_cast<TxOp>(opA)); + buffer.enlist(static_pointer_cast<TxOp>(opB)); + buffer.enlist(static_pointer_cast<TxOp>(opC)); + + BOOST_CHECK(!buffer.commitLocal(&store)); + BOOST_CHECK(store.isAborted()); + store.check(); + opA->check(); + opB->check(); + opC->check(); +} + +QPID_AUTO_TEST_CASE(testPrepare) +{ + MockTxOp::shared_ptr opA(new MockTxOp()); + opA->expectPrepare(); + MockTxOp::shared_ptr opB(new MockTxOp()); + opB->expectPrepare(); + MockTxOp::shared_ptr opC(new MockTxOp()); + opC->expectPrepare(); + + TxBuffer buffer; + buffer.enlist(static_pointer_cast<TxOp>(opA)); + buffer.enlist(static_pointer_cast<TxOp>(opB)); + buffer.enlist(static_pointer_cast<TxOp>(opC)); + + BOOST_CHECK(buffer.prepare(0)); + opA->check(); + opB->check(); + opC->check(); +} + +QPID_AUTO_TEST_CASE(testFailOnPrepare) +{ + MockTxOp::shared_ptr opA(new MockTxOp()); + opA->expectPrepare(); + MockTxOp::shared_ptr opB(new MockTxOp(true)); + opB->expectPrepare(); + MockTxOp::shared_ptr opC(new MockTxOp());//will never get prepare as b will fail + + TxBuffer buffer; + buffer.enlist(static_pointer_cast<TxOp>(opA)); + buffer.enlist(static_pointer_cast<TxOp>(opB)); + buffer.enlist(static_pointer_cast<TxOp>(opC)); + + BOOST_CHECK(!buffer.prepare(0)); + opA->check(); + opB->check(); + opC->check(); +} + +QPID_AUTO_TEST_CASE(testRollback) +{ + MockTxOp::shared_ptr opA(new MockTxOp()); + opA->expectRollback(); + MockTxOp::shared_ptr opB(new MockTxOp(true)); + opB->expectRollback(); + MockTxOp::shared_ptr opC(new MockTxOp()); + opC->expectRollback(); + + TxBuffer buffer; + buffer.enlist(static_pointer_cast<TxOp>(opA)); + buffer.enlist(static_pointer_cast<TxOp>(opB)); + buffer.enlist(static_pointer_cast<TxOp>(opC)); + + buffer.rollback(); + opA->check(); + opB->check(); + opC->check(); +} + +QPID_AUTO_TEST_CASE(testBufferIsClearedAfterRollback) +{ + MockTxOp::shared_ptr opA(new MockTxOp()); + opA->expectRollback(); + MockTxOp::shared_ptr opB(new MockTxOp()); + opB->expectRollback(); + + TxBuffer buffer; + buffer.enlist(static_pointer_cast<TxOp>(opA)); + buffer.enlist(static_pointer_cast<TxOp>(opB)); + + buffer.rollback(); + buffer.commit();//second call should not reach ops + opA->check(); + opB->check(); +} + +QPID_AUTO_TEST_CASE(testBufferIsClearedAfterCommit) +{ + MockTxOp::shared_ptr opA(new MockTxOp()); + opA->expectCommit(); + MockTxOp::shared_ptr opB(new MockTxOp()); + opB->expectCommit(); + + TxBuffer buffer; + buffer.enlist(static_pointer_cast<TxOp>(opA)); + buffer.enlist(static_pointer_cast<TxOp>(opB)); + + buffer.commit(); + buffer.rollback();//second call should not reach ops + opA->check(); + opB->check(); +} + +QPID_AUTO_TEST_SUITE_END() diff --git a/cpp/src/tests/TxMocks.h b/cpp/src/tests/TxMocks.h index 127a27c005..86864b987e 100644 --- a/cpp/src/tests/TxMocks.h +++ b/cpp/src/tests/TxMocks.h @@ -35,7 +35,7 @@ using std::string; template <class T> void assertEqualVector(std::vector<T>& expected, std::vector<T>& actual){ unsigned int i = 0; while(i < expected.size() && i < actual.size()){ - CPPUNIT_ASSERT_EQUAL(expected[i], actual[i]); + BOOST_CHECK_EQUAL(expected[i], actual[i]); i++; } if (i < expected.size()) { @@ -43,7 +43,7 @@ template <class T> void assertEqualVector(std::vector<T>& expected, std::vector< } else if (i < actual.size()) { throw qpid::Exception(QPID_MSG("Extra " << actual[i])); } - CPPUNIT_ASSERT_EQUAL(expected.size(), actual.size()); + BOOST_CHECK_EQUAL(expected.size(), actual.size()); } class TxOpConstants{ diff --git a/cpp/src/tests/TxPublishTest.cpp b/cpp/src/tests/TxPublishTest.cpp index af7761acee..76e3ca392b 100644 --- a/cpp/src/tests/TxPublishTest.cpp +++ b/cpp/src/tests/TxPublishTest.cpp @@ -21,7 +21,7 @@ #include "qpid/broker/NullMessageStore.h" #include "qpid/broker/RecoveryManager.h" #include "qpid/broker/TxPublish.h" -#include "qpid_test_plugin.h" +#include "unit_test.h" #include <iostream> #include <list> #include <vector> @@ -34,31 +34,26 @@ using boost::intrusive_ptr; using namespace qpid::broker; using namespace qpid::framing; -class TxPublishTest : public CppUnit::TestCase -{ - typedef std::pair<string, intrusive_ptr<PersistableMessage> > msg_queue_pair; +typedef std::pair<string, intrusive_ptr<PersistableMessage> > msg_queue_pair; - class TestMessageStore : public NullMessageStore - { - public: - vector<msg_queue_pair> enqueued; +class TestMessageStore : public NullMessageStore +{ + public: + vector<msg_queue_pair> enqueued; - void enqueue(TransactionContext*, intrusive_ptr<PersistableMessage>& msg, const PersistableQueue& queue) - { - msg->enqueueComplete(); - enqueued.push_back(msg_queue_pair(queue.getName(), msg)); - } + void enqueue(TransactionContext*, intrusive_ptr<PersistableMessage>& msg, const PersistableQueue& queue) + { + msg->enqueueComplete(); + enqueued.push_back(msg_queue_pair(queue.getName(), msg)); + } - //dont care about any of the other methods: - TestMessageStore() : NullMessageStore(false) {} - ~TestMessageStore(){} - }; - - CPPUNIT_TEST_SUITE(TxPublishTest); - CPPUNIT_TEST(testPrepare); - CPPUNIT_TEST(testCommit); - CPPUNIT_TEST_SUITE_END(); - + //dont care about any of the other methods: + TestMessageStore() : NullMessageStore(false) {} + ~TestMessageStore(){} +}; + +struct TxPublishTest +{ TestMessageStore store; Queue::shared_ptr queue1; @@ -66,8 +61,6 @@ class TxPublishTest : public CppUnit::TestCase intrusive_ptr<Message> msg; TxPublish op; -public: - TxPublishTest() : queue1(new Queue("queue1", false, &store, 0)), queue2(new Queue("queue2", false, &store, 0)), @@ -78,37 +71,41 @@ public: op.deliverTo(queue1); op.deliverTo(queue2); } +}; - void testPrepare() - { - intrusive_ptr<PersistableMessage> pmsg = static_pointer_cast<PersistableMessage>(msg); - //ensure messages are enqueued in store - op.prepare(0); - CPPUNIT_ASSERT_EQUAL((size_t) 2, store.enqueued.size()); - CPPUNIT_ASSERT_EQUAL(string("queue1"), store.enqueued[0].first); - CPPUNIT_ASSERT_EQUAL(pmsg, store.enqueued[0].second); - CPPUNIT_ASSERT_EQUAL(string("queue2"), store.enqueued[1].first); - CPPUNIT_ASSERT_EQUAL(pmsg, store.enqueued[1].second); - CPPUNIT_ASSERT_EQUAL( true, ( static_pointer_cast<PersistableMessage>(msg))->isEnqueueComplete()); - } - void testCommit() - { - //ensure messages are delivered to queue - op.prepare(0); - op.commit(); - CPPUNIT_ASSERT_EQUAL((uint32_t) 1, queue1->getMessageCount()); - intrusive_ptr<Message> msg_dequeue = queue1->dequeue().payload; +QPID_AUTO_TEST_SUITE(TxPublishTestSuite) + +QPID_AUTO_TEST_CASE(testPrepare) +{ + TxPublishTest t; - CPPUNIT_ASSERT_EQUAL( true, (static_pointer_cast<PersistableMessage>(msg_dequeue))->isEnqueueComplete()); - CPPUNIT_ASSERT_EQUAL(msg, msg_dequeue); + intrusive_ptr<PersistableMessage> pmsg = static_pointer_cast<PersistableMessage>(t.msg); + //ensure messages are enqueued in store + t.op.prepare(0); + BOOST_CHECK_EQUAL((size_t) 2, t.store.enqueued.size()); + BOOST_CHECK_EQUAL(string("queue1"), t.store.enqueued[0].first); + BOOST_CHECK_EQUAL(pmsg, t.store.enqueued[0].second); + BOOST_CHECK_EQUAL(string("queue2"), t.store.enqueued[1].first); + BOOST_CHECK_EQUAL(pmsg, t.store.enqueued[1].second); + BOOST_CHECK_EQUAL( true, ( static_pointer_cast<PersistableMessage>(t.msg))->isEnqueueComplete()); +} - CPPUNIT_ASSERT_EQUAL((uint32_t) 1, queue2->getMessageCount()); - CPPUNIT_ASSERT_EQUAL(msg, queue2->dequeue().payload); - } -}; +QPID_AUTO_TEST_CASE(testCommit) +{ + TxPublishTest t; + + //ensure messages are delivered to queue + t.op.prepare(0); + t.op.commit(); + BOOST_CHECK_EQUAL((uint32_t) 1, t.queue1->getMessageCount()); + intrusive_ptr<Message> msg_dequeue = t.queue1->dequeue().payload; + + BOOST_CHECK_EQUAL( true, (static_pointer_cast<PersistableMessage>(msg_dequeue))->isEnqueueComplete()); + BOOST_CHECK_EQUAL(t.msg, msg_dequeue); -// Make this test suite a plugin. -CPPUNIT_PLUGIN_IMPLEMENT(); -CPPUNIT_TEST_SUITE_REGISTRATION(TxPublishTest); + BOOST_CHECK_EQUAL((uint32_t) 1, t.queue2->getMessageCount()); + BOOST_CHECK_EQUAL(t.msg, t.queue2->dequeue().payload); +} +QPID_AUTO_TEST_SUITE_END() |