tests.py 39 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782
  1. import sys
  2. from django.conf import settings
  3. from django.core.signals import got_request_exception
  4. from django.http import HttpResponse
  5. from django.template.response import TemplateResponse
  6. from django.template import Template
  7. from django.test import TestCase
  8. class TestException(Exception):
  9. pass
  10. # A middleware base class that tracks which methods have been called
  11. class TestMiddleware(object):
  12. def __init__(self):
  13. self.process_request_called = False
  14. self.process_view_called = False
  15. self.process_response_called = False
  16. self.process_template_response_called = False
  17. self.process_exception_called = False
  18. def process_request(self, request):
  19. self.process_request_called = True
  20. def process_view(self, request, view_func, view_args, view_kwargs):
  21. self.process_view_called = True
  22. def process_template_response(self, request, response):
  23. self.process_template_response_called = True
  24. return response
  25. def process_response(self, request, response):
  26. self.process_response_called = True
  27. return response
  28. def process_exception(self, request, exception):
  29. self.process_exception_called = True
  30. # Middleware examples that do the right thing
  31. class RequestMiddleware(TestMiddleware):
  32. def process_request(self, request):
  33. super(RequestMiddleware, self).process_request(request)
  34. return HttpResponse('Request Middleware')
  35. class ViewMiddleware(TestMiddleware):
  36. def process_view(self, request, view_func, view_args, view_kwargs):
  37. super(ViewMiddleware, self).process_view(request, view_func, view_args, view_kwargs)
  38. return HttpResponse('View Middleware')
  39. class ResponseMiddleware(TestMiddleware):
  40. def process_response(self, request, response):
  41. super(ResponseMiddleware, self).process_response(request, response)
  42. return HttpResponse('Response Middleware')
  43. class TemplateResponseMiddleware(TestMiddleware):
  44. def process_template_response(self, request, response):
  45. super(TemplateResponseMiddleware, self).process_template_response(request, response)
  46. return TemplateResponse(request, Template('Template Response Middleware'))
  47. class ExceptionMiddleware(TestMiddleware):
  48. def process_exception(self, request, exception):
  49. super(ExceptionMiddleware, self).process_exception(request, exception)
  50. return HttpResponse('Exception Middleware')
  51. # Sample middlewares that raise exceptions
  52. class BadRequestMiddleware(TestMiddleware):
  53. def process_request(self, request):
  54. super(BadRequestMiddleware, self).process_request(request)
  55. raise TestException('Test Request Exception')
  56. class BadViewMiddleware(TestMiddleware):
  57. def process_view(self, request, view_func, view_args, view_kwargs):
  58. super(BadViewMiddleware, self).process_view(request, view_func, view_args, view_kwargs)
  59. raise TestException('Test View Exception')
  60. class BadTemplateResponseMiddleware(TestMiddleware):
  61. def process_template_response(self, request, response):
  62. super(BadTemplateResponseMiddleware, self).process_template_response(request, response)
  63. raise TestException('Test Template Response Exception')
  64. class BadResponseMiddleware(TestMiddleware):
  65. def process_response(self, request, response):
  66. super(BadResponseMiddleware, self).process_response(request, response)
  67. raise TestException('Test Response Exception')
  68. class BadExceptionMiddleware(TestMiddleware):
  69. def process_exception(self, request, exception):
  70. super(BadExceptionMiddleware, self).process_exception(request, exception)
  71. raise TestException('Test Exception Exception')
  72. class BaseMiddlewareExceptionTest(TestCase):
  73. def setUp(self):
  74. self.exceptions = []
  75. got_request_exception.connect(self._on_request_exception)
  76. self.client.handler.load_middleware()
  77. def tearDown(self):
  78. got_request_exception.disconnect(self._on_request_exception)
  79. self.exceptions = []
  80. def _on_request_exception(self, sender, request, **kwargs):
  81. self.exceptions.append(sys.exc_info())
  82. def _add_middleware(self, middleware):
  83. self.client.handler._request_middleware.insert(0, middleware.process_request)
  84. self.client.handler._view_middleware.insert(0, middleware.process_view)
  85. self.client.handler._template_response_middleware.append(middleware.process_template_response)
  86. self.client.handler._response_middleware.append(middleware.process_response)
  87. self.client.handler._exception_middleware.append(middleware.process_exception)
  88. def assert_exceptions_handled(self, url, errors, extra_error=None):
  89. try:
  90. response = self.client.get(url)
  91. except TestException, e:
  92. # Test client intentionally re-raises any exceptions being raised
  93. # during request handling. Hence actual testing that exception was
  94. # properly handled is done by relying on got_request_exception
  95. # signal being sent.
  96. pass
  97. except Exception, e:
  98. if type(extra_error) != type(e):
  99. self.fail("Unexpected exception: %s" % e)
  100. self.assertEquals(len(self.exceptions), len(errors))
  101. for i, error in enumerate(errors):
  102. exception, value, tb = self.exceptions[i]
  103. self.assertEquals(value.args, (error, ))
  104. def assert_middleware_usage(self, middleware, request, view, template_response, response, exception):
  105. self.assertEqual(middleware.process_request_called, request)
  106. self.assertEqual(middleware.process_view_called, view)
  107. self.assertEqual(middleware.process_template_response_called, template_response)
  108. self.assertEqual(middleware.process_response_called, response)
  109. self.assertEqual(middleware.process_exception_called, exception)
  110. class MiddlewareTests(BaseMiddlewareExceptionTest):
  111. def test_process_request_middleware(self):
  112. pre_middleware = TestMiddleware()
  113. middleware = RequestMiddleware()
  114. post_middleware = TestMiddleware()
  115. self._add_middleware(post_middleware)
  116. self._add_middleware(middleware)
  117. self._add_middleware(pre_middleware)
  118. self.assert_exceptions_handled('/middleware_exceptions/view/', [])
  119. # Check that the right middleware methods have been invoked
  120. self.assert_middleware_usage(pre_middleware, True, False, False, True, False)
  121. self.assert_middleware_usage(middleware, True, False, False, True, False)
  122. self.assert_middleware_usage(post_middleware, False, False, False, True, False)
  123. def test_process_view_middleware(self):
  124. pre_middleware = TestMiddleware()
  125. middleware = ViewMiddleware()
  126. post_middleware = TestMiddleware()
  127. self._add_middleware(post_middleware)
  128. self._add_middleware(middleware)
  129. self._add_middleware(pre_middleware)
  130. self.assert_exceptions_handled('/middleware_exceptions/view/', [])
  131. # Check that the right middleware methods have been invoked
  132. self.assert_middleware_usage(pre_middleware, True, True, False, True, False)
  133. self.assert_middleware_usage(middleware, True, True, False, True, False)
  134. self.assert_middleware_usage(post_middleware, True, False, False, True, False)
  135. def test_process_response_middleware(self):
  136. pre_middleware = TestMiddleware()
  137. middleware = ResponseMiddleware()
  138. post_middleware = TestMiddleware()
  139. self._add_middleware(post_middleware)
  140. self._add_middleware(middleware)
  141. self._add_middleware(pre_middleware)
  142. self.assert_exceptions_handled('/middleware_exceptions/view/', [])
  143. # Check that the right middleware methods have been invoked
  144. self.assert_middleware_usage(pre_middleware, True, True, False, True, False)
  145. self.assert_middleware_usage(middleware, True, True, False, True, False)
  146. self.assert_middleware_usage(post_middleware, True, True, False, True, False)
  147. def test_process_template_response_middleware(self):
  148. pre_middleware = TestMiddleware()
  149. middleware = TemplateResponseMiddleware()
  150. post_middleware = TestMiddleware()
  151. self._add_middleware(post_middleware)
  152. self._add_middleware(middleware)
  153. self._add_middleware(pre_middleware)
  154. self.assert_exceptions_handled('/middleware_exceptions/template_response/', [])
  155. # Check that the right middleware methods have been invoked
  156. self.assert_middleware_usage(pre_middleware, True, True, True, True, False)
  157. self.assert_middleware_usage(middleware, True, True, True, True, False)
  158. self.assert_middleware_usage(post_middleware, True, True, True, True, False)
  159. def test_process_exception_middleware(self):
  160. pre_middleware = TestMiddleware()
  161. middleware = ExceptionMiddleware()
  162. post_middleware = TestMiddleware()
  163. self._add_middleware(post_middleware)
  164. self._add_middleware(middleware)
  165. self._add_middleware(pre_middleware)
  166. self.assert_exceptions_handled('/middleware_exceptions/view/', [])
  167. # Check that the right middleware methods have been invoked
  168. self.assert_middleware_usage(pre_middleware, True, True, False, True, False)
  169. self.assert_middleware_usage(middleware, True, True, False, True, False)
  170. self.assert_middleware_usage(post_middleware, True, True, False, True, False)
  171. def test_process_request_middleware_not_found(self):
  172. pre_middleware = TestMiddleware()
  173. middleware = RequestMiddleware()
  174. post_middleware = TestMiddleware()
  175. self._add_middleware(post_middleware)
  176. self._add_middleware(middleware)
  177. self._add_middleware(pre_middleware)
  178. self.assert_exceptions_handled('/middleware_exceptions/not_found/', [])
  179. # Check that the right middleware methods have been invoked
  180. self.assert_middleware_usage(pre_middleware, True, False, False, True, False)
  181. self.assert_middleware_usage(middleware, True, False, False, True, False)
  182. self.assert_middleware_usage(post_middleware, False, False, False, True, False)
  183. def test_process_view_middleware_not_found(self):
  184. pre_middleware = TestMiddleware()
  185. middleware = ViewMiddleware()
  186. post_middleware = TestMiddleware()
  187. self._add_middleware(post_middleware)
  188. self._add_middleware(middleware)
  189. self._add_middleware(pre_middleware)
  190. self.assert_exceptions_handled('/middleware_exceptions/not_found/', [])
  191. # Check that the right middleware methods have been invoked
  192. self.assert_middleware_usage(pre_middleware, True, True, False, True, False)
  193. self.assert_middleware_usage(middleware, True, True, False, True, False)
  194. self.assert_middleware_usage(post_middleware, True, False, False, True, False)
  195. def test_process_template_response_middleware_not_found(self):
  196. pre_middleware = TestMiddleware()
  197. middleware = TemplateResponseMiddleware()
  198. post_middleware = TestMiddleware()
  199. self._add_middleware(post_middleware)
  200. self._add_middleware(middleware)
  201. self._add_middleware(pre_middleware)
  202. self.assert_exceptions_handled('/middleware_exceptions/not_found/', [])
  203. # Check that the right middleware methods have been invoked
  204. self.assert_middleware_usage(pre_middleware, True, True, False, True, True)
  205. self.assert_middleware_usage(middleware, True, True, False, True, True)
  206. self.assert_middleware_usage(post_middleware, True, True, False, True, True)
  207. def test_process_response_middleware_not_found(self):
  208. pre_middleware = TestMiddleware()
  209. middleware = ResponseMiddleware()
  210. post_middleware = TestMiddleware()
  211. self._add_middleware(post_middleware)
  212. self._add_middleware(middleware)
  213. self._add_middleware(pre_middleware)
  214. self.assert_exceptions_handled('/middleware_exceptions/not_found/', [])
  215. # Check that the right middleware methods have been invoked
  216. self.assert_middleware_usage(pre_middleware, True, True, False, True, True)
  217. self.assert_middleware_usage(middleware, True, True, False, True, True)
  218. self.assert_middleware_usage(post_middleware, True, True, False, True, True)
  219. def test_process_exception_middleware_not_found(self):
  220. pre_middleware = TestMiddleware()
  221. middleware = ExceptionMiddleware()
  222. post_middleware = TestMiddleware()
  223. self._add_middleware(post_middleware)
  224. self._add_middleware(middleware)
  225. self._add_middleware(pre_middleware)
  226. self.assert_exceptions_handled('/middleware_exceptions/not_found/', [])
  227. # Check that the right middleware methods have been invoked
  228. self.assert_middleware_usage(pre_middleware, True, True, False, True, False)
  229. self.assert_middleware_usage(middleware, True, True, False, True, True)
  230. self.assert_middleware_usage(post_middleware, True, True, False, True, True)
  231. def test_process_request_middleware_exception(self):
  232. pre_middleware = TestMiddleware()
  233. middleware = RequestMiddleware()
  234. post_middleware = TestMiddleware()
  235. self._add_middleware(post_middleware)
  236. self._add_middleware(middleware)
  237. self._add_middleware(pre_middleware)
  238. self.assert_exceptions_handled('/middleware_exceptions/error/', [])
  239. # Check that the right middleware methods have been invoked
  240. self.assert_middleware_usage(pre_middleware, True, False, False, True, False)
  241. self.assert_middleware_usage(middleware, True, False, False, True, False)
  242. self.assert_middleware_usage(post_middleware, False, False, False, True, False)
  243. def test_process_view_middleware_exception(self):
  244. pre_middleware = TestMiddleware()
  245. middleware = ViewMiddleware()
  246. post_middleware = TestMiddleware()
  247. self._add_middleware(post_middleware)
  248. self._add_middleware(middleware)
  249. self._add_middleware(pre_middleware)
  250. self.assert_exceptions_handled('/middleware_exceptions/error/', [])
  251. # Check that the right middleware methods have been invoked
  252. self.assert_middleware_usage(pre_middleware, True, True, False, True, False)
  253. self.assert_middleware_usage(middleware, True, True, False, True, False)
  254. self.assert_middleware_usage(post_middleware, True, False, False, True, False)
  255. def test_process_response_middleware_exception(self):
  256. pre_middleware = TestMiddleware()
  257. middleware = ResponseMiddleware()
  258. post_middleware = TestMiddleware()
  259. self._add_middleware(post_middleware)
  260. self._add_middleware(middleware)
  261. self._add_middleware(pre_middleware)
  262. self.assert_exceptions_handled('/middleware_exceptions/error/', ['Error in view'], Exception())
  263. # Check that the right middleware methods have been invoked
  264. self.assert_middleware_usage(pre_middleware, True, True, False, True, True)
  265. self.assert_middleware_usage(middleware, True, True, False, True, True)
  266. self.assert_middleware_usage(post_middleware, True, True, False, True, True)
  267. def test_process_exception_middleware_exception(self):
  268. pre_middleware = TestMiddleware()
  269. middleware = ExceptionMiddleware()
  270. post_middleware = TestMiddleware()
  271. self._add_middleware(post_middleware)
  272. self._add_middleware(middleware)
  273. self._add_middleware(pre_middleware)
  274. self.assert_exceptions_handled('/middleware_exceptions/error/', [])
  275. # Check that the right middleware methods have been invoked
  276. self.assert_middleware_usage(pre_middleware, True, True, False, True, False)
  277. self.assert_middleware_usage(middleware, True, True, False, True, True)
  278. self.assert_middleware_usage(post_middleware, True, True, False, True, True)
  279. def test_process_request_middleware_null_view(self):
  280. pre_middleware = TestMiddleware()
  281. middleware = RequestMiddleware()
  282. post_middleware = TestMiddleware()
  283. self._add_middleware(post_middleware)
  284. self._add_middleware(middleware)
  285. self._add_middleware(pre_middleware)
  286. self.assert_exceptions_handled('/middleware_exceptions/null_view/', [])
  287. # Check that the right middleware methods have been invoked
  288. self.assert_middleware_usage(pre_middleware, True, False, False, True, False)
  289. self.assert_middleware_usage(middleware, True, False, False, True, False)
  290. self.assert_middleware_usage(post_middleware, False, False, False, True, False)
  291. def test_process_view_middleware_null_view(self):
  292. pre_middleware = TestMiddleware()
  293. middleware = ViewMiddleware()
  294. post_middleware = TestMiddleware()
  295. self._add_middleware(post_middleware)
  296. self._add_middleware(middleware)
  297. self._add_middleware(pre_middleware)
  298. self.assert_exceptions_handled('/middleware_exceptions/null_view/', [])
  299. # Check that the right middleware methods have been invoked
  300. self.assert_middleware_usage(pre_middleware, True, True, False, True, False)
  301. self.assert_middleware_usage(middleware, True, True, False, True, False)
  302. self.assert_middleware_usage(post_middleware, True, False, False, True, False)
  303. def test_process_response_middleware_null_view(self):
  304. pre_middleware = TestMiddleware()
  305. middleware = ResponseMiddleware()
  306. post_middleware = TestMiddleware()
  307. self._add_middleware(post_middleware)
  308. self._add_middleware(middleware)
  309. self._add_middleware(pre_middleware)
  310. self.assert_exceptions_handled('/middleware_exceptions/null_view/', [
  311. "The view regressiontests.middleware_exceptions.views.null_view didn't return an HttpResponse object.",
  312. ],
  313. ValueError())
  314. # Check that the right middleware methods have been invoked
  315. self.assert_middleware_usage(pre_middleware, True, True, False, True, False)
  316. self.assert_middleware_usage(middleware, True, True, False, True, False)
  317. self.assert_middleware_usage(post_middleware, True, True, False, True, False)
  318. def test_process_exception_middleware_null_view(self):
  319. pre_middleware = TestMiddleware()
  320. middleware = ExceptionMiddleware()
  321. post_middleware = TestMiddleware()
  322. self._add_middleware(post_middleware)
  323. self._add_middleware(middleware)
  324. self._add_middleware(pre_middleware)
  325. self.assert_exceptions_handled('/middleware_exceptions/null_view/', [
  326. "The view regressiontests.middleware_exceptions.views.null_view didn't return an HttpResponse object."
  327. ],
  328. ValueError())
  329. # Check that the right middleware methods have been invoked
  330. self.assert_middleware_usage(pre_middleware, True, True, False, True, False)
  331. self.assert_middleware_usage(middleware, True, True, False, True, False)
  332. self.assert_middleware_usage(post_middleware, True, True, False, True, False)
  333. def test_process_request_middleware_permission_denied(self):
  334. pre_middleware = TestMiddleware()
  335. middleware = RequestMiddleware()
  336. post_middleware = TestMiddleware()
  337. self._add_middleware(post_middleware)
  338. self._add_middleware(middleware)
  339. self._add_middleware(pre_middleware)
  340. self.assert_exceptions_handled('/middleware_exceptions/permission_denied/', [])
  341. # Check that the right middleware methods have been invoked
  342. self.assert_middleware_usage(pre_middleware, True, False, False, True, False)
  343. self.assert_middleware_usage(middleware, True, False, False, True, False)
  344. self.assert_middleware_usage(post_middleware, False, False, False, True, False)
  345. def test_process_view_middleware_permission_denied(self):
  346. pre_middleware = TestMiddleware()
  347. middleware = ViewMiddleware()
  348. post_middleware = TestMiddleware()
  349. self._add_middleware(post_middleware)
  350. self._add_middleware(middleware)
  351. self._add_middleware(pre_middleware)
  352. self.assert_exceptions_handled('/middleware_exceptions/permission_denied/', [])
  353. # Check that the right middleware methods have been invoked
  354. self.assert_middleware_usage(pre_middleware, True, True, False, True, False)
  355. self.assert_middleware_usage(middleware, True, True, False, True, False)
  356. self.assert_middleware_usage(post_middleware, True, False, False, True, False)
  357. def test_process_response_middleware_permission_denied(self):
  358. pre_middleware = TestMiddleware()
  359. middleware = ResponseMiddleware()
  360. post_middleware = TestMiddleware()
  361. self._add_middleware(post_middleware)
  362. self._add_middleware(middleware)
  363. self._add_middleware(pre_middleware)
  364. self.assert_exceptions_handled('/middleware_exceptions/permission_denied/', [])
  365. # Check that the right middleware methods have been invoked
  366. self.assert_middleware_usage(pre_middleware, True, True, False, True, True)
  367. self.assert_middleware_usage(middleware, True, True, False, True, True)
  368. self.assert_middleware_usage(post_middleware, True, True, False, True, True)
  369. def test_process_exception_middleware_permission_denied(self):
  370. pre_middleware = TestMiddleware()
  371. middleware = ExceptionMiddleware()
  372. post_middleware = TestMiddleware()
  373. self._add_middleware(post_middleware)
  374. self._add_middleware(middleware)
  375. self._add_middleware(pre_middleware)
  376. self.assert_exceptions_handled('/middleware_exceptions/permission_denied/', [])
  377. # Check that the right middleware methods have been invoked
  378. self.assert_middleware_usage(pre_middleware, True, True, False, True, False)
  379. self.assert_middleware_usage(middleware, True, True, False, True, True)
  380. self.assert_middleware_usage(post_middleware, True, True, False, True, True)
  381. def test_process_template_response_error(self):
  382. middleware = TestMiddleware()
  383. self._add_middleware(middleware)
  384. self.assert_exceptions_handled('/middleware_exceptions/template_response_error/', [])
  385. # Check that the right middleware methods have been invoked
  386. self.assert_middleware_usage(middleware, True, True, True, True, False)
  387. class BadMiddlewareTests(BaseMiddlewareExceptionTest):
  388. def test_process_request_bad_middleware(self):
  389. pre_middleware = TestMiddleware()
  390. bad_middleware = BadRequestMiddleware()
  391. post_middleware = TestMiddleware()
  392. self._add_middleware(post_middleware)
  393. self._add_middleware(bad_middleware)
  394. self._add_middleware(pre_middleware)
  395. self.assert_exceptions_handled('/middleware_exceptions/view/', ['Test Request Exception'])
  396. # Check that the right middleware methods have been invoked
  397. self.assert_middleware_usage(pre_middleware, True, False, False, True, False)
  398. self.assert_middleware_usage(bad_middleware, True, False, False, True, False)
  399. self.assert_middleware_usage(post_middleware, False, False, False, True, False)
  400. def test_process_view_bad_middleware(self):
  401. pre_middleware = TestMiddleware()
  402. bad_middleware = BadViewMiddleware()
  403. post_middleware = TestMiddleware()
  404. self._add_middleware(post_middleware)
  405. self._add_middleware(bad_middleware)
  406. self._add_middleware(pre_middleware)
  407. self.assert_exceptions_handled('/middleware_exceptions/view/', ['Test View Exception'])
  408. # Check that the right middleware methods have been invoked
  409. self.assert_middleware_usage(pre_middleware, True, True, False, True, False)
  410. self.assert_middleware_usage(bad_middleware, True, True, False, True, False)
  411. self.assert_middleware_usage(post_middleware, True, False, False, True, False)
  412. def test_process_template_response_bad_middleware(self):
  413. pre_middleware = TestMiddleware()
  414. bad_middleware = BadTemplateResponseMiddleware()
  415. post_middleware = TestMiddleware()
  416. self._add_middleware(post_middleware)
  417. self._add_middleware(bad_middleware)
  418. self._add_middleware(pre_middleware)
  419. self.assert_exceptions_handled('/middleware_exceptions/template_response/', ['Test Template Response Exception'])
  420. # Check that the right middleware methods have been invoked
  421. self.assert_middleware_usage(pre_middleware, True, True, False, False, False)
  422. self.assert_middleware_usage(bad_middleware, True, True, True, False, False)
  423. self.assert_middleware_usage(post_middleware, True, True, True, False, False)
  424. def test_process_response_bad_middleware(self):
  425. pre_middleware = TestMiddleware()
  426. bad_middleware = BadResponseMiddleware()
  427. post_middleware = TestMiddleware()
  428. self._add_middleware(post_middleware)
  429. self._add_middleware(bad_middleware)
  430. self._add_middleware(pre_middleware)
  431. self.assert_exceptions_handled('/middleware_exceptions/view/', ['Test Response Exception'])
  432. # Check that the right middleware methods have been invoked
  433. self.assert_middleware_usage(pre_middleware, True, True, False, False, False)
  434. self.assert_middleware_usage(bad_middleware, True, True, False, True, False)
  435. self.assert_middleware_usage(post_middleware, True, True, False, True, False)
  436. def test_process_exception_bad_middleware(self):
  437. pre_middleware = TestMiddleware()
  438. bad_middleware = BadExceptionMiddleware()
  439. post_middleware = TestMiddleware()
  440. self._add_middleware(post_middleware)
  441. self._add_middleware(bad_middleware)
  442. self._add_middleware(pre_middleware)
  443. self.assert_exceptions_handled('/middleware_exceptions/view/', [])
  444. # Check that the right middleware methods have been invoked
  445. self.assert_middleware_usage(pre_middleware, True, True, False, True, False)
  446. self.assert_middleware_usage(bad_middleware, True, True, False, True, False)
  447. self.assert_middleware_usage(post_middleware, True, True, False, True, False)
  448. def test_process_request_bad_middleware_not_found(self):
  449. pre_middleware = TestMiddleware()
  450. bad_middleware = BadRequestMiddleware()
  451. post_middleware = TestMiddleware()
  452. self._add_middleware(post_middleware)
  453. self._add_middleware(bad_middleware)
  454. self._add_middleware(pre_middleware)
  455. self.assert_exceptions_handled('/middleware_exceptions/not_found/', ['Test Request Exception'])
  456. # Check that the right middleware methods have been invoked
  457. self.assert_middleware_usage(pre_middleware, True, False, False, True, False)
  458. self.assert_middleware_usage(bad_middleware, True, False, False, True, False)
  459. self.assert_middleware_usage(post_middleware, False, False, False, True, False)
  460. def test_process_view_bad_middleware_not_found(self):
  461. pre_middleware = TestMiddleware()
  462. bad_middleware = BadViewMiddleware()
  463. post_middleware = TestMiddleware()
  464. self._add_middleware(post_middleware)
  465. self._add_middleware(bad_middleware)
  466. self._add_middleware(pre_middleware)
  467. self.assert_exceptions_handled('/middleware_exceptions/not_found/', ['Test View Exception'])
  468. # Check that the right middleware methods have been invoked
  469. self.assert_middleware_usage(pre_middleware, True, True, False, True, False)
  470. self.assert_middleware_usage(bad_middleware, True, True, False, True, False)
  471. self.assert_middleware_usage(post_middleware, True, False, False, True, False)
  472. def test_process_response_bad_middleware_not_found(self):
  473. pre_middleware = TestMiddleware()
  474. bad_middleware = BadResponseMiddleware()
  475. post_middleware = TestMiddleware()
  476. self._add_middleware(post_middleware)
  477. self._add_middleware(bad_middleware)
  478. self._add_middleware(pre_middleware)
  479. self.assert_exceptions_handled('/middleware_exceptions/not_found/', ['Test Response Exception'])
  480. # Check that the right middleware methods have been invoked
  481. self.assert_middleware_usage(pre_middleware, True, True, False, False, True)
  482. self.assert_middleware_usage(bad_middleware, True, True, False, True, True)
  483. self.assert_middleware_usage(post_middleware, True, True, False, True, True)
  484. def test_process_exception_bad_middleware_not_found(self):
  485. pre_middleware = TestMiddleware()
  486. bad_middleware = BadExceptionMiddleware()
  487. post_middleware = TestMiddleware()
  488. self._add_middleware(post_middleware)
  489. self._add_middleware(bad_middleware)
  490. self._add_middleware(pre_middleware)
  491. self.assert_exceptions_handled('/middleware_exceptions/not_found/', ['Test Exception Exception'])
  492. # Check that the right middleware methods have been invoked
  493. self.assert_middleware_usage(pre_middleware, True, True, False, True, False)
  494. self.assert_middleware_usage(bad_middleware, True, True, False, True, True)
  495. self.assert_middleware_usage(post_middleware, True, True, False, True, True)
  496. def test_process_request_bad_middleware_exception(self):
  497. pre_middleware = TestMiddleware()
  498. bad_middleware = BadRequestMiddleware()
  499. post_middleware = TestMiddleware()
  500. self._add_middleware(post_middleware)
  501. self._add_middleware(bad_middleware)
  502. self._add_middleware(pre_middleware)
  503. self.assert_exceptions_handled('/middleware_exceptions/error/', ['Test Request Exception'])
  504. # Check that the right middleware methods have been invoked
  505. self.assert_middleware_usage(pre_middleware, True, False, False, True, False)
  506. self.assert_middleware_usage(bad_middleware, True, False, False, True, False)
  507. self.assert_middleware_usage(post_middleware, False, False, False, True, False)
  508. def test_process_view_bad_middleware_exception(self):
  509. pre_middleware = TestMiddleware()
  510. bad_middleware = BadViewMiddleware()
  511. post_middleware = TestMiddleware()
  512. self._add_middleware(post_middleware)
  513. self._add_middleware(bad_middleware)
  514. self._add_middleware(pre_middleware)
  515. self.assert_exceptions_handled('/middleware_exceptions/error/', ['Test View Exception'])
  516. # Check that the right middleware methods have been invoked
  517. self.assert_middleware_usage(pre_middleware, True, True, False, True, False)
  518. self.assert_middleware_usage(bad_middleware, True, True, False, True, False)
  519. self.assert_middleware_usage(post_middleware, True, False, False, True, False)
  520. def test_process_response_bad_middleware_exception(self):
  521. pre_middleware = TestMiddleware()
  522. bad_middleware = BadResponseMiddleware()
  523. post_middleware = TestMiddleware()
  524. self._add_middleware(post_middleware)
  525. self._add_middleware(bad_middleware)
  526. self._add_middleware(pre_middleware)
  527. self.assert_exceptions_handled('/middleware_exceptions/error/', ['Error in view', 'Test Response Exception'])
  528. # Check that the right middleware methods have been invoked
  529. self.assert_middleware_usage(pre_middleware, True, True, False, False, True)
  530. self.assert_middleware_usage(bad_middleware, True, True, False, True, True)
  531. self.assert_middleware_usage(post_middleware, True, True, False, True, True)
  532. def test_process_exception_bad_middleware_exception(self):
  533. pre_middleware = TestMiddleware()
  534. bad_middleware = BadExceptionMiddleware()
  535. post_middleware = TestMiddleware()
  536. self._add_middleware(post_middleware)
  537. self._add_middleware(bad_middleware)
  538. self._add_middleware(pre_middleware)
  539. self.assert_exceptions_handled('/middleware_exceptions/error/', ['Test Exception Exception'])
  540. # Check that the right middleware methods have been invoked
  541. self.assert_middleware_usage(pre_middleware, True, True, False, True, False)
  542. self.assert_middleware_usage(bad_middleware, True, True, False, True, True)
  543. self.assert_middleware_usage(post_middleware, True, True, False, True, True)
  544. def test_process_request_bad_middleware_null_view(self):
  545. pre_middleware = TestMiddleware()
  546. bad_middleware = BadRequestMiddleware()
  547. post_middleware = TestMiddleware()
  548. self._add_middleware(post_middleware)
  549. self._add_middleware(bad_middleware)
  550. self._add_middleware(pre_middleware)
  551. self.assert_exceptions_handled('/middleware_exceptions/null_view/', ['Test Request Exception'])
  552. # Check that the right middleware methods have been invoked
  553. self.assert_middleware_usage(pre_middleware, True, False, False, True, False)
  554. self.assert_middleware_usage(bad_middleware, True, False, False, True, False)
  555. self.assert_middleware_usage(post_middleware, False, False, False, True, False)
  556. def test_process_view_bad_middleware_null_view(self):
  557. pre_middleware = TestMiddleware()
  558. bad_middleware = BadViewMiddleware()
  559. post_middleware = TestMiddleware()
  560. self._add_middleware(post_middleware)
  561. self._add_middleware(bad_middleware)
  562. self._add_middleware(pre_middleware)
  563. self.assert_exceptions_handled('/middleware_exceptions/null_view/', ['Test View Exception'])
  564. # Check that the right middleware methods have been invoked
  565. self.assert_middleware_usage(pre_middleware, True, True, False, True, False)
  566. self.assert_middleware_usage(bad_middleware, True, True, False, True, False)
  567. self.assert_middleware_usage(post_middleware, True, False, False, True, False)
  568. def test_process_response_bad_middleware_null_view(self):
  569. pre_middleware = TestMiddleware()
  570. bad_middleware = BadResponseMiddleware()
  571. post_middleware = TestMiddleware()
  572. self._add_middleware(post_middleware)
  573. self._add_middleware(bad_middleware)
  574. self._add_middleware(pre_middleware)
  575. self.assert_exceptions_handled('/middleware_exceptions/null_view/', [
  576. "The view regressiontests.middleware_exceptions.views.null_view didn't return an HttpResponse object.",
  577. 'Test Response Exception'
  578. ])
  579. # Check that the right middleware methods have been invoked
  580. self.assert_middleware_usage(pre_middleware, True, True, False, False, False)
  581. self.assert_middleware_usage(bad_middleware, True, True, False, True, False)
  582. self.assert_middleware_usage(post_middleware, True, True, False, True, False)
  583. def test_process_exception_bad_middleware_null_view(self):
  584. pre_middleware = TestMiddleware()
  585. bad_middleware = BadExceptionMiddleware()
  586. post_middleware = TestMiddleware()
  587. self._add_middleware(post_middleware)
  588. self._add_middleware(bad_middleware)
  589. self._add_middleware(pre_middleware)
  590. self.assert_exceptions_handled('/middleware_exceptions/null_view/', [
  591. "The view regressiontests.middleware_exceptions.views.null_view didn't return an HttpResponse object."
  592. ],
  593. ValueError())
  594. # Check that the right middleware methods have been invoked
  595. self.assert_middleware_usage(pre_middleware, True, True, False, True, False)
  596. self.assert_middleware_usage(bad_middleware, True, True, False, True, False)
  597. self.assert_middleware_usage(post_middleware, True, True, False, True, False)
  598. def test_process_request_bad_middleware_permission_denied(self):
  599. pre_middleware = TestMiddleware()
  600. bad_middleware = BadRequestMiddleware()
  601. post_middleware = TestMiddleware()
  602. self._add_middleware(post_middleware)
  603. self._add_middleware(bad_middleware)
  604. self._add_middleware(pre_middleware)
  605. self.assert_exceptions_handled('/middleware_exceptions/permission_denied/', ['Test Request Exception'])
  606. # Check that the right middleware methods have been invoked
  607. self.assert_middleware_usage(pre_middleware, True, False, False, True, False)
  608. self.assert_middleware_usage(bad_middleware, True, False, False, True, False)
  609. self.assert_middleware_usage(post_middleware, False, False, False, True, False)
  610. def test_process_view_bad_middleware_permission_denied(self):
  611. pre_middleware = TestMiddleware()
  612. bad_middleware = BadViewMiddleware()
  613. post_middleware = TestMiddleware()
  614. self._add_middleware(post_middleware)
  615. self._add_middleware(bad_middleware)
  616. self._add_middleware(pre_middleware)
  617. self.assert_exceptions_handled('/middleware_exceptions/permission_denied/', ['Test View Exception'])
  618. # Check that the right middleware methods have been invoked
  619. self.assert_middleware_usage(pre_middleware, True, True, False, True, False)
  620. self.assert_middleware_usage(bad_middleware, True, True, False, True, False)
  621. self.assert_middleware_usage(post_middleware, True, False, False, True, False)
  622. def test_process_response_bad_middleware_permission_denied(self):
  623. pre_middleware = TestMiddleware()
  624. bad_middleware = BadResponseMiddleware()
  625. post_middleware = TestMiddleware()
  626. self._add_middleware(post_middleware)
  627. self._add_middleware(bad_middleware)
  628. self._add_middleware(pre_middleware)
  629. self.assert_exceptions_handled('/middleware_exceptions/permission_denied/', ['Test Response Exception'])
  630. # Check that the right middleware methods have been invoked
  631. self.assert_middleware_usage(pre_middleware, True, True, False, False, True)
  632. self.assert_middleware_usage(bad_middleware, True, True, False, True, True)
  633. self.assert_middleware_usage(post_middleware, True, True, False, True, True)
  634. def test_process_exception_bad_middleware_permission_denied(self):
  635. pre_middleware = TestMiddleware()
  636. bad_middleware = BadExceptionMiddleware()
  637. post_middleware = TestMiddleware()
  638. self._add_middleware(post_middleware)
  639. self._add_middleware(bad_middleware)
  640. self._add_middleware(pre_middleware)
  641. self.assert_exceptions_handled('/middleware_exceptions/permission_denied/', ['Test Exception Exception'])
  642. # Check that the right middleware methods have been invoked
  643. self.assert_middleware_usage(pre_middleware, True, True, False, True, False)
  644. self.assert_middleware_usage(bad_middleware, True, True, False, True, True)
  645. self.assert_middleware_usage(post_middleware, True, True, False, True, True)
  646. _missing = object()
  647. class RootUrlconfTests(TestCase):
  648. def test_missing_root_urlconf(self):
  649. try:
  650. original_ROOT_URLCONF = settings.ROOT_URLCONF
  651. del settings.ROOT_URLCONF
  652. except AttributeError:
  653. original_ROOT_URLCONF = _missing
  654. self.assertRaises(AttributeError,
  655. self.client.get, "/middleware_exceptions/view/"
  656. )
  657. if original_ROOT_URLCONF is not _missing:
  658. settings.ROOT_URLCONF = original_ROOT_URLCONF