44 lines
1.3 KiB
Go
44 lines
1.3 KiB
Go
package alert
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
)
|
|
|
|
func TestLoadRulesRejectsUnknownAndDuplicateValues(t *testing.T) {
|
|
path := filepath.Join(t.TempDir(), "rules.json")
|
|
valid := `{"version":1,"rules":[{"tenant_id":1,"site_id":2,"rule_key":"zone-entry","display_name":"区域闯入","event_kind":"zone_entry","minimum_severity":"medium","enabled":true,"effective_from":"2026-08-11T00:00:00Z"}]}`
|
|
if err := os.WriteFile(path, []byte(valid), 0o600); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
rules, err := LoadRules(path)
|
|
if err != nil || len(rules) != 1 {
|
|
t.Fatalf("load valid rules: %v %#v", err, rules)
|
|
}
|
|
if err := os.WriteFile(path, []byte(`{"version":1,"unknown":true,"rules":[]}`), 0o600); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if _, err := LoadRules(path); err == nil {
|
|
t.Fatal("unknown rule document property was accepted")
|
|
}
|
|
if err := os.WriteFile(path, []byte(valid+` trailing`), 0o600); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if _, err := LoadRules(path); err == nil {
|
|
t.Fatal("trailing rule file data was accepted")
|
|
}
|
|
}
|
|
|
|
func TestSeverityRankIsStable(t *testing.T) {
|
|
for index, value := range []string{"low", "medium", "high", "critical"} {
|
|
rank, ok := SeverityRank(value)
|
|
if !ok || rank != index {
|
|
t.Fatalf("rank %q: %d %v", value, rank, ok)
|
|
}
|
|
}
|
|
if _, ok := SeverityRank("urgent"); ok {
|
|
t.Fatal("unknown severity was accepted")
|
|
}
|
|
}
|