TEST: scan processing 5

Signed-off-by: jokob-sk <jokob.sk@gmail.com>
This commit is contained in:
jokob-sk
2026-02-06 18:21:24 +11:00
parent c1141fc9a8
commit d5d1684ef9
12 changed files with 38 additions and 80 deletions
+260
View File
@@ -0,0 +1,260 @@
"""
Unit tests for device field locking scenarios.
Tests all combinations of field sources (LOCKED, USER, NEWDEV, plugin name)
and verifies that plugin updates are correctly allowed/rejected based on
field source and SET_ALWAYS/SET_EMPTY configuration.
"""
from server.db.authoritative_handler import can_overwrite_field
def test_locked_source_prevents_plugin_overwrite():
result = can_overwrite_field(
field_name="devName",
current_value="ExistingName",
current_source="LOCKED",
plugin_prefix="ARPSCAN",
plugin_settings={"set_always": [], "set_empty": []},
field_value="New Name",
)
assert result is False
def test_user_source_prevents_plugin_overwrite():
result = can_overwrite_field(
field_name="devName",
current_value="UserName",
current_source="USER",
plugin_prefix="NBTSCAN",
plugin_settings={"set_always": [], "set_empty": []},
field_value="Plugin Discovered Name",
)
assert result is False
def test_newdev_source_allows_plugin_overwrite():
result = can_overwrite_field(
field_name="devName",
current_value="",
current_source="NEWDEV",
plugin_prefix="NBTSCAN",
plugin_settings={"set_always": [], "set_empty": []},
field_value="DiscoveredName",
)
assert result is True
def test_empty_current_source_allows_plugin_overwrite():
result = can_overwrite_field(
field_name="devName",
current_value="",
current_source="",
plugin_prefix="NBTSCAN",
plugin_settings={"set_always": [], "set_empty": []},
field_value="DiscoveredName",
)
assert result is True
def test_plugin_source_allows_same_plugin_overwrite_with_set_always():
result = can_overwrite_field(
field_name="devName",
current_value="OldName",
current_source="NBTSCAN",
plugin_prefix="NBTSCAN",
plugin_settings={"set_always": ["devName"], "set_empty": []},
field_value="NewName",
)
assert result is True
def test_plugin_source_cannot_overwrite_without_authorization():
result = can_overwrite_field(
field_name="devName",
current_value="OldName",
current_source="NBTSCAN",
plugin_prefix="NBTSCAN",
plugin_settings={"set_always": [], "set_empty": []},
field_value="NewName",
)
assert result is False
def test_plugin_source_allows_different_plugin_overwrite_with_set_always():
result = can_overwrite_field(
field_name="devVendor",
current_value="OldVendor",
current_source="ARPSCAN",
plugin_prefix="PIHOLEAPI",
plugin_settings={"set_always": ["devVendor"], "set_empty": []},
field_value="NewVendor",
)
assert result is True
def test_plugin_source_rejects_different_plugin_without_set_always():
result = can_overwrite_field(
field_name="devVendor",
current_value="OldVendor",
current_source="ARPSCAN",
plugin_prefix="PIHOLEAPI",
plugin_settings={"set_always": [], "set_empty": []},
field_value="NewVendor",
)
assert result is False
def test_set_empty_allows_overwrite_on_empty_field():
result = can_overwrite_field(
field_name="devName",
current_value="",
current_source="ARPSCAN",
plugin_prefix="PIHOLEAPI",
plugin_settings={"set_always": [], "set_empty": ["devName"]},
field_value="DiscoveredName",
)
assert result is True
def test_set_empty_rejects_overwrite_on_non_empty_field():
result = can_overwrite_field(
field_name="devName",
current_value="ExistingName",
current_source="ARPSCAN",
plugin_prefix="PIHOLEAPI",
plugin_settings={"set_always": [], "set_empty": ["devName"]},
field_value="NewName",
)
assert result is False
def test_empty_plugin_value_not_used():
# Allows overwrite as new value same as old
result = can_overwrite_field(
field_name="devName",
current_value="same value",
current_source="AVAHISCAN",
plugin_prefix="NBTSCAN",
plugin_settings={"set_always": [], "set_empty": []},
field_value="same value",
)
assert result is True
def test_whitespace_only_plugin_value_not_used():
result = can_overwrite_field(
field_name="devName",
current_value="",
current_source="NEWDEV",
plugin_prefix="NBTSCAN",
plugin_settings={"set_always": [], "set_empty": []},
field_value=" ",
)
assert result is False
def test_none_plugin_value_not_used():
result = can_overwrite_field(
field_name="devName",
current_value="",
current_source="NEWDEV",
plugin_prefix="NBTSCAN",
plugin_settings={"set_always": [], "set_empty": []},
field_value=None,
)
assert result is False
def test_set_always_overrides_plugin_ownership():
result = can_overwrite_field(
field_name="devVendor",
current_value="OldVendor",
current_source="ARPSCAN",
plugin_prefix="UNIFIAPI",
plugin_settings={"set_always": ["devVendor"], "set_empty": []},
field_value="NewVendor",
)
assert result is True
result = can_overwrite_field(
field_name="devVendor",
current_value="UserVendor",
current_source="USER",
plugin_prefix="UNIFIAPI",
plugin_settings={"set_always": ["devVendor"], "set_empty": []},
field_value="NewVendor",
)
assert result is False
result = can_overwrite_field(
field_name="devVendor",
current_value="LockedVendor",
current_source="LOCKED",
plugin_prefix="UNIFIAPI",
plugin_settings={"set_always": ["devVendor"], "set_empty": []},
field_value="NewVendor",
)
assert result is False
def test_multiple_plugins_set_always_scenarios():
plugins_scenarios = [
("ARPSCAN", "ARPSCAN", False),
("ARPSCAN", "ARPSCAN", True),
("ARPSCAN", "NBTSCAN", False),
("ARPSCAN", "PIHOLEAPI", True),
("ARPSCAN", "UNIFIAPI", True),
]
for current_source, plugin_prefix, has_set_always in plugins_scenarios:
result = can_overwrite_field(
field_name="devName",
current_value="ExistingName",
current_source=current_source,
plugin_prefix=plugin_prefix,
plugin_settings={"set_always": ["devName"] if has_set_always else [], "set_empty": []},
field_value="NewName",
)
if has_set_always:
assert result is True
else:
assert result is False
def test_different_fields_with_different_sources():
fields_sources = [
("devName", "USER", "UserValue"),
("devVendor", "ARPSCAN", "VendorX"),
("devLastIP", "NEWDEV", ""),
("devFQDN", "LOCKED", "locked.example.com"),
]
results = {}
for field_name, current_source, current_value in fields_sources:
results[field_name] = can_overwrite_field(
field_name=field_name,
current_value=current_value,
current_source=current_source,
plugin_prefix="NBTSCAN",
plugin_settings={"set_always": [], "set_empty": []},
field_value="NewValue",
)
assert results["devName"] is False
assert results["devVendor"] is False
assert results["devLastIP"] is True
assert results["devFQDN"] is False
def test_set_empty_with_empty_string_source():
result = can_overwrite_field(
field_name="devName",
current_value="",
current_source="",
plugin_prefix="PIHOLEAPI",
plugin_settings={"set_always": [], "set_empty": ["devName"]},
field_value="DiscoveredName",
)
assert result is True