import hashlib import json from tuya_re import crypto, lan_discovery as disc, lan_protocol as lp from tuya_re.const import LanCommand, UDP_KEY_SEED UDP_KEY = hashlib.md5(UDP_KEY_SEED).digest() def test_decode_broadcast_encrypted_55aa(): info = { "gwId": "dev123", "ip": "192.168.1.50", "version": "3.3", "productKey": "pk", } body = crypto.aes_ecb_encrypt(UDP_KEY, json.dumps(info).encode()) frame = lp.pack_frame(0, LanCommand.UDP, body, retcode=0) assert disc.decode_broadcast(frame) == info def test_decode_broadcast_plain_json_payload(): info = {"gwId": "d", "ip": "10.0.0.9", "version": "3.3"} # some devices' payloads are already plaintext JSON inside the frame frame = lp.pack_frame(0, LanCommand.UDP, json.dumps(info).encode(), retcode=0) assert disc.decode_broadcast(frame) == info def test_decode_broadcast_payload_raw_json(): info = {"gwId": "x", "ip": "10.0.0.1"} assert disc.decode_broadcast_payload(json.dumps(info).encode()) == info def test_decode_broadcast_payload_encrypted(): info = {"gwId": "y", "ip": "10.0.0.2"} enc = crypto.aes_ecb_encrypt(UDP_KEY, json.dumps(info).encode()) assert disc.decode_broadcast_payload(enc) == info