Files
fingerbot-cli/tests/test_lan_discovery.py
2026-07-05 16:39:15 -05:00

38 lines
1.2 KiB
Python

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