% Scapy OPC DA layer tests

+ Test Request Packet
= OpcDaRequest
opcdaRequestPacket_Dissect = hex_bytes(b'050000830000000000640000000000150000003c000600050000c41d0a9c0000d7028c761299f7bf00000000')
elem1 = raw(OpcDaMessage(opcdaRequestPacket_Dissect))

opcdaRequestPacket_Build = OpcDaMessage(OpcDaMessage= \
OpcDaHeaderMessage (versionMajor=5,versionMinor=0,pduType=0, \
    pfc_flags = 131,integerRepresentation='bigEndian',\
    characterRepresentation='ascii',floatingPointRepresentation='ieee',\
    res=0)/ OpcDaHeaderN(fragLength=100,authLength=0,callID=21)\
    / OpcDaRequest(allocHint=60,contextId=6,opNum=5,\
    uuid=b'0000c41d-0a9c-0000-d702-8c761299f7bf',stubData=RequestStubData(\
    versionMajor=0,versionMinor=0,stubdata='')))
elem2 = raw(opcdaRequestPacket_Build)

assert  elem1 == elem2

= OpcDaRequestLE
opcdaRequestLEPacket_Dissect = hex_bytes(b'050000831000000064000000150000003c000000060005001dc400009c0a0000d7028c761299f7bf000000000000000000000000512d4e34ab431449a2cf7784b21b3ea1')
elem1 = raw(OpcDaMessage(opcdaRequestLEPacket_Dissect))

opcdaRequestLEPacket_Build = OpcDaMessage(OpcDaMessage= \
OpcDaHeaderMessage (versionMajor=5,versionMinor=0,pduType=0, \
    pfc_flags = 131,integerRepresentation='littleEndian',\
    characterRepresentation='ascii',floatingPointRepresentation='ieee',\
    res=0)/ OpcDaHeaderNLE(fragLength=100,authLength=0,callID=21)\
    / OpcDaRequestLE (allocHint=60,contextId=6,opNum=5,\
    uuid=b'0000c41d-0a9c-0000-d702-8c761299f7bf',\
    stubData=RequestStubDataLE(versionMajor=0,versionMinor=0,\
    stubdata=b'\x00\x00\x00\x00\x00\x00\x00\x00Q-N4\xabC\x14I\xa2\xcfw\x84\xb2\x1b>\xa1')))
elem2 = raw(opcdaRequestLEPacket_Build)

assert  elem1 == elem2


+ Test Ping Packet
= OpcDaPing
opcdaPingPacket_Dissect = hex_bytes(b'0500010310000000640000001500000000')
elem1 = raw(OpcDaMessage(opcdaPingPacket_Dissect))

opcdaPingPacket_Build = OpcDaMessage(OpcDaMessage= \
    OpcDaHeaderMessage (versionMajor=5,versionMinor=0,pduType=1, \
    pfc_flags = 3,integerRepresentation='littleEndian',\
    characterRepresentation='ascii',floatingPointRepresentation='ieee',\
    res=0)/ OpcDaHeaderNLE(fragLength=100,authLength=0,callID=21)\
    / OpcDaPing()) / '\x00'
elem2 = raw(opcdaPingPacket_Build)

assert  elem1 == elem2


+ Test Response Packets
= OpcDaResponse
opcDaResponsePacket_Dissect = hex_bytes(b'050002030000000000d4000000000015000000bc00060000303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030')
elem1 = raw(OpcDaMessage(opcDaResponsePacket_Dissect))

opcDaResponsePacket_Build = OpcDaMessage(OpcDaMessage= \
    OpcDaHeaderMessage (versionMajor=5,versionMinor=0,pduType=2, \
    pfc_flags = 3,integerRepresentation='bigEndian',\
    characterRepresentation='ascii',floatingPointRepresentation='ieee',\
    res=0)/ OpcDaHeaderN(fragLength=212,authLength=0,callID=21)\
    / OpcDaResponse(allocHint=188,contextId=6,cancelCount=0,reserved=0,\
        stubData=b'0'*(212-32)))
elem2 = raw(opcDaResponsePacket_Build)

assert  elem1 == elem2

= OpcDaResponseLE
opcDaResponseLEPacket_Dissect = hex_bytes(b'0500020310000000d400000015000000bc00000006000000303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030')
elem1 = raw(OpcDaMessage(opcDaResponseLEPacket_Dissect))

