first commit
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
import tempfile
|
||||
import unittest
|
||||
from pathlib import Path
|
||||
|
||||
from librenet_scanner.diagnostics import arp_scan_succeeded, parse_getcap_output
|
||||
from librenet_scanner.network import parse_neighbor_json
|
||||
from librenet_scanner.vendors import load_vendor_table, lookup_mac_vendor, parse_vendor_text
|
||||
|
||||
|
||||
class NeighborTests(unittest.TestCase):
|
||||
def test_neighbor_json_filters_unusable_entries(self):
|
||||
payload = r'''[
|
||||
{"dst":"192.168.10.2","lladdr":"aa:bb:cc:dd:ee:ff","state":["REACHABLE"]},
|
||||
{"dst":"192.168.10.3","lladdr":"11:22:33:44:55:66","state":["STALE"]},
|
||||
{"dst":"192.168.10.4","state":["INCOMPLETE"]},
|
||||
{"dst":"192.168.10.5","lladdr":"bad-mac","state":["REACHABLE"]}
|
||||
]'''
|
||||
entries = parse_neighbor_json(payload)
|
||||
self.assertEqual(len(entries), 2)
|
||||
self.assertEqual(entries[0].ip, "192.168.10.2")
|
||||
self.assertEqual(entries[0].mac, "AA:BB:CC:DD:EE:FF")
|
||||
self.assertEqual(entries[1].state, "STALE")
|
||||
|
||||
def test_invalid_neighbor_json_is_empty(self):
|
||||
self.assertEqual(parse_neighbor_json("not-json"), [])
|
||||
|
||||
|
||||
class VendorTests(unittest.TestCase):
|
||||
def test_parse_common_oui_formats(self):
|
||||
text = '''
|
||||
# comment
|
||||
00-11-22 (hex) Example Networks
|
||||
001122 (base 16) Example Networks Base
|
||||
AA:BB:CC Another Vendor
|
||||
AABBCCDDEE Precise Vendor
|
||||
'''
|
||||
table = parse_vendor_text(text)
|
||||
self.assertEqual(table["001122"], "Example Networks Base")
|
||||
self.assertEqual(table["AABBCC"], "Another Vendor")
|
||||
self.assertEqual(table["AABBCCDDEE"], "Precise Vendor")
|
||||
|
||||
def test_load_vendor_table(self):
|
||||
with tempfile.TemporaryDirectory() as tmp:
|
||||
p1 = Path(tmp) / "oui.txt"
|
||||
p2 = Path(tmp) / "mac-vendor.txt"
|
||||
p1.write_text("AABBCC Vendor Generic\n")
|
||||
p2.write_text("AABBCCDDEE Vendor Precise\n")
|
||||
table = load_vendor_table((p1, p2))
|
||||
self.assertEqual(table["AABBCC"], "Vendor Generic")
|
||||
self.assertEqual(table["AABBCCDDEE"], "Vendor Precise")
|
||||
|
||||
|
||||
class DiagnosticTests(unittest.TestCase):
|
||||
def test_getcap_parser(self):
|
||||
self.assertTrue(parse_getcap_output("/usr/sbin/arp-scan cap_net_raw=p\n"))
|
||||
self.assertFalse(parse_getcap_output(""))
|
||||
|
||||
def test_arp_scan_exit_code(self):
|
||||
self.assertTrue(arp_scan_succeeded(0))
|
||||
self.assertFalse(arp_scan_succeeded(1))
|
||||
self.assertFalse(arp_scan_succeeded(2))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user