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) } } }