fix(client): clarify duration negotiation rejection
This commit is contained in:
1 file changed
+26
-3
@@ -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 {
|
||||
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]
|
||||
fn strict_rejects_changed_negotiated_fields() {
|
||||
let requested = default_params();
|
||||
@@ -157,11 +174,17 @@ mod tests {
|
||||
|
||||
let mut returned = requested.clone();
|
||||
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();
|
||||
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();
|
||||
continuous_requested.duration_ns = 0;
|
||||
|
||||
Reference in new issue
Block a user