Author: gsim
Date: Wed Dec 10 15:26:18 2008
New Revision: 725484
URL: http://svn.apache.org/viewvc?rev=725484&view=rev
Log:
QPID-1527: Added exclusive option to SubscriptionSettings and accompanying test.
Modified:
incubator/qpid/trunk/qpid/cpp/src/qpid/client/SubscriptionImpl.cpp
incubator/qpid/trunk/qpid/cpp/src/qpid/client/SubscriptionSettings.h
incubator/qpid/trunk/qpid/cpp/src/tests/ClientSessionTest.cpp
Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/client/SubscriptionImpl.cpp
URL:
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/client/SubscriptionImpl.cpp?rev=725484&r1=725483&r2=725484&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/client/SubscriptionImpl.cpp
(original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/client/SubscriptionImpl.cpp Wed Dec
10 15:26:18 2008
@@ -39,7 +39,8 @@
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);
}
Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/client/SubscriptionSettings.h
URL:
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/client/SubscriptionSettings.h?rev=725484&r1=725483&r2=725484&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/client/SubscriptionSettings.h
(original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/client/SubscriptionSettings.h Wed
Dec 10 15:26:18 2008
@@ -46,7 +46,7 @@
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 @@
* 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
Modified: incubator/qpid/trunk/qpid/cpp/src/tests/ClientSessionTest.cpp
URL:
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/tests/ClientSessionTest.cpp?rev=725484&r1=725483&r2=725484&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/tests/ClientSessionTest.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/tests/ClientSessionTest.cpp Wed Dec 10
15:26:18 2008
@@ -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(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 @@
accepted.add(m.getId());
}
fix.session.messageAccept(accepted);
-
- fix.session.queueDelete(arg::queue="HELP_FIND_ME");
-
}
namespace
@@ -436,6 +431,22 @@
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()