test_parented.py 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. from __future__ import print_function
  2. from gevent import monkey
  3. monkey.patch_all(subprocess=True)
  4. import pytest
  5. import gevent
  6. from larigira.mpc import Timer, ParentedLet
  7. # TODO: implement simple children and check that we will receive the expected
  8. # messages on the queue
  9. @pytest.fixture
  10. def range_parentlet():
  11. class RangeLet(ParentedLet):
  12. def __init__(self, howmany, queue):
  13. ParentedLet.__init__(self, queue)
  14. self.howmany = howmany
  15. def do_business(self):
  16. for i in range(self.howmany):
  17. yield ("range", i)
  18. return RangeLet
  19. @pytest.fixture
  20. def single_value_parentlet():
  21. class SingleLet(ParentedLet):
  22. def __init__(self, val, queue):
  23. ParentedLet.__init__(self, queue)
  24. self.val = val
  25. def do_business(self):
  26. yield ("single", self.val)
  27. return SingleLet
  28. def test_parented_range(queue, range_parentlet):
  29. t = range_parentlet(5, queue)
  30. t.start()
  31. gevent.sleep(0.01)
  32. assert queue.qsize() == 5
  33. while not queue.empty():
  34. msg = queue.get()
  35. assert msg["kind"] == "range"
  36. def test_parented_single(queue, single_value_parentlet):
  37. t = single_value_parentlet(123, queue)
  38. t.start()
  39. gevent.sleep(0.01)
  40. msg = queue.get_nowait()
  41. assert msg["args"][0] == 123
  42. def test_timer_finally(queue):
  43. """at somepoint, it will get results"""
  44. period = 10
  45. t = Timer(period, queue)
  46. t.start()
  47. gevent.sleep(period * 3 / 1000.0)
  48. queue.get_nowait()
  49. def test_timer_righttime(queue):
  50. """not too early, not too late"""
  51. period = 500
  52. t = Timer(period, queue)
  53. t.start()
  54. gevent.sleep(period / (10 * 1000.0))
  55. assert queue.empty() is True
  56. gevent.sleep(period * (2 / 1000.0))
  57. assert not queue.empty()
  58. queue.get_nowait()