summaryrefslogtreecommitdiff
path: root/qpid/cpp/src/tests/QueueTest.cpp
diff options
context:
space:
mode:
authorCarl C. Trieloff <cctrieloff@apache.org>2008-09-30 14:57:32 +0000
committerCarl C. Trieloff <cctrieloff@apache.org>2008-09-30 14:57:32 +0000
commit008ce22eadfbbd761f6b7a2011c78ce509c2ddb5 (patch)
tree5262121c428c7e1b2eedd89a1f5a450dc80f6c7d /qpid/cpp/src/tests/QueueTest.cpp
parent0dd5f66ac0b4fab785d87d6c2ddf8e95fbd6e9e2 (diff)
downloadqpid-python-008ce22eadfbbd761f6b7a2011c78ce509c2ddb5.tar.gz
QPID-1306
This patch includes: - Optimistic Consume - Support for forcing Queue durable on cluster failure - Some cleanup on mgnt functions in Queue to inlines - Tests Still coming - header for client queue options - LVQ support bits. git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk@700489 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/cpp/src/tests/QueueTest.cpp')
-rw-r--r--qpid/cpp/src/tests/QueueTest.cpp90
1 files changed, 90 insertions, 0 deletions
diff --git a/qpid/cpp/src/tests/QueueTest.cpp b/qpid/cpp/src/tests/QueueTest.cpp
index 8795dbcd03..111920aa59 100644
--- a/qpid/cpp/src/tests/QueueTest.cpp
+++ b/qpid/cpp/src/tests/QueueTest.cpp
@@ -24,6 +24,7 @@
#include "qpid/broker/Deliverable.h"
#include "qpid/broker/ExchangeRegistry.h"
#include "qpid/broker/QueueRegistry.h"
+#include "qpid/broker/NullMessageStore.h"
#include "qpid/framing/MessageTransferBody.h"
#include <iostream>
#include "boost/format.hpp"
@@ -236,6 +237,95 @@ QPID_AUTO_TEST_CASE(testBound)
exchange3->route(deliverable, key, &args);
}
+QPID_AUTO_TEST_CASE(testPersistLastNodeStanding){
+
+ FieldTable args;
+
+ // set queue mode
+ args.setInt("qpid.persist_last_node", 1);
+
+ Queue::shared_ptr queue(new Queue("my-queue", true));
+ queue->configure(args);
+
+ intrusive_ptr<Message> msg1 = message("e", "A");
+ intrusive_ptr<Message> msg2 = message("e", "B");
+ intrusive_ptr<Message> msg3 = message("e", "C");
+
+ //enqueue 2 messages
+ queue->deliver(msg1);
+ queue->deliver(msg2);
+
+ //change mode
+ queue->setLastNodeFailure();
+
+ //enqueue 1 message
+ queue->deliver(msg3);
+
+ //check all have persistent ids.
+ BOOST_CHECK(msg1->isPersistent());
+ BOOST_CHECK(msg2->isPersistent());
+ BOOST_CHECK(msg3->isPersistent());
+
+}
+
+class TestMessageStore : public NullMessageStore
+{
+ public:
+
+ virtual void dequeue(TransactionContext*,
+ const boost::intrusive_ptr<PersistableMessage>& /*msg*/,
+ const PersistableQueue& /*queue*/)
+ {
+ }
+
+ virtual void enqueue(TransactionContext*,
+ const boost::intrusive_ptr<PersistableMessage>& /*msg*/,
+ const PersistableQueue& /* queue */)
+ {
+ }
+
+ TestMessageStore() : NullMessageStore(false) {}
+ ~TestMessageStore(){}
+};
+
+
+QPID_AUTO_TEST_CASE(testOptimisticConsume){
+
+ FieldTable args;
+ args.setInt("qpid.persist_last_node", 1);
+
+ // set queue mode
+
+ TestMessageStore store;
+ Queue::shared_ptr queue(new Queue("my-queue", true, &store));
+ queue->setLastNodeFailure();
+
+ intrusive_ptr<Message> msg1 = message("e", "A");
+ intrusive_ptr<Message> msg2 = message("e", "B");
+ intrusive_ptr<Message> msg3 = message("e", "C");
+ msg1->forcePersistent();
+ msg2->forcePersistent();
+ msg3->forcePersistent();
+
+ //enqueue 2 messages
+ queue->deliver(msg1);
+ queue->deliver(msg2);
+
+ //change mode
+ args.setInt("qpid.optimistic_consume", 1);
+ queue->configure(args);
+
+ //enqueue 1 message
+ queue->deliver(msg3);
+
+ //check all have persistent ids.
+ BOOST_CHECK(!msg1->isEnqueueComplete());
+ BOOST_CHECK(!msg2->isEnqueueComplete());
+ BOOST_CHECK(msg3->isEnqueueComplete());
+
+}
+
+
QPID_AUTO_TEST_SUITE_END()