Skip to content

Commit e047ab1

Browse files
committed
Remove stale Bonjour link-local IPv4 doctor warning
1 parent 9e63cd4 commit e047ab1

3 files changed

Lines changed: 9 additions & 71 deletions

File tree

src/timecapsulesmb/checks/bonjour.py

Lines changed: 0 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
from __future__ import annotations
22

3-
import ipaddress
43
from dataclasses import dataclass
54

65
from timecapsulesmb.checks.models import CheckResult
@@ -224,30 +223,3 @@ def check_bonjour_host_ip(
224223
if known_ips:
225224
return CheckResult("PASS", f"resolved Bonjour host {hostname} to {', '.join(known_ips)}")
226225
return CheckResult("FAIL", f"could not resolve Bonjour host {hostname}")
227-
228-
229-
def check_bonjour_host_link_local_ips(
230-
hostname: str,
231-
*,
232-
expected_ip: str | None = None,
233-
record_ips: list[str] | None = None,
234-
) -> CheckResult | None:
235-
if not expected_ip:
236-
return None
237-
238-
link_local_ips: list[str] = []
239-
for ip in record_ips or []:
240-
try:
241-
parsed_ip = ipaddress.ip_address(ip)
242-
except ValueError:
243-
continue
244-
if parsed_ip.version == 4 and parsed_ip.is_link_local and ip not in link_local_ips:
245-
link_local_ips.append(ip)
246-
247-
if not link_local_ips:
248-
return None
249-
250-
return CheckResult(
251-
"WARN",
252-
f"Bonjour host {hostname} also advertised link-local IPv4 {', '.join(link_local_ips)}; clients may have stale mDNS cache",
253-
)

src/timecapsulesmb/checks/doctor_steps.py

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
BonjourServiceTarget,
88
build_bonjour_expected_identity,
99
check_bonjour_host_ip,
10-
check_bonjour_host_link_local_ips,
1110
check_smb_instance,
1211
check_smb_service_target,
1312
discover_smb_services_detailed,
@@ -249,16 +248,6 @@ def _add_bonjour_host_ip_results(
249248
record_ips=record_ips,
250249
)
251250
add_result(host_ip_result)
252-
if host_ip_result.status != "PASS":
253-
return
254-
255-
link_local_result = check_bonjour_host_link_local_ips(
256-
hostname,
257-
expected_ip=expected_ip,
258-
record_ips=record_ips,
259-
)
260-
if link_local_result is not None:
261-
add_result(link_local_result)
262251

263252

264253
def _add_bonjour_results(

tests/test_checks.py

Lines changed: 9 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
from timecapsulesmb.checks.bonjour import (
2121
build_bonjour_expected_identity,
2222
check_bonjour_host_ip,
23-
check_bonjour_host_link_local_ips,
2423
check_smb_instance,
2524
check_smb_service_target,
2625
discover_smb_services_detailed,
@@ -707,7 +706,7 @@ def test_run_doctor_checks_uses_ip_only_bonjour_fallback_when_runtime_name_probe
707706
self.assertTrue(any(result.status == "WARN" and "runtime naming identity probe skipped: probe failed" in result.message for result in run.results))
708707
self.assertTrue(any(result.status == "PASS" and "discovered _smb._tcp service matching target IP 10.0.0.2" in result.message for result in run.results))
709708

710-
def test_run_doctor_checks_warns_when_bonjour_record_includes_link_local_ip(self) -> None:
709+
def test_run_doctor_checks_accepts_bonjour_record_with_link_local_ip(self) -> None:
711710
instance = BonjourServiceInstance(
712711
service_type="_smb._tcp.local.",
713712
name="Time Capsule Samba 4",
@@ -734,8 +733,14 @@ def test_run_doctor_checks_warns_when_bonjour_record_includes_link_local_ip(self
734733
self.assertFalse(run.fatal)
735734
self.assertTrue(
736735
any(
737-
result.status == "WARN"
738-
and "Bonjour host timecapsulesamba4.local also advertised link-local IPv4 169.254.44.9" in result.message
736+
result.status == "PASS"
737+
and "resolved Bonjour host timecapsulesamba4.local to 10.0.0.2" in result.message
738+
for result in run.results
739+
)
740+
)
741+
self.assertFalse(
742+
any(
743+
"also advertised link-local IPv4" in result.message or "stale mDNS cache" in result.message
739744
for result in run.results
740745
)
741746
)
@@ -1032,34 +1037,6 @@ def test_check_bonjour_host_ip_fails_when_dns_resolves_wrong_ip(self) -> None:
10321037
self.assertEqual(result.status, "FAIL")
10331038
self.assertIn("expected 10.0.1.1", result.message)
10341039

1035-
def test_check_bonjour_host_link_local_ips_returns_none_for_lan_only(self) -> None:
1036-
result = check_bonjour_host_link_local_ips(
1037-
"home.local",
1038-
expected_ip="10.0.1.1",
1039-
record_ips=["10.0.1.1"],
1040-
)
1041-
self.assertIsNone(result)
1042-
1043-
def test_check_bonjour_host_link_local_ips_warns_for_link_local_extra_ip(self) -> None:
1044-
result = check_bonjour_host_link_local_ips(
1045-
"home.local",
1046-
expected_ip="10.0.1.1",
1047-
record_ips=["10.0.1.1", "169.254.44.9"],
1048-
)
1049-
self.assertIsNotNone(result)
1050-
assert result is not None
1051-
self.assertEqual(result.status, "WARN")
1052-
self.assertIn("169.254.44.9", result.message)
1053-
self.assertIn("stale mDNS cache", result.message)
1054-
1055-
def test_check_bonjour_host_link_local_ips_ignores_non_link_local_extra_ip(self) -> None:
1056-
result = check_bonjour_host_link_local_ips(
1057-
"home.local",
1058-
expected_ip="10.0.1.1",
1059-
record_ips=["10.0.1.1", "10.0.1.2"],
1060-
)
1061-
self.assertIsNone(result)
1062-
10631040
def test_try_authenticated_smb_listing_handles_timeout(self) -> None:
10641041
with mock.patch("timecapsulesmb.checks.smb.command_exists", return_value=True):
10651042
with mock.patch(

0 commit comments

Comments
 (0)