Files
NetAlertX/test/scan/test_sync_hub_node_backfill.py

91 lines
2.6 KiB
Python

"""Tests for update_sync_hub_node backfill."""
import sys
import os
from unittest.mock import patch
sys.path.insert(0, os.path.join(os.path.dirname(__file__), ".."))
from db_test_helpers import make_db, DummyDB # noqa: E402
from server.scan import device_handling
def _make_db(devices):
"""Create an in-memory DB with full schema and seed rows."""
conn = make_db()
cur = conn.cursor()
cur.executemany(
"INSERT INTO Devices (devMac, devSyncHubNode) VALUES (?, ?)",
devices,
)
conn.commit()
return conn
def _read_nodes(conn):
"""Return a dict of devMac -> devSyncHubNode."""
return {
row["devMac"]: row["devSyncHubNode"]
for row in conn.execute("SELECT devMac, devSyncHubNode FROM Devices")
}
@patch.object(device_handling, "get_setting_value", return_value="MyNode")
def test_backfill_empty_values(mock_setting):
"""Empty and null devSyncHubNode should be backfilled with SYNC_node_name."""
conn = _make_db([
("AA:AA:AA:AA:AA:01", ""),
("AA:AA:AA:AA:AA:02", None),
("AA:AA:AA:AA:AA:03", "null"),
])
device_handling.update_sync_hub_node(DummyDB(conn))
nodes = _read_nodes(conn)
assert nodes["AA:AA:AA:AA:AA:01"] == "MyNode"
assert nodes["AA:AA:AA:AA:AA:02"] == "MyNode"
assert nodes["AA:AA:AA:AA:AA:03"] == "MyNode"
@patch.object(device_handling, "get_setting_value", return_value="MyNode")
def test_no_overwrite_existing(mock_setting):
"""Devices with a real devSyncHubNode should not be overwritten."""
conn = _make_db([
("AA:AA:AA:AA:AA:01", "RemoteNode"),
("AA:AA:AA:AA:AA:02", ""),
])
device_handling.update_sync_hub_node(DummyDB(conn))
nodes = _read_nodes(conn)
assert nodes["AA:AA:AA:AA:AA:01"] == "RemoteNode"
assert nodes["AA:AA:AA:AA:AA:02"] == "MyNode"
@patch.object(device_handling, "get_setting_value", return_value="")
def test_noop_when_setting_empty(mock_setting):
"""No updates when SYNC_node_name is empty."""
conn = _make_db([
("AA:AA:AA:AA:AA:01", ""),
("AA:AA:AA:AA:AA:02", None),
])
device_handling.update_sync_hub_node(DummyDB(conn))
nodes = _read_nodes(conn)
assert nodes["AA:AA:AA:AA:AA:01"] == ""
assert nodes["AA:AA:AA:AA:AA:02"] is None
@patch.object(device_handling, "get_setting_value", return_value=None)
def test_noop_when_setting_none(mock_setting):
"""No updates when SYNC_node_name is None."""
conn = _make_db([
("AA:AA:AA:AA:AA:01", ""),
])
device_handling.update_sync_hub_node(DummyDB(conn))
nodes = _read_nodes(conn)
assert nodes["AA:AA:AA:AA:AA:01"] == ""