import tempfile import unittest from pathlib import Path from unittest.mock import patch from librenet_scanner.models import Host from librenet_scanner.network import NetworkInterface, display_target, target_address_count, target_is_on_interface, validate_target from librenet_scanner.privileged_helper import command_for from librenet_scanner.storage import HistoryStore class TargetRangeTests(unittest.TestCase): def test_human_range_is_normalized_for_nmap(self): target = validate_target("192.168.10.1 - 192.168.10.254") self.assertEqual(target, "192.168.10.1-254") self.assertEqual(display_target(target), "192.168.10.1 - 192.168.10.254") self.assertEqual(target_address_count(target), 254) def test_range_must_stay_in_same_24(self): with self.assertRaises(ValueError): validate_target("192.168.10.250 - 192.168.11.2") def test_range_is_local_to_interface(self): iface = NetworkInterface("enp42s0", "192.168.10.1", 24, "192.168.10.0/24") self.assertTrue(target_is_on_interface("192.168.10.1-254", iface)) self.assertFalse(target_is_on_interface("192.168.11.1-254", iface)) class MetadataTests(unittest.TestCase): def test_favorite_group_note_roundtrip(self): with tempfile.TemporaryDirectory() as tmp: store = HistoryStore(Path(tmp) / "db.sqlite3") host = Host("192.168.10.20", hostname="pve01", mac="AA:BB:CC:DD:EE:FF") store.save_host_metadata(host, favorite=True, group_name="Infrastructure", note="Cluster principal") meta = store.host_metadata(host) self.assertTrue(meta["favorite"]) self.assertEqual(meta["group_name"], "Infrastructure") self.assertEqual(meta["note"], "Cluster principal") self.assertEqual(store.known_groups(), ["Infrastructure"]) def test_metadata_follows_mac_after_ip_change(self): with tempfile.TemporaryDirectory() as tmp: store = HistoryStore(Path(tmp) / "db.sqlite3") old = Host("192.168.10.20", mac="AA:BB:CC:DD:EE:FF") store.save_host_metadata(old, favorite=True) moved = Host("192.168.10.99", mac="AA:BB:CC:DD:EE:FF") self.assertTrue(store.host_metadata(moved)["favorite"]) class V03PrivilegedHelperTests(unittest.TestCase): def test_privileged_discovery_is_fixed(self): with patch("librenet_scanner.privileged_helper._trusted_binary", return_value="/usr/bin/nmap"): cmd = command_for("nmap-discover", ["192.168.10.1-254"]) self.assertEqual(cmd, ["/usr/bin/nmap", "-sn", "-n", "-T4", "--max-retries", "1", "-oX", "-", "192.168.10.1-254"]) def test_privileged_discovery_rejects_option_injection(self): with self.assertRaises(ValueError): command_for("nmap-discover", ["--script=evil"]) if __name__ == "__main__": unittest.main()