Files
librenet-scanner/tests/test_v047.py
T
2026-08-23 09:52:32 +02:00

79 lines
3.1 KiB
Python

import json
import tempfile
import unittest
from pathlib import Path
from unittest.mock import patch
from librenet_scanner.online_vendor import (
PROVIDER_MACLOOKUP,
PROVIDER_MACVENDORS,
is_locally_administered,
lookup_online_vendor,
normalize_mac,
)
from librenet_scanner.storage import HistoryStore
from librenet_scanner.parsers import parse_arp_scan
ROOT = Path(__file__).resolve().parents[1]
class OnlineVendor047Tests(unittest.TestCase):
def test_arp_scan_locally_administered_is_not_mistaken_for_vendor(self):
hosts = parse_arp_scan("192.168.10.250\ta6:2b:b0:a5:49:a7\t(Unknown: locally administered) (DUP: 2)")
self.assertEqual(len(hosts), 1)
self.assertEqual(hosts[0].vendor, "")
def test_mac_normalization_and_laa_detection(self):
self.assertEqual(normalize_mac("a6:2b:b0:a5:49:a7"), "A6:2B:B0:A5:49:A7")
self.assertTrue(is_locally_administered("a6:2b:b0:a5:49:a7"))
self.assertFalse(is_locally_administered("00:11:22:33:44:55"))
def test_maclookup_response_supports_modern_assignment_metadata(self):
payload = {
"success": True,
"found": True,
"company": "TP-Link Corporation Limited",
"blockType": "MA-M",
"isRand": False,
"isPrivate": False,
}
with patch("librenet_scanner.online_vendor._request", return_value=json.dumps(payload).encode()):
result = lookup_online_vendor("00:11:22:33:44:55", PROVIDER_MACLOOKUP)
self.assertTrue(result.found)
self.assertEqual(result.vendor, "TP-Link Corporation Limited")
self.assertEqual(result.block_type, "MA-M")
def test_macvendors_plain_text_response(self):
with patch("librenet_scanner.online_vendor._request", return_value=b"TP-Link Technologies Co., Ltd.\n"):
result = lookup_online_vendor("00:11:22:33:44:55", PROVIDER_MACVENDORS)
self.assertEqual(result.vendor, "TP-Link Technologies Co., Ltd.")
self.assertTrue(result.found)
def test_online_cache_roundtrip(self):
with tempfile.TemporaryDirectory() as tmp:
store = HistoryStore(Path(tmp) / "history.sqlite3")
store.save_online_vendor_cache(
"00:11:22:33:44:55",
PROVIDER_MACLOOKUP,
vendor="Example Vendor",
found=True,
block_type="MA-L",
)
cached = store.online_vendor_cache("00-11-22-33-44-55", PROVIDER_MACLOOKUP)
self.assertIsNotNone(cached)
self.assertEqual(cached["vendor"], "Example Vendor")
self.assertTrue(cached["from_cache"])
def test_ui_exposes_opt_in_privacy_setting_and_manual_lookup(self):
ui = (ROOT / "src/librenet_scanner/ui.py").read_text()
self.assertIn('privacy/onlineMacLookupEnabled', ui)
self.assertIn('Interroger automatiquement une base en ligne', ui)
self.assertIn('L\'option est désactivée par défaut', ui)
self.assertIn('Rechercher en ligne', ui)
self.assertIn('_start_automatic_online_vendor_lookup()', ui)
if __name__ == "__main__":
unittest.main()