Problème de test unitaire sur les permissions d'un groupe ayant un role local.

3 messages Options
Embed this post
Permalink
michaellaunay

Problème de test unitaire sur les permissions d'un groupe ayant un role local.

Reply Threaded More More options
Print post
Permalink
Bonjour à tous,

J'ai un problème de test unitaire:

J'ai deux instances w0 et w1 d'un même type de contenu appelé Workspace
et dérivé de Folder.

w0 contient w1.

J'ai créé un rôle Walker dont le but et de permettre la traversé d'une
arborescence sans avoir le droit de voir le contenu de chaque noeud de
l'arborescence ce qui permet de naviguer dans l'arborescence sans avoir
d'erreur pour privilège insuffisant.

Lorsqu'un workspace est publié, mon rôle Walker possède uniquement les
permissions :
"Access contents information"
"View"

Les rôles locaux ne sont pas hérités dans les Workspaces.

Le contenu quant à lui interdit purement et simplement la permission
View aux Walker.

gw1 et un groupe ayant le rôle local Reader sur w1 et le rôle local
Walker sur w0.

m1 est un membre appartenant au groupe gw1 et obtenant ainsi le rôle
local Reader sur w1 et Walker sur w0.


Mon code fonctionne parfaitement sur un instance plone mais pas dans mes
tests unitaires :

Si je fais dans un test unitaire dérivant de PloneTestCase (en fait
généré avec ArchGenXML) :


from Products.CMFCore.utils import _checkPermission as checkPerm
...
class testEPRIVR_Workspace(testPlone)
    ...
    def testPermissionWalker(self):
        """Check permission of a local reader
        """
        self.login('m1')
        self.failUnless('gw1' in w1.users_with_local_role('Reader'))
        self.failUnless('gw1' in w0.users_with_local_role('Walker'))
        self.failUnless('View' in [p['name'] for p in \
              w0.permissionsOfRole('Walker') if p['selected']])
        self.failUnless('Access contents information' in [p['name']\
              for p in w0.permissionsOfRole('Walker') if p['selected']])
        self.failUnless('m1' in gw1.getMemberIds())
        self.failUnless(checkPerm('View', w1))
        # At this point my unit test seems to be buggy
        self.failUnless(checkPerm('View', w0))
       
Pourquoi ma dernière ligne bogue dans les tests unitaires alors que cela
fonctionne dans une instance plone ?

Cordialement

--
Michaël Launay
Gérant d'Ecréall
24, rue des Pâquerettes
59155 Faches Thumesnil
tél : 09 50 88 00 07
mob : 06 16 85 91 12
Fax : 09 56 88 00 07




_______________________________________________
Plone-FR mailing list
[hidden email]
http://lists.plone.org/mailman/listinfo/plone-fr
michaellaunay

Re: Problème de test unitaire sur les permissions d'un groupe ayant un role local.

Reply Threaded More More options
Print post
Permalink
Bonjour,

Tout vient du décorateur cache de memoize de la méthode
checkLocalRolesAllowed dans le module /borg/localrole/workspace.py qui
met en cache le résultat.

La mauvaise idée est de tester les permissions  avant et après l'appel
du code à tester.

Si quelqu'un connaît comment désactiver le memoize proprement dans un
test unitaire je suis preneur.

Cordialement
Michael Launay

Le mardi 28 octobre 2008 à 12:26 +0100, Michaël Launay a écrit :

> Bonjour à tous,
>
> J'ai un problème de test unitaire:
>
> J'ai deux instances w0 et w1 d'un même type de contenu appelé Workspace
> et dérivé de Folder.
>
> w0 contient w1.
>
> J'ai créé un rôle Walker dont le but et de permettre la traversé d'une
> arborescence sans avoir le droit de voir le contenu de chaque noeud de
> l'arborescence ce qui permet de naviguer dans l'arborescence sans avoir
> d'erreur pour privilège insuffisant.
>
> Lorsqu'un workspace est publié, mon rôle Walker possède uniquement les
> permissions :
> "Access contents information"
> "View"
>
> Les rôles locaux ne sont pas hérités dans les Workspaces.
>
> Le contenu quant à lui interdit purement et simplement la permission
> View aux Walker.
>
> gw1 et un groupe ayant le rôle local Reader sur w1 et le rôle local
> Walker sur w0.
>
> m1 est un membre appartenant au groupe gw1 et obtenant ainsi le rôle
> local Reader sur w1 et Walker sur w0.
>
>
> Mon code fonctionne parfaitement sur un instance plone mais pas dans mes
> tests unitaires :
>
> Si je fais dans un test unitaire dérivant de PloneTestCase (en fait
> généré avec ArchGenXML) :
>
>
> from Products.CMFCore.utils import _checkPermission as checkPerm
> ...
> class testEPRIVR_Workspace(testPlone)
>     ...
>     def testPermissionWalker(self):
>         """Check permission of a local reader
>         """
>         self.login('m1')
>         self.failUnless('gw1' in w1.users_with_local_role('Reader'))
>         self.failUnless('gw1' in w0.users_with_local_role('Walker'))
>         self.failUnless('View' in [p['name'] for p in \
>               w0.permissionsOfRole('Walker') if p['selected']])
>         self.failUnless('Access contents information' in [p['name']\
>               for p in w0.permissionsOfRole('Walker') if p['selected']])
>         self.failUnless('m1' in gw1.getMemberIds())
>         self.failUnless(checkPerm('View', w1))
>         # At this point my unit test seems to be buggy
>         self.failUnless(checkPerm('View', w0))
>        
> Pourquoi ma dernière ligne bogue dans les tests unitaires alors que cela
> fonctionne dans une instance plone ?
>
> Cordialement
>
> _______________________________________________
> Plone-FR mailing list
> [hidden email]
> http://lists.plone.org/mailman/listinfo/plone-fr


