/test/notifier_test.py

https://github.com/hardbyte/python-can · Python · 58 lines · 47 code · 9 blank · 2 comment · 1 complexity · f9124940c65f6a9c560d354e042eb676 MD5 · raw file

  1. #!/usr/bin/env python
  2. # coding: utf-8
  3. import unittest
  4. import time
  5. import asyncio
  6. import can
  7. class NotifierTest(unittest.TestCase):
  8. def test_single_bus(self):
  9. bus = can.Bus("test", bustype="virtual", receive_own_messages=True)
  10. reader = can.BufferedReader()
  11. notifier = can.Notifier(bus, [reader], 0.1)
  12. msg = can.Message()
  13. bus.send(msg)
  14. self.assertIsNotNone(reader.get_message(1))
  15. notifier.stop()
  16. bus.shutdown()
  17. def test_multiple_bus(self):
  18. bus1 = can.Bus(0, bustype="virtual", receive_own_messages=True)
  19. bus2 = can.Bus(1, bustype="virtual", receive_own_messages=True)
  20. reader = can.BufferedReader()
  21. notifier = can.Notifier([bus1, bus2], [reader], 0.1)
  22. msg = can.Message()
  23. bus1.send(msg)
  24. time.sleep(0.1)
  25. bus2.send(msg)
  26. recv_msg = reader.get_message(1)
  27. self.assertIsNotNone(recv_msg)
  28. self.assertEqual(recv_msg.channel, 0)
  29. recv_msg = reader.get_message(1)
  30. self.assertIsNotNone(recv_msg)
  31. self.assertEqual(recv_msg.channel, 1)
  32. notifier.stop()
  33. bus1.shutdown()
  34. bus2.shutdown()
  35. class AsyncNotifierTest(unittest.TestCase):
  36. def test_asyncio_notifier(self):
  37. loop = asyncio.get_event_loop()
  38. bus = can.Bus("test", bustype="virtual", receive_own_messages=True)
  39. reader = can.AsyncBufferedReader()
  40. notifier = can.Notifier(bus, [reader], 0.1, loop=loop)
  41. msg = can.Message()
  42. bus.send(msg)
  43. future = asyncio.wait_for(reader.get_message(), 1.0)
  44. recv_msg = loop.run_until_complete(future)
  45. self.assertIsNotNone(recv_msg)
  46. notifier.stop()
  47. bus.shutdown()
  48. if __name__ == "__main__":
  49. unittest.main()