FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

test: cover interface-index autodetection branch in _entry_ip_version · python-zeroconf/python-zeroconf@56f00c5 · GitHub

Commit 56f00c5

Browse files
committed
test: cover interface-index autodetection branch in _entry_ip_version
1 parent 83fadb1 commit 56f00c5

2 files changed

Lines changed: 45 additions & 37 deletions

File tree

‎tests/test_core.py‎

Lines changed: 39 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -712,43 +712,45 @@ def test_tc_bit_defers_last_response_missing():
712712
assert len(packets) == 4
713713
expected_deferred = []
714714

715-
# Pin per-packet delay to the minimum so each successive fire_at lands
716-
# before the deadline established by the first packet — keeps the
717-
# timer-replacement assertions deterministic under bounded TC-deferral.
718-
min_delay_ms = _TC_DELAY_RANDOM_INTERVAL[0]
719-
with patch("zeroconf._listener.random.randint", return_value=min_delay_ms):
720-
next_packet = r.DNSIncoming(packets.pop(0))
721-
expected_deferred.append(next_packet)
722-
threadsafe_query(zc, protocol, next_packet, source_ip, const._MDNS_PORT, Mock(), ())
723-
assert protocol._deferred[source_ip] == expected_deferred
724-
timer1 = protocol._timers[source_ip]
725-
726-
next_packet = r.DNSIncoming(packets.pop(0))
727-
expected_deferred.append(next_packet)
728-
threadsafe_query(zc, protocol, next_packet, source_ip, const._MDNS_PORT, Mock(), ())
729-
assert protocol._deferred[source_ip] == expected_deferred
730-
timer2 = protocol._timers[source_ip]
731-
assert timer1.cancelled()
732-
assert timer2 != timer1
733-
734-
# Send the same packet again to similar multi interfaces
735-
threadsafe_query(zc, protocol, next_packet, source_ip, const._MDNS_PORT, Mock(), ())
736-
assert protocol._deferred[source_ip] == expected_deferred
737-
assert source_ip in protocol._timers
738-
timer3 = protocol._timers[source_ip]
739-
assert not timer3.cancelled()
740-
assert timer3 == timer2
741-
742-
next_packet = r.DNSIncoming(packets.pop(0))
743-
expected_deferred.append(next_packet)
744-
threadsafe_query(zc, protocol, next_packet, source_ip, const._MDNS_PORT, Mock(), ())
745-
assert protocol._deferred[source_ip] == expected_deferred
746-
assert source_ip in protocol._timers
747-
timer4 = protocol._timers[source_ip]
748-
assert timer3.cancelled()
749-
assert timer4 != timer3
750-
751-
for _ in range(8):
715+
# Widen the per-packet delay so Windows scheduling jitter between
716+
# assertions cannot fire the timer mid-test, while leaving plenty of
717+
# headroom under the first-arrival deadline for timer-replacement to
718+
# remain deterministic.
719+
with patch.object(_listener, "_TC_DELAY_RANDOM_INTERVAL", (1500, 60_000)):
720+
min_delay_ms = _listener._TC_DELAY_RANDOM_INTERVAL[0]
721+
with patch("zeroconf._listener.random.randint", return_value=min_delay_ms):
722+
next_packet = r.DNSIncoming(packets.pop(0))
723+
expected_deferred.append(next_packet)
724+
threadsafe_query(zc, protocol, next_packet, source_ip, const._MDNS_PORT, Mock(), ())
725+
assert protocol._deferred[source_ip] == expected_deferred
726+
timer1 = protocol._timers[source_ip]
727+
728+
next_packet = r.DNSIncoming(packets.pop(0))
729+
expected_deferred.append(next_packet)
730+
threadsafe_query(zc, protocol, next_packet, source_ip, const._MDNS_PORT, Mock(), ())
731+
assert protocol._deferred[source_ip] == expected_deferred
732+
timer2 = protocol._timers[source_ip]
733+
assert timer1.cancelled()
734+
assert timer2 != timer1
735+
736+
# Send the same packet again to similar multi interfaces
737+
threadsafe_query(zc, protocol, next_packet, source_ip, const._MDNS_PORT, Mock(), ())
738+
assert protocol._deferred[source_ip] == expected_deferred
739+
assert source_ip in protocol._timers
740+
timer3 = protocol._timers[source_ip]
741+
assert not timer3.cancelled()
742+
assert timer3 == timer2
743+
744+
next_packet = r.DNSIncoming(packets.pop(0))
745+
expected_deferred.append(next_packet)
746+
threadsafe_query(zc, protocol, next_packet, source_ip, const._MDNS_PORT, Mock(), ())
747+
assert protocol._deferred[source_ip] == expected_deferred
748+
assert source_ip in protocol._timers
749+
timer4 = protocol._timers[source_ip]
750+
assert timer3.cancelled()
751+
assert timer4 != timer3
752+
753+
for _ in range(30):
752754
time.sleep(0.1)
753755
if source_ip not in protocol._timers and source_ip not in protocol._deferred:
754756
break

‎tests/utils/test_net.py‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -590,6 +590,12 @@ def test_autodetect_ip_version_non_list_interfaces_with_multicast_addresses() ->
590590
)
591591

592592

593+
def test_autodetect_ip_version_interface_index_treated_as_v6() -> None:
594+
"""Interface-index (int) entries are treated as IPv6 by autodetection."""
595+
assert netutils.autodetect_ip_version([1]) is r.IPVersion.V6Only
596+
assert netutils.autodetect_ip_version(["1.2.3.4", 1]) is r.IPVersion.All
597+
598+
593599
def test_create_sockets_multicast_addresses_ip_version_all() -> None:
594600
"""multicast_addresses works with ip_version=All (no V4Only/V6Only validation triggered)."""
595601
listen_mock = Mock(spec=socket.socket)

0 commit comments

Comments
 (0)

Back | FazBrowse Home | New Git URL