[CMF-checkins] CVS: CMF/CMFCore/tests - test_FSSecurity.py:1.2 test_DirectoryView.py:1.7 test_all.py:1.18

Chris Withers chrisw@nipltd.com
Tue, 14 May 2002 15:59:56 -0400


Update of /cvs-repository/CMF/CMFCore/tests
In directory cvs.zope.org:/tmp/cvs-serv21073/tests

Modified Files:
	test_DirectoryView.py test_all.py 
Added Files:
	test_FSSecurity.py 
Log Message:
Merge FS Security stuff from branch, see pre_fssecurity_merge tag for state just prior to merge.

=== CMF/CMFCore/tests/test_FSSecurity.py 1.1 => 1.2 ===
+
+from unittest import TestSuite, makeSuite, main
+from types import ListType
+from os import remove
+from os.path import join
+from time import sleep
+
+from AccessControl.Permission import Permission
+from Products.CMFCore.tests.base.testcase import RequestTest
+from test_DirectoryView import _registerDirectory, _prefix
+from Globals import DevelopmentMode
+
+class FSSecurityBase( RequestTest ):
+
+    def _checkSettings(self,object,permissionname,acquire=0,roles=[]):
+        # check the roles and acquire settings for a permission on an
+        # object are as expected
+        happy=0
+        for pstuff in object.ac_inherited_permissions(1):
+            name,value = pstuff[:2]
+            if name==permissionname:
+                p = Permission(name,value,object)
+                groles=p.getRoles(default=[])
+                acquired=isinstance(groles,ListType)
+                expected={}
+                for role in roles:
+                    expected[role]=1
+                got={}
+                for role in groles:
+                    got[role]=1
+                self.assertEqual((acquire,expected),(acquired,got))
+                happy=1
+        if not happy:
+            raise ValueError,"'%s' not found in permissions: %s" % (permissionname,all_names)
+            
+    _path = join(_prefix,'fake_skins','fake_skin')
+    
+    def _writeFile(self, filename, stuff):
+        # write some stuff to a file on disk
+        thePath = join(self._path,filename)
+        f = open(thePath,'w')
+        f.write(stuff)
+        f.close()
+        
+    def _deleteFile(self,filename):
+        # nuke it
+        remove(join(self._path,filename))
+        
+    def setUp( self ):
+        # initialise skins
+        _registerDirectory(self)
+        # set up ZODB
+        RequestTest.setUp(self)
+        # put object in ZODB
+        root=self.root
+        try: root._delObject('fake_skin')
+        except AttributeError: pass
+        root._setObject( 'fake_skin', self.ob.fake_skin )
+
+    def tearDown( self ):
+        try:
+            self._deleteFile('test5.py.security')
+        except:
+            pass
+        RequestTest.tearDown(self)
+        
+class FSSecurityTests( FSSecurityBase ):
+
+    def test_basicPermissions( self ):
+        """ Test basic FS permissions """
+        # check a normal method is as we'd expect
+        self._checkSettings(self.ob.fake_skin.test1,'View',1,[])
+        # now do some checks on the method with FS permissions
+        self._checkSettings(self.ob.fake_skin.test4,'View',1,['Manager','Owner'])
+        self._checkSettings(self.ob.fake_skin.test4,'Access contents information',0,[])
+
+    def test_invalidPermissionNames( self ):
+        """ Test for an invalid permission name """
+        # baseline
+        self._checkSettings(self.ob.fake_skin.test5,'View',1,[])
+        # add .rpm with dodgy permission name
+        self._writeFile('test5.py.security','Access stoopid contents::')
+        # check baseline
+        self._checkSettings(self.ob.fake_skin.test5,'View',1,[])
+        
+    def test_invalidAcquireNames( self ):
+        """ Test for an invalid spelling of acquire """
+        # baseline
+        self._checkSettings(self.ob.fake_skin.test5,'View',1,[])
+        # add dodgy .rpm
+        self._writeFile('test5.py.security','View:aquire:')
+        # check baseline
+        self._checkSettings(self.ob.fake_skin.test5,'View',1,[])
+
+if DevelopmentMode:
+
+    class DebugModeTests( FSSecurityBase ):
+        
+        def test_addPRM( self ):
+            """ Test adding of a .security """
+            # baseline
+            self._checkSettings(self.ob.fake_skin.test5,'View',1,[])
+            # add
+            self._writeFile('test5.py.security','View:acquire:Manager')
+            # test            
+            self._checkSettings(self.ob.fake_skin.test5,'View',1,['Manager'])
+
+        def test_delPRM( self ):
+            """ Test deleting of a .security """
+            # baseline
+            self._checkSettings(self.ob.fake_skin.test5,'View',1,[])
+            self._writeFile('test5.py.security','View:acquire:Manager')
+            self._checkSettings(self.ob.fake_skin.test5,'View',1,['Manager'])
+            # delete
+            self._deleteFile('test5.py.security')
+            # test
+            self._checkSettings(self.ob.fake_skin.test5,'View',1,[])
+
+        def test_editPRM( self ):
+            """ Test editing a .security """
+            # we need to wait a second here or the mtime will actually
+            # have the same value as set in the last test.
+            # Maybe someone brainier than me can figure out a way to make this
+            # suck less :-(            
+            sleep(1)
+            
+            # baseline
+            self._writeFile('test5.py.security','View::Manager,Anonymous')
+            self._checkSettings(self.ob.fake_skin.test5,'View',0,['Manager','Anonymous'])
+            
+            
+
+            # edit
+            self._writeFile('test5.py.security','View:acquire:Manager')
+            # test
+            self._checkSettings(self.ob.fake_skin.test5,'View',1,['Manager'])
+
+
+        def test_DelAddEditPRM( self ):
+            """ Test deleting, then adding, then editing a .security file """
+            # baseline
+            self._writeFile('test5.py.security','View::Manager')
+
+            # delete
+            self._deleteFile('test5.py.security')
+            self._checkSettings(self.ob.fake_skin.test5,'View',1,[])
+
+            # we need to wait a second here or the mtime will actually
+            # have the same value, no human makes two edits in less
+            # than a second ;-)
+            sleep(1)
+            
+            # add back
+            self._writeFile('test5.py.security','View::Manager,Anonymous')
+            self._checkSettings(self.ob.fake_skin.test5,'View',0,['Manager','Anonymous'])
+
+            # edit
+            self._writeFile('test5.py.security','View:acquire:Manager')
+
+            # test
+            self._checkSettings(self.ob.fake_skin.test5,'View',1,['Manager'])
+
+else:
+
+    class DebugModeTests( FSSecurityBase ):
+        pass
+
+def test_suite():
+    return TestSuite((
+        makeSuite(FSSecurityTests),
+        makeSuite(DebugModeTests),        
+        ))
+
+if __name__ == '__main__':
+    main(defaultTest='test_suite')
+
+
+
+


