@@ -170,6 +170,314 @@ def test_block_upload(self):
170
170
data = fp .read ()
171
171
self .assertEqual (data , 'Tiny Node - Mega Domains !' )
172
172
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
+
173
481
def test_writable_file (self ):
174
482
self .data = [
175
483
(TX , b'\x20 \x00 \x20 \x00 \x00 \x00 \x00 \x00 ' ),
0 commit comments