Skip to content

test: give IPv6-only loopback find() its own timeout#1721

Merged
bdraco merged 1 commit into
masterfrom
fix/ipv6-loopback-find-timeout
May 18, 2026
Merged

test: give IPv6-only loopback find() its own timeout#1721
bdraco merged 1 commit into
masterfrom
fix/ipv6-loopback-find-timeout

Conversation

@bdraco
Copy link
Copy Markdown
Member

@bdraco bdraco commented May 18, 2026

Summary

tests/services/test_types.py::test_integration_with_listener_ipv6 flaked on
the PyPy 3.10 / ubuntu / skip_cython runner (failed job) after
#1720 dropped LOOPBACK_FIND_TIMEOUT to 75ms. Give the V6Only path its own
500ms budget; leave the IPv4 loopback tests at 75ms.

Details

ZeroconfServiceTypes.find() is just time.sleep(timeout) — the timeout is
the test's runtime, not a deadline that gets short-circuited by the first
matching response. PR #1720 made that budget viable on loopback by also
patching _FIRST_QUERY_DELAY_RANDOM_INTERVAL from RFC 6762 §5.2's 20–120ms
down to 1–5ms via the quick_timing fixture, so the response normally lands
inside ~10ms with 7× headroom.

The V6Only path doesn't behave the same way on GitHub's Linux runners:

WARNING zeroconf:_logger.py:111 Error with socket 18 (('::1', 5353, 0, 0))): [Errno 101] Network is unreachable

Every outgoing send on the ::1 socket fails and the listener has to fall
back to the fe80:: link-local interface. That fallback adds latency the
IPv4 loopback path never pays. PyPy widens the gap further with JIT warmup,
and the 75ms budget is no longer enough headroom.

Adding IPV6_LOOPBACK_FIND_TIMEOUT = 0.5 (matches the pre-#1710 value the
test ran with for years) and routing the V6Only test through it. The three
IPv4-loopback tests keep the 75ms budget — they never hit the ::1 retry
path.

Test plan

  • poetry run pytest tests/services/test_types.py -v — all 4 pass
  • poetry run pre-commit run --files tests/__init__.py tests/services/test_types.py — clean

`test_integration_with_listener_ipv6` flaked on the PyPy 3.10
ubuntu skip_cython runner after #1720 dropped LOOPBACK_FIND_TIMEOUT
to 75ms. The IPv6-only path hits `[Errno 101] Network is unreachable`
on the `::1` socket on GitHub's Linux runners and has to fall back
to the `fe80::` link-local interface; PyPy widens the gap further
with JIT warmup. Add IPV6_LOOPBACK_FIND_TIMEOUT (0.5s) and route
the V6Only test through it — the IPv4 loopback tests keep the
75ms budget since they never hit the `::1` retry path.
@codecov
Copy link
Copy Markdown

codecov Bot commented May 18, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 99.76%. Comparing base (0ad3f37) to head (53ec3a0).
⚠️ Report is 1 commits behind head on master.

Additional details and impacted files
@@           Coverage Diff           @@
##           master    #1721   +/-   ##
=======================================
  Coverage   99.76%   99.76%           
=======================================
  Files          33       33           
  Lines        3440     3440           
  Branches      473      473           
=======================================
  Hits         3432     3432           
  Misses          5        5           
  Partials        3        3           

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@codspeed-hq
Copy link
Copy Markdown

codspeed-hq Bot commented May 18, 2026

Merging this PR will not alter performance

✅ 11 untouched benchmarks


Comparing fix/ipv6-loopback-find-timeout (53ec3a0) with master (0ad3f37)1

Open in CodSpeed

Footnotes

  1. No successful run was found on master (e32f52d) during the generation of this report, so 0ad3f37 was used instead as the comparison base. There might be some changes unrelated to this pull request in this report.

@bdraco bdraco merged commit fcd1ffb into master May 18, 2026
37 checks passed
@bdraco bdraco deleted the fix/ipv6-loopback-find-timeout branch May 18, 2026 05:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant