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