[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__':