fix(rate-limits): relog immediately after reset

This commit is contained in:
James Peter
2025-09-27 07:10:45 +10:00
parent 51fd6015d3
commit bf325f7878
+39 -7
View File
@@ -394,13 +394,10 @@ fn record_threshold_log(
_ => false,
};
let logged_after_prev_reset = previous_reset
.and_then(|prev| {
previous_logged.map(|logged| {
logged + RESET_PASSED_TOLERANCE >= prev
})
})
.unwrap_or(false);
let logged_after_prev_reset = match (previous_logged, previous_reset) {
(Some(logged), Some(prev)) => logged >= prev,
_ => false,
};
let prev_reset_elapsed = previous_reset
.map(|prev| observed_at + RESET_PASSED_TOLERANCE >= prev)
@@ -690,6 +687,41 @@ mod tests {
assert!(!third, "duplicate logging inside the same window should stay muted");
}
#[test]
fn rate_limit_warning_relogs_after_reset_even_if_logged_just_before() {
let home = TempDir::new().expect("tempdir");
let now = Utc::now();
let reset_at = now + Duration::minutes(1);
let msg = "Secondary usage exceeded 75% of the limit. Run /limits for detailed usage.";
let first = record_rate_limit_warning(
home.path(),
"acct-1",
Some("Team"),
RateLimitWarningScope::Secondary,
75.0,
Some(reset_at),
reset_at - Duration::seconds(3),
msg,
)
.expect("first record succeeds");
assert!(first);
// After the reset passes, with a new window scheduled further out, we should relog.
let second = record_rate_limit_warning(
home.path(),
"acct-1",
Some("Team"),
RateLimitWarningScope::Secondary,
75.0,
Some(reset_at + Duration::hours(1)),
reset_at + Duration::seconds(45),
msg,
)
.expect("second record succeeds");
assert!(second, "post-reset poll should emit again even if prior log was moments before reset");
}
#[test]
fn rate_limit_warning_relogs_after_unknown_reset_interval() {
let home = TempDir::new().expect("tempdir");