test_terminals.py 2.2KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. import time
  2. from synergine2.terminals import Terminal
  3. from synergine2.terminals import TerminalPackage
  4. from synergine2.terminals import TerminalManager
  5. from tests import BaseTest
  6. class MultiplyTerminal(Terminal):
  7. def receive(self, package: TerminalPackage):
  8. self.send(TerminalPackage(package.value * 2))
  9. self.send(TerminalPackage(package.value * 4))
  10. class DivideTerminal(Terminal):
  11. def receive(self, package: TerminalPackage):
  12. self.send(TerminalPackage(package.value / 2))
  13. self.send(TerminalPackage(package.value / 4))
  14. class TestTerminals(BaseTest):
  15. def test_terminal_communications(self):
  16. terminals_manager = TerminalManager(
  17. terminals=[
  18. MultiplyTerminal(),
  19. ]
  20. )
  21. terminals_manager.start()
  22. terminals_manager.send(TerminalPackage(42))
  23. # We wait max 2s (see time.sleep) to consider
  24. # process have finished. If not, it will fail
  25. packages = []
  26. for i in range(200):
  27. packages.extend(terminals_manager.receive())
  28. if len(packages) == 2:
  29. break
  30. time.sleep(0.01)
  31. assert 2 == len(packages)
  32. values = [p.value for p in packages]
  33. assert 84 in values
  34. assert 168 in values
  35. terminals_manager.stop() # pytest must execute this if have fail
  36. def test_terminals_communications(self):
  37. terminals_manager = TerminalManager(
  38. terminals=[
  39. MultiplyTerminal(),
  40. DivideTerminal(),
  41. ]
  42. )
  43. terminals_manager.start()
  44. terminals_manager.send(TerminalPackage(42))
  45. # We wait max 2s (see time.sleep) to consider
  46. # process have finished. If not, it will fail
  47. packages = []
  48. for i in range(200):
  49. packages.extend(terminals_manager.receive())
  50. if len(packages) == 4:
  51. break
  52. time.sleep(0.01)
  53. assert 4 == len(packages)
  54. values = [p.value for p in packages]
  55. assert 84 in values
  56. assert 168 in values
  57. assert 21 in values
  58. assert 10.5 in values
  59. terminals_manager.stop() # pytest must execute this if have fail