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 {
|
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;
|
||||||
|
|||||||
Reference in new issue
Block a user