diff options
author | Gordon Sim <gsim@apache.org> | 2008-12-10 23:26:18 +0000 |
---|---|---|
committer | Gordon Sim <gsim@apache.org> | 2008-12-10 23:26:18 +0000 |
commit | 6f03c29cfec851d9f63e7d8b0bbb98791dfc06db (patch) | |
tree | ae23c75c37acc2a35542d6c465ba6267e33aaa3b /cpp/src | |
parent | 312c15a3daeb89956b58540f55f65145062bda7a (diff) | |
download | qpid-python-6f03c29cfec851d9f63e7d8b0bbb98791dfc06db.tar.gz |
QPID-1527: Added exclusive option to SubscriptionSettings and accompanying test.
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@725484 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src')
-rw-r--r-- | cpp/src/qpid/client/SubscriptionImpl.cpp | 3 | ||||
-rw-r--r-- | cpp/src/qpid/client/SubscriptionSettings.h | 7 | ||||
-rw-r--r-- | cpp/src/tests/ClientSessionTest.cpp | 23 |
3 files changed, 25 insertions, 8 deletions
diff --git a/cpp/src/qpid/client/SubscriptionImpl.cpp b/cpp/src/qpid/client/SubscriptionImpl.cpp index 6319371a4e..5ea87110c2 100644 --- a/cpp/src/qpid/client/SubscriptionImpl.cpp +++ b/cpp/src/qpid/client/SubscriptionImpl.cpp @@ -39,7 +39,8 @@ void SubscriptionImpl::subscribe() arg::queue=queue, arg::destination=name, arg::acceptMode=settings.acceptMode, - arg::acquireMode=settings.acquireMode); + arg::acquireMode=settings.acquireMode, + arg::exclusive=settings.exclusive); setFlowControl(settings.flowControl); } diff --git a/cpp/src/qpid/client/SubscriptionSettings.h b/cpp/src/qpid/client/SubscriptionSettings.h index 4b294b28aa..ade539b376 100644 --- a/cpp/src/qpid/client/SubscriptionSettings.h +++ b/cpp/src/qpid/client/SubscriptionSettings.h @@ -46,7 +46,7 @@ struct SubscriptionSettings AcquireMode acquire=ACQUIRE_MODE_PRE_ACQUIRED, unsigned int autoAck_=1, CompletionMode completion=COMPLETE_ON_DELIVERY - ) : flowControl(flow), acceptMode(accept), acquireMode(acquire), autoAck(autoAck_), completionMode(completion) {} + ) : flowControl(flow), acceptMode(accept), acquireMode(acquire), autoAck(autoAck_), completionMode(completion), exclusive(false) {} FlowControl flowControl; ///@< Flow control settings. @see FlowControl AcceptMode acceptMode; ///@< ACCEPT_MODE_EXPLICIT or ACCEPT_MODE_NONE @@ -80,6 +80,11 @@ struct SubscriptionSettings * completing messages (@see Session::markCompleted()). */ CompletionMode completionMode; + /** + * If set, requests that no other subscriber be allowed to access + * the queue while this subscription is active. + */ + bool exclusive; }; }} // namespace qpid::client diff --git a/cpp/src/tests/ClientSessionTest.cpp b/cpp/src/tests/ClientSessionTest.cpp index ec040cabff..5d047dcd0e 100644 --- a/cpp/src/tests/ClientSessionTest.cpp +++ b/cpp/src/tests/ClientSessionTest.cpp @@ -19,6 +19,7 @@ * */ #include "unit_test.h" +#include "test_tools.h" #include "BrokerFixture.h" #include "qpid/client/SubscriptionManager.h" #include "qpid/sys/Monitor.h" @@ -338,9 +339,6 @@ QPID_AUTO_TEST_CASE(testRelease) { QPID_AUTO_TEST_CASE(testCompleteOnAccept) { ClientSessionFixture fix; - - fix.session.queueDeclare(arg::queue="HELP_FIND_ME"); - const uint count = 8; const uint chunk = 4; for (uint i = 0; i < count; i++) { @@ -377,9 +375,6 @@ QPID_AUTO_TEST_CASE(testCompleteOnAccept) { accepted.add(m.getId()); } fix.session.messageAccept(accepted); - - fix.session.queueDelete(arg::queue="HELP_FIND_ME"); - } namespace @@ -436,6 +431,22 @@ QPID_AUTO_TEST_CASE(testConcurrentSenders) connection.close(); } + +QPID_AUTO_TEST_CASE(testExclusiveSubscribe) +{ + ClientSessionFixture fix; + fix.session.queueDeclare(arg::queue="myq", arg::exclusive=true, arg::autoDelete=true); + SubscriptionSettings settings; + settings.exclusive = true; + LocalQueue q; + fix.subs.subscribe(q, "myq", settings, "first"); + //attempt to create new subscriber should fail + ScopedSuppressLogging sl; + BOOST_CHECK_THROW(fix.subs.subscribe(q, "myq", "second"), ResourceLockedException); + ; + +} + QPID_AUTO_TEST_SUITE_END() |