_______________________________________________
Plone-FR mailing list
[hidden email]
http://lists.plone.org/mailman/listinfo/plone-fr
michaellaunay

Re: Problème de test unitaire sur les permissions d'un groupe ayant un role local.

Reply Threaded More More options
Print post
Permalink
Bonsoir,
Après quelque mois voici la réponse donné par :
http://dev.plone.org/plone/ticket/9425
Merci à Vincent
Le mercredi 29 octobre 2008 à 07:55 +0100, Michaël Launay a écrit :

> Bonjour,
>
> Tout vient du décorateur cache de memoize de la méthode
> checkLocalRolesAllowed dans le module /borg/localrole/workspace.py qui
> met en cache le résultat.
>
> La mauvaise idée est de tester les permissions  avant et après l'appel
> du code à tester.
>
> Si quelqu'un connaît comment désactiver le memoize proprement dans un
> test unitaire je suis preneur.
>
> Cordialement
> Michael Launay
>
> Le mardi 28 octobre 2008 à 12:26 +0100, Michaël Launay a écrit :
> > Bonjour à tous,
> >
> > J'ai un problème de test unitaire:
> >
> > J'ai deux instances w0 et w1 d'un même type de contenu appelé Workspace
> > et dérivé de Folder.
> >
> > w0 contient w1.
> >
> > J'ai créé un rôle Walker dont le but et de permettre la traversé d'une
> > arborescence sans avoir le droit de voir le contenu de chaque noeud de
> > l'arborescence ce qui permet de naviguer dans l'arborescence sans avoir
> > d'erreur pour privilège insuffisant.
> >
> > Lorsqu'un workspace est publié, mon rôle Walker possède uniquement les
> > permissions :
> > "Access contents information"
> > "View"
> >
> > Les rôles locaux ne sont pas hérités dans les Workspaces.
> >
> > Le contenu quant à lui interdit purement et simplement la permission
> > View aux Walker.
> >
> > gw1 et un groupe ayant le rôle local Reader sur w1 et le rôle local
> > Walker sur w0.
> >
> > m1 est un membre appartenant au groupe gw1 et obtenant ainsi le rôle
> > local Reader sur w1 et Walker sur w0.
> >
> >
> > Mon code fonctionne parfaitement sur un instance plone mais pas dans mes
> > tests unitaires :
> >
> > Si je fais dans un test unitaire dérivant de PloneTestCase (en fait
> > généré avec ArchGenXML) :
> >
> >
> > from Products.CMFCore.utils import _checkPermission as checkPerm
> > ...
> > class testEPRIVR_Workspace(testPlone)
> >     ...
> >     def testPermissionWalker(self):
> >         """Check permission of a local reader
> >         """
> >         self.login('m1')
> >         self.failUnless('gw1' in w1.users_with_local_role('Reader'))
> >         self.failUnless('gw1' in w0.users_with_local_role('Walker'))
> >         self.failUnless('View' in [p['name'] for p in \
> >               w0.permissionsOfRole('Walker') if p['selected']])
> >         self.failUnless('Access contents information' in [p['name']\
> >               for p in w0.permissionsOfRole('Walker') if p['selected']])
> >         self.failUnless('m1' in gw1.getMemberIds())
> >         self.failUnless(checkPerm('View', w1))
> >         # At this point my unit test seems to be buggy
> >         self.failUnless(checkPerm('View', w0))
> >        
> > Pourquoi ma dernière ligne bogue dans les tests unitaires alors que cela
> > fonctionne dans une instance plone ?
> >
> > Cordialement
> >
> > _______________________________________________
> > Plone-FR mailing list
> > [hidden email]
> > http://lists.plone.org/mailman/listinfo/plone-fr
>
>
> _______________________________________________
> Plone-FR mailing list
> [hidden email]
> http://lists.plone.org/mailman/listinfo/plone-fr


_______________________________________________
Plone-FR mailing list
[hidden email]
http://lists.plone.org/mailman/listinfo/plone-fr