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