opcDaResponseLEPacket_Build = OpcDaMessage(OpcDaMessage= \
    OpcDaHeaderMessage (versionMajor=5,versionMinor=0,pduType=2, \
    pfc_flags = 3,integerRepresentation='littleEndian',\
    characterRepresentation='ascii',floatingPointRepresentation='ieee',\
    res=0)/ OpcDaHeaderNLE(fragLength=212,authLength=0,callID=21)\
    / OpcDaResponseLE(allocHint=188,contextId=6,cancelCount=0,reserved=0,\
        stubData=b'0'*(212-32)))
elem2 = raw(opcDaResponseLEPacket_Build)

assert  elem1 == elem2

# + Test Fault Packet
# No example yet
# OpcDaFault
# OpcDaFaultLE

# + Test Working
# No example yet
# OpcDaWorking

# + Test No Call Packet
# No example yet
# OpcDaNoCall
# OpcDaNoCallLE

# + Test Reject Packet
# No example yet
# OpcDaReject
# OpcDaRejectLE

# + Test Ack Packet
# No example yet
# OpcDaAck

# + Test Cl_cancel Packet
# No example yet
# OpcDaCl_cancel
# OpcDaCl_cancelLE

# + Test Fack Packet
# No example yet
# OpcDaFack

# + Test Cancel ack Packet
# No example yet
# OpcDaCancel_ack
# OpcDaCancel_ackLE

# + Test Bind Packet
# OpcDaBind
# OpcDaBindLE

# + Test Bind ack Packet
# OpcDaBind_ack

# + Test Bind no ack Packet
# No example yet
# OpcDaBind_nack


+ Test Alter_context
= OpcDaAlter_context
opcDaAlter_contextPacket_Dissect = hex_bytes(b'05000e0300000000004800000000001716d016d00008294500000001070001000101000000000000c00000000000004600000000045d888aeb1cc9119fe808002b10486002000000')
elem1 = raw(OpcDaMessage(opcDaAlter_contextPacket_Dissect))

ocDaAlter_contextPacket_Build = OpcDaMessage(OpcDaMessage= \
    OpcDaHeaderMessage (versionMajor=5,versionMinor=0,pduType=14, \
    pfc_flags = 3,integerRepresentation='bigEndian',\
    characterRepresentation='ascii',floatingPointRepresentation='ieee',\
    res=0)/ OpcDaHeaderN(fragLength=72,authLength=0,callID=23)\
    / OpcDaAlter_context(maxXmitFrag=5840,maxRecvtFrag=5840,\
        assocGroupId=534853)) \
    / '\x00\x00\x00\x01\x07\x00\x01\x00\x01\x01\x00\x00\x00\x00\x00\x00\xc0'\
    '\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x00\x04\x5d\x88\x8a\xeb\x1c\xc9'\
    '\x11\x9f\xe8\x08\x00\x2b\x10\x48\x60\x02\x00\x00\x00'
elem2 = raw(ocDaAlter_contextPacket_Build)

= OpcDaAlter_contextLE
opcDaAlter_contextLEPacket_Dissect = hex_bytes(b'05000e03100000004800000017000000d016d0164529080001000000070001000101000000000000c00000000000004600000000045d888aeb1cc9119fe808002b10486002000000')
elem1 = raw(OpcDaMessage(opcDaAlter_contextLEPacket_Dissect))

ocDaAlter_contextLEPacket_Build = OpcDaMessage(OpcDaMessage= \
    OpcDaHeaderMessage (versionMajor=5,versionMinor=0,pduType=14, \
    pfc_flags = 3,integerRepresentation='littleEndian',\
    characterRepresentation='ascii',floatingPointRepresentation='ieee',\
    res=0)/ OpcDaHeaderNLE(fragLength=72,authLength=0,callID=23)\
    / OpcDaAlter_contextLE(maxXmitFrag=5840,maxRecvtFrag=5840,\
        assocGroupId=534853)) \
    / '\x01\x00\x00\x00\x07\x00\x01\x00\x01\x01\x00\x00\x00\x00\x00\x00\xc0'\
    '\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x00\x04\x5d\x88\x8a\xeb\x1c\xc9'\
    '\x11\x9f\xe8\x08\x00\x2b\x10\x48\x60\x02\x00\x00\x00'
elem2 = raw(ocDaAlter_contextLEPacket_Build)

+ Test Alter_context_Resp
= OpcDaAlter_Context_Resp
= OpcDaAlter_Context_RespLE

# + Test Shutdown Packet
# No example yet
# OpcDaShutdown

# + Test Co_cancel Packet
# No example yet
# OpcDaCo_cancel
# OpcDaCo_cancelLE

# + Test Orphaned Packet
# No example yet
# OpcDaOrphaned
