tests.py 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. from datetime import timedelta
  2. from django.core import signing
  3. from django.http import HttpRequest, HttpResponse
  4. from django.test import SimpleTestCase, override_settings
  5. from django.test.utils import freeze_time
  6. class SignedCookieTest(SimpleTestCase):
  7. def test_can_set_and_read_signed_cookies(self):
  8. response = HttpResponse()
  9. response.set_signed_cookie("c", "hello")
  10. self.assertIn("c", response.cookies)
  11. self.assertTrue(response.cookies["c"].value.startswith("hello:"))
  12. request = HttpRequest()
  13. request.COOKIES["c"] = response.cookies["c"].value
  14. value = request.get_signed_cookie("c")
  15. self.assertEqual(value, "hello")
  16. def test_can_use_salt(self):
  17. response = HttpResponse()
  18. response.set_signed_cookie("a", "hello", salt="one")
  19. request = HttpRequest()
  20. request.COOKIES["a"] = response.cookies["a"].value
  21. value = request.get_signed_cookie("a", salt="one")
  22. self.assertEqual(value, "hello")
  23. with self.assertRaises(signing.BadSignature):
  24. request.get_signed_cookie("a", salt="two")
  25. def test_detects_tampering(self):
  26. response = HttpResponse()
  27. response.set_signed_cookie("c", "hello")
  28. request = HttpRequest()
  29. request.COOKIES["c"] = response.cookies["c"].value[:-2] + "$$"
  30. with self.assertRaises(signing.BadSignature):
  31. request.get_signed_cookie("c")
  32. def test_default_argument_suppresses_exceptions(self):
  33. response = HttpResponse()
  34. response.set_signed_cookie("c", "hello")
  35. request = HttpRequest()
  36. request.COOKIES["c"] = response.cookies["c"].value[:-2] + "$$"
  37. self.assertIsNone(request.get_signed_cookie("c", default=None))
  38. def test_max_age_argument(self):
  39. value = "hello"
  40. with freeze_time(123456789):
  41. response = HttpResponse()
  42. response.set_signed_cookie("c", value)
  43. request = HttpRequest()
  44. request.COOKIES["c"] = response.cookies["c"].value
  45. self.assertEqual(request.get_signed_cookie("c"), value)
  46. with freeze_time(123456800):
  47. self.assertEqual(request.get_signed_cookie("c", max_age=12), value)
  48. self.assertEqual(request.get_signed_cookie("c", max_age=11), value)
  49. self.assertEqual(
  50. request.get_signed_cookie("c", max_age=timedelta(seconds=11)), value
  51. )
  52. with self.assertRaises(signing.SignatureExpired):
  53. request.get_signed_cookie("c", max_age=10)
  54. with self.assertRaises(signing.SignatureExpired):
  55. request.get_signed_cookie("c", max_age=timedelta(seconds=10))
  56. def test_set_signed_cookie_max_age_argument(self):
  57. response = HttpResponse()
  58. response.set_signed_cookie("c", "value", max_age=100)
  59. self.assertEqual(response.cookies["c"]["max-age"], 100)
  60. response.set_signed_cookie("d", "value", max_age=timedelta(hours=2))
  61. self.assertEqual(response.cookies["d"]["max-age"], 7200)
  62. @override_settings(SECRET_KEY=b"\xe7")
  63. def test_signed_cookies_with_binary_key(self):
  64. response = HttpResponse()
  65. response.set_signed_cookie("c", "hello")
  66. request = HttpRequest()
  67. request.COOKIES["c"] = response.cookies["c"].value
  68. self.assertEqual(request.get_signed_cookie("c"), "hello")