1% Regression tests for Scapy 2 3+Syntax check 4= Import the loraphy2wan layer 5 6from scapy.contrib.loraphy2wan import * 7from scapy.compat import raw 8 9# LoRa PHY to WAN 10 11############ 12############ 13+ Basic tests 14 15* Those test are here mainly to check nothing has been broken 16 17= Packet decoding 18~ field 19 20p = b'\x00\x00\x00\x00lovecafemeeetoo\x00iiS\x02LI' 21pkt = LoRa(p) 22assert pkt.Join_Request_Field[0].DevEUI == b'meeetoo\x00' 23assert pkt.Join_Request_Field[0].DevNonce == 26985 24 25p = b'\x0f0P@\xad\x15\x00`\x80\x06\x00\t\xca\xfe\x0c\x1d\x8d\x04\\\xb5' 26pkt = LoRa(p) 27assert pkt.MType == 2 28assert pkt.DataPayload == b'\xca\xfe' 29assert pkt.FCnt == 6 30assert pkt.FPort == 9 31assert pkt.FCtrl[0].ADR == 1 32assert pkt.DevAddr[0].NwkID == 0xad 33assert pkt.DevAddr[0].NwkAddr == 0x600015 34 35p = b'\x0f0P\x80\xad\x15\x00`\x00\x01\x00\t\xca\xfe:\x98\x89|\x8f\xd4' 36pkt = LoRa(p) 37assert pkt.MType == 4 38 39= Decoding an encrypted JA packet 40 41LoRa.encrypted = True 42p = b'\x00\x00\x00 \x086\xe2\x87\xa9\x80\\\xb7\xee\x9e_\xff|\x9e\xe9z' 43pkt = LoRa(p) 44assert pkt.Join_Accept_Encrypted == b'\x086\xe2\x87\xa9\x80\\\xb7\xee\x9e_\xff|\x9e\xe9z' 45 46= Packet crafting: generating an unencrypted JA frame 47 48ja = Join_Accept() 49ja.JoinAppNonce=0x6fe14a 50ja.NetID = 0x10203 51ja.DevAddr = 0x68e8cb1 52assert raw(ja) == b'J\xe1o\x03\x02\x01\xb1\x8c\x8e\x06\x00\x00' 53 54= Generating an unencrypted LoRa JA packet 55 56LoRa.encrypted = False 57pkt = LoRa(MType=0b001) 58pkt.Join_Accept_Field = [ja] 59assert raw(pkt) == b'\x00\x00\x00 J\xe1o\x03\x02\x01\xb1\x8c\x8e\x06\x00\x00\x00\x00\x00\x00' 60 61= Parsing Piggy back commands 62 63p = b'\r0\xc0\x80\xad\x15\x00`\x01\x01\x00\x02\xc0\xe3N\xb7\xc7\xae' 64pkt = LoRa(p) 65assert pkt.FOpts_up[0].CID == 2 66