mirror of
https://github.com/Horizontal42/netsleuth.git
synced 2026-11-10 15:42:10 +03:00
The only feature in this batch adding a real dependency, approved up front and landed the same way tcptrace/ndt7 already do: an optional extra (uv sync --extra quic), imported lazily inside measure_quic() so a missing install degrades to a clear skip warning instead of a crash. Verified the actually-installed aioquic 1.3.0 API directly rather than assuming. connect() takes local_port but no local_host/source-address parameter at all, so --quic structurally cannot honor --interface - _quic_section() says so explicitly rather than silently measuring the OS-default path under a report claiming a forced adapter. Its context manager doesn't yield until the handshake finishes, so unlike the TLS RTT probe's two-connection subtraction trick, handshake time here is timed directly. HandshakeCompleted's fields matched what was expected; dropped a planned quic_version field since aioquic has no clean public API for it rather than reach into a private attribute. quic_verdict(quic_ok, tcp_ok) is the actual payoff: QUIC failing while plain TCP to the same host succeeds means the network specifically drops or throttles UDP/443, silently degrading Chrome/YouTube's HTTP/3 preference in a way no TCP-based diagnostic would ever catch. Both failing is ordinary unreachability already covered elsewhere, so it stays silent rather than duplicating that finding. Opt-in --quic, excluded from --full - an optionally-installed extra must never become a silent requirement. Added the quic extra to the release workflow's wheel-install verification. Live-tested against real cloudflare.com/google.com: real handshakes, ALPN h3 negotiated, correct end-to-end timing. This completes the 16-feature extension batch from plans/zesty-zooming-wilkinson.md (gitignored, local planning doc). |
||
|---|---|---|
| .. | ||
| fixtures | ||
| conftest.py | ||
| test_alerting.py | ||
| test_bgp.py | ||
| test_bgp_path.py | ||
| test_captive_portal.py | ||
| test_cgnat_nat64.py | ||
| test_cli_formats.py | ||
| test_compare.py | ||
| test_config.py | ||
| test_dns_advanced.py | ||
| test_dns_leak.py | ||
| test_dnsbl_decode.py | ||
| test_dpi_check.py | ||
| test_ecmp.py | ||
| test_exporter.py | ||
| test_exporter_l7.py | ||
| test_history.py | ||
| test_hop_asn.py | ||
| test_icmp_win_parse.py | ||
| test_icmp_win_trace.py | ||
| test_iface.py | ||
| test_interpret.py | ||
| test_interpret_l7.py | ||
| test_ip_geo_normalize.py | ||
| test_metrics.py | ||
| test_models.py | ||
| test_netinfo.py | ||
| test_orchestration.py | ||
| test_pmtud.py | ||
| test_prefix_benchmark.py | ||
| test_prober_stats.py | ||
| test_quic_rtt.py | ||
| test_reputation.py | ||
| test_speed_cloudflare.py | ||
| test_speed_fastcom.py | ||
| test_speed_math.py | ||
| test_stats.py | ||
| test_tls_rtt.py | ||
| test_traceparse.py | ||
| test_traceroute_cascade.py | ||
| test_trend.py | ||
| test_watch.py | ||