/tests/web/test_main.py

https://bitbucket.org/prologic/circuits/ · Python · 52 lines · 34 code · 17 blank · 1 comment · 6 complexity · 440737609c1b8b111469ff1c45f357bb MD5 · raw file

  1. #!/usr/bin/env python
  2. from time import sleep
  3. from threading import Thread
  4. from errno import ECONNREFUSED
  5. from subprocess import Popen, PIPE
  6. from .helpers import urlopen, URLError, HTTPError
  7. SERVER_CMD = ["python", "-m", "circuits.web.main"]
  8. class Server(Thread):
  9. def __init__(self):
  10. super(Server, self).__init__()
  11. self.setDaemon(True)
  12. def run(self):
  13. self.process = Popen(SERVER_CMD)
  14. def stop(self):
  15. self.process.terminate()
  16. self.process.wait()
  17. def test():
  18. server = Server()
  19. server.start()
  20. sleep(1)
  21. f = None
  22. for _ in range(3):
  23. try:
  24. f = urlopen("http://127.0.0.1:8000/hello")
  25. except HTTPError as e:
  26. raise AssertionError(e)
  27. except URLError as e:
  28. if e.args[0][0] == ECONNREFUSED:
  29. sleep(1)
  30. else:
  31. raise AssertionError(e)
  32. assert f
  33. s = f.read()
  34. assert s == b"Hello World!"
  35. server.stop()