Author: chug
Date: Mon Apr 30 19:07:03 2012
New Revision: 1332342

URL: http://svn.apache.org/viewvc?rev=1332342&view=rev
Log:
QPID-2616 Count and limit client connections.
Add self tests for connection counting feature.


Modified:
    qpid/trunk/qpid/cpp/src/tests/acl.py
    qpid/trunk/qpid/cpp/src/tests/run_acl_tests

Modified: qpid/trunk/qpid/cpp/src/tests/acl.py
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/tests/acl.py?rev=1332342&r1=1332341&r2=1332342&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/tests/acl.py (original)
+++ qpid/trunk/qpid/cpp/src/tests/acl.py Mon Apr 30 19:07:03 2012
@@ -47,6 +47,19 @@ class ACLTests(TestBase010):
         connection.start()
         return connection.session(str(uuid4()))
 
+    def port_i(self):
+        return int(self.defines["port-i"])
+
+    def port_u(self):
+        return int(self.defines["port-u"])
+
+    def get_session_by_port(self, user, passwd, byPort):
+        socket = connect(self.broker.host, byPort)
+        connection = Connection (sock=socket, username=user, password=passwd,
+                                 mechanism="PLAIN")
+        connection.start()
+        return connection.session(str(uuid4()))
+
     def reload_acl(self):
         result = None
         try:
@@ -1495,6 +1508,43 @@ class ACLTests(TestBase010):
         self.Lookup('mrQ', 'create', 'queue', '',    {"maxqueuesize":"150", 
"maxqueuecount":"0"  }, "deny")
 
 
+   #=====================================
+   # Connection limits
+   #=====================================
+
+    def test_connection_limits(self):
+        """
+        Test ACL control connection limits
+        """
+        # By username should be able to connect twice per user
+        try:
+            sessiona1 = self.get_session_by_port('anonymous','anonymous', 
self.port_u())
+            sessiona2 = self.get_session_by_port('anonymous','anonymous', 
self.port_u())
+        except Exception, e:
+            self.fail("Could not create two connections per user: " + str(e))
+
+        # Third session should fail
+        try:
+            sessiona3 = self.get_session_by_port('anonymous','anonymous', 
self.port_u())
+            self.fail("Should not be able to create third connection")
+        except Exception, e:
+            result = None
+
+        # By IP address should be able to connect twice per client address
+        try:
+            sessionb1 = self.get_session_by_port('anonymous','anonymous', 
self.port_i())
+            sessionb2 = self.get_session_by_port('anonymous','anonymous', 
self.port_i())
+        except Exception, e:
+            self.fail("Could not create two connections per user: " + str(e))
+
+        # Third session should fail
+        try:
+            sessionb3 = self.get_session_by_port('anonymous','anonymous', 
self.port_i())
+            self.fail("Should not be able to create third connection")
+        except Exception, e:
+            result = None
+
+
 class BrokerAdmin:
     def __init__(self, broker, username=None, password=None):
         self.connection = qpid.messaging.Connection(broker)

Modified: qpid/trunk/qpid/cpp/src/tests/run_acl_tests
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/tests/run_acl_tests?rev=1332342&r1=1332341&r2=1332342&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/tests/run_acl_tests (original)
+++ qpid/trunk/qpid/cpp/src/tests/run_acl_tests Mon Apr 30 19:07:03 2012
@@ -22,16 +22,24 @@
 # Run the acl tests. $srcdir is set by the Makefile.
 source ./test_env.sh
 DATA_DIR=`pwd`/data_dir
+DATA_DIRI=`pwd`/data_diri
+DATA_DIRU=`pwd`/data_diru
 
 trap stop_brokers INT TERM QUIT
 
 start_brokers() {
-    ../qpidd --daemon --port 0 --no-module-dir --data-dir $DATA_DIR 
--load-module $ACL_LIB --acl-file policy.acl --auth no > qpidd.port
+    ../qpidd --daemon --port 0 --no-module-dir --data-dir $DATA_DIR 
--load-module $ACL_LIB --acl-file policy.acl --auth no --log-to-file local.log 
> qpidd.port
     LOCAL_PORT=`cat qpidd.port`
+    ../qpidd --daemon --port 0 --no-module-dir --data-dir $DATA_DIRI 
--load-module $ACL_LIB --acl-file policy.acl --auth no --acl-max-connect-per-ip 
2 --log-to-file locali.log > qpiddi.port
+    LOCAL_PORTI=`cat qpiddi.port`
+    ../qpidd --daemon --port 0 --no-module-dir --data-dir $DATA_DIRU 
--load-module $ACL_LIB --acl-file policy.acl --auth no 
--acl-max-connect-per-user 2 --log-to-file localu.log > qpiddu.port
+    LOCAL_PORTU=`cat qpiddu.port`
 }
 
 stop_brokers() {
         $QPIDD_EXEC --no-module-dir -q --port $LOCAL_PORT
+        $QPIDD_EXEC --no-module-dir -q --port $LOCAL_PORTI
+        $QPIDD_EXEC --no-module-dir -q --port $LOCAL_PORTU
 }
 
 test_loading_acl_from_absolute_path(){
@@ -49,14 +57,22 @@ test_loading_acl_from_absolute_path(){
 
 if test -d ${PYTHON_DIR} ;  then
     rm -rf $DATA_DIR
+    rm -rf $DATA_DIRI
+    rm -rf $DATA_DIRU
     mkdir -p $DATA_DIR
+    mkdir -p $DATA_DIRI
+    mkdir -p $DATA_DIRU
     cp $srcdir/policy.acl $DATA_DIR
+    cp $srcdir/policy.acl $DATA_DIRI
+    cp $srcdir/policy.acl $DATA_DIRU
     start_brokers
-    echo "Running acl tests using brokers on ports $LOCAL_PORT"
-    $QPID_PYTHON_TEST -b localhost:$LOCAL_PORT -m acl || EXITCODE=1
+    echo "Running acl tests using brokers on ports $LOCAL_PORT, $LOCAL_PORTI, 
and $LOCAL_PORTU"
+    $QPID_PYTHON_TEST -b localhost:$LOCAL_PORT -m acl -Dport-i=$LOCAL_PORTI 
-Dport-u=$LOCAL_PORTU || EXITCODE=1
     stop_brokers || EXITCODE=1
     test_loading_acl_from_absolute_path || EXITCODE=1
     rm -rf $DATA_DIR
+    rm -rf $DATA_DIRI
+    rm -rf $DATA_DIRU
     exit $EXITCODE
 fi
 



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org
For additional commands, e-mail: commits-h...@qpid.apache.org

Reply via email to