% Tests for oncrpc module
############
############
+  Packet Creation Tests

= Create subpackets
Object_Name()
Auth_Unix()
Auth_RPCSEC_GSS()
Verifier_RPCSEC_GSS()

= Create ONC RPC Packets
RM_Header()
RPC()
RPC_Call()
RPC_Reply()

+ Test Layer bindings

= RPC Message type
pkt = RPC()/RPC_Call()
assert pkt.mtype==0
pkt = RPC()/RPC_Reply()
assert pkt.mtype==1

+ Test Built Packets vs Raw Strings

= Test Built Packets vs Raw Strings
pkt = RM_Header(
    rm=0x80000000
)
assert bytes(pkt) == b'\x80\x00\x00\x00'

pkt = RPC(
    xid=0xabcdef12,
    mtype='CALL'
)
assert bytes(pkt) == b'\xab\xcd\xef\x12\x00\x00\x00\x00'

pkt = RPC_Call(
    version=2,
    program=100005,
    pversion=3,
    procedure=1,
    aflavor='AUTH_UNIX',
    a_unix=Auth_Unix(
        stamp=0xffffffff,
        mname=Object_Name(
            length=5,
            _name='MNAME',
            fill='\x00\x00\x00'
        ),
        uid=1,
        gid=1,
        num_auxgids=1,
        auxgids=[0]
    ),
    vflavor=1,
    v_unix=Auth_Unix(
        stamp=0xffffffff,
        mname=Object_Name(
            length=5,
            _name='MNAME',
            fill='\x00\x00\x00'
        ),
        uid=1,
        gid=1,
        num_auxgids=1,
        auxgids=[0]
    )
)
assert bytes(pkt) == b'\x00\x00\x00\x02\x00\x01\x86\xa5\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00 \xff\xff\xff\xff\x00\x00\x00\x05MNAME\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x05MNAME\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00'

pkt = RPC_Call(
    version=2,
    program=100021,
    pversion=4,
    procedure=20,
    aflavor='RPCSEC_GSS',
    a_rpcsec_gss=Auth_RPCSEC_GSS(
        gss_version=1,
        gss_procedure=0,
        gss_seq_num=10,
        gss_service=1,
        gss_context=Object_Name(
            length=4,
            _name='AAAA',
            fill=''
        ),
    ),
    vflavor=6,
    v_rpcsec_gss=Verifier_RPCSEC_GSS(b"\x00\x00\x00\x04\x41\x41\x41\x41")
)
assert bytes(pkt) == b'\x00\x00\x00\x02\x00\x01\x86\xb5\x00\x00\x00\x04\x00\x00\x00\x14\x00\x00\x00\x06\x00\x00\x00\x18\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x01\x00\x00\x00\x04\x41\x41\x41\x41\x00\x00\x00\x06\x00\x00\x00\x04\x41\x41\x41\x41'

pkt = RPC_Reply(
    reply_stat=1,
    flavor=1,
    a_unix=Auth_Unix(
        stamp=0xffffffff,
        mname=Object_Name(
            length=5,
            _name='MNAME',
            fill='\x00\x00\x00'
        ),
        uid=1,
        gid=1,
        num_auxgids=1,
        auxgids=[0]
    ),
    length=32,
    accept_stat=1
)
assert bytes(pkt) == b'\x00\x00\x00\x01\x00\x00\x00\x01\xff\xff\xff\xff\x00\x00\x00\x05MNAME\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x01'
