pub(crate) const DEFAULT_HEARTBEAT_TIMEOUT_INTERVALS: u64 = 3;
pub(crate) fn resolve_heartbeat_timeout(
heartbeat_timeout_secs: Option<u64>,
heartbeat_interval_secs: Option<u64>,
) -> Option<u64> {
heartbeat_timeout_secs.or_else(|| {
heartbeat_interval_secs.map(|secs| secs.saturating_mul(DEFAULT_HEARTBEAT_TIMEOUT_INTERVALS))
})
}
#[cfg(test)]
mod tests {
use rstest::rstest;
use super::resolve_heartbeat_timeout;
#[rstest]
#[case::none_without_heartbeat(None, None, None)]
#[case::derived_from_interval(None, Some(30), Some(90))]
#[case::derived_from_short_interval(None, Some(5), Some(15))]
#[case::explicit_wins(Some(45), Some(30), Some(45))]
#[case::explicit_without_heartbeat(Some(60), None, Some(60))]
fn test_resolve_heartbeat_timeout(
#[case] timeout_secs: Option<u64>,
#[case] interval_secs: Option<u64>,
#[case] expected: Option<u64>,
) {
assert_eq!(
resolve_heartbeat_timeout(timeout_secs, interval_secs),
expected
);
}
}