[Checkins] SVN: AccessControl/trunk/src/AccessControl/ added test for rolesForPermissionOn fix by yusei

Hano Schlichting cvs-admin at zope.org
Thu Aug 23 14:05:18 UTC 2012


Log message for revision 127549:
  added test for rolesForPermissionOn fix by yusei
  

Changed:
  U   AccessControl/trunk/src/AccessControl/ZopeSecurityPolicy.py
  U   AccessControl/trunk/src/AccessControl/tests/testZopeSecurityPolicy.py

-=-
Modified: AccessControl/trunk/src/AccessControl/ZopeSecurityPolicy.py
===================================================================
--- AccessControl/trunk/src/AccessControl/ZopeSecurityPolicy.py	2012-08-22 12:42:53 UTC (rev 127548)
+++ AccessControl/trunk/src/AccessControl/ZopeSecurityPolicy.py	2012-08-23 14:05:14 UTC (rev 127549)
@@ -52,8 +52,7 @@
     if roles is None or isinstance(roles, tuple_or_list):
         return roles
 
-    # XXX: Do not override global variable `rolesForPermissionOn`.
-    # XXX: Use different variable name instead.
+    # Do not override global variable `rolesForPermissionOn`.
     roles_rolesForPermissionOn = getattr(roles, 'rolesForPermissionOn', None)
     if roles_rolesForPermissionOn is not None:
         roles = roles_rolesForPermissionOn(value)

Modified: AccessControl/trunk/src/AccessControl/tests/testZopeSecurityPolicy.py
===================================================================
--- AccessControl/trunk/src/AccessControl/tests/testZopeSecurityPolicy.py	2012-08-22 12:42:53 UTC (rev 127548)
+++ AccessControl/trunk/src/AccessControl/tests/testZopeSecurityPolicy.py	2012-08-23 14:05:14 UTC (rev 127549)
@@ -10,11 +10,10 @@
 # FOR A PARTICULAR PURPOSE
 #
 ##############################################################################
-"""Tests of ZopeSecurityPolicy
-"""
 
 from doctest import DocTestSuite
 import sys
+import thread
 import unittest
 
 from Acquisition import Implicit, Explicit
@@ -569,9 +568,58 @@
     """
 
 
+class GetRolesWithMultiThreadTest(unittest.TestCase):
+
+    def setUp(self):
+        self._original_check_interval = sys.getcheckinterval()
+        sys.setcheckinterval(1)
+
+    def tearDown(self):
+        sys.setcheckinterval(self._original_check_interval)
+
+    def testGetRolesWithMultiThread(self):
+        from AccessControl.ZopeSecurityPolicy import getRoles
+
+        class C(object):
+            pass
+
+        class V1(object):
+            class __roles__(object):
+                @staticmethod
+                def rolesForPermissionOn(ob):
+                    return ['Member']
+
+        class V2(object):
+            class __roles__(object):
+                @staticmethod
+                def rolesForPermissionOn(ob):
+                    return ['User']
+
+        c = C()
+        c.v1 = V1()
+        c.v2 = V2()
+
+        self.assertEqual(getRoles(c, None, c.v1, 42), ['Member'])
+        self.assertEqual(getRoles(c, None, c.v2, 42), ['User'])
+        mark = []
+
+        def loop():
+            while 1:
+                getRoles(c, None, c.v2, 42)
+                if len(mark) > 0:
+                    return
+        thread.start_new_thread(loop, ())
+        try:
+            for i in range(1000):
+                self.assertEqual(getRoles(c, None, c.v1, 42), ['Member'])
+        finally:
+            mark.append(None)
+
+
 def test_suite():
     suite = unittest.TestSuite()
     suite.addTest(unittest.makeSuite(Python_ZSPTests, 'test'))
     suite.addTest(unittest.makeSuite(C_ZSPTests, 'test'))
     suite.addTest(DocTestSuite())
+    suite.addTest(unittest.makeSuite(GetRolesWithMultiThreadTest))
     return suite



More information about the checkins mailing list