% Regression tests for Scapy

+Syntax check
= Import the homeplugg layer

from scapy.contrib.homepluggp import *
import binascii
#from scapy.all import 

# HomePlugGP

############
############
+ Basic tests

* Those test are here mainly to check nothing has been broken

= Most important packet to intrude a HPGP network
~ field
_xstr = binascii.unhexlify("0108600000010000000000000000040000000227cfe35f01e50a01c8a074ad04537cb54b88b62d49b35b51000000c1f2")
pkt = HomePlugAV(_xstr)
assert pkt.NewKey == b'\xc8\xa0t\xad\x04S|\xb5K\x88\xb6-I\xb3[Q' 
assert pkt.NetworkID == b"'\xcf\xe3_\x01\xe5\n"

= Some other important parsing tests
~ field
_xstr = b'\x01\x08`\x00\x00\x01\xaa\xaa\xaa\xaa\x00\x00\x00\x00\x04\x00\x00\x00\x00\x96F`Y\xbf\xf8\x05\x0164\xc5\xdf.nO}r\x05\xf5\x8d9)S\xc0\x00\x00\x00'
pkt = HomePlugAV(_xstr)
assert pkt.MyNonce == 0xaaaaaaaa
assert pkt.YourNonce == 0x0
assert pkt.PID == 4
assert pkt.NetworkID == b'\x96F`Y\xbf\xf8\x05'
assert pkt.NewKey == b'64\xc5\xdf.nO}r\x05\xf5\x8d9)S\xc0'

_xstr = b'\x01e`\x00\x00\xff\xff\xff\xff\xff\xff\n\x06\x01\xbc\xf2\xaf\xf1\x00\x04\x00\x00=\x83\xfb\xe2\xbb\x0b\xb8\x8a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
pkt = HomePlugAV(_xstr)
assert pkt.MSoundTargetMAC == 'ff:ff:ff:ff:ff:ff'
assert pkt.NumberMSounds == 10
assert pkt.TimeOut == 6
assert pkt.ResponseType == 1
assert pkt.ForwardingSTA == 'bc:f2:af:f1:00:04'
assert pkt.SecurityType == 0
assert pkt.RunID == b'=\x83\xfb\xe2\xbb\x0b\xb8\x8a'

_xstr = b'\x01n`\x00\x00\x00\x00\xbc\xf2\xaf\xf1\x00\x04=\x83\xfb\xe2\xbb\x0b\xb8\x8a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n:!\t\t\n\x06\x06\x0e\x07\x07\t\t\n\n\x0b\x0b\x0b\x0b\x0c\r\x0e\x0e\x0e\x0f\x0f\x0f\x0f\x11\x11\x11\x12\x12\x12\x12\x12\x13\x12\x12\x11\x11\x11\x10\x12\x12\x12\x11\x10\x0f\x0f\x10\x14\x12\x10\x10\x11\x12\x14\x16;'
pkt = HomePlugAV(_xstr)
assert len(pkt.Groups) == pkt.NumberOfGroups
assert pkt.NumberOfSounds == 10

_xstr = b'\x01v`\x00\x00\x00\x00\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\t\xe8jdY,w\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
pkt = HomePlugAV(_xstr)
assert pkt.SenderID == b'\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa'

= Some important manipulations
~ field
pkt = HomePlugAV(version=0x01)/CM_MNBC_SOUND_IND()
pkt.RandomValue="AAAAAAAAAA"
assert raw(pkt) == b'\x01v`\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00AAAAAAAAAA\x00\x00\x00\x00\x00\x00'

pkt = HomePlugAV()/CM_SET_KEY_REQ(YourNonce=0xaaaa, NewKey="b" * 16)
assert raw(pkt) == b'\x00\x08`\x00\xb0R\x00\x00\x00\x00\x00\x00\x00\xaa\xaa\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00bbbbbbbbbbbbbbbb' 
