#[test] fn not_url_but_ip() { // Neither of these are a valid URL, but they are valid IP addresses.
HappyEyeballs::new("::1", PORT).unwrap();
HappyEyeballs::new("127.0.0.1", PORT).unwrap();
}
#[test] fn alt_svc_construction() { let now = Instant::now(); let config = NetworkConfig {
alt_svc: vec![AltSvc {
host: None,
port: None,
http_version: HttpVersion::H3,
}],
..NetworkConfig::default()
}; letmut he = HappyEyeballs::new_with_network_config(HOSTNAME, PORT, config).unwrap();
// Should still send DNS queries as normal
he.expect(vec![(None, Some(out_send_dns_https(Id::from(0))))], now);
}
#[test] fn alt_svc_used_immediately() { let now = Instant::now(); let config = NetworkConfig {
alt_svc: vec![AltSvc {
host: None,
port: None,
http_version: HttpVersion::H3,
}],
..NetworkConfig::default()
}; letmut he = HappyEyeballs::new_with_network_config(HOSTNAME, PORT, config).unwrap();
// Alt-svc with H3 should make H3 available even without HTTPS DNS response
he.expect(
vec![
(None, Some(out_send_dns_https(Id::from(0)))),
(None, Some(out_send_dns_aaaa(Id::from(1)))),
(None, Some(out_send_dns_a(Id::from(2)))),
(
Some(in_dns_https_negative(Id::from(0))),
Some(out_resolution_delay()),
), // Alt-svc provided H3, so we should attempt H3 connection
(
Some(in_dns_aaaa_positive(Id::from(1))),
Some(out_attempt_v6_h3(Id::from(3))),
),
],
now,
);
}
/// Alt-svc with a custom port: connections are attempted at both the alt-svc /// port and the origin port. /// /// No HTTPS records in this scenario. Alt-svc says H3 on port 8443. /// Expected endpoint order: /// alt-svc bucket (port 8443): V6:H3, V4:H3 /// fallback bucket (port 443): V6:H2OrH1, V4:H2OrH1 #[test] fn alt_svc_with_port() { let alt_port: u16 = CUSTOM_PORT; let config = NetworkConfig {
alt_svc: vec![AltSvc {
host: None,
port: Some(alt_port),
http_version: HttpVersion::H3,
}],
..NetworkConfig::default()
}; let (mut now, mut he) = setup_with_config(config);
// All connection attempts fail -> should report Failed(Connection) for id in3..=5 {
he.expect(
vec![(Some(in_connection_result_negative(Id::from(id))), None)],
now,
);
}
he.expect(
vec![(
Some(in_connection_result_negative(Id::from(6))),
Some(Output::Failed(FailureReason::Connection)),
)],
now,
);
}
/// When the host is an IP address and alt-svc specifies a custom port, /// endpoints should be attempted at both the alt-svc port and the origin port. /// /// Expected endpoint order: /// alt-svc bucket (port 8443): V4_ADDR:H3 /// fallback bucket (port 443): V4_ADDR:H2OrH1 #[test] fn ip_host_alt_svc_with_port() { letmut now = Instant::now(); let config = NetworkConfig {
alt_svc: vec![AltSvc {
host: None,
port: Some(CUSTOM_PORT),
http_version: HttpVersion::H3,
}],
..NetworkConfig::default()
}; letmut he =
HappyEyeballs::new_with_network_config(&V4_ADDR.to_string(), PORT, config).unwrap();
/// Custom resolution and connection attempt delays should be respected by /// the state machine instead of the default constants. #[test] fn custom_delays() { let custom_resolution_delay = Duration::from_millis(10); let custom_connection_attempt_delay = Duration::from_millis(50);
/// Alt-svc H2 entry is filtered out when H2 is disabled in the network config. #[test] fn alt_svc_h2_disabled() {
assert_alt_svc_version_disabled(HttpVersion::H2, ConnectionAttemptHttpVersions::H1);
}
/// Alt-svc H1 entry is filtered out when H1 is disabled in the network config. #[test] fn alt_svc_h1_disabled() {
assert_alt_svc_version_disabled(HttpVersion::H1, ConnectionAttemptHttpVersions::H2);
}
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.14 Sekunden
(vorverarbeitet am 2026-08-25)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.