46 lines
1.4 KiB
Python
46 lines
1.4 KiB
Python
"""告警节流测试(规格 §5:第 1 次 + 每满 100 次,带累计计数)。"""
|
|
|
|
import pytest
|
|
|
|
from stereo_ranger import WarnThrottle
|
|
|
|
|
|
def test_first_and_every_hundred_emit():
|
|
throttle = WarnThrottle() # 默认 every=100
|
|
assert throttle.should_emit("a") is True
|
|
for _ in range(98):
|
|
assert throttle.should_emit("a") is False
|
|
assert throttle.should_emit("a") is True # 第 100 次
|
|
for _ in range(99):
|
|
assert throttle.should_emit("a") is False
|
|
assert throttle.should_emit("a") is True # 第 200 次
|
|
assert throttle.count("a") == 200
|
|
|
|
|
|
def test_categories_are_independent():
|
|
throttle = WarnThrottle()
|
|
assert throttle.should_emit("a") is True
|
|
assert throttle.should_emit("b") is True
|
|
assert throttle.count("a") == 1
|
|
assert throttle.count("b") == 1
|
|
assert throttle.count("never_seen") == 0
|
|
|
|
|
|
def test_custom_interval():
|
|
throttle = WarnThrottle(every=3)
|
|
# 规格语义"第 1 次 + 计数每满 every" → 第 1/3/6 次打印
|
|
assert [throttle.should_emit("a") for _ in range(6)] == [True, False, True, False, False, True]
|
|
|
|
|
|
def test_clear_resets_counts():
|
|
throttle = WarnThrottle()
|
|
throttle.should_emit("a")
|
|
throttle.clear()
|
|
assert throttle.count("a") == 0
|
|
assert throttle.should_emit("a") is True
|
|
|
|
|
|
def test_invalid_interval():
|
|
with pytest.raises(ValueError):
|
|
WarnThrottle(every=0)
|