65 lines
1.8 KiB
Go
65 lines
1.8 KiB
Go
package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"testing"
|
|
)
|
|
|
|
func TestMaxSeverity(t *testing.T) {
|
|
parse := func(s string) netdataAlarms {
|
|
var a netdataAlarms
|
|
if err := json.Unmarshal([]byte(s), &a); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
return a
|
|
}
|
|
cases := []struct{ body, want string }{
|
|
{`{"alarms":{}}`, "clear"},
|
|
{`{"alarms":{"a":{"status":"WARNING"}}}`, "warning"},
|
|
{`{"alarms":{"a":{"status":"WARNING"},"b":{"status":"CRITICAL"}}}`, "critical"},
|
|
{`{"alarms":{"a":{"status":"CLEAR"}}}`, "clear"},
|
|
}
|
|
for _, c := range cases {
|
|
if got := maxSeverity(parse(c.body)); got != c.want {
|
|
t.Errorf("maxSeverity(%s) = %q, want %q", c.body, got, c.want)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestKumaAnyDown(t *testing.T) {
|
|
cases := []struct {
|
|
body string
|
|
down, seen bool
|
|
}{
|
|
{"", false, false},
|
|
{`monitor_status{monitor_name="web"} 1`, false, true},
|
|
{`monitor_status{monitor_name="web"} 1` + "\n" + `monitor_status{monitor_name="db"} 0`, true, true},
|
|
{`monitor_status{monitor_name="mnt"} 3`, false, true}, // maintenance ≠ down
|
|
{`# HELP monitor_status ...`, false, false},
|
|
}
|
|
for _, c := range cases {
|
|
down, seen := kumaAnyDown([]byte(c.body))
|
|
if down != c.down || seen != c.seen {
|
|
t.Errorf("kumaAnyDown(%q) = (%v,%v), want (%v,%v)", c.body, down, seen, c.down, c.seen)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestParseMaxHandshake(t *testing.T) {
|
|
cases := []struct {
|
|
out string
|
|
want int64
|
|
}{
|
|
{"", 0},
|
|
{"pubkeyAAA\t0\n", 0}, // never handshaked
|
|
{"pubkeyAAA\t1700000000\n", 1700000000},
|
|
{"pubkeyAAA\t1700000000\npubkeyBBB\t1700000500\n", 1700000500}, // max wins
|
|
{"wg0\tpubkeyAAA\t1700000000\nwg0\tpubkeyBBB\t0\n", 1700000000}, // 'all' 3-field form
|
|
}
|
|
for _, c := range cases {
|
|
if got := parseMaxHandshake(c.out); got != c.want {
|
|
t.Errorf("parseMaxHandshake(%q) = %d, want %d", c.out, got, c.want)
|
|
}
|
|
}
|
|
}
|