[Checkins] SVN: z3c.securitytool/trunk/src/z3c/securitytool/ Made
tests into a functional test.
Daniel Blackburn
blackburnd at gmail.com
Thu Dec 6 20:50:49 EST 2007
Log message for revision 82170:
Made tests into a functional test.
Adding ftesting.zcml to set up for functional tests.
Changed:
U z3c.securitytool/trunk/src/z3c/securitytool/README.txt
A z3c.securitytool/trunk/src/z3c/securitytool/ftesting.zcml
U z3c.securitytool/trunk/src/z3c/securitytool/securitytool.py
U z3c.securitytool/trunk/src/z3c/securitytool/tests.py
-=-
Modified: z3c.securitytool/trunk/src/z3c/securitytool/README.txt
===================================================================
--- z3c.securitytool/trunk/src/z3c/securitytool/README.txt 2007-12-06 18:53:26 UTC (rev 82169)
+++ z3c.securitytool/trunk/src/z3c/securitytool/README.txt 2007-12-07 01:50:47 UTC (rev 82170)
@@ -13,34 +13,44 @@
>>> from pprint import pprint
+ >>> import zope
>>> from zope.interface import implements
>>> from zope.annotation.interfaces import IAttributeAnnotatable
>>> from zope.app.container import contained
>>> from zope.app.folder import Folder, rootFolder
+ >>> import persistent
+
>>> from zope.app.authentication.principalfolder import Principal
>>> from zope.securitypolicy.role import Role
>>> from zope.security.permission import Permission
-
+ >>> from zope.publisher.interfaces import IRequest
+ >>> from zope.component import provideAdapter
+ >>> from zope.app.testing import ztapi
+ >>> from zope.app.folder.interfaces import IFolder
+ >>> import transaction
+
The news agency, the Concord Times, is implementing a new article management
system in Zope 3. In order to better understand their security situation, they
have installed z3c.security tool.
- >>> concordTimes = rootFolder()
+ >>> concordTimes = getRootFolder()
The Concord Times site is a folder which contains a Folder per issue and each
issue contains articles.
>>> class Issue(Folder):
- ... def __init__(self, title):
- ... self.title = title
- ...
+ ... implements(IFolder)
... def __repr__(self):
... return '<%s %r>' %(self.__class__.__name__, self.title)
- >>> class Article(contained.Contained):
+ >>> ztapi.provideAdapter(
+ ... IRequest, IFolder,
+ ... Issue)
+
+ >>> class Article(contained.Contained, persistent.Persistent):
... implements(IAttributeAnnotatable)
...
... def __init__(self, title, text):
@@ -113,33 +123,75 @@
>>> prinRoleManager.assignRoleToPrincipal(writer.id, markus.id)
>>> prinRoleManager.assignRoleToPrincipal(janitor.id, daniel.id)
>>> prinRoleManager.assignRoleToPrincipal(janitor.id, stephan.id)
+
+Lets set up the securityPolicy objects and the corresponding
+participation for our actors.
+
+ >>> from zope.security import testing
+ >>> from zope.securitypolicy import zopepolicy
+
+ >>> markus_policy = zopepolicy.ZopeSecurityPolicy()
+ >>> markus_part = testing.Participation(markus)
+ >>> markus_policy.add(markus_part)
+
+ >>> martin_policy = zopepolicy.ZopeSecurityPolicy()
+ >>> martin_part = testing.Participation(martin)
+ >>> martin_policy.add(martin_part)
+
+ >>> randy_policy = zopepolicy.ZopeSecurityPolicy()
+ >>> randy_part = testing.Participation(randy)
+ >>> randy_policy.add(randy_part)
+
+ >>> stephan_policy = zopepolicy.ZopeSecurityPolicy()
+ >>> stephan_part = testing.Participation(stephan)
+ >>> stephan_policy.add(stephan_part)
+
+ >>> daniel_policy = zopepolicy.ZopeSecurityPolicy()
+ >>> daniel_part = testing.Participation(daniel)
+ >>> daniel_policy.add(daniel_part)
To allow editors to create articles Martin has to create a new Issue:
-
- >>> firstIssue = concordTimes['issue.1'] = \
- ... Issue('The very first issue of `The Concord Times`')
+
+ >>> firstIssue = \
+ ... Folder()
+
+ >>> concordTimes['firstIssue'] = firstIssue
+ >>> concordTimes._p_changed = 1
+ >>> transaction.commit()
+
Randy starts to write his first article:
>>> firstArticle = Article('A new star is born',
... 'A new star is born, the `The Concord Times` ...')
- >>> from zope.security import testing
- >>> from zope.securitypolicy import zopepolicy
+Markus tries to give his fellow writer some help by attempting to
+create an Issue and of course cannot.
- >>> policy = zopepolicy.ZopeSecurityPolicy()
- >>> participation = testing.Participation(markus)
- >>> policy.add(participation)
- >>> policy.checkPermission(createIssue.id, concordTimes)
+ >>> markus_policy.checkPermission(createIssue.id, concordTimes)
False
-
- >>> policy2 = zopepolicy.ZopeSecurityPolicy()
- >>> participation2 = testing.Participation(martin)
- >>> policy2.add(participation2)
- >>> policy2.checkPermission(createIssue.id, concordTimes)
+
+
+Only Martin as the editor has createIssue priveleges.
+
+ >>> martin_policy.checkPermission(createIssue.id, concordTimes)
True
-
-
\ No newline at end of file
+This is not yet complete. But this is the proper way to connect.
+Now lets see if the app displays the appropriate permissions.
+
+ >>> from zope.testbrowser.browser import Browser # use for external
+ >>> import base64
+ >>> manager = Browser()
+ >>> login,password = 'admin','admin'
+ >>> authHeader = "Basic %s" % base64.encodestring(
+ ... "%s:%s" % (login,password))
+
+ >>> manager.addHeader('Authorization', authHeader)
+ >>> manager.handleErrors = False
+
+ >>> #manager.open('http://localhost:8080/vum.html')
+
+
Added: z3c.securitytool/trunk/src/z3c/securitytool/ftesting.zcml
===================================================================
--- z3c.securitytool/trunk/src/z3c/securitytool/ftesting.zcml (rev 0)
+++ z3c.securitytool/trunk/src/z3c/securitytool/ftesting.zcml 2007-12-07 01:50:47 UTC (rev 82170)
@@ -0,0 +1,92 @@
+<configure
+ xmlns="http://namespaces.zope.org/zope"
+ xmlns:browser="http://namespaces.zope.org/browser"
+ i18n_domain="">
+
+ <include package="zope.app.zcmlfiles" />
+
+ <include package="zope.viewlet" file="meta.zcml" />
+
+ <include package="z3c.macro" file="meta.zcml" />
+
+
+ <include package="zope.app.securitypolicy" file="meta.zcml" />
+
+ <include package="zope.app.authentication" />
+ <include package="zope.app.securitypolicy" />
+ <include package="zope.app.session" />
+ <include package="zope.app.twisted" />
+ <include package="z3c.macro" />
+
+ <include package="z3c.securitytool" file="configure.zcml" />
+
+ <securityPolicy
+ component="zope.securitypolicy.zopepolicy.ZopeSecurityPolicy" />
+
+ <role id="zope.Anonymous" title="Everybody" />
+ <role id="zope.role1" title="Role 1" />
+ <role id="zope.role2" title="Role 2" />
+
+ <role id="zope.Manager" title="Manager" />
+
+ <unauthenticatedPrincipal
+ id="zope.anybody"
+ title="Unauthenticated User"
+ />
+
+ <grant
+ role="zope.Anonymous"
+ principal="zope.anybody"
+ />
+
+ <principal
+ id="zope.sample_manager"
+ title="Sample Manager"
+ login="admin"
+ password="admin"
+ />
+
+ <principal
+ id="zope.user_1"
+ title="Sample User1"
+ login="user1"
+ password="user1"
+ />
+
+ <principal
+ id="zope.user_2"
+ title="Sample User2"
+ login="user2"
+ password="user2"
+ />
+
+ <grant
+ role="zope.Manager"
+ principal="zope.sample_manager"
+ />
+
+ <grant
+ role="zope.role1"
+ principal="zope.user_1"
+ />
+
+ <grant
+ role="zope.role2"
+ principal="zope.user_2"
+ />
+
+ <grantAll role="zope.Manager" />
+
+
+ <!-- Replace the following directive if you don't want public access
+ <grant permission="zope.View"
+ role="zope.Anonymous" />
+ <grant permission="zope.app.dublincore.view"
+ role="zope.Anonymous" />
+ -->
+
+</configure>
+
+
+
+
Modified: z3c.securitytool/trunk/src/z3c/securitytool/securitytool.py
===================================================================
--- z3c.securitytool/trunk/src/z3c/securitytool/securitytool.py 2007-12-06 18:53:26 UTC (rev 82169)
+++ z3c.securitytool/trunk/src/z3c/securitytool/securitytool.py 2007-12-07 01:50:47 UTC (rev 82170)
@@ -17,8 +17,8 @@
from zope.securitypolicy.rolepermission import rolePermissionManager
from zope.securitypolicy.principalrole import principalRoleManager
+#from zope.app.securitypolicy.zopepolicy import settingsForObject
-#from zope.app.securitypolicy.zopepolicy import settingsForObject
from zope.session.interfaces import ISession
from zope.app import zapi
Modified: z3c.securitytool/trunk/src/z3c/securitytool/tests.py
===================================================================
--- z3c.securitytool/trunk/src/z3c/securitytool/tests.py 2007-12-06 18:53:26 UTC (rev 82169)
+++ z3c.securitytool/trunk/src/z3c/securitytool/tests.py 2007-12-07 01:50:47 UTC (rev 82170)
@@ -18,85 +18,23 @@
import unittest, doctest
from zope.testing import module
-from zope.testing.doctestunit import DocFileSuite
+from zope.testing.doctestunit import DocFileSuite, DocTestSuite
+from zope.app.testing import placelesssetup, ztapi, functional, setup
+from z3c.securitytool import testing
-from zope.interface import Interface
-from zope.component import provideAdapter
-from zope.annotation.interfaces import IAnnotatable
-from zope.annotation.interfaces import IAttributeAnnotatable
-from zope.annotation.interfaces import IAnnotations
-from zope.annotation.attribute import AttributeAnnotations
-from zope.security.management import endInteraction
-
-from zope.app.testing import placelesssetup, ztapi
-from zope.securitypolicy.interfaces import IGrantInfo
-from zope.securitypolicy.interfaces import IPrincipalRoleManager
-from zope.securitypolicy.interfaces import IPrincipalPermissionManager
-from zope.securitypolicy.interfaces import IRolePermissionManager
-from zope.securitypolicy.principalpermission \
- import AnnotationPrincipalPermissionManager
-from zope.securitypolicy.principalrole \
- import AnnotationPrincipalRoleManager
-from zope.securitypolicy.rolepermission \
- import AnnotationRolePermissionManager
-from zope.securitypolicy.grantinfo \
- import AnnotationGrantInfo
-from zope.app.authentication import principalfolder
-
-from z3c.securitytool.securitytool import SecurityChecker
-
-def setUp(test):
- placelesssetup.setUp()
-# endInteraction()
- ztapi.provideAdapter(
- IAttributeAnnotatable, IAnnotations,
- AttributeAnnotations)
- ztapi.provideAdapter(
- IAnnotatable, IPrincipalPermissionManager,
- AnnotationPrincipalPermissionManager)
- ztapi.provideAdapter(
- IAnnotatable, IPrincipalRoleManager,
- AnnotationPrincipalRoleManager)
- ztapi.provideAdapter(
- IAnnotatable, IRolePermissionManager,
- AnnotationRolePermissionManager)
- ztapi.provideAdapter(
- IAnnotatable, IGrantInfo,
- AnnotationGrantInfo)
- # createPrincipalFolder(test)
- # createPrincipals(test,'randy')
- # createPrincipals(test,'markus')
- # createPrincipals(test,'daniel')
-
- module.setUp(test, 'z3c.securitytool.securitytool.README')
- provideAdapter(SecurityChecker, (Interface,))
-
-# def defineRole(id, title=None, description=None):
-# role = Role(id, title, description)
-# ztapi.provideUtility(IRole, role, name=role.id)
-# return role
-#
-# def definePermission(id, title=None, description=None):
-# perm = Permission(id, title, description)
-# ztapi.provideUtility(IPermission, perm, name=perm.id)
-# return perm
-#
-# def createPrincipalFolder(test):
-# test.globs['pf'] = principalfolder.PrincipalFolder(u'Members.')
-#
-# def createPrincipals(test,name):
-# principal = principalfolder.InternalPrincipal(
-# name,'password',name,'SHA1')
-# test.globs['pf'][name] = principal
-
-
def test_suite():
flags = doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS
-
+
+ functionalTest = functional.FunctionalDocFileSuite(
+ 'README.txt',optionflags=flags,globs={'lets': 'test'},
+ tearDown=placelesssetup.tearDown)
+
+ functionalTest.layer = testing.SecurityToolLayer
+
return unittest.TestSuite((
- DocFileSuite('README.txt',optionflags=flags,
- setUp=setUp, tearDown=placelesssetup.tearDown),
- ))
+ #unitTest,
+ functionalTest,))
if __name__ == '__main__':
unittest.main(defaultTest='test_suite')
+
More information about the Checkins
mailing list