• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1% Tests for nfs module
2############
3############
4+  Packet Creation Tests
5
6= Create subpackets
7Fattr3()
8File_Object()
9Object_Name()
10WCC_Attr()
11File_From_Dir_Plus()
12File_From_Dir()
13Sattr3()
14
15= Create NFS Calls
16NULL_Call()
17GETATTR_Call()
18SETATTR_Call()
19LOOKUP_Call()
20ACCESS_Call()
21READLINK_Call()
22READ_Call()
23WRITE_Call()
24CREATE_Call()
25MKDIR_Call()
26SYMLINK_Call()
27REMOVE_Call()
28RMDIR_Call()
29RENAME_Call()
30LINK_Call()
31READDIR_Call()
32READDIRPLUS_Call()
33FSSTAT_Call()
34FSINFO_Call()
35PATHCONF_Call()
36COMMIT_Call()
37
38= Create NFS Successful replies
39
40GETATTR_Reply(status=0)
41SETATTR_Reply(status=0)
42LOOKUP_Reply(status=0)
43ACCESS_Reply(status=0)
44READLINK_Reply(status=0)
45READ_Reply(status=0)
46WRITE_Reply(status=0)
47CREATE_Reply(status=0)
48MKDIR_Reply(status=0)
49SYMLINK_Reply(status=0)
50REMOVE_Reply(status=0)
51RMDIR_Reply(status=0)
52RENAME_Reply(status=0)
53LINK_Reply(status=0)
54READDIR_Reply(status=0)
55READDIRPLUS_Reply(status=0)
56FSSTAT_Reply(status=0)
57FSINFO_Reply(status=0)
58PATHCONF_Reply(status=0)
59COMMIT_Reply(status=0)
60
61= Create NFS Failed replies
62GETATTR_Reply(status=1)
63SETATTR_Reply(status=1)
64LOOKUP_Reply(status=1)
65ACCESS_Reply(status=1)
66READLINK_Reply(status=1)
67READ_Reply(status=1)
68WRITE_Reply(status=1)
69CREATE_Reply(status=1)
70MKDIR_Reply(status=1)
71SYMLINK_Reply(status=1)
72REMOVE_Reply(status=1)
73RMDIR_Reply(status=1)
74RENAME_Reply(status=1)
75LINK_Reply(status=1)
76READDIR_Reply(status=1)
77READDIRPLUS_Reply(status=1)
78FSSTAT_Reply(status=1)
79FSINFO_Reply(status=1)
80PATHCONF_Reply(status=1)
81COMMIT_Reply(status=1)
82
83+ Test RPC Call layer bindings
84
85= Layer Bindings for NFS Calls
86from scapy.contrib.oncrpc import *
87pkt = RPC()/RPC_Call()/NULL_Call()
88assert (pkt.mtype, pkt.program, pkt.pversion, pkt.procedure) == (0, 100003, 3, 0)
89pkt = RPC()/RPC_Call()/GETATTR_Call()
90assert (pkt.mtype, pkt.program, pkt.pversion, pkt.procedure) == (0, 100003, 3, 1)
91pkt = RPC()/RPC_Call()/SETATTR_Call()
92assert (pkt.mtype, pkt.program, pkt.pversion, pkt.procedure) == (0, 100003, 3, 2)
93pkt = RPC()/RPC_Call()/LOOKUP_Call()
94assert (pkt.mtype, pkt.program, pkt.pversion, pkt.procedure) == (0, 100003, 3, 3)
95pkt = RPC()/RPC_Call()/ACCESS_Call()
96assert (pkt.mtype, pkt.program, pkt.pversion, pkt.procedure) == (0, 100003, 3, 4)
97pkt = RPC()/RPC_Call()/READLINK_Call()
98assert (pkt.mtype, pkt.program, pkt.pversion, pkt.procedure) == (0, 100003, 3, 5)
99pkt = RPC()/RPC_Call()/READ_Call()
100assert (pkt.mtype, pkt.program, pkt.pversion, pkt.procedure) == (0, 100003, 3, 6)
101pkt = RPC()/RPC_Call()/WRITE_Call()
102assert (pkt.mtype, pkt.program, pkt.pversion, pkt.procedure) == (0, 100003, 3, 7)
103pkt = RPC()/RPC_Call()/CREATE_Call()
104assert (pkt.mtype, pkt.program, pkt.pversion, pkt.procedure) == (0, 100003, 3, 8)
105pkt = RPC()/RPC_Call()/MKDIR_Call()
106assert (pkt.mtype, pkt.program, pkt.pversion, pkt.procedure) == (0, 100003, 3, 9)
107pkt = RPC()/RPC_Call()/SYMLINK_Call()
108assert (pkt.mtype, pkt.program, pkt.pversion, pkt.procedure) == (0, 100003, 3, 10)
109pkt = RPC()/RPC_Call()/REMOVE_Call()
110assert (pkt.mtype, pkt.program, pkt.pversion, pkt.procedure) == (0, 100003, 3, 12)
111pkt = RPC()/RPC_Call()/RMDIR_Call()
112assert (pkt.mtype, pkt.program, pkt.pversion, pkt.procedure) == (0, 100003, 3, 13)
113pkt = RPC()/RPC_Call()/RENAME_Call()
114assert (pkt.mtype, pkt.program, pkt.pversion, pkt.procedure) == (0, 100003, 3, 14)
115pkt = RPC()/RPC_Call()/LINK_Call()
116assert (pkt.mtype, pkt.program, pkt.pversion, pkt.procedure) == (0, 100003, 3, 15)
117pkt = RPC()/RPC_Call()/READDIR_Call()
118assert (pkt.mtype, pkt.program, pkt.pversion, pkt.procedure) == (0, 100003, 3, 16)
119pkt = RPC()/RPC_Call()/READDIRPLUS_Call()
120assert (pkt.mtype, pkt.program, pkt.pversion, pkt.procedure) == (0, 100003, 3, 17)
121pkt = RPC()/RPC_Call()/FSSTAT_Call()
122assert (pkt.mtype, pkt.program, pkt.pversion, pkt.procedure) == (0, 100003, 3, 18)
123pkt = RPC()/RPC_Call()/FSINFO_Call()
124assert (pkt.mtype, pkt.program, pkt.pversion, pkt.procedure) == (0, 100003, 3, 19)
125pkt = RPC()/RPC_Call()/PATHCONF_Call()
126assert (pkt.mtype, pkt.program, pkt.pversion, pkt.procedure) == (0, 100003, 3, 20)
127pkt = RPC()/RPC_Call()/COMMIT_Call()
128assert (pkt.mtype, pkt.program, pkt.pversion, pkt.procedure) == (0, 100003, 3, 21)
129
130= Layer Bindings for NFS Replies
131from scapy.contrib.oncrpc import *
132pkt = RPC()/RPC_Reply()/NULL_Reply()
133assert pkt.mtype==1
134pkt = RPC()/RPC_Reply()/GETATTR_Reply()
135assert pkt.mtype==1
136pkt = RPC()/RPC_Reply()/SETATTR_Reply()
137assert pkt.mtype==1
138pkt = RPC()/RPC_Reply()/LOOKUP_Reply()
139assert pkt.mtype==1
140pkt = RPC()/RPC_Reply()/ACCESS_Reply()
141assert pkt.mtype==1
142pkt = RPC()/RPC_Reply()/READLINK_Reply()
143assert pkt.mtype==1
144pkt = RPC()/RPC_Reply()/READ_Reply()
145assert pkt.mtype==1
146pkt = RPC()/RPC_Reply()/WRITE_Reply()
147assert pkt.mtype==1
148pkt = RPC()/RPC_Reply()/CREATE_Reply()
149assert pkt.mtype==1
150pkt = RPC()/RPC_Reply()/MKDIR_Reply()
151assert pkt.mtype==1
152pkt = RPC()/RPC_Reply()/SYMLINK_Reply()
153assert pkt.mtype==1
154pkt = RPC()/RPC_Reply()/REMOVE_Reply()
155assert pkt.mtype==1
156pkt = RPC()/RPC_Reply()/RMDIR_Reply()
157assert pkt.mtype==1
158pkt = RPC()/RPC_Reply()/RENAME_Reply()
159assert pkt.mtype==1
160pkt = RPC()/RPC_Reply()/LINK_Reply()
161assert pkt.mtype==1
162pkt = RPC()/RPC_Reply()/READDIR_Reply()
163assert pkt.mtype==1
164pkt = RPC()/RPC_Reply()/READDIRPLUS_Reply()
165assert pkt.mtype==1
166pkt = RPC()/RPC_Reply()/FSSTAT_Reply()
167assert pkt.mtype==1
168pkt = RPC()/RPC_Reply()/FSINFO_Reply()
169assert pkt.mtype==1
170pkt = RPC()/RPC_Reply()/PATHCONF_Reply()
171assert pkt.mtype==1
172pkt = RPC()/RPC_Reply()/COMMIT_Reply()
173assert pkt.mtype==1
174
175+ Test Built Packets Against Raw Strings
176
177= Built NFS Calls vs Raw Strings
178pkt = GETATTR_Call(
179    filehandle=File_Object(
180        length=4,
181        fh='file'
182    )
183)
184assert bytes(pkt) == b'\x00\x00\x00\x04file'
185
186pkt = LOOKUP_Call(
187    dir=File_Object(
188        length=3,
189        fh='DIR',
190        fill='\x00'
191    ),
192    filename=Object_Name(
193        length=4,
194        _name='File'
195    )
196)
197assert bytes(pkt) == b'\x00\x00\x00\x03DIR\x00\x00\x00\x00\x04File'
198
199pkt = FSINFO_Call(
200    filehandle=File_Object(
201        length=4,
202        fh='file'
203    )
204)
205assert bytes(pkt) == b'\x00\x00\x00\x04file'
206
207pkt = PATHCONF_Call(
208    filehandle=File_Object(
209        length=4,
210        fh='file'
211    )
212)
213assert bytes(pkt) == b'\x00\x00\x00\x04file'
214
215pkt = ACCESS_Call(
216    filehandle=File_Object(
217        length=4,
218        fh='file',
219    ),
220    check_access='READ'
221)
222assert bytes(pkt) == b'\x00\x00\x00\x04file\x00\x00\x00\x01'
223
224pkt = READDIRPLUS_Call(
225    filehandle=File_Object(
226        length=4,
227        fh='file'
228    ),
229    cookie=0xffffffffffffffff,
230    verifier=0xaaaaaaaaaaaaaaaa,
231    dircount=512,
232    maxcount=4096
233)
234assert bytes(pkt) == b'\x00\x00\x00\x04file\xff\xff\xff\xff\xff\xff\xff\xff\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\x00\x00\x02\x00\x00\x00\x10\x00'
235
236pkt = WRITE_Call(
237    filehandle=File_Object(
238        length=4,
239        fh='file',
240    ),
241    offset=0xffffffffffffffff,
242    count=0xaaaaaaaa,
243    stable='UNSTABLE',
244    length=8,
245    contents='\x00\x01\x02\x03\x04\x05\x06\x07'
246)
247assert bytes(pkt) == b'\x00\x00\x00\x04file\xff\xff\xff\xff\xff\xff\xff\xff\xaa\xaa\xaa\xaa\x00\x00\x00\x00\x00\x00\x00\x08\x00\x01\x02\x03\x04\x05\x06\x07'
248
249pkt = COMMIT_Call(
250    filehandle=File_Object(
251        length=4,
252        fh='file'
253    ),
254    offset=0xffffffffffffffff,
255    count=0xaaaaaaaa
256)
257assert bytes(pkt) == b'\x00\x00\x00\x04file\xff\xff\xff\xff\xff\xff\xff\xff\xaa\xaa\xaa\xaa'
258
259pkt = SETATTR_Call(
260    filehandle=File_Object(
261        length=4,
262        fh='file'
263    ),
264    attributes=Sattr3(
265        set_mode='SET', mode=0o755,
266        set_uid='SET', uid=1,
267        set_gid='SET', gid=1,
268        set_size='SET', size=0xffffffffffffffff,
269        set_atime='CLIENT TIME', atime_s=0xffffffff, atime_ns=0xffffffff,
270        set_mtime='CLIENT TIME', mtime_s=0xaaaaaaaa, mtime_ns=0xaaaaaaaa
271    ),
272    check=0xffffffff
273)
274assert bytes(pkt) == b'\x00\x00\x00\x04file\x00\x00\x00\x01\x00\x00\x01\xed\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x02\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x02\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xff\xff\xff\xff'
275
276pkt = FSSTAT_Call(
277    filehandle=File_Object(
278        length=4,
279        fh='file'
280    )
281)
282assert bytes(pkt) == b'\x00\x00\x00\x04file'
283
284pkt = CREATE_Call(
285    dir=File_Object(
286        length=3,
287        fh='DIR',
288        fill='\x00'
289    ),
290    filename=Object_Name(
291        length=4,
292        _name='File'
293    ),
294    create_mode='EXCLUSIVE',
295    verifier=0xffffffffffffffff
296)
297assert bytes(pkt) == b'\x00\x00\x00\x03DIR\x00\x00\x00\x00\x04File\x00\x00\x00\x02\xff\xff\xff\xff\xff\xff\xff\xff'
298
299pkt = REMOVE_Call(
300    dir=File_Object(
301        length=3,
302        fh='DIR',
303        fill='\x00'
304    ),
305    filename=Object_Name(
306        length=4,
307        _name='File'
308    )
309)
310assert bytes(pkt) == b'\x00\x00\x00\x03DIR\x00\x00\x00\x00\x04File'
311
312pkt = READDIR_Call(
313    filehandle=File_Object(
314        length=4,
315        fh='file'
316    ),
317    cookie=0xffffffffffffffff,
318    verifier=0xaaaaaaaaaaaaaaaa,
319    count=0xabcdef12
320)
321assert bytes(pkt) == b'\x00\x00\x00\x04file\xff\xff\xff\xff\xff\xff\xff\xff\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xab\xcd\xef\x12'
322
323pkt = RENAME_Call(
324    dir_from=File_Object(
325        length=8,
326        fh='DIR_FROM'
327    ),
328    name_from=Object_Name(
329        length=9,
330        _name='NAME_FROM',
331        fill='\x00\x00\x00'
332    ),
333    dir_to=File_Object(
334        length=6,
335        fh='DIR_TO',
336        fill='\x00\x00'
337    ),
338    name_to=Object_Name(
339        length=7,
340        _name='NAME_TO',
341        fill='\x00'
342    )
343)
344assert bytes(pkt) == b'\x00\x00\x00\x08DIR_FROM\x00\x00\x00\tNAME_FROM\x00\x00\x00\x00\x00\x00\x06DIR_TO\x00\x00\x00\x00\x00\x07NAME_TO\x00'
345
346pkt = LINK_Call(
347    filehandle=File_Object(
348        length=4,
349        fh='file'
350    ),
351    link_dir=File_Object(
352        length=8,
353        fh='LINK_DIR'
354    ),
355    link_name=Object_Name(
356        length=9,
357        _name='LINK_NAME',
358        fill='\x00\x00\x00'
359    )
360)
361assert bytes(pkt) == b'\x00\x00\x00\x04file\x00\x00\x00\x08LINK_DIR\x00\x00\x00\tLINK_NAME\x00\x00\x00'
362
363pkt = RMDIR_Call(
364    dir=File_Object(
365        length=3,
366        fh='DIR',
367        fill='\x00'
368    ),
369    filename=Object_Name(
370        length=4,
371        _name='File'
372    )
373)
374assert bytes(pkt) == b'\x00\x00\x00\x03DIR\x00\x00\x00\x00\x04File'
375
376pkt = READLINK_Call(
377    filehandle=File_Object(
378        length=4,
379        fh='file'
380    )
381)
382assert bytes(pkt) == b'\x00\x00\x00\x04file'
383
384pkt = READ_Call(
385    filehandle=File_Object(
386        length=4,
387        fh='file'
388    ),
389    offset=0xffffffffffffffff,
390    count=0xaaaaaaaa
391)
392assert bytes(pkt) == b'\x00\x00\x00\x04file\xff\xff\xff\xff\xff\xff\xff\xff\xaa\xaa\xaa\xaa'
393
394pkt = MKDIR_Call(
395    dir=File_Object(
396        length=3,
397        fh='DIR',
398        fill='\x00'
399    ),
400    dir_name=Object_Name(
401        length=4,
402        _name='DIR_NAME'
403    ),
404    attributes=Sattr3(
405        set_mode='SET', mode=0o755,
406        set_uid='SET', uid=1,
407        set_gid='SET', gid=1,
408        set_size='SET', size=0xffffffffffffffff,
409        set_atime='CLIENT TIME', atime_s=0xffffffff, atime_ns=0xffffffff,
410        set_mtime='CLIENT TIME', mtime_s=0xaaaaaaaa, mtime_ns=0xaaaaaaaa
411    )
412)
413assert bytes(pkt) == b'\x00\x00\x00\x03DIR\x00\x00\x00\x00\x04DIR_NAME\x00\x00\x00\x01\x00\x00\x01\xed\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x02\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x02\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa'
414
415pkt = SYMLINK_Call(
416    dir=File_Object(
417        length=3,
418        fh='DIR',
419        fill='\x00'
420    ),
421    dir_name=Object_Name(
422        length=4,
423        _name='DIR_NAME'
424    ),
425    attributes=Sattr3(
426        set_mode='SET', mode=0o755,
427        set_uid='SET', uid=1,
428        set_gid='SET', gid=1,
429        set_size='SET', size=0xffffffffffffffff,
430        set_atime='CLIENT TIME', atime_s=0xffffffff, atime_ns=0xffffffff,
431        set_mtime='CLIENT TIME', mtime_s=0xaaaaaaaa, mtime_ns=0xaaaaaaaa
432    ),
433    link_name=Object_Name(
434        length=9,
435        _name='LINK_NAME',
436        fill='\x00\x00\x00'
437    )
438)
439assert bytes(pkt) == b'\x00\x00\x00\x03DIR\x00\x00\x00\x00\x04DIR_NAME\x00\x00\x00\x01\x00\x00\x01\xed\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x02\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x02\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\x00\x00\x00\tLINK_NAME\x00\x00\x00'
440
441
442= Built NFS Replies vs Raw Strings
443
444pkt = GETATTR_Reply(
445    status=0,
446    attributes=Fattr3(
447        type='NF3DIR',
448        mode=0o755,
449        nlink=1,
450        uid=2,
451        gid=3,
452        size=0xffffffffffffffff,
453        used=0xaaaaaaaaaaaaaaaa,
454        rdev=[4, 5],
455        fsid=0xbbbbbbbbbbbbbbbb,
456        fileid=0xcccccccccccccccc,
457        atime_s=0xdddddddd,
458        atime_ns=0xeeeeeeee,
459        mtime_s=0xffffffff,
460        mtime_ns=0x11111111,
461        ctime_s=0x22222222,
462        ctime_ns=0x33333333
463    )
464)
465assert bytes(pkt) == b'\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x01\xed\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x03\xff\xff\xff\xff\xff\xff\xff\xff\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\x00\x00\x00\x04\x00\x00\x00\x05\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xdd\xdd\xdd\xdd\xee\xee\xee\xee\xff\xff\xff\xff\x11\x11\x11\x11""""3333'
466
467pkt = LOOKUP_Reply(
468    status='NFS3_OK',
469    filehandle=File_Object(
470        length=4,
471        fh='file'
472    ),
473    af_file=1,
474    file_attributes=Fattr3(
475        type='NF3REG',
476        mode=0o755,
477        nlink=1,
478        uid=2,
479        gid=3,
480        size=0xffffffffffffffff,
481        used=0xaaaaaaaaaaaaaaaa,
482        rdev=[4, 5],
483        fsid=0xbbbbbbbbbbbbbbbb,
484        fileid=0xcccccccccccccccc,
485        atime_s=0xdddddddd,
486        atime_ns=0xeeeeeeee,
487        mtime_s=0xffffffff,
488        mtime_ns=0x11111111,
489        ctime_s=0x22222222,
490        ctime_ns=0x33333333
491    ),
492    af_dir=1,
493    dir_attributes=Fattr3(
494        type='NF3DIR',
495        mode=0o755,
496        nlink=1,
497        uid=2,
498        gid=3,
499        size=0xffffffffffffffff,
500        used=0xaaaaaaaaaaaaaaaa,
501        rdev=[4, 5],
502        fsid=0xbbbbbbbbbbbbbbbb,
503        fileid=0xcccccccccccccccc,
504        atime_s=0xdddddddd,
505        atime_ns=0xeeeeeeee,
506        mtime_s=0xffffffff,
507        mtime_ns=0x11111111,
508        ctime_s=0x22222222,
509        ctime_ns=0x33333333
510    )
511)
512assert bytes(pkt) == b'\x00\x00\x00\x00\x00\x00\x00\x04file\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x01\xed\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x03\xff\xff\xff\xff\xff\xff\xff\xff\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\x00\x00\x00\x04\x00\x00\x00\x05\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xdd\xdd\xdd\xdd\xee\xee\xee\xee\xff\xff\xff\xff\x11\x11\x11\x11""""3333\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x01\xed\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x03\xff\xff\xff\xff\xff\xff\xff\xff\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\x00\x00\x00\x04\x00\x00\x00\x05\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xdd\xdd\xdd\xdd\xee\xee\xee\xee\xff\xff\xff\xff\x11\x11\x11\x11""""3333'
513
514pkt = FSINFO_Reply(
515    status=0,
516    attributes_follow=1,
517    attributes=Fattr3(
518        type='NF3REG',
519        mode=0o755,
520        nlink=1,
521        uid=2,
522        gid=3,
523        size=0xffffffffffffffff,
524        used=0xaaaaaaaaaaaaaaaa,
525        rdev=[4, 5],
526        fsid=0xbbbbbbbbbbbbbbbb,
527        fileid=0xcccccccccccccccc,
528        atime_s=0xdddddddd,
529        atime_ns=0xeeeeeeee,
530        mtime_s=0xffffffff,
531        mtime_ns=0x11111111,
532        ctime_s=0x22222222,
533        ctime_ns=0x33333333
534    ),
535    rtmax=1,
536    rtpref=2,
537    rtmult=3,
538    wtmax=4,
539    wtpref=5,
540    wtmult=6,
541    dtpref=7,
542    maxfilesize=0xa,
543    timedelta_s=0xb,
544    timedelta_ns=0xc,
545    properties=0xd
546)
547assert bytes(pkt) == b'\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x01\xed\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x03\xff\xff\xff\xff\xff\xff\xff\xff\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\x00\x00\x00\x04\x00\x00\x00\x05\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xdd\xdd\xdd\xdd\xee\xee\xee\xee\xff\xff\xff\xff\x11\x11\x11\x11""""3333\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x06\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\n\x00\x00\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\r'
548
549pkt = PATHCONF_Reply(
550    status=0,
551    attributes_follow=1,
552    attributes=Fattr3(
553        type='NF3DIR',
554        mode=0o755,
555        nlink=1,
556        uid=2,
557        gid=3,
558        size=0xffffffffffffffff,
559        used=0xaaaaaaaaaaaaaaaa,
560        rdev=[4, 5],
561        fsid=0xbbbbbbbbbbbbbbbb,
562        fileid=0xcccccccccccccccc,
563        atime_s=0xdddddddd,
564        atime_ns=0xeeeeeeee,
565        mtime_s=0xffffffff,
566        mtime_ns=0x11111111,
567        ctime_s=0x22222222,
568        ctime_ns=0x33333333
569    ),
570    linkmax=1,
571    name_max=2,
572    no_trunc='YES',
573    chown_restricted='YES',
574    case_insensitive='YES',
575    case_preserving='YES'
576)
577assert bytes(pkt) == b'\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x01\xed\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x03\xff\xff\xff\xff\xff\xff\xff\xff\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\x00\x00\x00\x04\x00\x00\x00\x05\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xdd\xdd\xdd\xdd\xee\xee\xee\xee\xff\xff\xff\xff\x11\x11\x11\x11""""3333\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01'
578
579pkt = ACCESS_Reply(
580    status=0,
581    attributes_follow=1,
582    attributes=Fattr3(
583        type='NF3REG',
584        mode=0o755,
585        nlink=1,
586        uid=2,
587        gid=3,
588        size=0xffffffffffffffff,
589        used=0xaaaaaaaaaaaaaaaa,
590        rdev=[4, 5],
591        fsid=0xbbbbbbbbbbbbbbbb,
592        fileid=0xcccccccccccccccc,
593        atime_s=0xdddddddd,
594        atime_ns=0xeeeeeeee,
595        mtime_s=0xffffffff,
596        mtime_ns=0x11111111,
597        ctime_s=0x22222222,
598        ctime_ns=0x33333333
599    ),
600    access_rights=10
601)
602assert bytes(pkt) == b'\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x01\xed\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x03\xff\xff\xff\xff\xff\xff\xff\xff\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\x00\x00\x00\x04\x00\x00\x00\x05\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xdd\xdd\xdd\xdd\xee\xee\xee\xee\xff\xff\xff\xff\x11\x11\x11\x11""""3333\x00\x00\x00\n'
603
604pkt = READDIRPLUS_Reply(status=0, attributes_follow=1,
605                        attributes=Fattr3(type='NF3DIR', mode=0o755, nlink=1, uid=2,
606                                          gid=3, size=0xffffffffffffffff, used=0xaaaaaaaaaaaaaaaa,
607                                          rdev=[4, 5], fsid=0xbbbbbbbbbbbbbbbb, fileid=0xcccccccccccccccc,
608                                          atime_s=0xdddddddd, atime_ns=0xeeeeeeee, mtime_s=0xffffffff,
609                                          mtime_ns=0x11111111, ctime_s=0x22222222, ctime_ns=0x33333333),
610                        verifier=0xa, value_follows=1,
611                        files=[File_From_Dir_Plus(fileid=0xa,
612                                                  filename=Object_Name(length=5, _name='file1', fill='\x00\x00\x00'),
613                                                  cookie=0xb, attributes_follow=1,
614                                                  attributes=Fattr3(type='NF3REG', mode=0o755, nlink=1, uid=2, gid=3,
615                                                                    size=0xffffffffffffffff, used=0xaaaaaaaaaaaaaaaa,
616                                                                    rdev=[4, 5], fsid=0xbbbbbbbbbbbbbbbb,
617                                                                    fileid=0xcccccccccccccccc, atime_s=0xdddddddd,
618                                                                    atime_ns=0xeeeeeeee, mtime_s=0xffffffff,
619                                                                    mtime_ns=0x11111111, ctime_s=0x22222222,
620                                                                    ctime_ns=0x33333333),
621                                                  handle_follows=1, filehandle=File_Object(length=3, fh='fh1', fill='\x00'),
622                                                  value_follows=1),
623                        File_From_Dir_Plus(fileid=0xb, filename=Object_Name(length=5, _name='file2', fill='\x00\x00\x00'),
624                        cookie=0xc, attributes_follow=1, attributes=Fattr3(type='NF3REG', mode=0o755, nlink=1, uid=2,
625                        gid=3, size=0xffffffffffffffff, used=0xaaaaaaaaaaaaaaaa, rdev=[4, 5], fsid=0xbbbbbbbbbbbbbbbb,
626                        fileid=0xcccccccccccccccc, atime_s=0xdddddddd, atime_ns=0xeeeeeeee, mtime_s=0xffffffff,
627                        mtime_ns=0x11111111, ctime_s=0x22222222, ctime_ns=0x33333333), handle_follows=1,
628                        filehandle=File_Object(length=3, fh='fh2', fill='\x00'), value_follows=0)
629                        ], eof=1)
630assert bytes(pkt) == b'\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x01\xed\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x03\xff\xff\xff\xff\xff\xff\xff\xff\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\x00\x00\x00\x04\x00\x00\x00\x05\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xdd\xdd\xdd\xdd\xee\xee\xee\xee\xff\xff\xff\xff\x11\x11\x11\x11""""3333\x00\x00\x00\x00\x00\x00\x00\n\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\n\x00\x00\x00\x05file1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x01\xed\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x03\xff\xff\xff\xff\xff\xff\xff\xff\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\x00\x00\x00\x04\x00\x00\x00\x05\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xdd\xdd\xdd\xdd\xee\xee\xee\xee\xff\xff\xff\xff\x11\x11\x11\x11""""3333\x00\x00\x00\x01\x00\x00\x00\x03fh1\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x05file2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x01\xed\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x03\xff\xff\xff\xff\xff\xff\xff\xff\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\x00\x00\x00\x04\x00\x00\x00\x05\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xdd\xdd\xdd\xdd\xee\xee\xee\xee\xff\xff\xff\xff\x11\x11\x11\x11""""3333\x00\x00\x00\x01\x00\x00\x00\x03fh2\x00\x00\x00\x00\x00\x00\x00\x00\x01'
631
632pkt = WRITE_Reply(
633    status=0,
634    af_before=1,
635    attributes_before=WCC_Attr(
636        size=0xa,
637        mtime_s=0xffffffff,
638        mtime_ns=0xeeeeeeee,
639        ctime_s=0xdddddddd,
640        ctime_ns=0xcccccccc
641    ),
642    af_after=1,
643    attributes_after=Fattr3(
644        type='NF3REG',
645        mode=0o755,
646        nlink=1,
647        uid=2,
648        gid=3,
649        size=0xffffffffffffffff,
650        used=0xaaaaaaaaaaaaaaaa,
651        rdev=[4, 5],
652        fsid=0xbbbbbbbbbbbbbbbb,
653        fileid=0xcccccccccccccccc,
654        atime_s=0xdddddddd,
655        atime_ns=0xeeeeeeee,
656        mtime_s=0xffffffff,
657        mtime_ns=0x11111111,
658        ctime_s=0x22222222,
659        ctime_ns=0x33333333
660    ),
661    count=0xffffffff,
662    committed='STABLE',
663    verifier=0xffffffffffffffff
664)
665assert bytes(pkt) == b'\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\n\xff\xff\xff\xff\xee\xee\xee\xee\xdd\xdd\xdd\xdd\xcc\xcc\xcc\xcc\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x01\xed\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x03\xff\xff\xff\xff\xff\xff\xff\xff\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\x00\x00\x00\x04\x00\x00\x00\x05\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xdd\xdd\xdd\xdd\xee\xee\xee\xee\xff\xff\xff\xff\x11\x11\x11\x11""""3333\xff\xff\xff\xff\x00\x00\x00\x01\xff\xff\xff\xff\xff\xff\xff\xff'
666
667pkt = COMMIT_Reply(
668    status=0,
669    af_before=1,
670    attributes_before=WCC_Attr(
671        size=0xa,
672        mtime_s=0xffffffff,
673        mtime_ns=0xeeeeeeee,
674        ctime_s=0xdddddddd,
675        ctime_ns=0xcccccccc
676    ),
677    af_after=1,
678    attributes_after=Fattr3(
679        type='NF3REG',
680        mode=0o755,
681        nlink=1,
682        uid=2,
683        gid=3,
684        size=0xffffffffffffffff,
685        used=0xaaaaaaaaaaaaaaaa,
686        rdev=[4, 5],
687        fsid=0xbbbbbbbbbbbbbbbb,
688        fileid=0xcccccccccccccccc,
689        atime_s=0xdddddddd,
690        atime_ns=0xeeeeeeee,
691        mtime_s=0xffffffff,
692        mtime_ns=0x11111111,
693        ctime_s=0x22222222,
694        ctime_ns=0x33333333
695    ),
696    verifier=0xffffffffffffffff
697)
698assert bytes(pkt) == b'\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\n\xff\xff\xff\xff\xee\xee\xee\xee\xdd\xdd\xdd\xdd\xcc\xcc\xcc\xcc\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x01\xed\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x03\xff\xff\xff\xff\xff\xff\xff\xff\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\x00\x00\x00\x04\x00\x00\x00\x05\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xdd\xdd\xdd\xdd\xee\xee\xee\xee\xff\xff\xff\xff\x11\x11\x11\x11""""3333\xff\xff\xff\xff\xff\xff\xff\xff'
699
700pkt = SETATTR_Reply(
701    status=0,
702    af_before=1,
703    attributes_before=WCC_Attr(
704        size=0xa,
705        mtime_s=0xffffffff,
706        mtime_ns=0xeeeeeeee,
707        ctime_s=0xdddddddd,
708        ctime_ns=0xcccccccc
709    ),
710    af_after=1,
711    attributes_after=Fattr3(
712        type='NF3REG',
713        mode=0o755,
714        nlink=1,
715        uid=2,
716        gid=3,
717        size=0xffffffffffffffff,
718        used=0xaaaaaaaaaaaaaaaa,
719        rdev=[4, 5],
720        fsid=0xbbbbbbbbbbbbbbbb,
721        fileid=0xcccccccccccccccc,
722        atime_s=0xdddddddd,
723        atime_ns=0xeeeeeeee,
724        mtime_s=0xffffffff,
725        mtime_ns=0x11111111,
726        ctime_s=0x22222222,
727        ctime_ns=0x33333333
728    )
729)
730assert bytes(pkt) == b'\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\n\xff\xff\xff\xff\xee\xee\xee\xee\xdd\xdd\xdd\xdd\xcc\xcc\xcc\xcc\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x01\xed\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x03\xff\xff\xff\xff\xff\xff\xff\xff\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\x00\x00\x00\x04\x00\x00\x00\x05\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xdd\xdd\xdd\xdd\xee\xee\xee\xee\xff\xff\xff\xff\x11\x11\x11\x11""""3333'
731
732pkt = FSSTAT_Reply(
733    status=0,
734    attributes_follow=1,
735    attributes=Fattr3(
736        type='NF3REG',
737        mode=0o755,
738        nlink=1,
739        uid=2,
740        gid=3,
741        size=0xffffffffffffffff,
742        used=0xaaaaaaaaaaaaaaaa,
743        rdev=[4, 5],
744        fsid=0xbbbbbbbbbbbbbbbb,
745        fileid=0xcccccccccccccccc,
746        atime_s=0xdddddddd,
747        atime_ns=0xeeeeeeee,
748        mtime_s=0xffffffff,
749        mtime_ns=0x11111111,
750        ctime_s=0x22222222,
751        ctime_ns=0x33333333
752    ),
753    tbytes=1,
754    fbytes=2,
755    abytes=3,
756    tfiles=4,
757    afiles=5,
758    invarsec=6
759)
760assert bytes(pkt) == b'\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x01\xed\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x03\xff\xff\xff\xff\xff\xff\xff\xff\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\x00\x00\x00\x04\x00\x00\x00\x05\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xdd\xdd\xdd\xdd\xee\xee\xee\xee\xff\xff\xff\xff\x11\x11\x11\x11""""3333\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x06'
761
762pkt =  CREATE_Reply(
763    status=0,
764    handle_follows=1,
765    filehandle=File_Object(
766        length=4,
767        fh='file'
768    ),
769    attributes_follow=1,
770    attributes=Fattr3(
771        type='NF3REG',
772        mode=0o755,
773        nlink=1,
774        uid=2,
775        gid=3,
776        size=0xffffffffffffffff,
777        used=0xaaaaaaaaaaaaaaaa,
778        rdev=[4, 5],
779        fsid=0xbbbbbbbbbbbbbbbb,
780        fileid=0xcccccccccccccccc,
781        atime_s=0xdddddddd,
782        atime_ns=0xeeeeeeee,
783        mtime_s=0xffffffff,
784        mtime_ns=0x11111111,
785        ctime_s=0x22222222,
786        ctime_ns=0x33333333
787    ),
788    af_before=1,
789    dir_attributes_before=WCC_Attr(
790        size=0xa,
791        mtime_s=0xffffffff,
792        mtime_ns=0xeeeeeeee,
793        ctime_s=0xdddddddd,
794        ctime_ns=0xcccccccc
795    ),
796    af_after=1,
797    dir_attributes_after=Fattr3(
798        type='NF3REG',
799        mode=0o755,
800        nlink=1,
801        uid=2,
802        gid=3,
803        size=0xffffffffffffffff,
804        used=0xaaaaaaaaaaaaaaaa,
805        rdev=[4, 5],
806        fsid=0xbbbbbbbbbbbbbbbb,
807        fileid=0xcccccccccccccccc,
808        atime_s=0xdddddddd,
809        atime_ns=0xeeeeeeee,
810        mtime_s=0xffffffff,
811        mtime_ns=0x11111111,
812        ctime_s=0x22222222,
813        ctime_ns=0x33333333
814    )
815)
816assert bytes(pkt) == b'\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x04file\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x01\xed\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x03\xff\xff\xff\xff\xff\xff\xff\xff\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\x00\x00\x00\x04\x00\x00\x00\x05\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xdd\xdd\xdd\xdd\xee\xee\xee\xee\xff\xff\xff\xff\x11\x11\x11\x11""""3333\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\n\xff\xff\xff\xff\xee\xee\xee\xee\xdd\xdd\xdd\xdd\xcc\xcc\xcc\xcc\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x01\xed\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x03\xff\xff\xff\xff\xff\xff\xff\xff\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\x00\x00\x00\x04\x00\x00\x00\x05\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xdd\xdd\xdd\xdd\xee\xee\xee\xee\xff\xff\xff\xff\x11\x11\x11\x11""""3333'
817
818pkt = REMOVE_Reply(
819    status=0,
820    af_before=1,
821    attributes_before=WCC_Attr(
822        size=0xa,
823        mtime_s=0xffffffff,
824        mtime_ns=0xeeeeeeee,
825        ctime_s=0xdddddddd,
826        ctime_ns=0xcccccccc
827    ),
828    af_after=1,
829    attributes_after=Fattr3(
830        type='NF3REG',
831        mode=0o755,
832        nlink=1,
833        uid=2,
834        gid=3,
835        size=0xffffffffffffffff,
836        used=0xaaaaaaaaaaaaaaaa,
837        rdev=[4, 5],
838        fsid=0xbbbbbbbbbbbbbbbb,
839        fileid=0xcccccccccccccccc,
840        atime_s=0xdddddddd,
841        atime_ns=0xeeeeeeee,
842        mtime_s=0xffffffff,
843        mtime_ns=0x11111111,
844        ctime_s=0x22222222,
845        ctime_ns=0x33333333
846    )
847)
848assert bytes(pkt) == b'\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\n\xff\xff\xff\xff\xee\xee\xee\xee\xdd\xdd\xdd\xdd\xcc\xcc\xcc\xcc\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x01\xed\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x03\xff\xff\xff\xff\xff\xff\xff\xff\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\x00\x00\x00\x04\x00\x00\x00\x05\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xdd\xdd\xdd\xdd\xee\xee\xee\xee\xff\xff\xff\xff\x11\x11\x11\x11""""3333'
849
850pkt = READDIR_Reply(
851    status=0,
852    attributes_follow=1,
853    attributes=Fattr3(
854        type='NF3REG',
855        mode=0o755,
856        nlink=1,
857        uid=2,
858        gid=3,
859        size=0xffffffffffffffff,
860        used=0xaaaaaaaaaaaaaaaa,
861        rdev=[4, 5],
862        fsid=0xbbbbbbbbbbbbbbbb,
863        fileid=0xcccccccccccccccc,
864        atime_s=0xdddddddd,
865        atime_ns=0xeeeeeeee,
866        mtime_s=0xffffffff,
867        mtime_ns=0x11111111,
868        ctime_s=0x22222222,
869        ctime_ns=0x33333333
870    ),
871    verifier=0xffffffffffffffff,
872    value_follows=1,
873    files=[
874        File_From_Dir(
875            fileid=1,
876            filename=Object_Name(
877                length=5,
878                _name='file1',
879                fill='\x00\x00\x00'
880            ),
881            cookie=0xaaaaaaaaaaaaaaaa,
882            value_follows=0
883        )
884    ],
885    eof=1
886)
887assert bytes(pkt) == b'\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x01\xed\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x03\xff\xff\xff\xff\xff\xff\xff\xff\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\x00\x00\x00\x04\x00\x00\x00\x05\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xdd\xdd\xdd\xdd\xee\xee\xee\xee\xff\xff\xff\xff\x11\x11\x11\x11""""3333\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x05file1\x00\x00\x00\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\x00\x00\x00\x00\x00\x00\x00\x01'
888
889pkt = RENAME_Reply(
890    status=0,
891    af_before_f=1,
892    attributes_before_f=WCC_Attr(
893        size=0xa,
894        mtime_s=0xffffffff,
895        mtime_ns=0xeeeeeeee,
896        ctime_s=0xdddddddd,
897        ctime_ns=0xcccccccc
898    ),
899    af_after_f=1,
900    attributes_after_f=Fattr3(
901        type='NF3REG',
902        mode=0o755,
903        nlink=1,
904        uid=2,
905        gid=3,
906        size=0xffffffffffffffff,
907        used=0xaaaaaaaaaaaaaaaa,
908        rdev=[4, 5],
909        fsid=0xbbbbbbbbbbbbbbbb,
910        fileid=0xcccccccccccccccc,
911        atime_s=0xdddddddd,
912        atime_ns=0xeeeeeeee,
913        mtime_s=0xffffffff,
914        mtime_ns=0x11111111,
915        ctime_s=0x22222222,
916        ctime_ns=0x33333333
917    ),
918    af_before_t=1,
919    attributes_before_t=WCC_Attr(
920        size=0xa,
921        mtime_s=0xffffffff,
922        mtime_ns=0xeeeeeeee,
923        ctime_s=0xdddddddd,
924        ctime_ns=0xcccccccc
925    ),
926    af_after_t=1,
927    attributes_after_t=Fattr3(
928        type='NF3REG',
929        mode=0o755,
930        nlink=1,
931        uid=2,
932        gid=3,
933        size=0xffffffffffffffff,
934        used=0xaaaaaaaaaaaaaaaa,
935        rdev=[4, 5],
936        fsid=0xbbbbbbbbbbbbbbbb,
937        fileid=0xcccccccccccccccc,
938        atime_s=0xdddddddd,
939        atime_ns=0xeeeeeeee,
940        mtime_s=0xffffffff,
941        mtime_ns=0x11111111,
942        ctime_s=0x22222222,
943        ctime_ns=0x33333333
944    )
945)
946assert bytes(pkt) == b'\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\n\xff\xff\xff\xff\xee\xee\xee\xee\xdd\xdd\xdd\xdd\xcc\xcc\xcc\xcc\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x01\xed\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x03\xff\xff\xff\xff\xff\xff\xff\xff\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\x00\x00\x00\x04\x00\x00\x00\x05\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xdd\xdd\xdd\xdd\xee\xee\xee\xee\xff\xff\xff\xff\x11\x11\x11\x11""""3333\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\n\xff\xff\xff\xff\xee\xee\xee\xee\xdd\xdd\xdd\xdd\xcc\xcc\xcc\xcc\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x01\xed\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x03\xff\xff\xff\xff\xff\xff\xff\xff\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\x00\x00\x00\x04\x00\x00\x00\x05\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xdd\xdd\xdd\xdd\xee\xee\xee\xee\xff\xff\xff\xff\x11\x11\x11\x11""""3333'
947
948pkt = LINK_Reply(
949    status=0,
950    af_file=1,
951    file_attributes=Fattr3(
952        type='NF3REG',
953        mode=0o755,
954        nlink=1,
955        uid=2,
956        gid=3,
957        size=0xffffffffffffffff,
958        used=0xaaaaaaaaaaaaaaaa,
959        rdev=[4, 5],
960        fsid=0xbbbbbbbbbbbbbbbb,
961        fileid=0xcccccccccccccccc,
962        atime_s=0xdddddddd,
963        atime_ns=0xeeeeeeee,
964        mtime_s=0xffffffff,
965        mtime_ns=0x11111111,
966        ctime_s=0x22222222,
967        ctime_ns=0x33333333
968    ),
969    af_link_before=1,
970    link_attributes_before=WCC_Attr(
971        size=0xa,
972        mtime_s=0xffffffff,
973        mtime_ns=0xeeeeeeee,
974        ctime_s=0xdddddddd,
975        ctime_ns=0xcccccccc
976    ),
977    af_link_after=1,
978    link_attributes_after=Fattr3(
979        type='NF3REG',
980        mode=0o755,
981        nlink=1,
982        uid=2,
983        gid=3,
984        size=0xffffffffffffffff,
985        used=0xaaaaaaaaaaaaaaaa,
986        rdev=[4, 5],
987        fsid=0xbbbbbbbbbbbbbbbb,
988        fileid=0xcccccccccccccccc,
989        atime_s=0xdddddddd,
990        atime_ns=0xeeeeeeee,
991        mtime_s=0xffffffff,
992        mtime_ns=0x11111111,
993        ctime_s=0x22222222,
994        ctime_ns=0x33333333
995    )
996)
997assert bytes(pkt) == b'\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x01\xed\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x03\xff\xff\xff\xff\xff\xff\xff\xff\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\x00\x00\x00\x04\x00\x00\x00\x05\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xdd\xdd\xdd\xdd\xee\xee\xee\xee\xff\xff\xff\xff\x11\x11\x11\x11""""3333\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\n\xff\xff\xff\xff\xee\xee\xee\xee\xdd\xdd\xdd\xdd\xcc\xcc\xcc\xcc\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x01\xed\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x03\xff\xff\xff\xff\xff\xff\xff\xff\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\x00\x00\x00\x04\x00\x00\x00\x05\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xdd\xdd\xdd\xdd\xee\xee\xee\xee\xff\xff\xff\xff\x11\x11\x11\x11""""3333'
998
999pkt = RMDIR_Reply(
1000    status=0,
1001    af_before=1,
1002    attributes_before=WCC_Attr(
1003        size=0xa,
1004        mtime_s=0xffffffff,
1005        mtime_ns=0xeeeeeeee,
1006        ctime_s=0xdddddddd,
1007        ctime_ns=0xcccccccc
1008    ),
1009    af_after=1,
1010    attributes_after=Fattr3(
1011        type='NF3REG',
1012        mode=0o755,
1013        nlink=1,
1014        uid=2,
1015        gid=3,
1016        size=0xffffffffffffffff,
1017        used=0xaaaaaaaaaaaaaaaa,
1018        rdev=[4, 5],
1019        fsid=0xbbbbbbbbbbbbbbbb,
1020        fileid=0xcccccccccccccccc,
1021        atime_s=0xdddddddd,
1022        atime_ns=0xeeeeeeee,
1023        mtime_s=0xffffffff,
1024        mtime_ns=0x11111111,
1025        ctime_s=0x22222222,
1026        ctime_ns=0x33333333
1027    )
1028)
1029assert bytes(pkt) == b'\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\n\xff\xff\xff\xff\xee\xee\xee\xee\xdd\xdd\xdd\xdd\xcc\xcc\xcc\xcc\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x01\xed\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x03\xff\xff\xff\xff\xff\xff\xff\xff\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\x00\x00\x00\x04\x00\x00\x00\x05\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xdd\xdd\xdd\xdd\xee\xee\xee\xee\xff\xff\xff\xff\x11\x11\x11\x11""""3333'
1030
1031pkt = READLINK_Reply(
1032    status=0,
1033    attributes_follow=1,
1034    attributes=Fattr3(
1035        type='NF3REG',
1036        mode=0o755,
1037        nlink=1,
1038        uid=2,
1039        gid=3,
1040        size=0xffffffffffffffff,
1041        used=0xaaaaaaaaaaaaaaaa,
1042        rdev=[4, 5],
1043        fsid=0xbbbbbbbbbbbbbbbb,
1044        fileid=0xcccccccccccccccc,
1045        atime_s=0xdddddddd,
1046        atime_ns=0xeeeeeeee,
1047        mtime_s=0xffffffff,
1048        mtime_ns=0x11111111,
1049        ctime_s=0x22222222,
1050        ctime_ns=0x33333333
1051    ),
1052    filename=Object_Name(
1053        length=4,
1054        _name='file'
1055    )
1056)
1057assert bytes(pkt) == b'\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x01\xed\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x03\xff\xff\xff\xff\xff\xff\xff\xff\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\x00\x00\x00\x04\x00\x00\x00\x05\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xdd\xdd\xdd\xdd\xee\xee\xee\xee\xff\xff\xff\xff\x11\x11\x11\x11""""3333\x00\x00\x00\x04file'
1058
1059pkt = READ_Reply(
1060    status=0,
1061    attributes_follow=1,
1062    attributes=Fattr3(
1063        type='NF3REG',
1064        mode=0o755,
1065        nlink=1,
1066        uid=2,
1067        gid=3,
1068        size=0xffffffffffffffff,
1069        used=0xaaaaaaaaaaaaaaaa,
1070        rdev=[4, 5],
1071        fsid=0xbbbbbbbbbbbbbbbb,
1072        fileid=0xcccccccccccccccc,
1073        atime_s=0xdddddddd,
1074        atime_ns=0xeeeeeeee,
1075        mtime_s=0xffffffff,
1076        mtime_ns=0x11111111,
1077        ctime_s=0x22222222,
1078        ctime_ns=0x33333333
1079    ),
1080    count=8,
1081    eof=1,
1082    data_length=8,
1083    data='\x00\x01\x02\x03\x04\x05\x06\x07'
1084)
1085assert bytes(pkt) == b'\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x01\xed\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x03\xff\xff\xff\xff\xff\xff\xff\xff\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\x00\x00\x00\x04\x00\x00\x00\x05\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xdd\xdd\xdd\xdd\xee\xee\xee\xee\xff\xff\xff\xff\x11\x11\x11\x11""""3333\x00\x00\x00\x08\x00\x00\x00\x01\x00\x00\x00\x08\x00\x01\x02\x03\x04\x05\x06\x07'
1086
1087pkt = MKDIR_Reply(
1088    status=0,
1089    handle_follows=1,
1090    filehandle=File_Object(
1091        length=4,
1092        fh='file'
1093    ),
1094    attributes_follow=1,
1095    attributes=Fattr3(
1096        type='NF3REG',
1097        mode=0o755,
1098        nlink=1,
1099        uid=2,
1100        gid=3,
1101        size=0xffffffffffffffff,
1102        used=0xaaaaaaaaaaaaaaaa,
1103        rdev=[4, 5],
1104        fsid=0xbbbbbbbbbbbbbbbb,
1105        fileid=0xcccccccccccccccc,
1106        atime_s=0xdddddddd,
1107        atime_ns=0xeeeeeeee,
1108        mtime_s=0xffffffff,
1109        mtime_ns=0x11111111,
1110        ctime_s=0x22222222,
1111        ctime_ns=0x33333333
1112    ),
1113    af_before=1,
1114    dir_attributes_before=WCC_Attr(
1115        size=0xa,
1116        mtime_s=0xffffffff,
1117        mtime_ns=0xeeeeeeee,
1118        ctime_s=0xdddddddd,
1119        ctime_ns=0xcccccccc
1120    ),
1121    af_after=1,
1122    dir_attributes_after=Fattr3(
1123        type='NF3REG',
1124        mode=0o755,
1125        nlink=1,
1126        uid=2,
1127        gid=3,
1128        size=0xffffffffffffffff,
1129        used=0xaaaaaaaaaaaaaaaa,
1130        rdev=[4, 5],
1131        fsid=0xbbbbbbbbbbbbbbbb,
1132        fileid=0xcccccccccccccccc,
1133        atime_s=0xdddddddd,
1134        atime_ns=0xeeeeeeee,
1135        mtime_s=0xffffffff,
1136        mtime_ns=0x11111111,
1137        ctime_s=0x22222222,
1138        ctime_ns=0x33333333
1139    )
1140)
1141assert bytes(pkt) == b'\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x04file\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x01\xed\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x03\xff\xff\xff\xff\xff\xff\xff\xff\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\x00\x00\x00\x04\x00\x00\x00\x05\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xdd\xdd\xdd\xdd\xee\xee\xee\xee\xff\xff\xff\xff\x11\x11\x11\x11""""3333\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\n\xff\xff\xff\xff\xee\xee\xee\xee\xdd\xdd\xdd\xdd\xcc\xcc\xcc\xcc\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x01\xed\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x03\xff\xff\xff\xff\xff\xff\xff\xff\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\x00\x00\x00\x04\x00\x00\x00\x05\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xdd\xdd\xdd\xdd\xee\xee\xee\xee\xff\xff\xff\xff\x11\x11\x11\x11""""3333'
1142
1143pkt = SYMLINK_Reply(
1144    status=0,
1145    handle_follows=1,
1146    filehandle=File_Object(
1147        length=4,
1148        fh='file'
1149    ),
1150    attributes_follow=1,
1151    attributes=Fattr3(
1152        type='NF3REG',
1153        mode=0o755,
1154        nlink=1,
1155        uid=2,
1156        gid=3,
1157        size=0xffffffffffffffff,
1158        used=0xaaaaaaaaaaaaaaaa,
1159        rdev=[4, 5],
1160        fsid=0xbbbbbbbbbbbbbbbb,
1161        fileid=0xcccccccccccccccc,
1162        atime_s=0xdddddddd,
1163        atime_ns=0xeeeeeeee,
1164        mtime_s=0xffffffff,
1165        mtime_ns=0x11111111,
1166        ctime_s=0x22222222,
1167        ctime_ns=0x33333333
1168    ),
1169    af_before=1,
1170    dir_attributes_before=WCC_Attr(
1171        size=0xa,
1172        mtime_s=0xffffffff,
1173        mtime_ns=0xeeeeeeee,
1174        ctime_s=0xdddddddd,
1175        ctime_ns=0xcccccccc
1176    ),
1177    af_after=1,
1178    dir_attributes_after=Fattr3(
1179        type='NF3REG',
1180        mode=0o755,
1181        nlink=1,
1182        uid=2,
1183        gid=3,
1184        size=0xffffffffffffffff,
1185        used=0xaaaaaaaaaaaaaaaa,
1186        rdev=[4, 5],
1187        fsid=0xbbbbbbbbbbbbbbbb,
1188        fileid=0xcccccccccccccccc,
1189        atime_s=0xdddddddd,
1190        atime_ns=0xeeeeeeee,
1191        mtime_s=0xffffffff,
1192        mtime_ns=0x11111111,
1193        ctime_s=0x22222222,
1194        ctime_ns=0x33333333
1195    )
1196)
1197assert bytes(pkt) == b'\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x04file\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x01\xed\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x03\xff\xff\xff\xff\xff\xff\xff\xff\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\x00\x00\x00\x04\x00\x00\x00\x05\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xdd\xdd\xdd\xdd\xee\xee\xee\xee\xff\xff\xff\xff\x11\x11\x11\x11""""3333\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\n\xff\xff\xff\xff\xee\xee\xee\xee\xdd\xdd\xdd\xdd\xcc\xcc\xcc\xcc\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x01\xed\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x03\xff\xff\xff\xff\xff\xff\xff\xff\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\x00\x00\x00\x04\x00\x00\x00\x05\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xdd\xdd\xdd\xdd\xee\xee\xee\xee\xff\xff\xff\xff\x11\x11\x11\x11""""3333'
1198