From ea7afd6c835280435559c4feac381b419f0fdb76 Mon Sep 17 00:00:00 2001 From: Aditya Raj Singh Date: Wed, 26 Aug 2026 02:59:20 +0530 Subject: [PATCH] test: isolate MikroTik scanner module stubs --- test/plugins/test_mikrotik_scan.py | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/test/plugins/test_mikrotik_scan.py b/test/plugins/test_mikrotik_scan.py index f7d20505..e42c0790 100644 --- a/test/plugins/test_mikrotik_scan.py +++ b/test/plugins/test_mikrotik_scan.py @@ -8,14 +8,15 @@ from unittest.mock import MagicMock, patch def _load_mikrotik_module(): - stubbed_module_names = [] + missing_module = object() + previous_modules = {} def stub(name, **attributes): + previous_modules[name] = sys.modules.get(name, missing_module) module = types.ModuleType(name) for attribute, value in attributes.items(): setattr(module, attribute, value) sys.modules[name] = module - stubbed_module_names.append(name) class TrapError(Exception): pass @@ -23,7 +24,7 @@ def _load_mikrotik_module(): stub( "plugin_helper", Plugin_Objects=MagicMock, - normalize_mac=lambda mac: mac.strip().lower(), + normalize_mac=lambda mac: mac.strip().lower().replace("-", ":"), ) stub("logger", mylog=MagicMock(), Logger=MagicMock()) stub("helper", get_setting_value=MagicMock(return_value="UTC")) @@ -36,10 +37,14 @@ def _load_mikrotik_module(): module_path = Path(__file__).resolve().parents[2] / "server" / "plugins" / "mikrotik_scan" / "mikrotik.py" spec = importlib.util.spec_from_file_location("mikrotik_scan", module_path) module = importlib.util.module_from_spec(spec) - spec.loader.exec_module(module) - - for name in stubbed_module_names: - sys.modules.pop(name, None) + try: + spec.loader.exec_module(module) + finally: + for name, previous_module in previous_modules.items(): + if previous_module is missing_module: + sys.modules.pop(name, None) + else: + sys.modules[name] = previous_module return module @@ -63,15 +68,15 @@ def _lease(lease_id, address, mac_address, status="bound"): def test_disabled_lease_without_mac_does_not_abort_remaining_leases(): leases = [ - _lease("*1", "192.168.1.2", "aa:bb:cc:dd:ee:01"), + _lease("*1", "192.168.1.2", "aa-bb-cc-dd-ee-01"), _lease("*2", "192.168.1.5", None, status="waiting"), - _lease("*3", "192.168.1.8", "aa:bb:cc:dd:ee:03"), + _lease("*3", "192.168.1.8", "aa-bb-cc-dd-ee-03"), ] api = MagicMock(return_value=leases) plugin_objects = MagicMock() mikrotik.MT_USER = "user" - mikrotik.MT_PASS = "password" + mikrotik.MT_PASS = None mikrotik.MT_HOST = "192.168.1.1" mikrotik.MT_PORT = 8728