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()
 
 


Reply via email to