Skip to content

Commit 2f3a603

Browse files
committed
Added unit tests for wanted behaviour with variable size DID
1 parent f038450 commit 2f3a603

File tree

2 files changed

+54
-3
lines changed

2 files changed

+54
-3
lines changed

test/client/test_read_data_by_identifier.py

Lines changed: 51 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,26 @@ def decode(self, did_payload):
1717
def __len__(self):
1818
return 1
1919

20+
class ReadRemainingDataCodec(DidCodec):
21+
22+
def encode(self, *args, **kwargs):
23+
return b''
24+
25+
def decode(self, did_payload):
26+
return did_payload
27+
28+
def __len__(self):
29+
return self.ReadAllRemainingData
30+
31+
class CodecWithNoLength(DidCodec):
32+
33+
def encode(self, *args, **kwargs):
34+
return b''
35+
36+
def decode(self, did_payload):
37+
return did_payload
38+
39+
2040
class TestReadDataByIdentifier(ClientServerTest):
2141
def __init__(self, *args, **kwargs):
2242
ClientServerTest.__init__(self, *args, **kwargs)
@@ -26,7 +46,9 @@ def postClientSetUp(self):
2646
1 : '>H',
2747
2 : '<H',
2848
3 : StubbedDidCodec,
29-
4 : AsciiCodec(5)
49+
4 : AsciiCodec(5),
50+
5 : ReadRemainingDataCodec,
51+
6 : CodecWithNoLength
3052
}
3153

3254
def test_rdbi_single_success(self):
@@ -125,10 +147,29 @@ def _test_rdbi_multiple_zero_padding_not_tolerated_no_exception(self):
125147
self.udsclient.config['data_identifiers'][0] = 'B'*i
126148
response = self.udsclient.read_data_by_identifier(didlist = [1,2,3])
127149
self.assertTrue(response.valid)
128-
self.assertTrue(response.unexpected)
150+
self.assertTrue(response.unexpected)
151+
152+
def test_rdbi_variable_size_did(self):
153+
self.wait_request_and_respond(b"\x62\x00\x01\x12\x34\x00\x02\x56\x78\x00\x05\xaa\xbb\xcc\xdd")
129154

155+
def _test_rdbi_variable_size_did(self):
156+
response = self.udsclient.read_data_by_identifier(didlist = [1,2,5])
157+
self.assertTrue(response.positive)
158+
values = response.service_data.values
159+
self.assertEqual(values[1], (0x1234,))
160+
self.assertEqual(values[2], (0x7856,))
161+
self.assertEqual(values[5], b'\xaa\xbb\xcc\xdd')
162+
163+
# DID 5 read all the data up to the end. Makes no sense to read another DID after that.
164+
def test_rdbi_variable_size_did_not_last(self):
165+
pass
166+
167+
def _test_rdbi_variable_size_did_not_last(self):
168+
with self.assertRaises(ValueError):
169+
self.udsclient.read_data_by_identifier(didlist = [1,2,5,3])
170+
130171
def test_rdbi_incomplete_response_exception(self):
131-
self.wait_request_and_respond(b"\x62\x00\x01\x12\x34\x00\x02\x56\x78\x00\x03")
172+
self.wait_request_and_respond(b"\x62\x00\x01\x12\x34\x00\x02\x56\x78\x00\x03")
132173

133174
def _test_rdbi_incomplete_response_exception(self):
134175
with self.assertRaises(InvalidResponseException):
@@ -211,3 +252,10 @@ def test_no_config(self):
211252
def _test_no_config(self):
212253
with self.assertRaises(ConfigError):
213254
self.udsclient.read_data_by_identifier(didlist=[1,2,3,99])
255+
256+
def test_no_length(self):
257+
pass
258+
259+
def _test_no_length(self):
260+
with self.assertRaises(ConfigError):
261+
self.udsclient.read_data_by_identifier(didlist=[6])

udsoncan/__init__.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,9 @@ class DidCodec:
4040
:type packstr: string
4141
"""
4242

43+
class ReadAllRemainingData:
44+
pass
45+
4346
def __init__(self, packstr=None):
4447
self.packstr = packstr
4548

0 commit comments

Comments
 (0)