63 lines
2.8 KiB
Python
63 lines
2.8 KiB
Python
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()
|