fix(client): clarify duration negotiation rejection

This commit is contained in:
Nils Andreas Svee committed 2026-05-07 21:25:51 +07:00
1 parent 4f1f033c02
commit 658a4375ec
1 file changed
+26 -3
+26 -3
View File
@@ -79,7 +79,13 @@ fn validate_duration_restriction(requested: i64, returned: i64) -> Result<(), Cl
}); });
} }
if requested > 0 && (returned == 0 || returned > requested) { if requested > 0 && returned == 0 {
return Err(ClientError::NegotiationRejected {
reason: "server returned continuous duration for finite request".to_owned(),
});
}
if requested > 0 && returned > requested {
return Err(ClientError::NegotiationRejected { return Err(ClientError::NegotiationRejected {
reason: "duration increased".to_owned(), reason: "duration increased".to_owned(),
}); });
@@ -116,6 +122,17 @@ mod tests {
)); ));
} }
fn rejection_reason(
requested: &Params,
returned: &Params,
policy: NegotiationPolicy,
) -> String {
match validate_negotiated_params(requested, returned, policy) {
Err(ClientError::NegotiationRejected { reason }) => reason,
other => panic!("expected negotiation rejection, got {other:?}"),
}
}
#[test] #[test]
fn strict_rejects_changed_negotiated_fields() { fn strict_rejects_changed_negotiated_fields() {
let requested = default_params(); let requested = default_params();
@@ -157,11 +174,17 @@ mod tests {
let mut returned = requested.clone(); let mut returned = requested.clone();
returned.duration_ns = requested.duration_ns + 1; returned.duration_ns = requested.duration_ns + 1;
assert_rejected(&requested, &returned, NegotiationPolicy::Loose); assert_eq!(
rejection_reason(&requested, &returned, NegotiationPolicy::Loose),
"duration increased"
);
let mut returned = requested.clone(); let mut returned = requested.clone();
returned.duration_ns = 0; returned.duration_ns = 0;
assert_rejected(&requested, &returned, NegotiationPolicy::Loose); assert_eq!(
rejection_reason(&requested, &returned, NegotiationPolicy::Loose),
"server returned continuous duration for finite request"
);
let mut continuous_requested = requested.clone(); let mut continuous_requested = requested.clone();
continuous_requested.duration_ns = 0; continuous_requested.duration_ns = 0;