package services import ( "testing" "time" ) // 回归:冷却记录节流。 // // 线上问题:命中但处于冷却期时,原来**每个 tick(1 分钟)都写一条** cooldown 记录。 // AlertDeliveries 只保留最近 50 条,于是真实的"已发送"记录在一小时内就被 // 冷却记录挤光了,页面的「发送历史」基本没法看。 func TestRecordCooldownThrottled(t *testing.T) { const ruleID = 99001 // 第一次:允许写 if !recordCooldownThrottled(ruleID) { t.Fatal("第一次应允许记录") } // 紧接着第二次:必须被节流 if recordCooldownThrottled(ruleID) { t.Fatal("10 分钟内的第二次应被节流") } // 不同规则互不影响 if !recordCooldownThrottled(ruleID + 1) { t.Fatal("不同规则不应被互相节流") } // 把上次时间推到 11 分钟前,应重新允许 cooldownRecordMu.Lock() cooldownRecordLast[ruleID] = time.Now().Add(-11 * time.Minute) cooldownRecordMu.Unlock() if !recordCooldownThrottled(ruleID) { t.Fatal("超过 10 分钟后应重新允许记录") } }