@@ -170,6 +170,314 @@ def test_block_upload(self):
170170 data = fp .read ()
171171 self .assertEqual (data , 'Tiny Node - Mega Domains !' )
172172
173+ def test_sdo_block_upload_retransmit (self ):
174+ """Send 'the crazy fox jumps over the lazy dog\n ' multiple times
175+ and trigger a retransmit by only validating a block partially.
176+ """
177+ self .data = [
178+ (TX , b"\xa4 \x08 \x10 \x00 \x7f \x00 \x00 \x00 " ),
179+ (RX , b"\xc4 \x08 \x10 \x00 \x00 \x00 \x00 \x00 " ),
180+ (TX , b"\xa3 \x00 \x00 \x00 \x00 \x00 \x00 \x00 " ),
181+ (RX , b"\x01 \x74 \x68 \x65 \x20 \x63 \x72 \x61 " ),
182+ (RX , b"\x02 \x7a \x79 \x20 \x66 \x6f \x78 \x20 " ),
183+ (RX , b"\x03 \x6a \x75 \x6d \x70 \x73 \x20 \x6f " ),
184+ (RX , b"\x04 \x76 \x65 \x72 \x20 \x74 \x68 \x65 " ),
185+ (RX , b"\x05 \x20 \x6c \x61 \x7a \x79 \x20 \x64 " ),
186+ (RX , b"\x06 \x6f \x67 \x0a \x74 \x68 \x65 \x20 " ),
187+ (RX , b"\x07 \x63 \x72 \x61 \x7a \x79 \x20 \x66 " ),
188+ (RX , b"\x08 \x6f \x78 \x20 \x6a \x75 \x6d \x70 " ),
189+ (RX , b"\x09 \x73 \x20 \x6f \x76 \x65 \x72 \x20 " ),
190+ (RX , b"\x0a \x74 \x68 \x65 \x20 \x6c \x61 \x7a " ),
191+ (RX , b"\x0b \x79 \x20 \x64 \x6f \x67 \x0a \x74 " ),
192+ (RX , b"\x0c \x68 \x65 \x20 \x63 \x72 \x61 \x7a " ),
193+ (RX , b"\x0d \x79 \x20 \x66 \x6f \x78 \x20 \x6a " ),
194+ (RX , b"\x0e \x75 \x6d \x70 \x73 \x20 \x6f \x76 " ),
195+ (RX , b"\x0f \x65 \x72 \x20 \x74 \x68 \x65 \x20 " ),
196+ (RX , b"\x10 \x6c \x61 \x7a \x79 \x20 \x64 \x6f " ),
197+ (RX , b"\x11 \x67 \x0a \x74 \x68 \x65 \x20 \x63 " ),
198+ (RX , b"\x12 \x72 \x61 \x7a \x79 \x20 \x66 \x6f " ),
199+ (RX , b"\x13 \x78 \x20 \x6a \x75 \x6d \x70 \x73 " ),
200+ (RX , b"\x14 \x20 \x6f \x76 \x65 \x72 \x20 \x74 " ),
201+ (RX , b"\x15 \x68 \x65 \x20 \x6c \x61 \x7a \x79 " ),
202+ (RX , b"\x16 \x20 \x64 \x6f \x67 \x0a \x74 \x68 " ),
203+ (RX , b"\x17 \x65 \x20 \x63 \x72 \x61 \x7a \x79 " ),
204+ (RX , b"\x18 \x20 \x66 \x6f \x78 \x20 \x6a \x75 " ),
205+ (RX , b"\x19 \x6d \x70 \x73 \x20 \x6f \x76 \x65 " ),
206+ (RX , b"\x1a \x72 \x20 \x74 \x68 \x65 \x20 \x6c " ),
207+ (RX , b"\x1b \x61 \x7a \x79 \x20 \x64 \x6f \x67 " ),
208+ (RX , b"\x1c \x0a \x74 \x68 \x65 \x20 \x63 \x72 " ),
209+ (RX , b"\x1d \x61 \x7a \x79 \x20 \x66 \x6f \x78 " ),
210+ (RX , b"\x1e \x20 \x6a \x75 \x6d \x70 \x73 \x20 " ),
211+ (RX , b"\x1f \x6f \x76 \x65 \x72 \x20 \x74 \x68 " ),
212+ (RX , b"\x20 \x65 \x20 \x6c \x61 \x7a \x79 \x20 " ),
213+ (RX , b"\x21 \x64 \x6f \x67 \x0a \x74 \x68 \x65 " ),
214+ (RX , b"\x22 \x20 \x63 \x72 \x61 \x7a \x79 \x20 " ),
215+ (RX , b"\x23 \x66 \x6f \x78 \x20 \x6a \x75 \x6d " ),
216+ (RX , b"\x24 \x70 \x73 \x20 \x6f \x76 \x65 \x72 " ),
217+ (RX , b"\x25 \x20 \x74 \x68 \x65 \x20 \x6c \x61 " ),
218+ (RX , b"\x26 \x7a \x79 \x20 \x64 \x6f \x67 \x0a " ),
219+ (RX , b"\x27 \x74 \x68 \x65 \x20 \x63 \x72 \x61 " ),
220+ (RX , b"\x28 \x7a \x79 \x20 \x66 \x6f \x78 \x20 " ),
221+ (RX , b"\x29 \x6a \x75 \x6d \x70 \x73 \x20 \x6f " ),
222+ (RX , b"\x2a \x76 \x65 \x72 \x20 \x74 \x68 \x65 " ),
223+ (RX , b"\x2b \x20 \x6c \x61 \x7a \x79 \x20 \x64 " ),
224+ (RX , b"\x2c \x6f \x67 \x0a \x74 \x68 \x65 \x20 " ),
225+ (RX , b"\x2d \x63 \x72 \x61 \x7a \x79 \x20 \x66 " ),
226+ (RX , b"\x2e \x6f \x78 \x20 \x6a \x75 \x6d \x70 " ),
227+ (RX , b"\x2f \x73 \x20 \x6f \x76 \x65 \x72 \x20 " ),
228+ (RX , b"\x30 \x74 \x68 \x65 \x20 \x6c \x61 \x7a " ),
229+ (RX , b"\x31 \x79 \x20 \x64 \x6f \x67 \x0a \x74 " ),
230+ (RX , b"\x32 \x68 \x65 \x20 \x63 \x72 \x61 \x7a " ),
231+ (RX , b"\x34 \x79 \x20 \x66 \x6f \x78 \x20 \x6a " ),
232+ (RX , b"\x34 \x75 \x6d \x70 \x73 \x20 \x6f \x76 " ), # Wrong seqno (x34 instead of x32)
233+ (RX , b"\x35 \x65 \x72 \x20 \x74 \x68 \x65 \x20 " ),
234+ (RX , b"\x36 \x6c \x61 \x7a \x79 \x20 \x64 \x6f " ),
235+ (RX , b"\x37 \x67 \x0a \x74 \x68 \x65 \x20 \x63 " ),
236+ (RX , b"\x38 \x72 \x61 \x7a \x79 \x20 \x66 \x6f " ),
237+ (RX , b"\x39 \x78 \x20 \x6a \x75 \x6d \x70 \x73 " ),
238+ (RX , b"\x3a \x20 \x6f \x76 \x65 \x72 \x20 \x74 " ),
239+ (RX , b"\x3b \x68 \x65 \x20 \x6c \x61 \x7a \x79 " ),
240+ (RX , b"\x3c \x20 \x64 \x6f \x67 \x0a \x74 \x68 " ),
241+ (RX , b"\x3d \x65 \x20 \x63 \x72 \x61 \x7a \x79 " ),
242+ (RX , b"\x3e \x20 \x66 \x6f \x78 \x20 \x6a \x75 " ),
243+ (RX , b"\x3f \x6d \x70 \x73 \x20 \x6f \x76 \x65 " ),
244+ (RX , b"\x40 \x72 \x20 \x74 \x68 \x65 \x20 \x6c " ),
245+ (RX , b"\x41 \x61 \x7a \x79 \x20 \x64 \x6f \x67 " ),
246+ (RX , b"\x42 \x0a \x74 \x68 \x65 \x20 \x63 \x72 " ),
247+ (RX , b"\x43 \x61 \x7a \x79 \x20 \x66 \x6f \x78 " ),
248+ (RX , b"\x44 \x20 \x6a \x75 \x6d \x70 \x73 \x20 " ),
249+ (RX , b"\x45 \x6f \x76 \x65 \x72 \x20 \x74 \x68 " ),
250+ (RX , b"\x46 \x65 \x20 \x6c \x61 \x7a \x79 \x20 " ),
251+ (RX , b"\x47 \x64 \x6f \x67 \x0a \x74 \x68 \x65 " ),
252+ (RX , b"\x48 \x20 \x63 \x72 \x61 \x7a \x79 \x20 " ),
253+ (RX , b"\x49 \x66 \x6f \x78 \x20 \x6a \x75 \x6d " ),
254+ (RX , b"\x4a \x70 \x73 \x20 \x6f \x76 \x65 \x72 " ),
255+ (RX , b"\x4b \x20 \x74 \x68 \x65 \x20 \x6c \x61 " ),
256+ (RX , b"\x4c \x7a \x79 \x20 \x64 \x6f \x67 \x0a " ),
257+ (RX , b"\x4d \x74 \x68 \x65 \x20 \x63 \x72 \x61 " ),
258+ (RX , b"\x4e \x7a \x79 \x20 \x66 \x6f \x78 \x20 " ),
259+ (RX , b"\x4f \x6a \x75 \x6d \x70 \x73 \x20 \x6f " ),
260+ (RX , b"\x50 \x76 \x65 \x72 \x20 \x74 \x68 \x65 " ),
261+ (RX , b"\x51 \x20 \x6c \x61 \x7a \x79 \x20 \x64 " ),
262+ (RX , b"\x52 \x6f \x67 \x0a \x74 \x68 \x65 \x20 " ),
263+ (RX , b"\x53 \x63 \x72 \x61 \x7a \x79 \x20 \x66 " ),
264+ (RX , b"\x54 \x6f \x78 \x20 \x6a \x75 \x6d \x70 " ),
265+ (RX , b"\x55 \x73 \x20 \x6f \x76 \x65 \x72 \x20 " ),
266+ (RX , b"\x56 \x74 \x68 \x65 \x20 \x6c \x61 \x7a " ),
267+ (RX , b"\x57 \x79 \x20 \x64 \x6f \x67 \x0a \x74 " ),
268+ (RX , b"\x58 \x68 \x65 \x20 \x63 \x72 \x61 \x7a " ),
269+ (RX , b"\x59 \x79 \x20 \x66 \x6f \x78 \x20 \x6a " ),
270+ (RX , b"\x5a \x75 \x6d \x70 \x73 \x20 \x6f \x76 " ),
271+ (RX , b"\x5b \x65 \x72 \x20 \x74 \x68 \x65 \x20 " ),
272+ (RX , b"\x5c \x6c \x61 \x7a \x79 \x20 \x64 \x6f " ),
273+ (RX , b"\x5d \x67 \x0a \x74 \x68 \x65 \x20 \x63 " ),
274+ (RX , b"\x5e \x72 \x61 \x7a \x79 \x20 \x66 \x6f " ),
275+ (RX , b"\x5f \x78 \x20 \x6a \x75 \x6d \x70 \x73 " ),
276+ (RX , b"\x60 \x20 \x6f \x76 \x65 \x72 \x20 \x74 " ),
277+ (RX , b"\x61 \x68 \x65 \x20 \x6c \x61 \x7a \x79 " ),
278+ (RX , b"\x62 \x20 \x64 \x6f \x67 \x0a \x74 \x68 " ),
279+ (RX , b"\x63 \x65 \x20 \x63 \x72 \x61 \x7a \x79 " ),
280+ (RX , b"\x64 \x20 \x66 \x6f \x78 \x20 \x6a \x75 " ),
281+ (RX , b"\x65 \x6d \x70 \x73 \x20 \x6f \x76 \x65 " ),
282+ (RX , b"\x66 \x72 \x20 \x74 \x68 \x65 \x20 \x6c " ),
283+ (RX , b"\x67 \x61 \x7a \x79 \x20 \x64 \x6f \x67 " ),
284+ (RX , b"\x68 \x0a \x74 \x68 \x65 \x20 \x63 \x72 " ),
285+ (RX , b"\x69 \x61 \x7a \x79 \x20 \x66 \x6f \x78 " ),
286+ (RX , b"\x6a \x20 \x6a \x75 \x6d \x70 \x73 \x20 " ),
287+ (RX , b"\x6b \x6f \x76 \x65 \x72 \x20 \x74 \x68 " ),
288+ (RX , b"\x6c \x65 \x20 \x6c \x61 \x7a \x79 \x20 " ),
289+ (RX , b"\x6d \x64 \x6f \x67 \x0a \x74 \x68 \x65 " ),
290+ (RX , b"\x6e \x20 \x63 \x72 \x61 \x7a \x79 \x20 " ),
291+ (RX , b"\x6f \x66 \x6f \x78 \x20 \x6a \x75 \x6d " ),
292+ (RX , b"\x70 \x70 \x73 \x20 \x6f \x76 \x65 \x72 " ),
293+ (RX , b"\x71 \x20 \x74 \x68 \x65 \x20 \x6c \x61 " ),
294+ (RX , b"\x72 \x7a \x79 \x20 \x64 \x6f \x67 \x0a " ),
295+ (RX , b"\x73 \x74 \x68 \x65 \x20 \x63 \x72 \x61 " ),
296+ (RX , b"\x74 \x7a \x79 \x20 \x66 \x6f \x78 \x20 " ),
297+ (RX , b"\x75 \x6a \x75 \x6d \x70 \x73 \x20 \x6f " ),
298+ (RX , b"\x76 \x76 \x65 \x72 \x20 \x74 \x68 \x65 " ),
299+ (RX , b"\x77 \x20 \x6c \x61 \x7a \x79 \x20 \x64 " ),
300+ (RX , b"\x78 \x6f \x67 \x0a \x74 \x68 \x65 \x20 " ),
301+ (RX , b"\x79 \x63 \x72 \x61 \x7a \x79 \x20 \x66 " ),
302+ (RX , b"\x7a \x6f \x78 \x20 \x6a \x75 \x6d \x70 " ),
303+ (RX , b"\x7b \x73 \x20 \x6f \x76 \x65 \x72 \x20 " ),
304+ (RX , b"\x7c \x74 \x68 \x65 \x20 \x6c \x61 \x7a " ),
305+ (RX , b"\x7d \x79 \x20 \x64 \x6f \x67 \x0a \x74 " ),
306+ (RX , b"\x7e \x68 \x65 \x20 \x63 \x72 \x61 \x7a " ),
307+ (RX , b"\x7f \x79 \x20 \x66 \x6f \x78 \x20 \x6a " ),
308+ (TX , b"\xa2 \x32 \x7f \x00 \x00 \x00 \x00 \x00 " ), # Last good seqno (x32)
309+ (RX , b"\x01 \x79 \x20 \x66 \x6f \x78 \x20 \x6a " ), # Start resending from last acknowledged block
310+ (RX , b"\x02 \x75 \x6d \x70 \x73 \x20 \x6f \x76 " ),
311+ (RX , b"\x03 \x65 \x72 \x20 \x74 \x68 \x65 \x20 " ),
312+ (RX , b"\x04 \x6c \x61 \x7a \x79 \x20 \x64 \x6f " ),
313+ (RX , b"\x05 \x67 \x0a \x74 \x68 \x65 \x20 \x63 " ),
314+ (RX , b"\x06 \x72 \x61 \x7a \x79 \x20 \x66 \x6f " ),
315+ (RX , b"\x07 \x78 \x20 \x6a \x75 \x6d \x70 \x73 " ),
316+ (RX , b"\x08 \x20 \x6f \x76 \x65 \x72 \x20 \x74 " ),
317+ (RX , b"\x09 \x68 \x65 \x20 \x6c \x61 \x7a \x79 " ),
318+ (RX , b"\x0a \x20 \x64 \x6f \x67 \x0a \x74 \x68 " ),
319+ (RX , b"\x0b \x65 \x20 \x63 \x72 \x61 \x7a \x79 " ),
320+ (RX , b"\x0c \x20 \x66 \x6f \x78 \x20 \x6a \x75 " ),
321+ (RX , b"\x0d \x6d \x70 \x73 \x20 \x6f \x76 \x65 " ),
322+ (RX , b"\x0e \x72 \x20 \x74 \x68 \x65 \x20 \x6c " ),
323+ (RX , b"\x0f \x61 \x7a \x79 \x20 \x64 \x6f \x67 " ),
324+ (RX , b"\x10 \x0a \x74 \x68 \x65 \x20 \x63 \x72 " ),
325+ (RX , b"\x11 \x61 \x7a \x79 \x20 \x66 \x6f \x78 " ),
326+ (RX , b"\x12 \x20 \x6a \x75 \x6d \x70 \x73 \x20 " ),
327+ (RX , b"\x13 \x6f \x76 \x65 \x72 \x20 \x74 \x68 " ),
328+ (RX , b"\x14 \x65 \x20 \x6c \x61 \x7a \x79 \x20 " ),
329+ (RX , b"\x15 \x64 \x6f \x67 \x0a \x74 \x68 \x65 " ),
330+ (RX , b"\x16 \x20 \x63 \x72 \x61 \x7a \x79 \x20 " ),
331+ (RX , b"\x17 \x66 \x6f \x78 \x20 \x6a \x75 \x6d " ),
332+ (RX , b"\x18 \x70 \x73 \x20 \x6f \x76 \x65 \x72 " ),
333+ (RX , b"\x19 \x20 \x74 \x68 \x65 \x20 \x6c \x61 " ),
334+ (RX , b"\x1a \x7a \x79 \x20 \x64 \x6f \x67 \x0a " ),
335+ (RX , b"\x1b \x74 \x68 \x65 \x20 \x63 \x72 \x61 " ),
336+ (RX , b"\x1c \x7a \x79 \x20 \x66 \x6f \x78 \x20 " ),
337+ (RX , b"\x1d \x6a \x75 \x6d \x70 \x73 \x20 \x6f " ),
338+ (RX , b"\x1e \x76 \x65 \x72 \x20 \x74 \x68 \x65 " ),
339+ (RX , b"\x1f \x20 \x6c \x61 \x7a \x79 \x20 \x64 " ),
340+ (RX , b"\x20 \x6f \x67 \x0a \x74 \x68 \x65 \x20 " ),
341+ (RX , b"\x21 \x63 \x72 \x61 \x7a \x79 \x20 \x66 " ),
342+ (RX , b"\x22 \x6f \x78 \x20 \x6a \x75 \x6d \x70 " ),
343+ (RX , b"\x23 \x73 \x20 \x6f \x76 \x65 \x72 \x20 " ),
344+ (RX , b"\x24 \x74 \x68 \x65 \x20 \x6c \x61 \x7a " ),
345+ (RX , b"\x25 \x79 \x20 \x64 \x6f \x67 \x0a \x74 " ),
346+ (RX , b"\x26 \x68 \x65 \x20 \x63 \x72 \x61 \x7a " ),
347+ (RX , b"\x27 \x79 \x20 \x66 \x6f \x78 \x20 \x6a " ),
348+ (RX , b"\x28 \x75 \x6d \x70 \x73 \x20 \x6f \x76 " ),
349+ (RX , b"\x29 \x65 \x72 \x20 \x74 \x68 \x65 \x20 " ),
350+ (RX , b"\x2a \x6c \x61 \x7a \x79 \x20 \x64 \x6f " ),
351+ (RX , b"\x2b \x67 \x0a \x74 \x68 \x65 \x20 \x63 " ),
352+ (RX , b"\x2c \x72 \x61 \x7a \x79 \x20 \x66 \x6f " ),
353+ (RX , b"\x2d \x78 \x20 \x6a \x75 \x6d \x70 \x73 " ),
354+ (RX , b"\x2e \x20 \x6f \x76 \x65 \x72 \x20 \x74 " ),
355+ (RX , b"\x2f \x68 \x65 \x20 \x6c \x61 \x7a \x79 " ),
356+ (RX , b"\x30 \x20 \x64 \x6f \x67 \x0a \x74 \x68 " ),
357+ (RX , b"\x31 \x65 \x20 \x63 \x72 \x61 \x7a \x79 " ),
358+ (RX , b"\x32 \x20 \x66 \x6f \x78 \x20 \x6a \x75 " ),
359+ (RX , b"\x33 \x6d \x70 \x73 \x20 \x6f \x76 \x65 " ),
360+ (RX , b"\x34 \x72 \x20 \x74 \x68 \x65 \x20 \x6c " ),
361+ (RX , b"\x35 \x61 \x7a \x79 \x20 \x64 \x6f \x67 " ),
362+ (RX , b"\x36 \x0a \x74 \x68 \x65 \x20 \x63 \x72 " ),
363+ (RX , b"\x37 \x61 \x7a \x79 \x20 \x66 \x6f \x78 " ),
364+ (RX , b"\x38 \x20 \x6a \x75 \x6d \x70 \x73 \x20 " ),
365+ (RX , b"\x39 \x6f \x76 \x65 \x72 \x20 \x74 \x68 " ),
366+ (RX , b"\x3a \x65 \x20 \x6c \x61 \x7a \x79 \x20 " ),
367+ (RX , b"\x3b \x64 \x6f \x67 \x0a \x74 \x68 \x65 " ),
368+ (RX , b"\x3c \x20 \x63 \x72 \x61 \x7a \x79 \x20 " ),
369+ (RX , b"\x3d \x66 \x6f \x78 \x20 \x6a \x75 \x6d " ),
370+ (RX , b"\x3e \x70 \x73 \x20 \x6f \x76 \x65 \x72 " ),
371+ (RX , b"\x3f \x20 \x74 \x68 \x65 \x20 \x6c \x61 " ),
372+ (RX , b"\x40 \x7a \x79 \x20 \x64 \x6f \x67 \x0a " ),
373+ (RX , b"\x41 \x74 \x68 \x65 \x20 \x63 \x72 \x61 " ),
374+ (RX , b"\x42 \x7a \x79 \x20 \x66 \x6f \x78 \x20 " ),
375+ (RX , b"\x43 \x6a \x75 \x6d \x70 \x73 \x20 \x6f " ),
376+ (RX , b"\x44 \x76 \x65 \x72 \x20 \x74 \x68 \x65 " ),
377+ (RX , b"\x45 \x20 \x6c \x61 \x7a \x79 \x20 \x64 " ),
378+ (RX , b"\x46 \x6f \x67 \x0a \x74 \x68 \x65 \x20 " ),
379+ (RX , b"\x47 \x63 \x72 \x61 \x7a \x79 \x20 \x66 " ),
380+ (RX , b"\x48 \x6f \x78 \x20 \x6a \x75 \x6d \x70 " ),
381+ (RX , b"\x49 \x73 \x20 \x6f \x76 \x65 \x72 \x20 " ),
382+ (RX , b"\x4a \x74 \x68 \x65 \x20 \x6c \x61 \x7a " ),
383+ (RX , b"\x4b \x79 \x20 \x64 \x6f \x67 \x0a \x74 " ),
384+ (RX , b"\x4c \x68 \x65 \x20 \x63 \x72 \x61 \x7a " ),
385+ (RX , b"\x4d \x79 \x20 \x66 \x6f \x78 \x20 \x6a " ),
386+ (RX , b"\x4e \x75 \x6d \x70 \x73 \x20 \x6f \x76 " ),
387+ (RX , b"\x4f \x65 \x72 \x20 \x74 \x68 \x65 \x20 " ),
388+ (RX , b"\x50 \x6c \x61 \x7a \x79 \x20 \x64 \x6f " ),
389+ (RX , b"\x51 \x67 \x0a \x74 \x68 \x65 \x20 \x63 " ),
390+ (RX , b"\x52 \x72 \x61 \x7a \x79 \x20 \x66 \x6f " ),
391+ (RX , b"\x53 \x78 \x20 \x6a \x75 \x6d \x70 \x73 " ),
392+ (RX , b"\x54 \x20 \x6f \x76 \x65 \x72 \x20 \x74 " ),
393+ (RX , b"\x55 \x68 \x65 \x20 \x6c \x61 \x7a \x79 " ),
394+ (RX , b"\x56 \x20 \x64 \x6f \x67 \x0a \x74 \x68 " ),
395+ (RX , b"\x57 \x65 \x20 \x63 \x72 \x61 \x7a \x79 " ),
396+ (RX , b"\x58 \x20 \x66 \x6f \x78 \x20 \x6a \x75 " ),
397+ (RX , b"\x59 \x6d \x70 \x73 \x20 \x6f \x76 \x65 " ),
398+ (RX , b"\x5a \x72 \x20 \x74 \x68 \x65 \x20 \x6c " ),
399+ (RX , b"\x5b \x61 \x7a \x79 \x20 \x64 \x6f \x67 " ),
400+ (RX , b"\x5c \x0a \x74 \x68 \x65 \x20 \x63 \x72 " ),
401+ (RX , b"\x5d \x61 \x7a \x79 \x20 \x66 \x6f \x78 " ),
402+ (RX , b"\x5e \x20 \x6a \x75 \x6d \x70 \x73 \x20 " ),
403+ (RX , b"\x5f \x6f \x76 \x65 \x72 \x20 \x74 \x68 " ),
404+ (RX , b"\x60 \x65 \x20 \x6c \x61 \x7a \x79 \x20 " ),
405+ (RX , b"\x61 \x64 \x6f \x67 \x0a \x74 \x68 \x65 " ),
406+ (RX , b"\x62 \x20 \x63 \x72 \x61 \x7a \x79 \x20 " ),
407+ (RX , b"\x63 \x66 \x6f \x78 \x20 \x6a \x75 \x6d " ),
408+ (RX , b"\x64 \x70 \x73 \x20 \x6f \x76 \x65 \x72 " ),
409+ (RX , b"\x65 \x20 \x74 \x68 \x65 \x20 \x6c \x61 " ),
410+ (RX , b"\x66 \x7a \x79 \x20 \x64 \x6f \x67 \x0a " ),
411+ (RX , b"\x67 \x74 \x68 \x65 \x20 \x63 \x72 \x61 " ),
412+ (RX , b"\x68 \x7a \x79 \x20 \x66 \x6f \x78 \x20 " ),
413+ (RX , b"\x69 \x6a \x75 \x6d \x70 \x73 \x20 \x6f " ),
414+ (RX , b"\x6a \x76 \x65 \x72 \x20 \x74 \x68 \x65 " ),
415+ (RX , b"\x6b \x20 \x6c \x61 \x7a \x79 \x20 \x64 " ),
416+ (RX , b"\x6c \x6f \x67 \x0a \x74 \x68 \x65 \x20 " ),
417+ (RX , b"\x6d \x63 \x72 \x61 \x7a \x79 \x20 \x66 " ),
418+ (RX , b"\x6e \x6f \x78 \x20 \x6a \x75 \x6d \x70 " ),
419+ (RX , b"\x6f \x73 \x20 \x6f \x76 \x65 \x72 \x20 " ),
420+ (RX , b"\x70 \x74 \x68 \x65 \x20 \x6c \x61 \x7a " ),
421+ (RX , b"\x71 \x79 \x20 \x64 \x6f \x67 \x0a \x74 " ),
422+ (RX , b"\x72 \x68 \x65 \x20 \x63 \x72 \x61 \x7a " ),
423+ (RX , b"\x73 \x79 \x20 \x66 \x6f \x78 \x20 \x6a " ),
424+ (RX , b"\x74 \x75 \x6d \x70 \x73 \x20 \x6f \x76 " ),
425+ (RX , b"\x75 \x65 \x72 \x20 \x74 \x68 \x65 \x20 " ),
426+ (RX , b"\x76 \x6c \x61 \x7a \x79 \x20 \x64 \x6f " ),
427+ (RX , b"\x77 \x67 \x0a \x74 \x68 \x65 \x20 \x63 " ),
428+ (RX , b"\x78 \x72 \x61 \x7a \x79 \x20 \x66 \x6f " ),
429+ (RX , b"\x79 \x78 \x20 \x6a \x75 \x6d \x70 \x73 " ),
430+ (RX , b"\x7a \x20 \x6f \x76 \x65 \x72 \x20 \x74 " ),
431+ (RX , b"\x7b \x68 \x65 \x20 \x6c \x61 \x7a \x79 " ),
432+ (RX , b"\x7c \x20 \x64 \x6f \x67 \x0a \x74 \x68 " ),
433+ (RX , b"\x7d \x65 \x20 \x63 \x72 \x61 \x7a \x79 " ),
434+ (RX , b"\x7e \x20 \x66 \x6f \x78 \x20 \x6a \x75 " ),
435+ (RX , b"\x7f \x6d \x70 \x73 \x20 \x6f \x76 \x65 " ),
436+ (TX , b"\xa2 \x7f \x7f \x00 \x00 \x00 \x00 \x00 " ),
437+ (RX , b"\x01 \x72 \x20 \x74 \x68 \x65 \x20 \x6c " ),
438+ (RX , b"\x02 \x61 \x7a \x79 \x20 \x64 \x6f \x67 " ),
439+ (RX , b"\x03 \x0a \x74 \x68 \x65 \x20 \x63 \x72 " ),
440+ (RX , b"\x04 \x61 \x7a \x79 \x20 \x66 \x6f \x78 " ),
441+ (RX , b"\x05 \x20 \x6a \x75 \x6d \x70 \x73 \x20 " ),
442+ (RX , b"\x06 \x6f \x76 \x65 \x72 \x20 \x74 \x68 " ),
443+ (RX , b"\x07 \x65 \x20 \x6c \x61 \x7a \x79 \x20 " ),
444+ (RX , b"\x08 \x64 \x6f \x67 \x0a \x74 \x68 \x65 " ),
445+ (RX , b"\x09 \x20 \x63 \x72 \x61 \x7a \x79 \x20 " ),
446+ (RX , b"\x0a \x66 \x6f \x78 \x20 \x6a \x75 \x6d " ),
447+ (RX , b"\x0b \x70 \x73 \x20 \x6f \x76 \x65 \x72 " ),
448+ (RX , b"\x0c \x20 \x74 \x68 \x65 \x20 \x6c \x61 " ),
449+ (RX , b"\x0d \x7a \x79 \x20 \x64 \x6f \x67 \x0a " ),
450+ (RX , b"\x0e \x74 \x68 \x65 \x20 \x63 \x72 \x61 " ),
451+ (RX , b"\x0f \x7a \x79 \x20 \x66 \x6f \x78 \x20 " ),
452+ (RX , b"\x10 \x6a \x75 \x6d \x70 \x73 \x20 \x6f " ),
453+ (RX , b"\x11 \x76 \x65 \x72 \x20 \x74 \x68 \x65 " ),
454+ (RX , b"\x12 \x20 \x6c \x61 \x7a \x79 \x20 \x64 " ),
455+ (RX , b"\x13 \x6f \x67 \x0a \x74 \x68 \x65 \x20 " ),
456+ (RX , b"\x14 \x63 \x72 \x61 \x7a \x79 \x20 \x66 " ),
457+ (RX , b"\x15 \x6f \x78 \x20 \x6a \x75 \x6d \x70 " ),
458+ (RX , b"\x16 \x73 \x20 \x6f \x76 \x65 \x72 \x20 " ),
459+ (RX , b"\x17 \x74 \x68 \x65 \x20 \x6c \x61 \x7a " ),
460+ (RX , b"\x18 \x79 \x20 \x64 \x6f \x67 \x0a \x74 " ),
461+ (RX , b"\x19 \x68 \x65 \x20 \x63 \x72 \x61 \x7a " ),
462+ (RX , b"\x1a \x79 \x20 \x66 \x6f \x78 \x20 \x6a " ),
463+ (RX , b"\x1b \x75 \x6d \x70 \x73 \x20 \x6f \x76 " ),
464+ (RX , b"\x1c \x65 \x72 \x20 \x74 \x68 \x65 \x20 " ),
465+ (RX , b"\x1d \x6c \x61 \x7a \x79 \x20 \x64 \x6f " ),
466+ (RX , b"\x1e \x67 \x0a \x74 \x68 \x65 \x20 \x63 " ),
467+ (RX , b"\x1f \x72 \x61 \x7a \x79 \x20 \x66 \x6f " ),
468+ (RX , b"\x20 \x78 \x20 \x6a \x75 \x6d \x70 \x73 " ),
469+ (RX , b"\x21 \x20 \x6f \x76 \x65 \x72 \x20 \x74 " ),
470+ (RX , b"\x22 \x68 \x65 \x20 \x6c \x61 \x7a \x79 " ),
471+ (RX , b"\xa3 \x20 \x64 \x6f \x67 \x0a \x00 \x00 " ),
472+ (TX , b"\xa2 \x23 \x7f \x00 \x00 \x00 \x00 \x00 " ),
473+ (RX , b"\xc9 \x3b \x49 \x00 \x00 \x00 \x00 \x00 " ),
474+ (TX , b"\xa1 \x00 \x00 \x00 \x00 \x00 \x00 \x00 " ),
475+ ]
476+ data = []
477+ with self .network [2 ].sdo [0x1008 ].open ("r" , block_transfer = True ) as fp :
478+ data = fp .read ()
479+ assert data == 39 * "the crazy fox jumps over the lazy dog\n "
480+
173481 def test_writable_file (self ):
174482 self .data = [
175483 (TX , b'\x20 \x00 \x20 \x00 \x00 \x00 \x00 \x00 ' ),
0 commit comments