[Checkins] SVN: Zope/branches/2.9/ - Collector #2073: fixed misbehaviour of OFS.Owned.changeOwnership

Andreas Jung andreas at andreas-jung.com
Sat Jun 10 10:08:03 EDT 2006


Log message for revision 68571:
        - Collector #2073: fixed misbehaviour of OFS.Owned.changeOwnership
  

Changed:
  U   Zope/branches/2.9/doc/CHANGES.txt
  U   Zope/branches/2.9/lib/python/AccessControl/Owned.py
  A   Zope/branches/2.9/lib/python/AccessControl/tests/framework.py
  A   Zope/branches/2.9/lib/python/AccessControl/tests/testChownRecursive.py

-=-
Modified: Zope/branches/2.9/doc/CHANGES.txt
===================================================================
--- Zope/branches/2.9/doc/CHANGES.txt	2006-06-10 14:06:56 UTC (rev 68570)
+++ Zope/branches/2.9/doc/CHANGES.txt	2006-06-10 14:08:02 UTC (rev 68571)
@@ -25,6 +25,7 @@
 
       - Collector 2077: fixed problem with ACTUAL_URL and SiteRoot
 
+      - Collector #2073: fixed misbehaviour of OFS.Owned.changeOwnership
 
   Zope 2.9.3 (2006/05/13)
 

Modified: Zope/branches/2.9/lib/python/AccessControl/Owned.py
===================================================================
--- Zope/branches/2.9/lib/python/AccessControl/Owned.py	2006-06-10 14:06:56 UTC (rev 68570)
+++ Zope/branches/2.9/lib/python/AccessControl/Owned.py	2006-06-10 14:08:02 UTC (rev 68571)
@@ -152,8 +152,9 @@
         new=ownerInfo(user)
         if new is None: return # Special user!
         old = self.getOwnerTuple()
-        if old==new: return
-        if old is UnownableOwner: return
+        if not recursive:
+            if old==new: return
+            if old is UnownableOwner: return
 
         for child in self.objectValues():
             if recursive:

Added: Zope/branches/2.9/lib/python/AccessControl/tests/framework.py
===================================================================
--- Zope/branches/2.9/lib/python/AccessControl/tests/framework.py	2006-06-10 14:06:56 UTC (rev 68570)
+++ Zope/branches/2.9/lib/python/AccessControl/tests/framework.py	2006-06-10 14:08:02 UTC (rev 68571)
@@ -0,0 +1,107 @@
+##############################################################################
+#
+# ZopeTestCase 
+#
+# COPY THIS FILE TO YOUR 'tests' DIRECTORY.
+#
+# This version of framework.py will use the SOFTWARE_HOME
+# environment variable to locate Zope and the Testing package.
+#
+# If the tests are run in an INSTANCE_HOME installation of Zope,
+# Products.__path__ and sys.path with be adjusted to include the
+# instance's Products and lib/python directories respectively.
+#
+# If you explicitly set INSTANCE_HOME prior to running the tests,
+# auto-detection is disabled and the specified path will be used 
+# instead.
+#
+# If the 'tests' directory contains a custom_zodb.py file, INSTANCE_HOME
+# will be adjusted to use it.
+#
+# If you set the ZEO_INSTANCE_HOME environment variable a ZEO setup 
+# is assumed, and you can attach to a running ZEO server (via the 
+# instance's custom_zodb.py).
+#
+##############################################################################
+#
+# The following code should be at the top of every test module:
+#
+# import os, sys
+# if __name__ == '__main__':
+#     execfile(os.path.join(sys.path[0], 'framework.py'))
+#
+# ...and the following at the bottom:
+#
+# if __name__ == '__main__':
+#     framework()
+#
+##############################################################################
+
+__version__ = '0.2.3'
+
+# Save start state
+#
+__SOFTWARE_HOME = os.environ.get('SOFTWARE_HOME', '')
+__INSTANCE_HOME = os.environ.get('INSTANCE_HOME', '')
+
+if __SOFTWARE_HOME.endswith(os.sep):
+    __SOFTWARE_HOME = os.path.dirname(__SOFTWARE_HOME)
+
+if __INSTANCE_HOME.endswith(os.sep):
+    __INSTANCE_HOME = os.path.dirname(__INSTANCE_HOME)
+
+# Find and import the Testing package
+#
+if not sys.modules.has_key('Testing'):
+    p0 = sys.path[0]
+    if p0 and __name__ == '__main__':
+        os.chdir(p0)
+        p0 = ''
+    s = __SOFTWARE_HOME
+    p = d = s and s or os.getcwd()
+    while d:
+        if os.path.isdir(os.path.join(p, 'Testing')):
+            zope_home = os.path.dirname(os.path.dirname(p))
+            sys.path[:1] = [p0, p, zope_home]
+            break
+        p, d = s and ('','') or os.path.split(p)
+    else:
+        print 'Unable to locate Testing package.',
+        print 'You might need to set SOFTWARE_HOME.'
+        sys.exit(1)
+
+import Testing, unittest
+execfile(os.path.join(os.path.dirname(Testing.__file__), 'common.py'))
+
+# Include ZopeTestCase support
+#
+if 1:   # Create a new scope
+
+    p = os.path.join(os.path.dirname(Testing.__file__), 'ZopeTestCase')
+
+    if not os.path.isdir(p):
+        print 'Unable to locate ZopeTestCase package.',
+        print 'You might need to install ZopeTestCase.'
+        sys.exit(1)
+
+    ztc_common = 'ztc_common.py'
+    ztc_common_global = os.path.join(p, ztc_common)
+
+    f = 0
+    if os.path.exists(ztc_common_global):
+        execfile(ztc_common_global)
+        f = 1
+    if os.path.exists(ztc_common):
+        execfile(ztc_common)
+        f = 1
+
+    if not f:
+        print 'Unable to locate %s.' % ztc_common
+        sys.exit(1)
+
+# Debug
+#
+print 'SOFTWARE_HOME: %s' % os.environ.get('SOFTWARE_HOME', 'Not set')
+print 'INSTANCE_HOME: %s' % os.environ.get('INSTANCE_HOME', 'Not set')
+sys.stdout.flush()
+

