104 lines
3 KiB
Go
104 lines
3 KiB
Go
package checker
|
|
|
|
import (
|
|
"testing"
|
|
|
|
sdk "git.happydns.org/checker-sdk-go/checker"
|
|
)
|
|
|
|
func TestSeverityToStatus(t *testing.T) {
|
|
cases := []struct {
|
|
sev Severity
|
|
want sdk.Status
|
|
}{
|
|
{SeverityCrit, sdk.StatusCrit},
|
|
{SeverityWarn, sdk.StatusWarn},
|
|
{SeverityInfo, sdk.StatusInfo},
|
|
{Severity("nonsense"), sdk.StatusOK},
|
|
}
|
|
for _, c := range cases {
|
|
if got := severityToStatus(c.sev); got != c.want {
|
|
t.Errorf("severityToStatus(%q) = %v, want %v", c.sev, got, c.want)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestStatusToSeverity(t *testing.T) {
|
|
cases := []struct {
|
|
s sdk.Status
|
|
want Severity
|
|
}{
|
|
{sdk.StatusCrit, SeverityCrit},
|
|
{sdk.StatusWarn, SeverityWarn},
|
|
{sdk.StatusInfo, SeverityInfo},
|
|
{sdk.StatusOK, ""},
|
|
{sdk.StatusUnknown, ""},
|
|
}
|
|
for _, c := range cases {
|
|
if got := statusToSeverity(c.s); got != c.want {
|
|
t.Errorf("statusToSeverity(%v) = %q, want %q", c.s, got, c.want)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestMostCommonSerial(t *testing.T) {
|
|
d := &ObservationData{
|
|
Results: map[string]*NSResult{
|
|
"a.": {Authoritative: true, SOA: mkSOA(10), Serial: 10},
|
|
"b.": {Authoritative: true, SOA: mkSOA(10), Serial: 10},
|
|
"c.": {Authoritative: true, SOA: mkSOA(11), Serial: 11},
|
|
"d.": {Authoritative: false, SOA: mkSOA(99), Serial: 99}, // ignored
|
|
"e.": {Authoritative: true, SOA: nil, Serial: 0}, // ignored
|
|
"f.": nil, // ignored
|
|
},
|
|
}
|
|
if got := mostCommonSerial(d); got != 10 {
|
|
t.Errorf("mostCommonSerial = %d, want 10", got)
|
|
}
|
|
}
|
|
|
|
func TestFindingsToStates_AttachesHint(t *testing.T) {
|
|
in := []Finding{
|
|
{Code: CodeNoNS, Severity: SeverityCrit, Message: "x"},
|
|
{Code: "no_such_code", Severity: SeverityWarn, Message: "y"},
|
|
}
|
|
got := findingsToStates(in)
|
|
if len(got) != 2 {
|
|
t.Fatalf("want 2 states, got %d", len(got))
|
|
}
|
|
if got[0].Status != sdk.StatusCrit || got[0].Code != CodeNoNS {
|
|
t.Errorf("state[0] = %#v", got[0])
|
|
}
|
|
if got[0].Meta == nil || got[0].Meta["fix"] == nil {
|
|
t.Errorf("state[0] should carry remediation hint, got %#v", got[0].Meta)
|
|
}
|
|
if got[1].Meta != nil {
|
|
t.Errorf("state[1] should have no Meta, got %#v", got[1].Meta)
|
|
}
|
|
}
|
|
|
|
func TestHeadlineFromStates_AllGood(t *testing.T) {
|
|
d := &ObservationData{HasSOA: true, Probed: []string{"a.", "b."}, Results: map[string]*NSResult{
|
|
"a.": {Authoritative: true, SOA: mkSOA(7), Serial: 7},
|
|
"b.": {Authoritative: true, SOA: mkSOA(7), Serial: 7},
|
|
}}
|
|
states := []sdk.CheckState{{Status: sdk.StatusOK, Code: "ok"}}
|
|
_, class, _ := headlineFromStates(d, states, nil)
|
|
if class != "ok" {
|
|
t.Errorf("class = %q, want ok", class)
|
|
}
|
|
}
|
|
|
|
func TestHeadlineFromStates_PrioritisesCrit(t *testing.T) {
|
|
d := &ObservationData{HasSOA: true}
|
|
states := []sdk.CheckState{
|
|
{Status: sdk.StatusWarn, Code: CodeSlowNS},
|
|
{Status: sdk.StatusCrit, Code: CodeLame},
|
|
{Status: sdk.StatusWarn, Code: CodeNSRRsetDrift},
|
|
}
|
|
rendered := []reportFinding{{Class: "crit"}, {Class: "warn"}, {Class: "warn"}}
|
|
title, class, _ := headlineFromStates(d, states, rendered)
|
|
if class != "crit" || title == "" {
|
|
t.Errorf("expected crit headline, got class=%q title=%q", class, title)
|
|
}
|
|
}
|