/tests/web/test_servers.py

https://bitbucket.org/prologic/circuits/ · Python · 150 lines · 100 code · 49 blank · 1 comment · 13 complexity · 58f76befc57e4c96d809ef3779d8072f MD5 · raw file

  1. #!/usr/bin/env python
  2. import pytest
  3. from os import path
  4. from socket import gaierror
  5. from circuits.web import Controller
  6. from circuits import handler, Component
  7. from circuits.web import BaseServer, Server
  8. from .helpers import urlopen, URLError
  9. CERTFILE = path.join(path.dirname(__file__), "cert.pem")
  10. class BaseRoot(Component):
  11. channel = "web"
  12. def request(self, request, response):
  13. return "Hello World!"
  14. class Root(Controller):
  15. def index(self):
  16. return "Hello World!"
  17. class MakeQuiet(Component):
  18. @handler("ready", channel="*", priority=1.0)
  19. def _on_ready(self, event, *args):
  20. event.stop()
  21. def test_baseserver(manager, watcher):
  22. server = BaseServer(0).register(manager)
  23. MakeQuiet().register(server)
  24. watcher.wait("ready")
  25. BaseRoot().register(server)
  26. watcher.wait("registered")
  27. try:
  28. f = urlopen(server.http.base)
  29. except URLError as e:
  30. if type(e[0]) is gaierror:
  31. f = urlopen("http://127.0.0.1:9000")
  32. else:
  33. raise
  34. s = f.read()
  35. assert s == b"Hello World!"
  36. server.unregister()
  37. watcher.wait("unregistered")
  38. def test_server(manager, watcher):
  39. server = Server(0).register(manager)
  40. MakeQuiet().register(server)
  41. watcher.wait("ready")
  42. Root().register(server)
  43. try:
  44. f = urlopen(server.http.base)
  45. except URLError as e:
  46. if type(e[0]) is gaierror:
  47. f = urlopen("http://127.0.0.1:9000")
  48. else:
  49. raise
  50. s = f.read()
  51. assert s == b"Hello World!"
  52. server.unregister()
  53. watcher.wait("unregistered")
  54. def test_secure_server(manager, watcher):
  55. pytest.importorskip("ssl")
  56. server = Server(0, secure=True, certfile=CERTFILE).register(manager)
  57. MakeQuiet().register(server)
  58. watcher.wait("ready")
  59. Root().register(server)
  60. try:
  61. f = urlopen(server.http.base)
  62. except URLError as e:
  63. if type(e[0]) is gaierror:
  64. f = urlopen("http://127.0.0.1:9000")
  65. else:
  66. raise
  67. s = f.read()
  68. assert s == b"Hello World!"
  69. server.unregister()
  70. watcher.wait("unregistered")
  71. def test_unixserver(manager, watcher, tmpdir):
  72. if pytest.PLATFORM == "win32":
  73. pytest.skip("Unsupported Platform")
  74. sockpath = tmpdir.ensure("test.sock")
  75. socket = str(sockpath)
  76. server = Server(socket).register(manager)
  77. MakeQuiet().register(server)
  78. watcher.wait("ready")
  79. Root().register(server)
  80. assert path.basename(server.host) == "test.sock"
  81. server.unregister()
  82. watcher.wait("unregistered")
  83. def test_multi_servers(manager, watcher):
  84. pytest.importorskip("ssl")
  85. insecure_server = Server(0, channel="insecure")
  86. secure_server = Server(
  87. 0,
  88. channel="secure", secure=True, certfile=CERTFILE
  89. )
  90. server = (insecure_server + secure_server).register(manager)
  91. MakeQuiet().register(server)
  92. watcher.wait("ready")
  93. Root().register(server)
  94. f = urlopen(insecure_server.http.base)
  95. s = f.read()
  96. assert s == b"Hello World!"
  97. f = urlopen(secure_server.http.base)
  98. s = f.read()
  99. assert s == b"Hello World!"
  100. server.unregister()
  101. watcher.wait("unregistered")