summaryrefslogtreecommitdiff
path: root/src/zope/security/tests/test_checker.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/zope/security/tests/test_checker.py')
-rw-r--r--src/zope/security/tests/test_checker.py149
1 files changed, 90 insertions, 59 deletions
diff --git a/src/zope/security/tests/test_checker.py b/src/zope/security/tests/test_checker.py
index a8b3990..a102ad6 100644
--- a/src/zope/security/tests/test_checker.py
+++ b/src/zope/security/tests/test_checker.py
@@ -16,9 +16,9 @@
import unittest
from zope.security import checker as sec_checker
-from zope.security.tests import QuietWatchingChecker
-from zope.security._compat import PYTHON3 as PY3
from zope.security._compat import PYTHON2 as PY2
+from zope.security._compat import PYTHON3 as PY3
+from zope.security.tests import QuietWatchingChecker
# pylint:disable=protected-access,inherit-non-class,no-method-argument,old-style-class
@@ -31,7 +31,8 @@ class Test_ProxyFactory(unittest.TestCase):
return ProxyFactory(obj, checker)
def test_w_already_proxied_no_checker(self):
- from zope.security.proxy import Proxy, getChecker
+ from zope.security.proxy import Proxy
+ from zope.security.proxy import getChecker
obj = object()
def _check(*x):
@@ -42,7 +43,8 @@ class Test_ProxyFactory(unittest.TestCase):
self.assertIs(getChecker(returned), _check)
def test_w_already_proxied_same_checker(self):
- from zope.security.proxy import Proxy, getChecker
+ from zope.security.proxy import Proxy
+ from zope.security.proxy import getChecker
obj = object()
def _check(*x):
@@ -80,7 +82,8 @@ class Test_ProxyFactory(unittest.TestCase):
self.assertIs(returned, obj)
def test_no_checker_w_dunder(self):
- from zope.security.proxy import getChecker, getObject
+ from zope.security.proxy import getChecker
+ from zope.security.proxy import getObject
_check = object() # don't use a func, due to bound method
class _WithChecker(object):
@@ -95,7 +98,8 @@ class Test_ProxyFactory(unittest.TestCase):
from zope.security.checker import Checker
from zope.security.checker import _checkers
from zope.security.checker import _clear
- from zope.security.proxy import getChecker, getObject
+ from zope.security.proxy import getChecker
+ from zope.security.proxy import getObject
class _Obj(object):
pass
@@ -221,11 +225,13 @@ class CheckerTestsBase(QuietWatchingChecker):
def test_class_conforms_to_IChecker(self):
from zope.interface.verify import verifyClass
+
from zope.security.interfaces import IChecker
verifyClass(IChecker, self._getTargetClass())
def test_instance_conforms_to_IChecker(self):
from zope.interface.verify import verifyObject
+
from zope.security.interfaces import IChecker
verifyObject(IChecker, self._makeOne())
@@ -290,8 +296,8 @@ class CheckerTestsBase(QuietWatchingChecker):
del thread_local.interaction
def test_check_setattr_w_interaction_denies(self):
- from zope.security.interfaces import Unauthorized
from zope.security._definitions import thread_local
+ from zope.security.interfaces import Unauthorized
class _Interaction(object):
def checkPermission(self, obj, perm):
@@ -338,8 +344,8 @@ class CheckerTestsBase(QuietWatchingChecker):
del thread_local.interaction
def test_check_non_public_w_interaction_denies(self):
- from zope.security.interfaces import Unauthorized
from zope.security._definitions import thread_local
+ from zope.security.interfaces import Unauthorized
class _Interaction(object):
def checkPermission(self, obj, perm):
@@ -354,7 +360,8 @@ class CheckerTestsBase(QuietWatchingChecker):
del thread_local.interaction
def test_proxy_already_proxied(self):
- from zope.security.proxy import Proxy, getChecker
+ from zope.security.proxy import Proxy
+ from zope.security.proxy import getChecker
obj = object()
def _check(*x):
@@ -372,7 +379,8 @@ class CheckerTestsBase(QuietWatchingChecker):
self.assertIs(returned, obj)
def test_proxy_no_checker_w_dunder(self):
- from zope.security.proxy import getChecker, getObject
+ from zope.security.proxy import getChecker
+ from zope.security.proxy import getObject
_check = object() # don't use a func, due to bound method
class _WithChecker(object):
@@ -388,7 +396,8 @@ class CheckerTestsBase(QuietWatchingChecker):
from zope.security.checker import Checker
from zope.security.checker import _checkers
from zope.security.checker import _clear
- from zope.security.proxy import getChecker, getObject
+ from zope.security.proxy import getChecker
+ from zope.security.proxy import getObject
class _Obj(object):
pass
@@ -408,11 +417,12 @@ class CheckerTestsBase(QuietWatchingChecker):
_clear()
def test_Decimal_operations(self):
- from zope.security.proxy import Proxy
- from zope.security.checker import _default_checkers
from decimal import Decimal
from decimal import DecimalTuple
+ from zope.security.checker import _default_checkers
+ from zope.security.proxy import Proxy
+
checker = _default_checkers[Decimal]
value = Decimal('1.1')
@@ -450,8 +460,8 @@ class CheckerTestsBase(QuietWatchingChecker):
self.assertEqual(proxy.quantize(Decimal('1.10')), Decimal('1.10'))
def _check_iteration_of_dict_like(self, dict_like):
- from zope.security.proxy import Proxy
from zope.security.checker import _default_checkers
+ from zope.security.proxy import Proxy
checker = _default_checkers[dict]
@@ -492,12 +502,12 @@ class CheckerTestsBase(QuietWatchingChecker):
def test_iteration_of_interface_implementedBy(self):
# Iteration of implementedBy is allowed by default
# See https://github.com/zopefoundation/zope.security/issues/27
- from zope.security.proxy import Proxy
- from zope.security.checker import Checker
-
- from zope.interface import providedBy
- from zope.interface import implementer
from zope.interface import Interface
+ from zope.interface import implementer
+ from zope.interface import providedBy
+
+ from zope.security.checker import Checker
+ from zope.security.proxy import Proxy
class I1(Interface):
pass
@@ -521,13 +531,13 @@ class CheckerTestsBase(QuietWatchingChecker):
def test_iteration_of_interface_providesBy(self):
# Iteration of zope.interface.Provides is allowed by default
# See https://github.com/zopefoundation/zope.security/issues/27
- from zope.security.proxy import Proxy
- from zope.security.checker import Checker
-
- from zope.interface import providedBy
+ from zope.interface import Interface
from zope.interface import alsoProvides
from zope.interface import implementer
- from zope.interface import Interface
+ from zope.interface import providedBy
+
+ from zope.security.checker import Checker
+ from zope.security.proxy import Proxy
class I1(Interface):
pass
@@ -558,8 +568,8 @@ class CheckerTestsBase(QuietWatchingChecker):
# __length_hint__ method to be defined on iterators. It should
# be allowed by default. See
# https://github.com/zopefoundation/zope.security/issues/27
- from zope.security.proxy import Proxy
from zope.security.checker import _iteratorChecker
+ from zope.security.proxy import Proxy
class Iter(object):
__Security_checker__ = _iteratorChecker
@@ -607,10 +617,10 @@ class CheckerTestsBase(QuietWatchingChecker):
def test_iteration_of_itertools_groupby(self):
# itertools.groupby is a custom iterator type.
# The groups it returns are also custom.
- from zope.security.checker import ProxyFactory
-
from itertools import groupby
+ from zope.security.checker import ProxyFactory
+
group = groupby([0])
list_group = list(group)
self.assertEqual(1, len(list_group))
@@ -732,6 +742,7 @@ class Test_NamesChecker(unittest.TestCase):
def test_empty_names_no_kw(self):
from zope.interface.verify import verifyObject
+
from zope.security.interfaces import IChecker
checker = self._callFUT()
verifyObject(IChecker, checker)
@@ -780,6 +791,7 @@ class Test_InterfaceChecker(unittest.TestCase):
def test_simple_iface_wo_kw(self):
from zope.interface import Attribute
from zope.interface import Interface
+
from zope.security.checker import CheckerPublic
class IFoo(Interface):
@@ -801,6 +813,7 @@ class Test_InterfaceChecker(unittest.TestCase):
def test_simple_iface_w_kw(self):
from zope.interface import Attribute
from zope.interface import Interface
+
from zope.security.checker import CheckerPublic
class IFoo(Interface):
@@ -814,6 +827,7 @@ class Test_InterfaceChecker(unittest.TestCase):
def test_derived_iface(self):
from zope.interface import Attribute
from zope.interface import Interface
+
from zope.security.checker import CheckerPublic
class IFoo(Interface):
@@ -829,6 +843,7 @@ class Test_InterfaceChecker(unittest.TestCase):
def test_w_clash(self):
from zope.interface import Attribute
from zope.interface import Interface
+
from zope.security.checker import DuplicationError
class IFoo(Interface):
@@ -847,6 +862,7 @@ class Test_MultiChecker(unittest.TestCase):
def test_empty(self):
from zope.interface.verify import verifyObject
+
from zope.security.interfaces import IChecker
checker = self._callFUT([])
verifyObject(IChecker, checker)
@@ -874,6 +890,7 @@ class Test_MultiChecker(unittest.TestCase):
def test_w_spec_as_names_and_iface(self):
from zope.interface import Attribute
from zope.interface import Interface
+
from zope.security.checker import CheckerPublic
class IFoo(Interface):
@@ -889,6 +906,7 @@ class Test_MultiChecker(unittest.TestCase):
def test_w_spec_as_names_and_iface_clash(self):
from zope.interface import Attribute
from zope.interface import Interface
+
from zope.security.checker import CheckerPublic
from zope.security.checker import DuplicationError
@@ -938,6 +956,7 @@ class _SelectCheckerBase(object):
def test_w_basic_types_NoProxy(self):
import datetime
+
from zope.i18nmessageid import Message
msg = Message('msg')
for obj in [object(),
@@ -1018,9 +1037,10 @@ class _SelectCheckerBase(object):
self.assertIs(self._callFUT(Foo()), checker)
def test_itertools_checkers(self):
- from zope.security.checker import _iteratorChecker
import itertools
+ from zope.security.checker import _iteratorChecker
+
def pred(x):
return x
iterable = (1, 2, 3)
@@ -1139,6 +1159,7 @@ class Test_defineChecker(unittest.TestCase):
def test_w_duplicate(self):
from zope.exceptions import DuplicationError
+
from zope.security.checker import _checkers
class Foo(object):
@@ -1158,6 +1179,7 @@ class Test_defineChecker(unittest.TestCase):
def test_w_module(self):
import zope.interface
+
from zope.security.checker import _checkers
checker = object()
self._callFUT(zope.interface, checker)
@@ -1226,17 +1248,19 @@ class TestCombinedChecker(QuietWatchingChecker,
def test_class_conforms_to_IChecker(self):
from zope.interface.verify import verifyClass
+
from zope.security.interfaces import IChecker
verifyClass(IChecker, self._getTargetClass())
def test_instance_conforms_to_IChecker(self):
from zope.interface.verify import verifyObject
+
from zope.security.interfaces import IChecker
verifyObject(IChecker, self._makeOne())
def test_check_lhs_ok_rhs_not_called(self):
- from zope.security.checker import CheckerPublic
from zope.security.checker import Checker
+ from zope.security.checker import CheckerPublic
class _NeverCalled(Checker):
def check(self, object, name): # pylint:disable=redefined-builtin
@@ -1248,8 +1272,8 @@ class TestCombinedChecker(QuietWatchingChecker,
combined.check(object(), 'name') # no raise
def test_check_lhs_unauth_rhs_ok(self):
- from zope.security.checker import CheckerPublic
from zope.security._definitions import thread_local
+ from zope.security.checker import CheckerPublic
class _Interaction(object):
def checkPermission(self, obj, perm):
@@ -1265,8 +1289,8 @@ class TestCombinedChecker(QuietWatchingChecker,
del thread_local.interaction
def test_check_lhs_unauth_rhs_forbidden(self):
- from zope.security.interfaces import Unauthorized
from zope.security._definitions import thread_local
+ from zope.security.interfaces import Unauthorized
class _Interaction(object):
def checkPermission(self, obj, perm):
@@ -1283,8 +1307,8 @@ class TestCombinedChecker(QuietWatchingChecker,
del thread_local.interaction
def test_check_lhs_unauth_rhs_unauth(self):
- from zope.security.interfaces import Unauthorized
from zope.security._definitions import thread_local
+ from zope.security.interfaces import Unauthorized
class _Interaction(object):
def checkPermission(self, obj, perm):
@@ -1318,8 +1342,8 @@ class TestCombinedChecker(QuietWatchingChecker,
combined.check, object(), 'name')
def test_check_lhs_forbidden_rhs_unauth(self):
- from zope.security.interfaces import Unauthorized
from zope.security._definitions import thread_local
+ from zope.security.interfaces import Unauthorized
class _Interaction(object):
def checkPermission(self, obj, perm):
@@ -1336,8 +1360,8 @@ class TestCombinedChecker(QuietWatchingChecker,
del thread_local.interaction
def test_check_setattr_lhs_ok_rhs_not_called(self):
- from zope.security.checker import CheckerPublic
from zope.security.checker import Checker
+ from zope.security.checker import CheckerPublic
class _NeverCalled(Checker):
def check_setattr(self, object, name):
@@ -1349,8 +1373,8 @@ class TestCombinedChecker(QuietWatchingChecker,
combined.check_setattr(object(), 'name') # no raise
def test_check_setattr_lhs_unauth_rhs_ok(self):
- from zope.security.checker import CheckerPublic
from zope.security._definitions import thread_local
+ from zope.security.checker import CheckerPublic
class _Interaction(object):
def checkPermission(self, obj, perm):
@@ -1366,8 +1390,8 @@ class TestCombinedChecker(QuietWatchingChecker,
del thread_local.interaction
def test_check_setattr_lhs_unauth_rhs_forbidden(self):
- from zope.security.interfaces import Unauthorized
from zope.security._definitions import thread_local
+ from zope.security.interfaces import Unauthorized
class _Interaction(object):
def checkPermission(self, obj, perm):
@@ -1384,8 +1408,8 @@ class TestCombinedChecker(QuietWatchingChecker,
del thread_local.interaction
def test_check_setattr_lhs_unauth_rhs_unauth(self):
- from zope.security.interfaces import Unauthorized
from zope.security._definitions import thread_local
+ from zope.security.interfaces import Unauthorized
class _Interaction(object):
def checkPermission(self, obj, perm):
@@ -1419,8 +1443,8 @@ class TestCombinedChecker(QuietWatchingChecker,
combined.check_setattr, object(), 'name')
def test_check_setattr_lhs_forbidden_rhs_unauth(self):
- from zope.security.interfaces import Unauthorized
from zope.security._definitions import thread_local
+ from zope.security.interfaces import Unauthorized
class _Interaction(object):
def checkPermission(self, obj, perm):
@@ -1662,6 +1686,7 @@ class Test_moduleChecker(unittest.TestCase):
def test_hit(self):
from zope.interface import verify
+
from zope.security.checker import _checkers
checker = _checkers[verify] = object()
self.assertIs(self._callFUT(verify), checker)
@@ -1700,6 +1725,7 @@ class TestSecurityPolicy(QuietWatchingChecker,
def _makeSecurityPolicy(self):
from zope.interface import implementer
+
from zope.security.interfaces import ISecurityPolicy
@implementer(ISecurityPolicy)
@@ -1709,8 +1735,8 @@ class TestSecurityPolicy(QuietWatchingChecker,
return SecurityPolicy
def test_defineChecker_oldstyle_class(self):
- from zope.security.checker import defineChecker
from zope.security.checker import NamesChecker
+ from zope.security.checker import defineChecker
old_type = self._get_old_class_type()
class ClassicClass:
@@ -1720,8 +1746,8 @@ class TestSecurityPolicy(QuietWatchingChecker,
defineChecker(ClassicClass, NamesChecker())
def test_defineChecker_newstyle_class(self):
- from zope.security.checker import defineChecker
from zope.security.checker import NamesChecker
+ from zope.security.checker import defineChecker
class NewStyleClass(object):
pass
@@ -1730,13 +1756,13 @@ class TestSecurityPolicy(QuietWatchingChecker,
def test_defineChecker_module(self):
import zope.security
- from zope.security.checker import defineChecker
from zope.security.checker import NamesChecker
+ from zope.security.checker import defineChecker
defineChecker(zope.security, NamesChecker())
def test_defineChecker_error(self):
- from zope.security.checker import defineChecker
from zope.security.checker import NamesChecker
+ from zope.security.checker import defineChecker
not_a_type = object()
self.assertRaises(TypeError,
defineChecker, not_a_type, NamesChecker())
@@ -1783,10 +1809,10 @@ class TestSecurityPolicy(QuietWatchingChecker,
# - allow and disallow by permission
def test_check_getattr(self):
# pylint:disable=attribute-defined-outside-init
+ from zope.security.checker import CheckerPublic
+ from zope.security.checker import NamesChecker
from zope.security.interfaces import Forbidden
from zope.security.interfaces import Unauthorized
- from zope.security.checker import NamesChecker
- from zope.security.checker import CheckerPublic
OldInst, NewInst = self._makeClasses()
@@ -1834,10 +1860,10 @@ class TestSecurityPolicy(QuietWatchingChecker,
def test_check_setattr(self):
# pylint:disable=attribute-defined-outside-init
- from zope.security.interfaces import Forbidden
- from zope.security.interfaces import Unauthorized
from zope.security.checker import Checker
from zope.security.checker import CheckerPublic
+ from zope.security.interfaces import Forbidden
+ from zope.security.interfaces import Unauthorized
OldInst, NewInst = self._makeClasses()
@@ -1874,11 +1900,11 @@ class TestSecurityPolicy(QuietWatchingChecker,
self.assertRaises(Forbidden, checker.check_setattr, inst, 'f')
def test_proxy(self):
- from zope.security.proxy import getChecker
- from zope.security.proxy import removeSecurityProxy
from zope.security.checker import BasicTypes_examples
from zope.security.checker import CheckerPublic
from zope.security.checker import NamesChecker
+ from zope.security.proxy import getChecker
+ from zope.security.proxy import removeSecurityProxy
OldInst, NewInst = self._makeClasses()
@@ -1917,9 +1943,10 @@ class TestSecurityPolicy(QuietWatchingChecker,
def testLayeredProxies(self):
# Test that a Proxy will not be re-proxied.
- from zope.security.proxy import Proxy, getObject
from zope.security.checker import Checker
from zope.security.checker import NamesChecker
+ from zope.security.proxy import Proxy
+ from zope.security.proxy import getObject
class Base:
__Security_checker__ = NamesChecker(['__Security_checker__'])
@@ -2007,8 +2034,8 @@ class TestSecurityPolicy(QuietWatchingChecker,
self.assertEqual(checker.check(C, '__parent__'), None)
def test_setattr(self):
- from zope.security.interfaces import Forbidden
from zope.security.checker import NamesChecker
+ from zope.security.interfaces import Forbidden
OldInst, NewInst = self._makeClasses()
@@ -2025,12 +2052,12 @@ class TestSecurityPolicy(QuietWatchingChecker,
def test_ProxyFactory(self):
# pylint:disable=attribute-defined-outside-init
- from zope.security.checker import _defaultChecker
- from zope.security.checker import defineChecker
from zope.security.checker import NamesChecker
from zope.security.checker import ProxyFactory
- from zope.security.proxy import getChecker
+ from zope.security.checker import _defaultChecker
+ from zope.security.checker import defineChecker
from zope.security.proxy import Proxy
+ from zope.security.proxy import getChecker
class SomeClass(object):
pass
@@ -2061,8 +2088,8 @@ class TestSecurityPolicy(QuietWatchingChecker,
self.assertIs(getChecker(proxy), specific_checker)
def test_define_and_undefineChecker(self):
- from zope.security.checker import defineChecker
from zope.security.checker import NamesChecker
+ from zope.security.checker import defineChecker
from zope.security.checker import undefineChecker
class SomeClass(object):
@@ -2070,7 +2097,8 @@ class TestSecurityPolicy(QuietWatchingChecker,
obj = SomeClass()
checker = NamesChecker()
- from zope.security.checker import _defaultChecker, selectChecker
+ from zope.security.checker import _defaultChecker
+ from zope.security.checker import selectChecker
self.assertIs(selectChecker(obj), _defaultChecker)
defineChecker(SomeClass, checker)
self.assertIs(selectChecker(obj), checker)
@@ -2078,8 +2106,8 @@ class TestSecurityPolicy(QuietWatchingChecker,
self.assertIs(selectChecker(obj), _defaultChecker)
def test_ProxyFactory_using_proxy(self):
- from zope.security.checker import ProxyFactory
from zope.security.checker import NamesChecker
+ from zope.security.checker import ProxyFactory
class SomeClass(object):
pass
@@ -2109,11 +2137,11 @@ class TestSecurityPolicy(QuietWatchingChecker,
# and call access to methods.
# For example, consider this humble pair of class and object.
- from zope.security.interfaces import Forbidden
from zope.security.checker import Checker
from zope.security.checker import canAccess
from zope.security.checker import canWrite
from zope.security.checker import defineChecker
+ from zope.security.interfaces import Forbidden
class SomeClass(object):
pass
@@ -2185,13 +2213,14 @@ class TestCheckerPublic(unittest.TestCase):
def test_that_pickling_CheckerPublic_retains_identity(self):
import pickle
+
from zope.security.checker import CheckerPublic
self.assertIs(pickle.loads(pickle.dumps(CheckerPublic)),
CheckerPublic)
def test_that_CheckerPublic_identity_works_even_when_proxied(self):
- from zope.security.checker import ProxyFactory
from zope.security.checker import CheckerPublic
+ from zope.security.checker import ProxyFactory
self.assertIs(ProxyFactory(CheckerPublic), CheckerPublic)
@@ -2224,6 +2253,7 @@ class TestMixinDecoratedChecker(unittest.TestCase):
def _makeSecurityPolicy(self):
from zope.interface import implementer
+
from zope.security.interfaces import ISecurityPolicy
@implementer(ISecurityPolicy)
@@ -2297,8 +2327,8 @@ class TestCombinedCheckerMixin(QuietWatchingChecker,
super(TestCombinedCheckerMixin, self).tearDown()
def test_checking(self):
- from zope.security.interfaces import Unauthorized
from zope.security.checker import CombinedChecker
+ from zope.security.interfaces import Unauthorized
cc = CombinedChecker(self.overridingChecker, self.originalChecker)
self.check_checking_impl(cc)
@@ -2319,6 +2349,7 @@ class TestCombinedCheckerMixin(QuietWatchingChecker,
def test_interface(self):
from zope.interface.verify import verifyObject
+
from zope.security.checker import CombinedChecker
from zope.security.interfaces import IChecker
dc = CombinedChecker(self.overridingChecker, self.originalChecker)