158 lines
3.1 KiB
Go
158 lines
3.1 KiB
Go
package alerting
|
|||
|
|
|
||
|
|
import (
|
||
|
|
"testing"
|
||
|
|
|
||
|
|
"github.com/stretchr/testify/assert"
|
||
|
|
)
|
||
|
|
|
||
|
|
func TestAddRule(t *testing.T) {
|
||
|
|
am := NewAlertManager()
|
||
|
|
rule := &AlertRule{
|
||
|
|
ID: "rule-1",
|
||
|
|
Name: "High Error Rate",
|
||
|
|
Threshold: 0.1,
|
||
|
|
Metric: "error_rate",
|
||
|
|
Level: AlertError,
|
||
|
|
}
|
||
|
|
|
||
|
|
err := am.AddRule(rule)
|
||
|
|
assert.NoError(t, err)
|
||
|
|
|
||
|
|
rules := am.GetRules()
|
||
|
|
assert.Equal(t, 1, len(rules))
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestTriggerAlert(t *testing.T) {
|
||
|
|
am := NewAlertManager()
|
||
|
|
|
||
|
|
alert, err := am.TriggerAlert("Database Down", "PostgreSQL unavailable", AlertCritical)
|
||
|
|
assert.NoError(t, err)
|
||
|
|
assert.NotNil(t, alert)
|
||
|
|
assert.Equal(t, AlertCritical, alert.Level)
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestResolveAlert(t *testing.T) {
|
||
|
|
am := NewAlertManager()
|
||
|
|
|
||
|
|
alert, _ := am.TriggerAlert("Test Alert", "Test", AlertWarning)
|
||
|
|
err := am.ResolveAlert(alert.ID)
|
||
|
|
|
||
|
|
assert.NoError(t, err)
|
||
|
|
assert.True(t, alert.Resolved)
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestGetActiveAlerts(t *testing.T) {
|
||
|
|
am := NewAlertManager()
|
||
|
|
|
||
|
|
alert1, _ := am.TriggerAlert("Alert 1", "Test", AlertWarning)
|
||
|
|
alert2, _ := am.TriggerAlert("Alert 2", "Test", AlertError)
|
||
|
|
|
||
|
|
am.ResolveAlert(alert1.ID)
|
||
|
|
|
||
|
|
active := am.GetActiveAlerts()
|
||
|
|
assert.Equal(t, 1, len(active))
|
||
|
|
assert.Equal(t, alert2.ID, active[0].ID)
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestGetAlertsByLevel(t *testing.T) {
|
||
|
|
am := NewAlertManager()
|
||
|
|
|
||
|
|
am.TriggerAlert("Alert 1", "Test", AlertWarning)
|
||
|
|
am.TriggerAlert("Alert 2", "Test", AlertError)
|
||
|
|
am.TriggerAlert("Alert 3", "Test", AlertError)
|
||
|
|
|
||
|
|
errors := am.GetAlertsByLevel(AlertError)
|
||
|
|
assert.Equal(t, 2, len(errors))
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestGetHistory(t *testing.T) {
|
||
|
|
am := NewAlertManager()
|
||
|
|
|
||
|
|
am.TriggerAlert("Alert 1", "Test", AlertWarning)
|
||
|
|
am.TriggerAlert("Alert 2", "Test", AlertError)
|
||
|
|
|
||
|
|
history := am.GetHistory()
|
||
|
|
assert.Equal(t, 2, len(history))
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestRemoveRule(t *testing.T) {
|
||
|
|
am := NewAlertManager()
|
||
|
|
|
||
|
|
rule := &AlertRule{
|
||
|
|
ID: "rule-1",
|
||
|
|
Name: "Test Rule",
|
||
|
|
Level: AlertWarning,
|
||
|
|
}
|
||
|
|
|
||
|
|
am.AddRule(rule)
|
||
|
|
err := am.RemoveRule("rule-1")
|
||
|
|
|
||
|
|
assert.NoError(t, err)
|
||
|
|
rules := am.GetRules()
|
||
|
|
assert.Equal(t, 0, len(rules))
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestClear(t *testing.T) {
|
||
|
|
am := NewAlertManager()
|
||
|
|
|
||
|
|
am.TriggerAlert("Alert 1", "Test", AlertWarning)
|
||
|
|
am.TriggerAlert("Alert 2", "Test", AlertError)
|
||
|
|
|
||
|
|
am.Clear()
|
||
|
|
|
||
|
|
assert.Equal(t, 0, am.GetAlertCount())
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestEvaluateRule(t *testing.T) {
|
||
|
|
am := NewAlertManager()
|
||
|
|
|
||
|
|
rule := &AlertRule{
|
||
|
|
ID: "rule-1",
|
||
|
|
Name: "High Error Rate",
|
||
|
|
Threshold: 0.1,
|
||
|
|
Level: AlertError,
|
||
|
|
}
|
||
|
|
|
||
|
|
am.AddRule(rule)
|
||
|
|
|
||
|
|
alert, _ := am.EvaluateRule("rule-1", 0.15)
|
||
|
|
assert.NotNil(t, alert)
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestEvaluateRuleBelowThreshold(t *testing.T) {
|
||
|
|
am := NewAlertManager()
|
||
|
|
|
||
|
|
rule := &AlertRule{
|
||
|
|
ID: "rule-1",
|
||
|
|
Name: "High Error Rate",
|
||
|
|
Threshold: 0.1,
|
||
|
|
Level: AlertError,
|
||
|
|
}
|
||
|
|
|
||
|
|
am.AddRule(rule)
|
||
|
|
|
||
|
|
alert, _ := am.EvaluateRule("rule-1", 0.05)
|
||
|
|
assert.Nil(t, alert)
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestGetAlertCount(t *testing.T) {
|
||
|
|
am := NewAlertManager()
|
||
|
|
|
||
|
|
am.TriggerAlert("Alert 1", "Test", AlertWarning)
|
||
|
|
am.TriggerAlert("Alert 2", "Test", AlertError)
|
||
|
|
|
||
|
|
assert.Equal(t, 2, am.GetAlertCount())
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestAddRuleError(t *testing.T) {
|
||
|
|
am := NewAlertManager()
|
||
|
|
|
||
|
|
rule := &AlertRule{
|
||
|
|
Name: "No ID",
|
||
|
|
}
|
||
|
|
|
||
|
|
err := am.AddRule(rule)
|
||
|
|
assert.Error(t, err)
|
||
|
|
}
|