test_legacy.py 41 KB

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