diff options
Diffstat (limited to 'cpp')
-rw-r--r-- | cpp/src/qpid/broker/BrokerQueue.cpp | 9 | ||||
-rw-r--r-- | cpp/src/tests/QueueTest.cpp | 16 |
2 files changed, 24 insertions, 1 deletions
diff --git a/cpp/src/qpid/broker/BrokerQueue.cpp b/cpp/src/qpid/broker/BrokerQueue.cpp index 3ae2ce8de3..ea092bb33b 100644 --- a/cpp/src/qpid/broker/BrokerQueue.cpp +++ b/cpp/src/qpid/broker/BrokerQueue.cpp @@ -223,9 +223,16 @@ void Queue::push(Message::shared_ptr& msg){ } } +/** function only provided for unit tests, or code not in critical message path */ uint32_t Queue::getMessageCount() const{ Mutex::ScopedLock locker(messageLock); - return messages.size(); + + uint32_t count =0; + for ( Messages::const_iterator i = messages.begin(); i != messages.end(); ++i ) { + if ( (*i)->isEnqueueComplete() ) count ++; + } + + return count; } uint32_t Queue::getConsumerCount() const{ diff --git a/cpp/src/tests/QueueTest.cpp b/cpp/src/tests/QueueTest.cpp index 6b30f9ff42..e7ca124631 100644 --- a/cpp/src/tests/QueueTest.cpp +++ b/cpp/src/tests/QueueTest.cpp @@ -64,6 +64,7 @@ class QueueTest : public CppUnit::TestCase CPPUNIT_TEST(testDequeue); CPPUNIT_TEST(testBound); CPPUNIT_TEST(testAsyncMessage); + CPPUNIT_TEST(testAsyncMessageCount); CPPUNIT_TEST_SUITE_END(); @@ -97,6 +98,21 @@ class QueueTest : public CppUnit::TestCase } + + void testAsyncMessageCount(){ + Queue::shared_ptr queue(new Queue("my_test_queue", true)); + Message::shared_ptr msg1 = message("e", "A"); + + 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()); + + } + void testConsumers(){ Queue::shared_ptr queue(new Queue("my_queue", true)); |