62 lines
1.6 KiB
Go
62 lines
1.6 KiB
Go
package alert
|
|||
|
|
|
||
|
|
import (
|
||
|
|
"strings"
|
||
|
|
"testing"
|
||
|
|
)
|
||
|
|
|
||
|
|
const grafana = `{
|
||
|
|
"status": "firing",
|
||
|
|
"title": "DiskFull",
|
||
|
|
"commonLabels": {"alertname": "DiskFull", "severity": "critical"},
|
||
|
|
"commonAnnotations": {"summary": "disk > 90", "description": "host a"},
|
||
|
|
"alerts": [
|
||
|
|
{"status": "firing", "labels": {"alertname": "DiskFull", "severity": "critical"}, "annotations": {"summary": "disk > 90"}}
|
||
|
|
]
|
||
|
|
}`
|
||
|
|
|
||
|
|
func TestTitleSeverityPrefersNtfyTitle(t *testing.T) {
|
||
|
|
title, sev := TitleSeverity("from ntfy", grafana)
|
||
|
|
if title != "from ntfy" || sev != "firing" {
|
||
|
|
t.Fatalf("%q %q", title, sev)
|
||
|
|
}
|
||
|
|
title, sev = TitleSeverity("", grafana)
|
||
|
|
if title != "DiskFull" || sev != "firing" {
|
||
|
|
t.Fatalf("%q %q", title, sev)
|
||
|
|
}
|
||
|
|
title, sev = TitleSeverity("", "plain body")
|
||
|
|
if title != "plain body" || sev != "" {
|
||
|
|
t.Fatalf("%q %q", title, sev)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestTone(t *testing.T) {
|
||
|
|
if Tone("firing", 3) != "bad" || Tone("resolved", 5) != "ok" || Tone("", 5) != "bad" || Tone("", 4) != "warn" || Tone("", 1) != "dim" {
|
||
|
|
t.Fatal(Tone("firing", 3), Tone("resolved", 5), Tone("", 5), Tone("", 4), Tone("", 1))
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestBodyView(t *testing.T) {
|
||
|
|
view := BodyView(grafana, false)
|
||
|
|
if !containsAll(view, "status: firing", "alert: DiskFull", "summary: disk > 90", "alerts:") {
|
||
|
|
t.Fatalf("%s", view)
|
||
|
|
}
|
||
|
|
raw := BodyView(grafana, true)
|
||
|
|
if !containsAll(raw, "\"commonLabels\"", "DiskFull") {
|
||
|
|
t.Fatalf("%s", raw)
|
||
|
|
}
|
||
|
|
pretty := BodyView(`{"a":1}`, false)
|
||
|
|
if !strings.Contains(pretty, "\"a\": 1") {
|
||
|
|
t.Fatalf("%s", pretty)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func containsAll(s string, parts ...string) bool {
|
||
|
|
for _, p := range parts {
|
||
|
|
if !strings.Contains(s, p) {
|
||
|
|
return false
|
||
|
|
}
|
||
|
|
}
|
||
|
|
return true
|
||
|
|
}
|