@@ -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+
2040class 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 ])
0 commit comments