Fixed #6094 -- Middleware exceptions are now caught by the core handler. Thanks, isagalaev

git-svn-id: http://code.djangoproject.com/svn/django/trunk@12165 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Adrian Holovaty 2010-01-10 17:35:01 +00:00
parent a7dc2c0653
commit ca6f64a43f
7 changed files with 71 additions and 16 deletions

View file

@ -0,0 +1,37 @@
import sys
from django.test import TestCase
from django.core.signals import got_request_exception
class RequestMiddleware(object):
def process_request(self, request):
raise Exception('Exception')
class MiddlewareExceptionTest(TestCase):
def __init__(self, *args, **kwargs):
super(MiddlewareExceptionTest, self).__init__(*args, **kwargs)
self.exceptions = []
got_request_exception.connect(self._on_request_exception)
def setUp(self):
self.client.handler.load_middleware()
def tearDown(self):
self.exceptions = []
def _on_request_exception(self, sender, request, **kwargs):
self.exceptions.append(sys.exc_info())
def test_process_request(self):
self.client.handler._request_middleware.insert(0, RequestMiddleware().process_request)
try:
response = self.client.get('/')
except:
# Test client indefinitely re-raises any exceptions being raised
# during request handling. Hence actual testing that exception was
# properly handled is done by relying on got_request_exception
# signal being sent.
pass
self.assertEquals(len(self.exceptions), 1)
exception, value, tb = self.exceptions[0]
self.assertEquals(value.args, ('Exception', ))