/tests/net/test_unix.py

https://bitbucket.org/prologic/circuits/ · Python · 68 lines · 46 code · 21 blank · 1 comment · 6 complexity · cf9944b0af282cf4b4f83d394443c836 MD5 · raw file

  1. #!/usr/bin/env python
  2. import pytest
  3. import os
  4. import sys
  5. import select
  6. if sys.platform in ("win32", "cygwin"):
  7. pytest.skip("Test Not Applicable on Windows")
  8. from circuits import Manager
  9. from circuits.net.sockets import close, connect, write
  10. from circuits.net.sockets import UNIXServer, UNIXClient
  11. from circuits.core.pollers import Select, Poll, EPoll, KQueue
  12. from .client import Client
  13. from .server import Server
  14. def pytest_generate_tests(metafunc):
  15. metafunc.addcall(funcargs={"Poller": Select})
  16. if hasattr(select, "poll"):
  17. metafunc.addcall(funcargs={"Poller": Poll})
  18. if hasattr(select, "epoll"):
  19. metafunc.addcall(funcargs={"Poller": EPoll})
  20. if hasattr(select, "kqueue"):
  21. metafunc.addcall(funcargs={"Poller": KQueue})
  22. def test_unix(tmpdir, Poller):
  23. m = Manager() + Poller()
  24. sockpath = tmpdir.ensure("test.sock")
  25. filename = str(sockpath)
  26. server = Server() + UNIXServer(filename)
  27. client = Client() + UNIXClient()
  28. server.register(m)
  29. client.register(m)
  30. m.start()
  31. try:
  32. assert pytest.wait_for(server, "ready")
  33. assert pytest.wait_for(client, "ready")
  34. client.fire(connect(filename))
  35. assert pytest.wait_for(client, "connected")
  36. assert pytest.wait_for(server, "connected")
  37. assert pytest.wait_for(client, "data", b"Ready")
  38. client.fire(write(b"foo"))
  39. assert pytest.wait_for(server, "data", b"foo")
  40. client.fire(close())
  41. assert pytest.wait_for(client, "disconnected")
  42. assert pytest.wait_for(server, "disconnected")
  43. server.fire(close())
  44. assert pytest.wait_for(server, "closed")
  45. finally:
  46. m.stop()
  47. os.remove(filename)