summaryrefslogtreecommitdiff
path: root/repoze/bfg/tests/test_router.py
diff options
context:
space:
mode:
Diffstat (limited to 'repoze/bfg/tests/test_router.py')
-rw-r--r--repoze/bfg/tests/test_router.py433
1 files changed, 291 insertions, 142 deletions
diff --git a/repoze/bfg/tests/test_router.py b/repoze/bfg/tests/test_router.py
index db47f832e..9a29967a3 100644
--- a/repoze/bfg/tests/test_router.py
+++ b/repoze/bfg/tests/test_router.py
@@ -16,14 +16,7 @@ class RouterTests(unittest.TestCase):
def _registerLogger(self):
from repoze.bfg.interfaces import ILogger
- class Logger:
- def __init__(self):
- self.messages = []
- def info(self, msg):
- self.messages.append(msg)
- warn = info
- debug = info
- logger = Logger()
+ logger = DummyLogger()
self.registry.registerUtility(logger, ILogger, name='repoze.bfg.debug')
return logger
@@ -38,6 +31,12 @@ class RouterTests(unittest.TestCase):
settings = Settings(**defaultkw)
self.registry.registerUtility(settings, ISettings)
+ def _registerAuthenticationPolicy(self):
+ from repoze.bfg.interfaces import IAuthenticationPolicy
+ policy = DummyAuthenticationPolicy()
+ self.registry.registerUtility(policy, IAuthenticationPolicy)
+ return policy
+
def _registerTraverserFactory(self, context, view_name='', subpath=None,
traversed=None, virtual_root=None,
virtual_root_path=None, **kw):
@@ -74,13 +73,19 @@ class RouterTests(unittest.TestCase):
from repoze.bfg.interfaces import IView
self.registry.registerAdapter(app, for_, IView, name)
- def _registerPermission(self, permission, name, *for_):
+ def _registerViewPermission(self, view_name, allow=True):
+ from zope.interface import Interface
from repoze.bfg.interfaces import IViewPermission
- self.registry.registerAdapter(permission, for_, IViewPermission, name)
-
- def _registerSecurityPolicy(self, secpol):
- from repoze.bfg.interfaces import ISecurityPolicy
- self.registry.registerUtility(secpol, ISecurityPolicy)
+ class Checker(object):
+ def __call__(self, context, request):
+ self.context = context
+ self.request = request
+ return allow
+ checker = Checker()
+ self.registry.registerAdapter(checker, (Interface, Interface),
+ IViewPermission,
+ view_name)
+ return checker
def _registerEventListener(self, iface):
L = []
@@ -89,9 +94,11 @@ class RouterTests(unittest.TestCase):
self.registry.registerHandler(listener, (iface,))
return L
- def _registerRootFactory(self, root_factory):
+ def _registerRootFactory(self, val):
+ rootfactory = make_rootfactory(val)
from repoze.bfg.interfaces import IRootFactory
- self.registry.registerUtility(root_factory, IRootFactory)
+ self.registry.registerUtility(rootfactory, IRootFactory)
+ return rootfactory
def _getTargetClass(self):
from repoze.bfg.router import Router
@@ -113,21 +120,63 @@ class RouterTests(unittest.TestCase):
return environ
def test_root_policy(self):
- rootfactory = make_rootfactory(None)
environ = self._makeEnviron()
context = DummyContext()
self._registerTraverserFactory(context)
- self._registerRootFactory(rootfactory)
+ rootfactory = self._registerRootFactory(None)
router = self._makeOne()
self.assertEqual(router.root_policy, rootfactory)
+ def test_inotfound_appfactory_override(self):
+ from repoze.bfg.interfaces import INotFoundAppFactory
+ def app():
+ """ """
+ self.registry.registerUtility(app, INotFoundAppFactory)
+ self._registerRootFactory(None)
+ router = self._makeOne()
+ self.assertEqual(router.notfound_app_factory, app)
+
+ def test_iforbidden_responsefactory_override(self):
+ from repoze.bfg.interfaces import IForbiddenResponseFactory
+ def app():
+ """ """
+ self.registry.registerUtility(app, IForbiddenResponseFactory)
+ self._registerRootFactory(None)
+ router = self._makeOne()
+ self.assertEqual(router.forbidden_resp_factory, app)
+
+ def test_iforbidden_responsefactory_nooverride(self):
+ context = DummyContext()
+ self._registerRootFactory(None)
+ router = self._makeOne()
+ from repoze.bfg.router import default_forbidden_view
+ self.assertEqual(router.forbidden_resp_factory, default_forbidden_view)
+
+ def test_secpol_with_iunauthorized_appfactory(self):
+ from repoze.bfg.interfaces import IUnauthorizedAppFactory
+ environ = self._makeEnviron()
+ context = DummyContext()
+ self._registerTraverserFactory(context)
+ rootfactory = self._registerRootFactory(None)
+ logger = self._registerLogger()
+ def factory():
+ return 'yo'
+ self.registry.registerUtility(factory, IUnauthorizedAppFactory)
+ router = self._makeOne()
+ self.assertEqual(len(logger.messages), 1)
+ self.failUnless('IForbiddenResponseFactory' in logger.messages[0])
+ class DummyRequest:
+ def get_response(self, app):
+ return app
+ req = DummyRequest()
+ self.assertEqual(router.forbidden_resp_factory(None, req), 'yo')
+
def test_call_no_view_registered_no_isettings(self):
- rootfactory = make_rootfactory(None)
environ = self._makeEnviron()
context = DummyContext()
self._registerTraverserFactory(context)
logger = self._registerLogger()
- self._registerRootFactory(rootfactory)
+ self._registerRootFactory(None)
router = self._makeOne()
start_response = DummyStartResponse()
result = router(environ, start_response)
@@ -148,8 +197,7 @@ class RouterTests(unittest.TestCase):
self._registerTraverserFactory(context)
environ = self._makeEnviron()
start_response = DummyStartResponse()
- rootfactory = make_rootfactory(NotFound())
- self._registerRootFactory(rootfactory)
+ self._registerRootFactory(NotFound())
router = self._makeOne()
result = router(environ, start_response)
status = start_response.status
@@ -157,13 +205,12 @@ class RouterTests(unittest.TestCase):
self.failUnless('http://localhost:8080' in result[0], result)
def test_call_no_view_registered_debug_notfound_false(self):
- rootfactory = make_rootfactory(None)
environ = self._makeEnviron()
context = DummyContext()
self._registerTraverserFactory(context)
logger = self._registerLogger()
self._registerSettings(debug_notfound=False)
- self._registerRootFactory(rootfactory)
+ self._registerRootFactory(None)
router = self._makeOne()
start_response = DummyStartResponse()
result = router(environ, start_response)
@@ -176,13 +223,12 @@ class RouterTests(unittest.TestCase):
self.assertEqual(len(logger.messages), 0)
def test_call_no_view_registered_debug_notfound_true(self):
- rootfactory = make_rootfactory(None)
environ = self._makeEnviron()
context = DummyContext()
self._registerTraverserFactory(context)
self._registerSettings(debug_notfound=True)
logger = self._registerLogger()
- self._registerRootFactory(rootfactory)
+ self._registerRootFactory(None)
router = self._makeOne()
start_response = DummyStartResponse()
result = router(environ, start_response)
@@ -205,19 +251,17 @@ class RouterTests(unittest.TestCase):
self.failUnless("subpath: []" in message)
def test_call_view_returns_nonresponse(self):
- rootfactory = make_rootfactory(None)
context = DummyContext()
self._registerTraverserFactory(context)
environ = self._makeEnviron()
view = make_view('abc')
self._registerView(view, '', None, None)
- self._registerRootFactory(rootfactory)
+ self._registerRootFactory(None)
router = self._makeOne()
start_response = DummyStartResponse()
self.assertRaises(ValueError, router, environ, start_response)
def test_call_view_registered_nonspecific_default_path(self):
- rootfactory = make_rootfactory(None)
context = DummyContext()
self._registerTraverserFactory(context)
response = DummyResponse()
@@ -225,7 +269,7 @@ class RouterTests(unittest.TestCase):
view = make_view(response)
environ = self._makeEnviron()
self._registerView(view, '', None, None)
- self._registerRootFactory(rootfactory)
+ self._registerRootFactory(None)
router = self._makeOne()
start_response = DummyStartResponse()
result = router(environ, start_response)
@@ -238,7 +282,6 @@ class RouterTests(unittest.TestCase):
self.assertEqual(environ['webob.adhoc_attrs']['root'], None)
def test_call_deprecation_warning(self):
- rootfactory = make_rootfactory(None)
context = DummyContext()
self._registerTraverserFactory(context, _deprecation_warning='abc')
response = DummyResponse()
@@ -246,7 +289,7 @@ class RouterTests(unittest.TestCase):
view = make_view(response)
environ = self._makeEnviron()
self._registerView(view, '', None, None)
- self._registerRootFactory(rootfactory)
+ self._registerRootFactory(None)
router = self._makeOne()
logger = self._registerLogger()
router.logger = logger
@@ -256,7 +299,6 @@ class RouterTests(unittest.TestCase):
self.assertEqual(logger.messages[0], 'abc')
def test_call_view_registered_nonspecific_nondefault_path_and_subpath(self):
- rootfactory = make_rootfactory(None)
context = DummyContext()
self._registerTraverserFactory(context, view_name='foo',
subpath=['bar'],
@@ -266,7 +308,7 @@ class RouterTests(unittest.TestCase):
view = make_view(response)
environ = self._makeEnviron()
self._registerView(view, 'foo', None, None)
- self._registerRootFactory(rootfactory)
+ self._registerRootFactory(None)
router = self._makeOne()
start_response = DummyStartResponse()
result = router(environ, start_response)
@@ -279,7 +321,6 @@ class RouterTests(unittest.TestCase):
self.assertEqual(environ['webob.adhoc_attrs']['root'], None)
def test_call_view_registered_specific_success(self):
- rootfactory = make_rootfactory(None)
from zope.interface import Interface
from zope.interface import directlyProvides
class IContext(Interface):
@@ -293,7 +334,7 @@ class RouterTests(unittest.TestCase):
view = make_view(response)
environ = self._makeEnviron()
self._registerView(view, '', IContext, IRequest)
- self._registerRootFactory(rootfactory)
+ self._registerRootFactory(None)
router = self._makeOne()
start_response = DummyStartResponse()
result = router(environ, start_response)
@@ -306,7 +347,6 @@ class RouterTests(unittest.TestCase):
self.assertEqual(environ['webob.adhoc_attrs']['root'], None)
def test_call_view_registered_specific_fail(self):
- rootfactory = make_rootfactory(None)
from zope.interface import Interface
from zope.interface import directlyProvides
class IContext(Interface):
@@ -321,15 +361,14 @@ class RouterTests(unittest.TestCase):
view = make_view(response)
environ = self._makeEnviron()
self._registerView(view, '', IContext, IRequest)
- self._registerRootFactory(rootfactory)
+ self._registerRootFactory(None)
router = self._makeOne()
start_response = DummyStartResponse()
result = router(environ, start_response)
self.assertEqual(start_response.status, '404 Not Found')
self.failUnless('404' in result[0])
- def test_call_view_registered_security_policy_permission_none(self):
- rootfactory = make_rootfactory(None)
+ def test_call_view_permission_none(self):
from zope.interface import Interface
from zope.interface import directlyProvides
class IContext(Interface):
@@ -342,16 +381,14 @@ class RouterTests(unittest.TestCase):
view = make_view(response)
environ = self._makeEnviron()
self._registerView(view, '', IContext, IRequest)
- secpol = DummySecurityPolicy()
- self._registerSecurityPolicy(secpol)
- self._registerRootFactory(rootfactory)
+ self._registerRootFactory(None)
router = self._makeOne()
start_response = DummyStartResponse()
result = router(environ, start_response)
self.assertEqual(start_response.status, '200 OK')
- def test_call_view_registered_security_policy_permission_succeeds(self):
- rootfactory = make_rootfactory(None)
+ def test_call_view_no_authentication_policy_debug_authorization(self):
+ logger = self._registerLogger()
from zope.interface import Interface
from zope.interface import directlyProvides
class IContext(Interface):
@@ -362,21 +399,87 @@ class RouterTests(unittest.TestCase):
self._registerTraverserFactory(context, subpath=[''])
response = DummyResponse()
view = make_view(response)
- secpol = DummySecurityPolicy()
- permissionfactory = make_permission_factory(True)
environ = self._makeEnviron()
self._registerView(view, '', IContext, IRequest)
- self._registerSecurityPolicy(secpol)
- self._registerPermission(permissionfactory, '', IContext, IRequest)
- self._registerRootFactory(rootfactory)
+ self._registerRootFactory(None)
router = self._makeOne()
+ router.debug_authorization = True
start_response = DummyStartResponse()
result = router(environ, start_response)
self.assertEqual(start_response.status, '200 OK')
- self.assertEqual(permissionfactory.checked_with, secpol)
+ self.assertEqual(len(logger.messages), 1)
+ self.failUnless('no authentication policy' in logger.messages[0])
+
+ def test_call_view_no_permission_registered_debug_authorization(self):
+ self._registerAuthenticationPolicy()
+ logger = self._registerLogger()
+ from zope.interface import Interface
+ from zope.interface import directlyProvides
+ class IContext(Interface):
+ pass
+ from repoze.bfg.interfaces import IRequest
+ context = DummyContext()
+ directlyProvides(context, IContext)
+ self._registerTraverserFactory(context, subpath=[''])
+ response = DummyResponse()
+ view = make_view(response)
+ environ = self._makeEnviron()
+ self._registerView(view, '', IContext, IRequest)
+ self._registerRootFactory(None)
+ router = self._makeOne()
+ router.debug_authorization = True
+ start_response = DummyStartResponse()
+ result = router(environ, start_response)
+ self.assertEqual(start_response.status, '200 OK')
+ self.assertEqual(len(logger.messages), 1)
+ self.failUnless('no permission registered' in logger.messages[0])
+
+ def test_call_view_no_permission_registered_no_debug(self):
+ self._registerAuthenticationPolicy()
+ logger = self._registerLogger()
+ from zope.interface import Interface
+ from zope.interface import directlyProvides
+ class IContext(Interface):
+ pass
+ from repoze.bfg.interfaces import IRequest
+ context = DummyContext()
+ directlyProvides(context, IContext)
+ self._registerTraverserFactory(context, subpath=[''])
+ response = DummyResponse()
+ view = make_view(response)
+ environ = self._makeEnviron()
+ self._registerView(view, '', IContext, IRequest)
+ self._registerRootFactory(None)
+ router = self._makeOne()
+ router.debug_authorization = False
+ start_response = DummyStartResponse()
+ result = router(environ, start_response)
+ self.assertEqual(start_response.status, '200 OK')
+ self.assertEqual(len(logger.messages), 0)
+
+ def test_call_view_permission_succeeds(self):
+ from zope.interface import Interface
+ from zope.interface import directlyProvides
+ class IContext(Interface):
+ pass
+ from repoze.bfg.interfaces import IRequest
+ context = DummyContext()
+ directlyProvides(context, IContext)
+ self._registerTraverserFactory(context, subpath=[''])
+ self._registerAuthenticationPolicy()
+ response = DummyResponse()
+ view = make_view(response)
+ environ = self._makeEnviron()
+ self._registerView(view, '', IContext, IRequest)
+ checker = self._registerViewPermission('', True)
+ self._registerRootFactory(None)
+ router = self._makeOne()
+ start_response = DummyStartResponse()
+ result = router(environ, start_response)
+ self.assertEqual(start_response.status, '200 OK')
+ self.assertEqual(checker.context, context)
def test_call_view_permission_fails_nosettings(self):
- rootfactory = make_rootfactory(None)
from zope.interface import Interface
from zope.interface import directlyProvides
class IContext(Interface):
@@ -385,28 +488,24 @@ class RouterTests(unittest.TestCase):
context = DummyContext()
directlyProvides(context, IContext)
self._registerTraverserFactory(context, subpath=[''])
+ self._registerAuthenticationPolicy()
response = DummyResponse()
view = make_view(response)
- secpol = DummySecurityPolicy()
from repoze.bfg.security import ACLDenied
- permissionfactory = make_permission_factory(
- ACLDenied('ace', 'acl', 'permission', ['principals'], context)
- )
+ denied = ACLDenied('ace', 'acl', 'permission', ['principals'], context)
environ = self._makeEnviron()
self._registerView(view, '', IContext, IRequest)
- self._registerSecurityPolicy(secpol)
- self._registerPermission(permissionfactory, '', IContext, IRequest)
- self._registerRootFactory(rootfactory)
+ checker = self._registerViewPermission('', denied)
+ self._registerRootFactory(None)
router = self._makeOne()
start_response = DummyStartResponse()
result = router(environ, start_response)
self.assertEqual(start_response.status, '401 Unauthorized')
- message = result[0]
- self.failUnless('failed security policy check' in message)
- self.assertEqual(permissionfactory.checked_with, secpol)
+ message = environ['repoze.bfg.message']
+ self.assertEqual(message, 'Unauthorized: failed security policy check')
+ self.assertEqual(checker.context, context)
def test_call_view_permission_fails_no_debug_auth(self):
- rootfactory = make_rootfactory(None)
from zope.interface import Interface
from zope.interface import directlyProvides
class IContext(Interface):
@@ -415,29 +514,25 @@ class RouterTests(unittest.TestCase):
context = DummyContext()
directlyProvides(context, IContext)
self._registerTraverserFactory(context, subpath=[''])
+ self._registerAuthenticationPolicy()
response = DummyResponse()
view = make_view(response)
- secpol = DummySecurityPolicy()
from repoze.bfg.security import ACLDenied
- permissionfactory = make_permission_factory(
- ACLDenied('ace', 'acl', 'permission', ['principals'], context)
- )
+ denied = ACLDenied('ace', 'acl', 'permission', ['principals'], context)
environ = self._makeEnviron()
self._registerView(view, '', IContext, IRequest)
- self._registerSecurityPolicy(secpol)
- self._registerPermission(permissionfactory, '', IContext, IRequest)
+ checker = self._registerViewPermission('', denied)
self._registerSettings(debug_authorization=False)
- self._registerRootFactory(rootfactory)
+ self._registerRootFactory(None)
router = self._makeOne()
start_response = DummyStartResponse()
result = router(environ, start_response)
self.assertEqual(start_response.status, '401 Unauthorized')
- message = result[0]
+ message = environ['repoze.bfg.message']
self.failUnless('failed security policy check' in message)
- self.assertEqual(permissionfactory.checked_with, secpol)
+ self.assertEqual(checker.context, context)
def test_call_view_permission_fails_with_debug_auth(self):
- rootfactory = make_rootfactory(None)
from zope.interface import Interface
from zope.interface import directlyProvides
class IContext(Interface):
@@ -445,31 +540,28 @@ class RouterTests(unittest.TestCase):
from repoze.bfg.interfaces import IRequest
context = DummyContext()
directlyProvides(context, IContext)
+ self._registerAuthenticationPolicy()
self._registerTraverserFactory(context, subpath=[''])
response = DummyResponse()
view = make_view(response)
- secpol = DummySecurityPolicy()
from repoze.bfg.security import ACLDenied
- permissionfactory = make_permission_factory(
- ACLDenied('ace', 'acl', 'permission', ['principals'], context)
- )
environ = self._makeEnviron()
self._registerView(view, '', IContext, IRequest)
- self._registerSecurityPolicy(secpol)
- self._registerPermission(permissionfactory, '', IContext, IRequest)
+ allowed = ACLDenied('ace', 'acl', 'permission', ['principals'], context)
+ checker = self._registerViewPermission('', allowed)
self._registerSettings(debug_authorization=True)
logger = self._registerLogger()
- self._registerRootFactory(rootfactory)
+ self._registerRootFactory(None)
router = self._makeOne()
start_response = DummyStartResponse()
result = router(environ, start_response)
self.assertEqual(start_response.status, '401 Unauthorized')
- message = result[0]
+ message = environ['repoze.bfg.message']
self.failUnless(
"ACLDenied permission 'permission' via ACE 'ace' in ACL 'acl' "
"on context" in message)
self.failUnless("for principals ['principals']" in message)
- self.assertEqual(permissionfactory.checked_with, secpol)
+ self.assertEqual(checker.context, context)
self.assertEqual(len(logger.messages), 1)
logged = logger.messages[0]
self.failUnless(
@@ -482,7 +574,6 @@ class RouterTests(unittest.TestCase):
"for principals ['principals']" in logged)
def test_call_eventsends(self):
- rootfactory = make_rootfactory(None)
context = DummyContext()
self._registerTraverserFactory(context)
response = DummyResponse()
@@ -494,7 +585,7 @@ class RouterTests(unittest.TestCase):
from repoze.bfg.interfaces import INewResponse
request_events = self._registerEventListener(INewRequest)
response_events = self._registerEventListener(INewResponse)
- self._registerRootFactory(rootfactory)
+ self._registerRootFactory(None)
router = self._makeOne()
start_response = DummyStartResponse()
result = router(environ, start_response)
@@ -503,12 +594,27 @@ class RouterTests(unittest.TestCase):
self.assertEqual(len(response_events), 1)
self.assertEqual(response_events[0].response, response)
+ def test_call_pushes_and_pops_threadlocal_manager(self):
+ context = DummyContext()
+ self._registerTraverserFactory(context)
+ response = DummyResponse()
+ response.app_iter = ['Hello world']
+ view = make_view(response)
+ environ = self._makeEnviron()
+ self._registerView(view, '', None, None)
+ self._registerRootFactory(None)
+ router = self._makeOne()
+ start_response = DummyStartResponse()
+ router.threadlocal_manager = DummyThreadLocalManager()
+ result = router(environ, start_response)
+ self.assertEqual(len(router.threadlocal_manager.pushed), 1)
+ self.assertEqual(len(router.threadlocal_manager.popped), 1)
+
def test_call_post_method(self):
from repoze.bfg.interfaces import INewRequest
from repoze.bfg.interfaces import IPOSTRequest
from repoze.bfg.interfaces import IPUTRequest
from repoze.bfg.interfaces import IRequest
- rootfactory = make_rootfactory(None)
context = DummyContext()
self._registerTraverserFactory(context)
response = DummyResponse()
@@ -516,7 +622,7 @@ class RouterTests(unittest.TestCase):
view = make_view(response)
environ = self._makeEnviron(REQUEST_METHOD='POST')
self._registerView(view, '', None, None)
- self._registerRootFactory(rootfactory)
+ self._registerRootFactory(None)
router = self._makeOne()
start_response = DummyStartResponse()
request_events = self._registerEventListener(INewRequest)
@@ -531,7 +637,6 @@ class RouterTests(unittest.TestCase):
from repoze.bfg.interfaces import IPUTRequest
from repoze.bfg.interfaces import IPOSTRequest
from repoze.bfg.interfaces import IRequest
- rootfactory = make_rootfactory(None)
context = DummyContext()
self._registerTraverserFactory(context)
response = DummyResponse()
@@ -539,7 +644,7 @@ class RouterTests(unittest.TestCase):
view = make_view(response)
environ = self._makeEnviron(REQUEST_METHOD='PUT')
self._registerView(view, '', None, None)
- self._registerRootFactory(rootfactory)
+ self._registerRootFactory(None)
router = self._makeOne()
start_response = DummyStartResponse()
request_events = self._registerEventListener(INewRequest)
@@ -552,7 +657,6 @@ class RouterTests(unittest.TestCase):
def test_call_unknown_method(self):
from repoze.bfg.interfaces import INewRequest
from repoze.bfg.interfaces import IRequest
- rootfactory = make_rootfactory(None)
context = DummyContext()
self._registerTraverserFactory(context)
response = DummyResponse()
@@ -560,7 +664,7 @@ class RouterTests(unittest.TestCase):
view = make_view(response)
environ = self._makeEnviron(REQUEST_METHOD='UNKNOWN')
self._registerView(view, '', None, None)
- self._registerRootFactory(rootfactory)
+ self._registerRootFactory(None)
router = self._makeOne()
start_response = DummyStartResponse()
request_events = self._registerEventListener(INewRequest)
@@ -573,7 +677,6 @@ class RouterTests(unittest.TestCase):
from repoze.bfg.interfaces import IRequestFactory
from repoze.bfg.testing import DummyRequest
self.registry.registerUtility(DummyRequest, IRequestFactory)
- rootfactory = make_rootfactory(None)
context = DummyContext()
self._registerTraverserFactory(context)
response = DummyResponse()
@@ -581,7 +684,7 @@ class RouterTests(unittest.TestCase):
view = make_view(response)
environ = self._makeEnviron()
self._registerView(view, '', None, None)
- self._registerRootFactory(rootfactory)
+ self._registerRootFactory(None)
router = self._makeOne()
start_response = DummyStartResponse()
request_events = self._registerEventListener(INewRequest)
@@ -593,54 +696,19 @@ class RouterTests(unittest.TestCase):
self.assertEqual(request.view_name, '')
self.assertEqual(request.subpath, [])
- def test_call_inotfound_appfactory_override(self):
- from repoze.bfg.interfaces import INotFoundAppFactory
- def app():
- """ """
- self.registry.registerUtility(app, INotFoundAppFactory)
- rootfactory = make_rootfactory(None)
- context = DummyContext()
- self._registerTraverserFactory(context)
- response = DummyResponse()
- response.app_iter = ['Hello world']
- view = make_view(response)
- environ = self._makeEnviron()
- self._registerView(view, '', None, None)
- self._registerRootFactory(rootfactory)
- router = self._makeOne()
- self.assertEqual(router.notfound_app_factory, app)
-
- def test_call_iunauth_appfactory_override(self):
- from repoze.bfg.interfaces import IUnauthorizedAppFactory
- def app():
- """ """
- self.registry.registerUtility(app, IUnauthorizedAppFactory)
- rootfactory = make_rootfactory(None)
- context = DummyContext()
- self._registerTraverserFactory(context)
- response = DummyResponse()
- response.app_iter = ['Hello world']
- view = make_view(response)
- environ = self._makeEnviron()
- self._registerView(view, '', None, None)
- self._registerRootFactory(rootfactory)
- router = self._makeOne()
- self.assertEqual(router.unauth_app_factory, app)
-
class MakeAppTests(unittest.TestCase):
def setUp(self):
cleanUp()
import repoze.bfg.router
- self.old_registry_manager = repoze.bfg.router.registry_manager
+ self.old_tl_manager = repoze.bfg.router.manager
self.regmgr = DummyRegistryManager()
- repoze.bfg.router.registry_manager = self.regmgr
+ repoze.bfg.router.manager = self.regmgr
def tearDown(self):
cleanUp()
import repoze.bfg.router
- repoze.bfg.router.registry_manager = self.old_registry_manager
+ repoze.bfg.router.threadlocal_manager = self.old_tl_manager
-
def _callFUT(self, *arg, **kw):
from repoze.bfg.router import make_app
return make_app(*arg, **kw)
@@ -729,6 +797,73 @@ class MakeAppTests(unittest.TestCase):
self.assertRaises(ValueError, self._callFUT, None, fixtureapp,
options=options)
+ def test_authorization_policy_no_authentication_policy(self):
+ from repoze.bfg.interfaces import IAuthorizationPolicy
+ authzpolicy = DummyContext()
+ from repoze.bfg.tests import routesapp
+ app = self._callFUT(None, routesapp, authorization_policy=authzpolicy)
+ self.failIf(app.registry.queryUtility(IAuthorizationPolicy))
+
+ def test_authentication_policy_no_authorization_policy(self):
+ from repoze.bfg.interfaces import IAuthorizationPolicy
+ from repoze.bfg.interfaces import IAuthenticationPolicy
+ from repoze.bfg.authorization import ACLAuthorizationPolicy
+ authnpolicy = DummyContext()
+ from repoze.bfg.tests import routesapp
+ app = self._callFUT(None, routesapp, authentication_policy=authnpolicy)
+ self.assertEqual(app.registry.getUtility(IAuthenticationPolicy),
+ authnpolicy)
+ self.assertEqual(
+ app.registry.getUtility(IAuthorizationPolicy).__class__,
+ ACLAuthorizationPolicy)
+
+ def test_authentication_policy_and_authorization_policy(self):
+ from repoze.bfg.interfaces import IAuthorizationPolicy
+ from repoze.bfg.interfaces import IAuthenticationPolicy
+ authnpolicy = DummyContext()
+ authzpolicy = DummyContext()
+ from repoze.bfg.tests import routesapp
+ app = self._callFUT(None, routesapp, authentication_policy=authnpolicy,
+ authorization_policy = authzpolicy)
+ self.assertEqual(app.registry.getUtility(IAuthenticationPolicy),
+ authnpolicy)
+ self.assertEqual(app.registry.getUtility(IAuthorizationPolicy),
+ authzpolicy)
+
+ def test_secpol_BBB_registrations(self):
+ from repoze.bfg.interfaces import IAuthorizationPolicy
+ from repoze.bfg.interfaces import IAuthenticationPolicy
+ from repoze.bfg.interfaces import ISecurityPolicy
+ secpol = DummySecurityPolicy()
+ from zope.component import getGlobalSiteManager
+ gsm = getGlobalSiteManager()
+ gsm.registerUtility(secpol, ISecurityPolicy)
+ from repoze.bfg.tests import routesapp
+ logger = DummyLogger()
+ app = self._callFUT(None, routesapp, registry=gsm, debug_logger=logger)
+ self.failUnless(app.registry.queryUtility(IAuthenticationPolicy))
+ self.failUnless(app.registry.queryUtility(IAuthorizationPolicy))
+ self.assertEqual(len(logger.messages), 1)
+ self.failUnless('ISecurityPolicy' in logger.messages[0])
+
+class TestDefaultForbiddenView(unittest.TestCase):
+ def _callFUT(self, context, request):
+ from repoze.bfg.router import default_forbidden_view
+ return default_forbidden_view(context, request)
+
+ def test_nomessage(self):
+ request = DummyRequest({})
+ context = DummyContext()
+ response = self._callFUT(context, request)
+ self.failUnless('<code></code>' in response.body)
+
+ def test_withmessage(self):
+ request = DummyRequest({'repoze.bfg.message':'abc&123'})
+ context = DummyContext()
+ response = self._callFUT(context, request)
+ self.failUnless('<code>abc&amp;123</code>' in response.body)
+
+
class DummyRegistryManager:
def push(self, registry):
self.pushed = True
@@ -744,18 +879,6 @@ def make_view(response):
return response
return view
-def make_permission_factory(result):
- class DummyPermissionFactory:
- def __init__(self, context, request):
- self.context = context
- self.request = request
-
- def __call__(self, secpol):
- self.__class__.checked_with = secpol
- return result
-
- return DummyPermissionFactory
-
def make_rootfactory(root):
def rootpolicy(environ):
return root
@@ -776,3 +899,29 @@ class DummyResponse:
class DummySecurityPolicy:
pass
+class DummyRequest:
+ def __init__(self, environ):
+ self.environ = environ
+
+
+class DummyLogger:
+ def __init__(self):
+ self.messages = []
+ def info(self, msg):
+ self.messages.append(msg)
+ warn = info
+ debug = info
+
+class DummyThreadLocalManager:
+ def __init__(self):
+ self.pushed = []
+ self.popped = []
+
+ def push(self, val):
+ self.pushed.append(val)
+
+ def pop(self):
+ self.popped.append(True)
+
+class DummyAuthenticationPolicy:
+ pass