test_node.py
Go to the documentation of this file.
1 #
2 # Copyright (C) 2014-2015 UAVCAN Development Team <uavcan.org>
3 #
4 # This software is distributed under the terms of the MIT License.
5 #
6 # Author: Ben Dyer <ben_dyer@mac.com>
7 # Pavel Kirienko <pavel.kirienko@zubax.com>
8 #
9 
10 import unittest
11 try:
12  from unittest.mock import Mock, ANY
13 except ImportError:
14  from mock import Mock, ANY
15 
16 import pyuavcan_v0
17 from pyuavcan_v0.node import Node
18 import pyuavcan_v0.transport as transport
19 from pyuavcan_v0.driver.common import CANFrame
20 
21 import os.path
22 
23 DEFAULT_TRANSFER_PRIORITY = 20
24 
25 class TestException(RuntimeError):
26  pass
27 
28 
29 class HandlerExceptionHandling(unittest.TestCase):
30  def setUp(self):
31  msg = pyuavcan_v0.protocol.debug.KeyValue()
32  msg.key = 'foo'
33  msg.value = 42
34 
35  transfer = transport.Transfer(
36  payload=msg,
37  source_node_id=42,
38  transfer_id=10,
39  transfer_priority=DEFAULT_TRANSFER_PRIORITY,
40  service_not_message=False)
41 
42  self.frames = [
43  CANFrame(can_id=f.message_id, data=f.bytes, extended=True)
44  for f in transfer.to_frames()
45  ]
46  self.driver = Mock()
47  self.driver.receive.side_effect = self.frames + [None]
48 
49  def _raise_callback(self, event):
50  raise TestException("test exception")
51 
52  def _spin(self):
53  try:
54  self.node.spin()
55  except StopIteration: # due to using mocks for can frames
56  pass
57 
59  self.node = Node(self.driver)
60  self.node.add_handler(pyuavcan_v0.protocol.debug.KeyValue,
61  self._raise_callback)
62 
63  self._spin()
64 
66  self.node = Node(self.driver, catch_handler_exceptions=False)
67  self.node.add_handler(pyuavcan_v0.protocol.debug.KeyValue,
68  self._raise_callback)
69 
70  with self.assertRaises(RuntimeError):
71  self._spin()
72 
74  mock_cb = Mock(return_value=None)
75  self.node = Node(self.driver)
76  self.node.add_handler(pyuavcan_v0.protocol.debug.KeyValue,
77  self._raise_callback)
78  self.node.add_handler(pyuavcan_v0.protocol.debug.KeyValue,
79  mock_cb)
80 
81  self._spin()
82  mock_cb.assert_any_call(ANY)
83 
84 
85 
86 if __name__ == '__main__':
87  unittest.main()
test_node.HandlerExceptionHandling.driver
driver
Definition: test_node.py:46
test_node.HandlerExceptionHandling.test_exceptions_are_not_caught_by_spin
def test_exceptions_are_not_caught_by_spin(self)
Definition: test_node.py:65
pyuavcan_v0.driver.common
Definition: driver/common.py:1
test_node.HandlerExceptionHandling.frames
frames
Definition: test_node.py:42
test_node.HandlerExceptionHandling._spin
def _spin(self)
Definition: test_node.py:52
pyuavcan_v0.node.Node
Definition: node.py:226
pyuavcan_v0.node
Definition: node.py:1
test_node.TestException
Definition: test_node.py:25
test_node.HandlerExceptionHandling.setUp
def setUp(self)
Definition: test_node.py:30
test_node.HandlerExceptionHandling
Definition: test_node.py:29
test_node.HandlerExceptionHandling._raise_callback
def _raise_callback(self, event)
Definition: test_node.py:49
pyuavcan_v0.driver.common.CANFrame
Definition: driver/common.py:27
pyuavcan_v0.transport
Definition: transport.py:1
test_node.HandlerExceptionHandling.test_second_handler_is_called_after_first_one_raises
def test_second_handler_is_called_after_first_one_raises(self)
Definition: test_node.py:73
test_node.HandlerExceptionHandling.node
node
Definition: test_node.py:59
test_node.HandlerExceptionHandling.test_exceptions_are_caught_by_spin
def test_exceptions_are_caught_by_spin(self)
Definition: test_node.py:58


uavcan_communicator
Author(s):
autogenerated on Fri Dec 13 2024 03:10:03