test(client): cover timing validation boundaries

This commit is contained in:
Nils Andreas Svee committed 2026-05-10 20:56:43 +07:00
1 parent 2c75e08e30
commit b8d16f3d18
2 files changed
+124

No files matched your search

@@ -29,6 +29,82 @@ fn loose_negotiation_accepts_server_restricted_params() {
assert!(validate_negotiated_params(&requested, &returned, NegotiationPolicy::Loose).is_ok());
}
#[test]
fn loose_negotiation_rejects_non_positive_returned_interval() {
let config = ClientConfig::default();
let requested = params_from_config(&config).unwrap();
for interval_ns in [0, -1] {
let mut returned = requested.clone();
returned.interval_ns = interval_ns;
assert!(matches!(
validate_negotiated_params(&requested, &returned, NegotiationPolicy::Loose),
Err(ClientError::NegotiationRejected { reason })
if reason == "interval must be positive"
));
}
}
#[test]
fn loose_negotiation_accepts_documented_duration_combinations() {
let finite_config = ClientConfig::default();
let requested_finite = params_from_config(&finite_config).unwrap();
let returned_same_finite = requested_finite.clone();
assert!(validate_negotiated_params(
&requested_finite,
&returned_same_finite,
NegotiationPolicy::Loose
)
.is_ok());
let mut returned_shorter_finite = requested_finite.clone();
returned_shorter_finite.duration_ns /= 2;
assert!(validate_negotiated_params(
&requested_finite,
&returned_shorter_finite,
NegotiationPolicy::Loose
)
.is_ok());
let continuous_config = ClientConfig {
duration: None,
..ClientConfig::default()
};
let requested_continuous = params_from_config(&continuous_config).unwrap();
let returned_continuous = requested_continuous.clone();
assert!(validate_negotiated_params(
&requested_continuous,
&returned_continuous,
NegotiationPolicy::Loose
)
.is_ok());
let mut returned_finite = requested_continuous.clone();
returned_finite.duration_ns = 1_000_000_000;
assert!(validate_negotiated_params(
&requested_continuous,
&returned_finite,
NegotiationPolicy::Loose
)
.is_ok());
}
#[test]
fn loose_negotiation_rejects_finite_request_returned_continuous() {
let config = ClientConfig::default();
let requested = params_from_config(&config).unwrap();
let mut returned = requested.clone();
returned.duration_ns = 0;
assert!(matches!(
validate_negotiated_params(&requested, &returned, NegotiationPolicy::Loose),
Err(ClientError::NegotiationRejected { reason })
if reason == "server returned continuous duration for finite request"
));
}
#[test]
fn loose_negotiation_rejects_negative_returned_length() {
let config = ClientConfig::default();