=== CMF/CMFCore/tests/test_DirectoryView.py 1.6 => 1.7 ===
 skin_path_name = join(_prefix, 'fake_skins', 'fake_skin')
 
+def _registerDirectory(self=None):
+    registerDirectory('fake_skins', _prefix)
+    if self is not None:
+        ob = self.ob = DummyFolder()
+        addDirectoryViews(ob, 'fake_skins', _prefix)
+    
 class DirectoryViewTests1( TestCase ):
 
     def test_registerDirectory( self ):
         """ Test registerDirectory  """
-        registerDirectory('fake_skins', _prefix)
+        _registerDirectory()
 
 class DirectoryViewTests2( TestCase ):
 
     def setUp( self ):
-        registerDirectory('fake_skins', _prefix)
-        ob = self.ob = DummyFolder()
-        addDirectoryViews(ob, 'fake_skins', _prefix)
+        _registerDirectory(self)        
 
     def test_addDirectoryViews( self ):
         """ Test addDirectoryViews  """
@@ -70,9 +74,7 @@
     def setUp( self ):
         
         # initialise skins
-        registerDirectory('fake_skins', _prefix)
-        ob = self.ob = DummyFolder()
-        addDirectoryViews(ob, 'fake_skins', _prefix)
+        _registerDirectory(self)
 
         # add a method to the fake skin folder
         f = open(test2path,'w')
@@ -157,7 +159,7 @@
         f.close()
         
         # we need to wait a second here or the mtime will actually
-        # have the same value, no human makes two edits un less
+        # have the same value, no human makes two edits in less
         # than a second ;-)
         sleep(1)
         


=== CMF/CMFCore/tests/test_all.py 1.17 => 1.18 ===
         'test_FSImage',
         'test_CachingPolicyManager',
+        'test_FSSecurity',
         ])
 
 if __name__ == '__main__':