Files
RFP_Infinity-Vis/tests/test_wled_discovery.py

58 lines
2.2 KiB
Python

from __future__ import annotations
import unittest
from unittest.mock import patch
from app.network.wled import DiscoveredWledDevice, discover_wled_devices, fetch_wled_info, probe_wled_device
class WledDiscoveryTests(unittest.TestCase):
def test_fetch_wled_info_falls_back_to_json_endpoint(self) -> None:
with patch(
"app.network.wled._load_json",
side_effect=[
None,
{"info": {"name": "Tile 1", "mac": "AA:BB:CC:DD:EE:FF", "leds": {"count": 106}}},
],
):
result = fetch_wled_info("192.0.2.10")
self.assertIsNotNone(result)
payload, endpoint = result
self.assertEqual(endpoint, "/json")
self.assertEqual(payload["name"], "Tile 1")
def test_probe_wled_device_extracts_metadata(self) -> None:
with patch(
"app.network.wled.fetch_wled_info",
return_value=(
{"name": "Tile 1", "mac": "aa-bb-cc-dd-ee-ff", "leds": {"count": 106}},
"/json/info",
),
), patch("app.network.wled._reverse_dns_name", return_value="tile1.local"):
device = probe_wled_device("192.0.2.10")
self.assertIsNotNone(device)
self.assertEqual(device.ip_address, "192.0.2.10")
self.assertEqual(device.hostname, "tile1.local")
self.assertEqual(device.instance_name, "Tile 1")
self.assertEqual(device.mac_address, "AA:BB:CC:DD:EE:FF")
self.assertEqual(device.led_count, 106)
def test_discover_wled_devices_deduplicates_devices_by_mac(self) -> None:
responses = {
"host-a": DiscoveredWledDevice(ip_address="192.0.2.10", mac_address="AA:BB:CC:DD:EE:FF"),
"host-b": DiscoveredWledDevice(ip_address="192.0.2.10", mac_address="AA:BB:CC:DD:EE:FF"),
"host-c": None,
}
with patch("app.network.wled.probe_wled_device", side_effect=lambda host, timeout_s=0.35: responses[host]):
devices = discover_wled_devices(["host-a", "host-b", "host-c"], max_workers=1)
self.assertEqual(len(devices), 1)
self.assertEqual(devices[0].mac_address, "AA:BB:CC:DD:EE:FF")
if __name__ == "__main__":
unittest.main()