summaryrefslogtreecommitdiff
path: root/cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp')
-rw-r--r--cpp/src/qpid/broker/BrokerQueue.cpp9
-rw-r--r--cpp/src/tests/QueueTest.cpp16
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));