Added: Zope/branches/2.9/lib/python/AccessControl/tests/testChownRecursive.py
===================================================================
--- Zope/branches/2.9/lib/python/AccessControl/tests/testChownRecursive.py	2006-06-10 14:06:56 UTC (rev 68570)
+++ Zope/branches/2.9/lib/python/AccessControl/tests/testChownRecursive.py	2006-06-10 14:08:02 UTC (rev 68571)
@@ -0,0 +1,78 @@
+# vim: ts=4 expandtab :
+##############################################################################
+#
+# Copyright (c) 2005 Zope Corporation and Contributors. All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""Skeleton ZopeTestCase
+
+$Id: testSkeleton.py 30245 2005-05-05 09:50:09Z shh $
+"""
+
+import os, sys
+if __name__ == '__main__':
+    execfile(os.path.join(sys.path[0], 'framework.py'))
+
+from Testing import ZopeTestCase
+
+#ZopeTestCase.installProduct('SomeProduct')
+
+
+class TestRecursiveChangeOwnership(ZopeTestCase.ZopeTestCase):
+    user_name2 = "dumdidum"
+    user_pass2 = "dumdidum"
+    
+    def afterSetUp(self):
+##        self.folder.changeOwnership(ZopeTestCase.user_name)
+        
+        # need a second user
+        ufld = self.folder['acl_users']
+        ufld.userFolderAddUser(self.user_name2, self.user_pass2, [], [])
+
+        # remember user objects
+        # is the __of__() call correct? is it needed? without it ownerInfo in Owned.py throws
+        # an AttributeError ...
+        self.user1 = self.folder['acl_users'].getUser(ZopeTestCase.user_name).__of__(self.folder)
+        self.user2 = self.folder['acl_users'].getUser(self.user_name2).__of__(self.folder)
+
+        self.folder.changeOwnership(self.user1)
+
+        # need some objects owned by second user
+        # beneath self.folder
+        self.folder.manage_addFile("testfile")
+        self.file = self.folder["testfile"]
+        self.file.changeOwnership(self.user2)
+
+    def testRecursiveChangeOwnership(self):
+        # ensure folder is owned by user1
+        owner = self.folder.getOwnerTuple()[1]
+        self.assertEqual(owner, ZopeTestCase.user_name)
+        
+        # ensure file is owned by user2
+        owner = self.file.getOwnerTuple()[1]
+        self.assertEqual(owner, self.user_name2)
+        
+        self.folder.changeOwnership(self.user1, recursive=1)
+        
+        # ensure file's ownership has changed now to user1
+        owner = self.file.getOwnerTuple()[1]
+        self.assertEqual(owner, ZopeTestCase.user_name)
+        
+
+
+def test_suite():
+    from unittest import TestSuite, makeSuite
+    suite = TestSuite()
+    suite.addTest(makeSuite(TestRecursiveChangeOwnership))
+    return suite
+
+if __name__ == '__main__':
+    framework()
+



More information about the Checkins mailing list