52 lines
2.0 KiB
Python
52 lines
2.0 KiB
Python
from __future__ import annotations
|
|
|
|
import unittest
|
|
|
|
from app.config.device_assignment import assign_device_to_tile, find_tile_for_device
|
|
from app.config.models import InfinityMirrorConfig, LogicalDisplayConfig, TileConfig
|
|
from app.network.wled import DiscoveredWledDevice
|
|
|
|
|
|
class DeviceAssignmentTests(unittest.TestCase):
|
|
def _config(self) -> InfinityMirrorConfig:
|
|
return InfinityMirrorConfig(
|
|
logical_display=LogicalDisplayConfig(rows=1, cols=2),
|
|
tiles=[
|
|
TileConfig(tile_id="r1c1", row=1, col=1, controller_ip="192.0.2.10", controller_mac="AA:BB:CC:DD:EE:01"),
|
|
TileConfig(tile_id="r1c2", row=1, col=2, controller_ip="192.0.2.11", controller_mac="AA:BB:CC:DD:EE:02"),
|
|
],
|
|
)
|
|
|
|
def test_find_tile_prefers_mac_match_over_stale_ip(self) -> None:
|
|
config = self._config()
|
|
device = DiscoveredWledDevice(ip_address="192.0.2.42", mac_address="AA:BB:CC:DD:EE:01")
|
|
|
|
matched = find_tile_for_device(config, device)
|
|
|
|
self.assertIsNotNone(matched)
|
|
self.assertEqual(matched.tile_id, "r1c1")
|
|
|
|
def test_assign_device_moves_previous_assignment_and_overwrites_target(self) -> None:
|
|
config = self._config()
|
|
device = DiscoveredWledDevice(
|
|
ip_address="192.0.2.42",
|
|
hostname="tile-42.local",
|
|
instance_name="Tile 42",
|
|
mac_address="AA:BB:CC:DD:EE:01",
|
|
)
|
|
|
|
assign_device_to_tile(config, device, "r1c2")
|
|
|
|
source_tile = config.tile_lookup()["r1c1"]
|
|
target_tile = config.tile_lookup()["r1c2"]
|
|
self.assertEqual(source_tile.controller_ip, "")
|
|
self.assertEqual(source_tile.controller_mac, "")
|
|
self.assertEqual(target_tile.controller_ip, "192.0.2.42")
|
|
self.assertEqual(target_tile.controller_host, "tile-42.local")
|
|
self.assertEqual(target_tile.controller_name, "Tile 42")
|
|
self.assertEqual(target_tile.controller_mac, "AA:BB:CC:DD:EE:01")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|