test_ssl_crt.py 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. #!/usr/bin/env python3
  2. # -*- coding: UTF-8 -*-
  3. import ssl
  4. import subprocess
  5. import warnings
  6. from unittest import mock
  7. from tests.test_main import TestWithAdminUser, setUpModule as init, testdir
  8. from webserver.handlers.admin import SSLHandlerLogic
  9. def setUpModule():
  10. init()
  11. class TestUploadSSL(TestWithAdminUser):
  12. @mock.patch("webserver.handlers.admin.AdminSSL.get_upload_file")
  13. @mock.patch("webserver.handlers.admin.SSLHandlerLogic.save_files")
  14. @mock.patch("webserver.handlers.admin.SSLHandlerLogic.nginx_check")
  15. @mock.patch("webserver.handlers.admin.SSLHandlerLogic.nginx_reload")
  16. def test_good_crt(self, m4, m3, m2, m1):
  17. warnings.simplefilter("ignore", ResourceWarning)
  18. with open(testdir + "/cases/ssl.crt", "rb") as crt, open(testdir + "/cases/ssl.key", "rb") as key:
  19. m1.return_value = (crt.read(), key.read())
  20. m2.return_value = True
  21. m3.return_value = True
  22. m4.return_value = True
  23. d = self.json("/api/admin/ssl", method="POST", body="k=1", request_timeout=30)
  24. self.assertEqual(d["err"], "ok", d["msg"])
  25. @mock.patch("webserver.handlers.admin.AdminSSL.get_upload_file")
  26. @mock.patch("webserver.handlers.admin.SSLHandlerLogic.save_files")
  27. @mock.patch("webserver.handlers.admin.SSLHandlerLogic.nginx_check")
  28. @mock.patch("webserver.handlers.admin.SSLHandlerLogic.nginx_reload")
  29. def test_exception(self, m4, m3, m2, m1):
  30. warnings.simplefilter("ignore", ResourceWarning)
  31. with open(testdir + "/cases/ssl.crt", "rb") as crt, open(testdir + "/cases/ssl.key", "rb") as key:
  32. m1.return_value = (crt.read(), key.read())
  33. m2.side_effect = RuntimeError("save error")
  34. m3.side_effect = subprocess.CalledProcessError(1, "nginx error")
  35. m4.side_effect = subprocess.CalledProcessError(1, "nginx error")
  36. d = self.json("/api/admin/ssl", method="POST", body="k=1", request_timeout=30)
  37. self.assertEqual(d["err"], "internal.ssl_save_error", d["msg"])
  38. m2.side_effect = None
  39. d = self.json("/api/admin/ssl", method="POST", body="k=1", request_timeout=30)
  40. self.assertEqual(d["err"], "internal.nginx_test_error", d["msg"])
  41. m3.side_effect = None
  42. d = self.json("/api/admin/ssl", method="POST", body="k=1", request_timeout=30)
  43. self.assertEqual(d["err"], "internal.nginx_reload_error", d["msg"])
  44. def test_ssl_check_files(self):
  45. h = SSLHandlerLogic()
  46. crt = testdir + "/cases/ssl.crt"
  47. key = testdir + "/cases/ssl.key"
  48. self.assertEqual(h.check_ssl_chain_files(crt, key), None)
  49. def test_ssl_check_bad_files(self):
  50. h = SSLHandlerLogic()
  51. crt = testdir + "/cases/new.epub"
  52. key = testdir + "/cases/old.epub"
  53. self.assertIsInstance(h.check_ssl_chain_files(crt, key), ssl.SSLError)