/tests/web/test_websockets.py

https://bitbucket.org/prologic/circuits/ · Python · 102 lines · 64 code · 37 blank · 1 comment · 0 complexity · 20b9dcf290b689d3e0801660537f92ee MD5 · raw file

  1. #!/usr/bin/env python
  2. from __future__ import print_function
  3. from circuits import Component
  4. from circuits.web.servers import Server
  5. from circuits.web.controllers import Controller
  6. from circuits.net.sockets import close, write
  7. from circuits.web.websockets import WebSocketClient, WebSocketsDispatcher
  8. from .helpers import urlopen
  9. class Echo(Component):
  10. channel = "wsserver"
  11. def init(self):
  12. self.clients = []
  13. def connect(self, sock, host, port):
  14. self.clients.append(sock)
  15. print("WebSocket Client Connected:", host, port)
  16. self.fire(write(sock, "Welcome {0:s}:{1:d}".format(host, port)))
  17. def disconnect(self, sock):
  18. self.clients.remove(sock)
  19. def read(self, sock, data):
  20. self.fire(write(sock, "Received: " + data))
  21. class Root(Controller):
  22. def index(self):
  23. return "Hello World!"
  24. class Client(Component):
  25. channel = "ws"
  26. def init(self, *args, **kwargs):
  27. self.response = None
  28. def read(self, data):
  29. self.response = data
  30. def test(manager, watcher, webapp):
  31. server = Server(0).register(manager)
  32. watcher.wait("ready")
  33. echo = Echo().register(server)
  34. Root().register(server)
  35. watcher.wait("registered", channel="wsserver")
  36. f = urlopen(webapp.server.http.base)
  37. s = f.read()
  38. assert s == b"Hello World!"
  39. watcher.clear()
  40. WebSocketsDispatcher("/websocket").register(server)
  41. watcher.wait("registered", channel="web")
  42. uri = "ws://{0:s}:{1:d}/websocket".format(server.host, server.port)
  43. WebSocketClient(uri).register(manager)
  44. client = Client().register(manager)
  45. watcher.wait("registered", channel="wsclient")
  46. watcher.wait("connected", channel="wsclient")
  47. assert len(echo.clients) == 1
  48. watcher.wait("read", channel="ws")
  49. assert client.response.startswith("Welcome")
  50. watcher.clear()
  51. client.fire(write("Hello!"), "ws")
  52. watcher.wait("read", channel="ws")
  53. assert client.response == "Received: Hello!"
  54. f = urlopen(webapp.server.http.base)
  55. s = f.read()
  56. assert s == b"Hello World!"
  57. assert len(echo.clients) == 1
  58. client.fire(close(), "ws")
  59. watcher.wait("disconnect", channel="wsserver")
  60. assert len(echo.clients) == 0
  61. client.unregister()
  62. watcher.wait("unregistered")
  63. watcher.clear()
  64. server.unregister()
  65. watcher.wait("unregistered")