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.py165
1 files changed, 160 insertions, 5 deletions
diff --git a/repoze/bfg/tests/test_router.py b/repoze/bfg/tests/test_router.py
index a1c2b0cfb..c61694fd1 100644
--- a/repoze/bfg/tests/test_router.py
+++ b/repoze/bfg/tests/test_router.py
@@ -9,6 +9,33 @@ class RouterTests(unittest.TestCase, PlacelessSetup):
def tearDown(self):
PlacelessSetup.tearDown(self)
+ def _registerLogger(self):
+ import zope.component
+ gsm = zope.component.getGlobalSiteManager()
+ from repoze.bfg.interfaces import ILogger
+ class Logger:
+ def __init__(self):
+ self.messages = []
+ def info(self, msg):
+ self.messages.append(msg)
+ debug = info
+ logger = Logger()
+ gsm.registerUtility(logger, ILogger, name='repoze.bfg.debug')
+ return logger
+
+ def _registerSettings(self, **kw):
+ import zope.component
+ gsm = zope.component.getGlobalSiteManager()
+ from repoze.bfg.interfaces import ISettings
+ class Settings:
+ def __init__(self, **kw):
+ self.__dict__.update(kw)
+
+ defaultkw = {'debug_authorization':False, 'debug_notfound':False}
+ defaultkw.update(kw)
+ settings = Settings(**defaultkw)
+ gsm.registerUtility(settings, ISettings)
+
def _registerTraverserFactory(self, app, name, *for_):
import zope.component
gsm = zope.component.getGlobalSiteManager()
@@ -56,12 +83,51 @@ class RouterTests(unittest.TestCase, PlacelessSetup):
environ.update(extras)
return environ
- def test_call_no_view_registered(self):
+ def test_call_no_view_registered_no_isettings(self):
+ rootpolicy = make_rootpolicy(None)
+ environ = self._makeEnviron()
+ context = DummyContext()
+ traversalfactory = make_traversal_factory(context, '', [])
+ self._registerTraverserFactory(traversalfactory, '', None)
+ logger = self._registerLogger()
+ router = self._makeOne(rootpolicy, None)
+ start_response = DummyStartResponse()
+ result = router(environ, start_response)
+ headers = start_response.headers
+ self.assertEqual(len(headers), 2)
+ status = start_response.status
+ self.assertEqual(status, '404 Not Found')
+ self.failUnless('http://localhost:8080' in result[0], result)
+ self.failIf('debug_notfound' in result[0])
+ self.assertEqual(len(logger.messages), 0)
+
+ def test_call_no_view_registered_debug_notfound_false(self):
+ rootpolicy = make_rootpolicy(None)
+ environ = self._makeEnviron()
+ context = DummyContext()
+ traversalfactory = make_traversal_factory(context, '', [])
+ self._registerTraverserFactory(traversalfactory, '', None)
+ logger = self._registerLogger()
+ self._registerSettings(debug_notfound=False)
+ router = self._makeOne(rootpolicy, None)
+ start_response = DummyStartResponse()
+ result = router(environ, start_response)
+ headers = start_response.headers
+ self.assertEqual(len(headers), 2)
+ status = start_response.status
+ self.assertEqual(status, '404 Not Found')
+ self.failUnless('http://localhost:8080' in result[0], result)
+ self.failIf('debug_notfound' in result[0])
+ self.assertEqual(len(logger.messages), 0)
+
+ def test_call_no_view_registered_debug_notfound_true(self):
rootpolicy = make_rootpolicy(None)
environ = self._makeEnviron()
context = DummyContext()
traversalfactory = make_traversal_factory(context, '', [])
self._registerTraverserFactory(traversalfactory, '', None)
+ self._registerSettings(debug_notfound=True)
+ logger = self._registerLogger()
router = self._makeOne(rootpolicy, None)
start_response = DummyStartResponse()
result = router(environ, start_response)
@@ -69,7 +135,19 @@ class RouterTests(unittest.TestCase, PlacelessSetup):
self.assertEqual(len(headers), 2)
status = start_response.status
self.assertEqual(status, '404 Not Found')
+ self.failUnless(
+ "debug_notfound of url http://localhost:8080; path_info: '', "
+ "context:" in result[0])
+ self.failUnless(
+ "view_name: '', subpath: []" in result[0])
self.failUnless('http://localhost:8080' in result[0], result)
+ self.assertEqual(len(logger.messages), 1)
+ message = logger.messages[0]
+ self.failUnless('of url http://localhost:8080' in message)
+ self.failUnless("path_info: ''" in message)
+ self.failUnless('DummyContext instance at' in message)
+ self.failUnless("view_name: ''" in message)
+ self.failUnless("subpath: []" in message)
def test_call_view_registered_nonspecific_default_path(self):
rootpolicy = make_rootpolicy(None)
@@ -207,7 +285,68 @@ class RouterTests(unittest.TestCase, PlacelessSetup):
self.assertEqual(start_response.status, '200 OK')
self.assertEqual(permissionfactory.checked_with, secpol)
- def test_call_view_registered_security_policy_permission_fails(self):
+ def test_call_view_permission_fails_nosettings(self):
+ rootpolicy = make_rootpolicy(None)
+ 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)
+ traversalfactory = make_traversal_factory(context, '', [''])
+ 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._registerTraverserFactory(traversalfactory, '', None)
+ self._registerView(view, '', IContext, IRequest)
+ self._registerSecurityPolicy(secpol)
+ self._registerPermission(permissionfactory, '', IContext, IRequest)
+ router = self._makeOne(rootpolicy, None)
+ 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)
+
+ def test_call_view_permission_fails_no_debug_auth(self):
+ rootpolicy = make_rootpolicy(None)
+ 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)
+ traversalfactory = make_traversal_factory(context, '', [''])
+ 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._registerTraverserFactory(traversalfactory, '', None)
+ self._registerView(view, '', IContext, IRequest)
+ self._registerSecurityPolicy(secpol)
+ self._registerPermission(permissionfactory, '', IContext, IRequest)
+ self._registerSettings(debug_authorization=False)
+ router = self._makeOne(rootpolicy, None)
+ 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)
+
+ def test_call_view_permission_fails_with_debug_auth(self):
rootpolicy = make_rootpolicy(None)
from zope.interface import Interface
from zope.interface import directlyProvides
@@ -220,21 +359,37 @@ class RouterTests(unittest.TestCase, PlacelessSetup):
response = DummyResponse()
view = make_view(response)
secpol = DummySecurityPolicy()
- from repoze.bfg.security import Denied
+ from repoze.bfg.security import ACLDenied
permissionfactory = make_permission_factory(
- Denied('ace', 'acl', 'permission', ['principals'], context)
+ ACLDenied('ace', 'acl', 'permission', ['principals'], context)
)
environ = self._makeEnviron()
self._registerTraverserFactory(traversalfactory, '', None)
self._registerView(view, '', IContext, IRequest)
self._registerSecurityPolicy(secpol)
self._registerPermission(permissionfactory, '', IContext, IRequest)
+ self._registerSettings(debug_authorization=True)
+ logger = self._registerLogger()
router = self._makeOne(rootpolicy, None)
start_response = DummyStartResponse()
result = router(environ, start_response)
self.assertEqual(start_response.status, '401 Unauthorized')
- self.failUnless('permission' in result[0])
+ message = result[0]
+ 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(len(logger.messages), 1)
+ logged = logger.messages[0]
+ self.failUnless(
+ "debug_authorization of url http://localhost:8080 (view name "
+ "'' against context" in logged)
+ self.failUnless(
+ "ACLDenied permission 'permission' via ACE 'ace' in ACL 'acl' on "
+ "context" in logged)
+ self.failUnless(
+ "for principals ['principals']" in logged)
def test_call_eventsends(self):
rootpolicy = make_rootpolicy(None)