forked from hardbyte/python-can
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathserial_test.py
More file actions
140 lines (114 loc) · 3.82 KB
/
serial_test.py
File metadata and controls
140 lines (114 loc) · 3.82 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
#!/usr/bin/env python
# coding: utf-8
"""
This module is testing the serial interface.
Copyright: 2017 Boris Wenzlaff
"""
import unittest
from mock import patch
import can
from can.interfaces.serial.serial_can import SerialBus
class SerialDummy:
"""
Dummy to mock the serial communication
"""
msg = None
def __init__(self):
self.msg = bytearray()
def read(self, size=1):
return_value = bytearray()
for i in range(size):
return_value.append(self.msg.pop(0))
return bytes(return_value)
def write(self, msg):
self.msg = bytearray(msg)
def reset(self):
self.msg = None
class SimpleSerialTest(unittest.TestCase):
MAX_TIMESTAMP = 0xFFFFFFFF / 1000
def setUp(self):
self.patcher = patch('serial.Serial')
self.mock_serial = self.patcher.start()
self.serial_dummy = SerialDummy()
self.mock_serial.return_value.write = self.serial_dummy.write
self.mock_serial.return_value.read = self.serial_dummy.read
self.addCleanup(self.patcher.stop)
self.bus = SerialBus('bus')
def tearDown(self):
self.serial_dummy.reset()
def test_rx_tx_min_max_data(self):
"""
Tests the transfer from 0x00 to 0xFF for a 1 byte payload
"""
for b in range(0, 255):
msg = can.Message(data=[b])
self.bus.send(msg)
msg_receive = self.bus.recv()
self.assertEqual(msg, msg_receive)
def test_rx_tx_min_max_dlc(self):
"""
Tests the transfer from a 1 - 8 byte payload
"""
payload = bytearray()
for b in range(1, 9):
payload.append(0)
msg = can.Message(data=payload)
self.bus.send(msg)
msg_receive = self.bus.recv()
self.assertEqual(msg, msg_receive)
def test_rx_tx_data_none(self):
"""
Tests the transfer without payload
"""
msg = can.Message(data=None)
self.bus.send(msg)
msg_receive = self.bus.recv()
self.assertEqual(msg, msg_receive)
def test_rx_tx_min_id(self):
"""
Tests the transfer with the lowest arbitration id
"""
msg = can.Message(arbitration_id=0)
self.bus.send(msg)
msg_receive = self.bus.recv()
self.assertEqual(msg, msg_receive)
def test_rx_tx_max_id(self):
"""
Tests the transfer with the highest arbitration id
"""
msg = can.Message(arbitration_id=536870911)
self.bus.send(msg)
msg_receive = self.bus.recv()
self.assertEqual(msg, msg_receive)
def test_rx_tx_max_timestamp(self):
"""
Tests the transfer with the highest possible timestamp
"""
msg = can.Message(timestamp=self.MAX_TIMESTAMP)
self.bus.send(msg)
msg_receive = self.bus.recv()
self.assertEqual(msg, msg_receive)
self.assertEqual(msg.timestamp, msg_receive.timestamp)
def test_rx_tx_max_timestamp_error(self):
"""
Tests for an exception with an out of range timestamp (max + 1)
"""
msg = can.Message(timestamp=self.MAX_TIMESTAMP+1)
self.assertRaises(ValueError, self.bus.send, msg)
def test_rx_tx_min_timestamp(self):
"""
Tests the transfer with the lowest possible timestamp
"""
msg = can.Message(timestamp=0)
self.bus.send(msg)
msg_receive = self.bus.recv()
self.assertEqual(msg, msg_receive)
self.assertEqual(msg.timestamp, msg_receive.timestamp)
def test_rx_tx_min_timestamp_error(self):
"""
Tests for an exception with an out of range timestamp (min - 1)
"""
msg = can.Message(timestamp=-1)
self.assertRaises(ValueError, self.bus.send, msg)
if __name__ == '__main__':
unittest.main()