Initial commit
This commit is contained in:
commit
a5287e4137
32 changed files with 4529 additions and 0 deletions
91
checker/metrics_test.go
Normal file
91
checker/metrics_test.go
Normal file
|
|
@ -0,0 +1,91 @@
|
|||
package checker
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
sdk "git.happydns.org/checker-sdk-go/checker"
|
||||
)
|
||||
|
||||
func TestExtractMetrics(t *testing.T) {
|
||||
key := "ex./A"
|
||||
data := &ResolverPropagationData{
|
||||
Zone: "ex.",
|
||||
Names: []string{"ex."},
|
||||
Types: []string{"A"},
|
||||
RunDurationMs: 1234,
|
||||
Resolvers: map[string]*ResolverView{
|
||||
"a": mkResolver("a", "eu", false, true, map[string]*RRProbe{
|
||||
key: {Rcode: "NOERROR", Signature: "1.1.1.1", LatencyMs: 50, Transport: TransportUDP},
|
||||
}),
|
||||
"b": mkResolver("b", "eu", false, false, map[string]*RRProbe{
|
||||
key: {Error: "timeout", Transport: TransportUDP},
|
||||
}),
|
||||
},
|
||||
RRsets: map[string]*RRsetView{key: {Name: "ex.", Type: "A"}},
|
||||
Stats: Stats{
|
||||
TotalResolvers: 2,
|
||||
ReachableResolvers: 1,
|
||||
CountriesCovered: 1,
|
||||
},
|
||||
}
|
||||
raw, err := json.Marshal(data)
|
||||
if err != nil {
|
||||
t.Fatalf("marshal: %v", err)
|
||||
}
|
||||
|
||||
states := []sdk.CheckState{
|
||||
{Status: sdk.StatusCrit, Code: "x"},
|
||||
{Status: sdk.StatusWarn, Code: "y"},
|
||||
{Status: sdk.StatusInfo, Code: "z"},
|
||||
{Status: sdk.StatusInfo, Code: "z2"},
|
||||
}
|
||||
ctx := sdk.NewReportContext(raw, nil, states)
|
||||
|
||||
prov := &resolverPropagationProvider{}
|
||||
metrics, err := prov.ExtractMetrics(ctx, time.Unix(0, 0))
|
||||
if err != nil {
|
||||
t.Fatalf("ExtractMetrics: %v", err)
|
||||
}
|
||||
|
||||
want := map[string]float64{
|
||||
"resolver_propagation_resolvers_total": 2,
|
||||
"resolver_propagation_resolvers_reachable": 1,
|
||||
"resolver_propagation_findings_critical": 1,
|
||||
"resolver_propagation_findings_warning": 1,
|
||||
"resolver_propagation_findings_info": 2,
|
||||
"resolver_propagation_run_duration_ms": 1234,
|
||||
}
|
||||
got := map[string]float64{}
|
||||
for _, m := range metrics {
|
||||
// Keep the first sample per name (most are zone-only labels).
|
||||
if _, ok := got[m.Name]; !ok {
|
||||
got[m.Name] = m.Value
|
||||
}
|
||||
}
|
||||
for name, v := range want {
|
||||
if got[name] != v {
|
||||
t.Errorf("metric %s = %v, want %v", name, got[name], v)
|
||||
}
|
||||
}
|
||||
|
||||
// resolver_up should appear once per resolver.
|
||||
var ups int
|
||||
for _, m := range metrics {
|
||||
if m.Name == "resolver_propagation_resolver_up" {
|
||||
ups++
|
||||
}
|
||||
}
|
||||
if ups != 2 {
|
||||
t.Errorf("resolver_up samples = %d, want 2", ups)
|
||||
}
|
||||
}
|
||||
|
||||
func TestExtractMetrics_BadPayload(t *testing.T) {
|
||||
ctx := sdk.StaticReportContext(json.RawMessage(`not-json`))
|
||||
prov := &resolverPropagationProvider{}
|
||||
if _, err := prov.ExtractMetrics(ctx, time.Now()); err == nil {
|
||||
t.Errorf("want decode error")
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue