Skip to content

Commit 8538c87

Browse files
committed
FIX: lowercase MAC normalization across project v0.3
Signed-off-by: jokob-sk <jokob.sk@gmail.com>
1 parent 1bacb59 commit 8538c87

12 files changed

Lines changed: 72 additions & 66 deletions

test/api_endpoints/test_dbquery_endpoints.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ def client():
2626
@pytest.fixture(scope="session")
2727
def test_mac():
2828
# Generate a unique MAC for each test run
29-
return "AA:BB:CC:" + ":".join(f"{random.randint(0, 255):02X}" for _ in range(3))
29+
return "aa:bb:cc:" + ":".join(f"{random.randint(0, 255):02X}" for _ in range(3))
3030

3131

3232
def auth_headers(token):

test/api_endpoints/test_devices_endpoints.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ def client():
2424
@pytest.fixture
2525
def test_mac():
2626
# Generate a unique MAC for each test run
27-
return "AA:BB:CC:" + ":".join(f"{random.randint(0, 255):02X}" for _ in range(3))
27+
return "aa:bb:cc:" + ":".join(f"{random.randint(0, 255):02X}" for _ in range(3))
2828

2929

3030
def auth_headers(token):

test/api_endpoints/test_events_endpoints.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ def client():
2626
@pytest.fixture
2727
def test_mac():
2828
# Generate a unique MAC for each test run
29-
return "AA:BB:CC:" + ":".join(f"{random.randint(0, 255):02X}" for _ in range(3))
29+
return "aa:bb:cc:" + ":".join(f"{random.randint(0, 255):02X}" for _ in range(3))
3030

3131

3232
def auth_headers(token):
@@ -115,7 +115,7 @@ def test_get_events_totals(client, api_token):
115115
def test_delete_all_events(client, api_token, test_mac):
116116
# create two events
117117
create_event(client, api_token, test_mac)
118-
create_event(client, api_token, "FF:FF:FF:FF:FF:FF")
118+
create_event(client, api_token, "ff:ff:ff:ff:ff:ff")
119119

120120
resp = list_events(client, api_token)
121121
# At least the two we created should be present

test/api_endpoints/test_graphq_endpoints.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ def client():
2323
@pytest.fixture
2424
def test_mac():
2525
# Generate a unique MAC for each test run
26-
return "AA:BB:CC:" + ":".join(f"{random.randint(0, 255):02X}" for _ in range(3))
26+
return "aa:bb:cc:" + ":".join(f"{random.randint(0, 255):02X}" for _ in range(3))
2727

2828

2929
def auth_headers(token):

test/api_endpoints/test_history_endpoints.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ def client():
2424
@pytest.fixture
2525
def test_mac():
2626
# Generate a unique MAC for each test run
27-
return "AA:BB:CC:" + ":".join(f"{random.randint(0, 255):02X}" for _ in range(3))
27+
return "aa:bb:cc:" + ":".join(f"{random.randint(0, 255):02X}" for _ in range(3))
2828

2929

3030
def auth_headers(token):

test/api_endpoints/test_mcp_tools_endpoints.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ def test_set_device_alias_not_found(mock_update_col, client, api_token):
200200
mock_update_col.return_value = {"success": False, "error": "Device not found"}
201201

202202
payload = {"alias": "New Device Name"}
203-
response = client.post("/device/FF:FF:FF:FF:FF:FF/set-alias", json=payload, headers=auth_headers(api_token))
203+
response = client.post("/device/ff:ff:ff:ff:ff:ff/set-alias", json=payload, headers=auth_headers(api_token))
204204

205205
assert response.status_code == 200
206206
data = response.get_json()

test/api_endpoints/test_nettools_endpoints.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ def client():
1919
@pytest.fixture
2020
def test_mac():
2121
# Generate a unique MAC for each test run
22-
return "AA:BB:CC:" + ":".join(f"{random.randint(0, 255):02X}" for _ in range(3))
22+
return "aa:bb:cc:" + ":".join(f"{random.randint(0, 255):02X}" for _ in range(3))
2323

2424

2525
def auth_headers(token):

test/api_endpoints/test_sessions_endpoints.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ def client():
2626
@pytest.fixture
2727
def test_mac():
2828
# Generate a unique MAC for each test run
29-
return "AA:BB:CC:" + ":".join(f"{random.randint(0, 255):02X}" for _ in range(3))
29+
return "aa:bb:cc:" + ":".join(f"{random.randint(0, 255):02X}" for _ in range(3))
3030

3131

3232
def auth_headers(token):

test/api_endpoints/test_settings_endpoints.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ def client():
2424
@pytest.fixture
2525
def test_mac():
2626
# Generate a unique MAC for each test run
27-
return "AA:BB:CC:" + ":".join(f"{random.randint(0, 255):02X}" for _ in range(3))
27+
return "aa:bb:cc:" + ":".join(f"{random.randint(0, 255):02X}" for _ in range(3))
2828

2929

3030
def auth_headers(token):

test/scan/test_field_lock_scan_integration.py

Lines changed: 35 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ def test_create_new_devices_sets_sources(scan_db_for_new_devices):
159159
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
160160
""",
161161
(
162-
"AA:BB:CC:DD:EE:10",
162+
"aa:bb:cc:dd:ee:10",
163163
"DeviceOne",
164164
"AcmeVendor",
165165
"ARPSCAN",
@@ -176,7 +176,7 @@ def test_create_new_devices_sets_sources(scan_db_for_new_devices):
176176

177177
settings = {
178178
"NEWDEV_devType": "default-type",
179-
"NEWDEV_devParentMAC": "FF:FF:FF:FF:FF:FF",
179+
"NEWDEV_devParentMAC": "ff:ff:ff:ff:ff:ff",
180180
"NEWDEV_devOwner": "owner",
181181
"NEWDEV_devGroup": "group",
182182
"NEWDEV_devComments": "",
@@ -216,7 +216,7 @@ def get_setting_value_side_effect(key):
216216
devVlanSource
217217
FROM Devices WHERE devMac = ?
218218
""",
219-
("AA:BB:CC:DD:EE:10",),
219+
("aa:bb:cc:dd:ee:10",),
220220
).fetchone()
221221

222222
assert row["devMacSource"] == "ARPSCAN"
@@ -245,7 +245,7 @@ def test_scan_updates_newdev_device_name(scan_db, mock_device_handlers):
245245
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
246246
""",
247247
(
248-
"AA:BB:CC:DD:EE:01",
248+
"aa:bb:cc:dd:ee:01",
249249
"2025-01-01 00:00:00",
250250
0,
251251
"192.168.1.1",
@@ -273,7 +273,7 @@ def test_scan_updates_newdev_device_name(scan_db, mock_device_handlers):
273273
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
274274
""",
275275
(
276-
"AA:BB:CC:DD:EE:01",
276+
"aa:bb:cc:dd:ee:01",
277277
"192.168.1.1",
278278
"TestVendor",
279279
"NBTSCAN",
@@ -299,7 +299,7 @@ def test_scan_updates_newdev_device_name(scan_db, mock_device_handlers):
299299

300300
row = cur.execute(
301301
"SELECT devName FROM Devices WHERE devMac = ?",
302-
("AA:BB:CC:DD:EE:01",),
302+
("aa:bb:cc:dd:ee:01",),
303303
).fetchone()
304304

305305
# Name SHOULD be updated from NEWDEV
@@ -320,7 +320,7 @@ def test_scan_does_not_update_user_field_name(scan_db, mock_device_handlers):
320320
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
321321
""",
322322
(
323-
"AA:BB:CC:DD:EE:02",
323+
"aa:bb:cc:dd:ee:02",
324324
"2025-01-01 00:00:00",
325325
0,
326326
"192.168.1.2",
@@ -348,7 +348,7 @@ def test_scan_does_not_update_user_field_name(scan_db, mock_device_handlers):
348348
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
349349
""",
350350
(
351-
"AA:BB:CC:DD:EE:02",
351+
"aa:bb:cc:dd:ee:02",
352352
"192.168.1.2",
353353
"TestVendor",
354354
"NBTSCAN",
@@ -374,7 +374,7 @@ def test_scan_does_not_update_user_field_name(scan_db, mock_device_handlers):
374374

375375
row = cur.execute(
376376
"SELECT devName FROM Devices WHERE devMac = ?",
377-
("AA:BB:CC:DD:EE:02",),
377+
("aa:bb:cc:dd:ee:02",),
378378
).fetchone()
379379

380380
# Name should NOT be updated because it's USER-owned
@@ -395,7 +395,7 @@ def test_scan_does_not_update_locked_field(scan_db, mock_device_handlers):
395395
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
396396
""",
397397
(
398-
"AA:BB:CC:DD:EE:03",
398+
"aa:bb:cc:dd:ee:03",
399399
"2025-01-01 00:00:00",
400400
0,
401401
"192.168.1.3",
@@ -423,7 +423,7 @@ def test_scan_does_not_update_locked_field(scan_db, mock_device_handlers):
423423
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
424424
""",
425425
(
426-
"AA:BB:CC:DD:EE:03",
426+
"aa:bb:cc:dd:ee:03",
427427
"192.168.1.3",
428428
"TestVendor",
429429
"NBTSCAN",
@@ -449,7 +449,7 @@ def test_scan_does_not_update_locked_field(scan_db, mock_device_handlers):
449449

450450
row = cur.execute(
451451
"SELECT devName FROM Devices WHERE devMac = ?",
452-
("AA:BB:CC:DD:EE:03",),
452+
("aa:bb:cc:dd:ee:03",),
453453
).fetchone()
454454

455455
# Name should NOT be updated because it's LOCKED
@@ -470,7 +470,7 @@ def test_scan_updates_empty_vendor_field(scan_db, mock_device_handlers):
470470
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
471471
""",
472472
(
473-
"AA:BB:CC:DD:EE:04",
473+
"aa:bb:cc:dd:ee:04",
474474
"2025-01-01 00:00:00",
475475
0,
476476
"192.168.1.4",
@@ -498,7 +498,7 @@ def test_scan_updates_empty_vendor_field(scan_db, mock_device_handlers):
498498
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
499499
""",
500500
(
501-
"AA:BB:CC:DD:EE:04",
501+
"aa:bb:cc:dd:ee:04",
502502
"192.168.1.4",
503503
"Apple Inc.",
504504
"ARPSCAN",
@@ -524,7 +524,7 @@ def test_scan_updates_empty_vendor_field(scan_db, mock_device_handlers):
524524

525525
row = cur.execute(
526526
"SELECT devVendor FROM Devices WHERE devMac = ?",
527-
("AA:BB:CC:DD:EE:04",),
527+
("aa:bb:cc:dd:ee:04",),
528528
).fetchone()
529529

530530
# Vendor SHOULD be updated
@@ -546,7 +546,7 @@ def test_scan_updates_ip_addresses(scan_db, mock_device_handlers):
546546
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
547547
""",
548548
(
549-
"AA:BB:CC:DD:EE:05",
549+
"aa:bb:cc:dd:ee:05",
550550
"2025-01-01 00:00:00",
551551
0,
552552
"",
@@ -576,7 +576,7 @@ def test_scan_updates_ip_addresses(scan_db, mock_device_handlers):
576576
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
577577
""",
578578
(
579-
"AA:BB:CC:DD:EE:05",
579+
"aa:bb:cc:dd:ee:05",
580580
"192.168.1.100",
581581
"Vendor",
582582
"ARPSCAN",
@@ -603,7 +603,7 @@ def test_scan_updates_ip_addresses(scan_db, mock_device_handlers):
603603

604604
row = cur.execute(
605605
"SELECT devLastIP, devPrimaryIPv4, devPrimaryIPv6 FROM Devices WHERE devMac = ?",
606-
("AA:BB:CC:DD:EE:05",),
606+
("aa:bb:cc:dd:ee:05",),
607607
).fetchone()
608608

609609
# IPv4 should be set
@@ -627,7 +627,7 @@ def test_scan_updates_ipv6_without_changing_ipv4(scan_db, mock_device_handlers):
627627
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
628628
""",
629629
(
630-
"AA:BB:CC:DD:EE:06",
630+
"aa:bb:cc:dd:ee:06",
631631
"2025-01-01 00:00:00",
632632
0,
633633
"192.168.1.101",
@@ -657,7 +657,7 @@ def test_scan_updates_ipv6_without_changing_ipv4(scan_db, mock_device_handlers):
657657
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
658658
""",
659659
(
660-
"AA:BB:CC:DD:EE:06",
660+
"aa:bb:cc:dd:ee:06",
661661
"fe80::1",
662662
"Vendor",
663663
"ARPSCAN",
@@ -684,7 +684,7 @@ def test_scan_updates_ipv6_without_changing_ipv4(scan_db, mock_device_handlers):
684684

685685
row = cur.execute(
686686
"SELECT devPrimaryIPv4, devPrimaryIPv6 FROM Devices WHERE devMac = ?",
687-
("AA:BB:CC:DD:EE:06",),
687+
("aa:bb:cc:dd:ee:06",),
688688
).fetchone()
689689

690690
# IPv4 should remain, IPv6 should be set
@@ -706,7 +706,7 @@ def test_scan_updates_presence_status(scan_db, mock_device_handlers):
706706
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
707707
""",
708708
(
709-
"AA:BB:CC:DD:EE:07",
709+
"aa:bb:cc:dd:ee:07",
710710
"2025-01-01 00:00:00",
711711
1, # Was online
712712
"192.168.1.102",
@@ -737,7 +737,7 @@ def test_scan_updates_presence_status(scan_db, mock_device_handlers):
737737

738738
row = cur.execute(
739739
"SELECT devPresentLastScan FROM Devices WHERE devMac = ?",
740-
("AA:BB:CC:DD:EE:07",),
740+
("aa:bb:cc:dd:ee:07",),
741741
).fetchone()
742742

743743
# Device should be marked as offline
@@ -750,10 +750,10 @@ def test_scan_multiple_devices_mixed_sources(scan_db, mock_device_handlers):
750750

751751
devices_data = [
752752
# (MAC, Name, NameSource, Vendor, VendorSource)
753-
("AA:BB:CC:DD:EE:11", "Device1", "NEWDEV", "", "NEWDEV"), # Both updatable
754-
("AA:BB:CC:DD:EE:12", "My Device", "USER", "OldVendor", "NEWDEV"), # Name protected
755-
("AA:BB:CC:DD:EE:13", "Locked Device", "LOCKED", "", "NEWDEV"), # Name locked
756-
("AA:BB:CC:DD:EE:14", "Device4", "ARPSCAN", "", "NEWDEV"), # Name from plugin
753+
("aa:bb:cc:dd:ee:11", "Device1", "NEWDEV", "", "NEWDEV"), # Both updatable
754+
("aa:bb:cc:dd:ee:12", "My Device", "USER", "OldVendor", "NEWDEV"), # Name protected
755+
("aa:bb:cc:dd:ee:13", "Locked Device", "LOCKED", "", "NEWDEV"), # Name locked
756+
("aa:bb:cc:dd:ee:14", "Device4", "ARPSCAN", "", "NEWDEV"), # Name from plugin
757757
]
758758

759759
for mac, name, name_src, vendor, vendor_src in devices_data:
@@ -786,10 +786,10 @@ def test_scan_multiple_devices_mixed_sources(scan_db, mock_device_handlers):
786786

787787
# Scan discovers all devices with new data
788788
scan_entries = [
789-
("AA:BB:CC:DD:EE:11", "192.168.1.1", "Apple Inc.", "ScanPlugin", "ScannedDevice1"),
790-
("AA:BB:CC:DD:EE:12", "192.168.1.2", "Samsung", "ScanPlugin", "ScannedDevice2"),
791-
("AA:BB:CC:DD:EE:13", "192.168.1.3", "Sony", "ScanPlugin", "ScannedDevice3"),
792-
("AA:BB:CC:DD:EE:14", "192.168.1.4", "LG", "ScanPlugin", "ScannedDevice4"),
789+
("aa:bb:cc:dd:ee:11", "192.168.1.1", "Apple Inc.", "ScanPlugin", "ScannedDevice1"),
790+
("aa:bb:cc:dd:ee:12", "192.168.1.2", "Samsung", "ScanPlugin", "ScannedDevice2"),
791+
("aa:bb:cc:dd:ee:13", "192.168.1.3", "Sony", "ScanPlugin", "ScannedDevice3"),
792+
("aa:bb:cc:dd:ee:14", "192.168.1.4", "LG", "ScanPlugin", "ScannedDevice4"),
793793
]
794794

795795
for mac, ip, vendor, scan_method, name in scan_entries:
@@ -815,10 +815,10 @@ def test_scan_multiple_devices_mixed_sources(scan_db, mock_device_handlers):
815815

816816
# Check results
817817
results = {
818-
"AA:BB:CC:DD:EE:11": {"name": "Device1", "vendor": "Apple Inc."}, # Name already set, won't update
819-
"AA:BB:CC:DD:EE:12": {"name": "My Device", "vendor": "Samsung"}, # Name protected (USER)
820-
"AA:BB:CC:DD:EE:13": {"name": "Locked Device", "vendor": "Sony"}, # Name locked
821-
"AA:BB:CC:DD:EE:14": {"name": "Device4", "vendor": "LG"}, # Name already from plugin, won't update
818+
"aa:bb:cc:dd:ee:11": {"name": "Device1", "vendor": "Apple Inc."}, # Name already set, won't update
819+
"aa:bb:cc:dd:ee:12": {"name": "My Device", "vendor": "Samsung"}, # Name protected (USER)
820+
"aa:bb:cc:dd:ee:13": {"name": "Locked Device", "vendor": "Sony"}, # Name locked
821+
"aa:bb:cc:dd:ee:14": {"name": "Device4", "vendor": "LG"}, # Name already from plugin, won't update
822822
}
823823

824824
for mac, expected in results.items():

0 commit comments

Comments
 (0)