mirror of
https://github.com/VictoriaMetrics/VictoriaMetrics.git
synced 2025-03-11 15:34:56 +00:00
Vmalert tests (#3975)
* vmalert: add tests for notifier pkg * vmalert: add tests for remotewrite pkg * vmalert: add tests for template functions * vmalert: add tests for web pages * vmalert: fix int overflow in tests Signed-off-by: hagen1778 <roman@victoriametrics.com>
This commit is contained in:
parent
c397e56769
commit
0ac57ef5b9
7 changed files with 94 additions and 10 deletions
|
@ -111,11 +111,7 @@ func (a *Alert) ExecTemplate(q templates.QueryFn, labels, annotations map[string
|
||||||
ActiveAt: a.ActiveAt,
|
ActiveAt: a.ActiveAt,
|
||||||
For: a.For,
|
For: a.For,
|
||||||
}
|
}
|
||||||
tmpl, err := templates.GetWithFuncs(templates.FuncsWithQuery(q))
|
return ExecTemplate(q, annotations, tplData)
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("error getting a template: %w", err)
|
|
||||||
}
|
|
||||||
return templateAnnotations(annotations, tplData, tmpl, true)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ExecTemplate executes the given template for given annotations map.
|
// ExecTemplate executes the given template for given annotations map.
|
||||||
|
|
|
@ -200,6 +200,9 @@ func TestAlert_ExecTemplate(t *testing.T) {
|
||||||
}
|
}
|
||||||
for _, tc := range testCases {
|
for _, tc := range testCases {
|
||||||
t.Run(tc.name, func(t *testing.T) {
|
t.Run(tc.name, func(t *testing.T) {
|
||||||
|
if err := ValidateTemplates(tc.annotations); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
tpl, err := tc.alert.ExecTemplate(qFn, tc.alert.Labels, tc.annotations)
|
tpl, err := tc.alert.ExecTemplate(qFn, tc.alert.Labels, tc.annotations)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
|
|
|
@ -81,10 +81,6 @@ var (
|
||||||
//
|
//
|
||||||
// Init returns an error if both mods are used.
|
// Init returns an error if both mods are used.
|
||||||
func Init(gen AlertURLGenerator, extLabels map[string]string, extURL string) (func() []Notifier, error) {
|
func Init(gen AlertURLGenerator, extLabels map[string]string, extURL string) (func() []Notifier, error) {
|
||||||
if externalLabels != nil || externalURL != "" {
|
|
||||||
return nil, fmt.Errorf("BUG: notifier.Init was called multiple times")
|
|
||||||
}
|
|
||||||
|
|
||||||
externalURL = extURL
|
externalURL = extURL
|
||||||
externalLabels = extLabels
|
externalLabels = extLabels
|
||||||
eu, err := url.Parse(externalURL)
|
eu, err := url.Parse(externalURL)
|
||||||
|
|
37
app/vmalert/notifier/init_test.go
Normal file
37
app/vmalert/notifier/init_test.go
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
package notifier
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/VictoriaMetrics/VictoriaMetrics/lib/flagutil"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestInit(t *testing.T) {
|
||||||
|
oldAddrs := *addrs
|
||||||
|
defer func() { *addrs = oldAddrs }()
|
||||||
|
|
||||||
|
*addrs = flagutil.ArrayString{"127.0.0.1", "127.0.0.2"}
|
||||||
|
|
||||||
|
fn, err := Init(nil, nil, "")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("%s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
nfs := fn()
|
||||||
|
if len(nfs) != 2 {
|
||||||
|
t.Fatalf("expected to get 2 notifiers; got %d", len(nfs))
|
||||||
|
}
|
||||||
|
|
||||||
|
targets := GetTargets()
|
||||||
|
if targets == nil || targets[TargetStatic] == nil {
|
||||||
|
t.Fatalf("expected to get static targets in response")
|
||||||
|
}
|
||||||
|
|
||||||
|
nf1 := targets[TargetStatic][0]
|
||||||
|
if nf1.Addr() != "127.0.0.1/api/v2/alerts" {
|
||||||
|
t.Fatalf("expected to get \"127.0.0.1/api/v2/alerts\"; got %q instead", nf1.Addr())
|
||||||
|
}
|
||||||
|
nf2 := targets[TargetStatic][1]
|
||||||
|
if nf2.Addr() != "127.0.0.2/api/v2/alerts" {
|
||||||
|
t.Fatalf("expected to get \"127.0.0.2/api/v2/alerts\"; got %q instead", nf2.Addr())
|
||||||
|
}
|
||||||
|
}
|
20
app/vmalert/remotewrite/init_test.go
Normal file
20
app/vmalert/remotewrite/init_test.go
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
package remotewrite
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestInit(t *testing.T) {
|
||||||
|
oldAddr := *addr
|
||||||
|
defer func() { *addr = oldAddr }()
|
||||||
|
|
||||||
|
*addr = "http://localhost:8428"
|
||||||
|
cl, err := Init(context.Background())
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
if err := cl.Close(); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
|
@ -76,6 +76,20 @@ func TestTemplateFuncs(t *testing.T) {
|
||||||
formatting("humanize1024", float64(146521335255970361638912), "124.1Zi")
|
formatting("humanize1024", float64(146521335255970361638912), "124.1Zi")
|
||||||
formatting("humanize1024", float64(150037847302113650318245888), "124.1Yi")
|
formatting("humanize1024", float64(150037847302113650318245888), "124.1Yi")
|
||||||
formatting("humanize1024", float64(153638755637364377925883789312), "1.271e+05Yi")
|
formatting("humanize1024", float64(153638755637364377925883789312), "1.271e+05Yi")
|
||||||
|
|
||||||
|
formatting("humanize", float64(127087), "127.1k")
|
||||||
|
formatting("humanize", float64(136458627186688), "136.5T")
|
||||||
|
|
||||||
|
formatting("humanizeDuration", 1, "1s")
|
||||||
|
formatting("humanizeDuration", 0.2, "200ms")
|
||||||
|
formatting("humanizeDuration", 42000, "11h 40m 0s")
|
||||||
|
formatting("humanizeDuration", 16790555, "194d 8h 2m 35s")
|
||||||
|
|
||||||
|
formatting("humanizePercentage", 1, "100%")
|
||||||
|
formatting("humanizePercentage", 0.8, "80%")
|
||||||
|
formatting("humanizePercentage", 0.015, "1.5%")
|
||||||
|
|
||||||
|
formatting("humanizeTimestamp", 1679055557, "2023-03-17 12:19:17 +0000 UTC")
|
||||||
}
|
}
|
||||||
|
|
||||||
func mkTemplate(current, replacement interface{}) textTemplate {
|
func mkTemplate(current, replacement interface{}) textTemplate {
|
||||||
|
|
|
@ -7,6 +7,7 @@ import (
|
||||||
"net/http/httptest"
|
"net/http/httptest"
|
||||||
"reflect"
|
"reflect"
|
||||||
"testing"
|
"testing"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/VictoriaMetrics/VictoriaMetrics/app/vmalert/notifier"
|
"github.com/VictoriaMetrics/VictoriaMetrics/app/vmalert/notifier"
|
||||||
)
|
)
|
||||||
|
@ -19,9 +20,18 @@ func TestHandler(t *testing.T) {
|
||||||
},
|
},
|
||||||
state: newRuleState(10),
|
state: newRuleState(10),
|
||||||
}
|
}
|
||||||
|
ar.state.add(ruleStateEntry{
|
||||||
|
time: time.Now(),
|
||||||
|
at: time.Now(),
|
||||||
|
samples: 10,
|
||||||
|
})
|
||||||
|
rr := &RecordingRule{
|
||||||
|
Name: "record",
|
||||||
|
state: newRuleState(10),
|
||||||
|
}
|
||||||
g := &Group{
|
g := &Group{
|
||||||
Name: "group",
|
Name: "group",
|
||||||
Rules: []Rule{ar},
|
Rules: []Rule{ar, rr},
|
||||||
}
|
}
|
||||||
m := &manager{groups: make(map[uint64]*Group)}
|
m := &manager{groups: make(map[uint64]*Group)}
|
||||||
m.groups[0] = g
|
m.groups[0] = g
|
||||||
|
@ -62,6 +72,14 @@ func TestHandler(t *testing.T) {
|
||||||
t.Run("/vmalert/rule", func(t *testing.T) {
|
t.Run("/vmalert/rule", func(t *testing.T) {
|
||||||
a := ar.ToAPI()
|
a := ar.ToAPI()
|
||||||
getResp(ts.URL+"/vmalert/"+a.WebLink(), nil, 200)
|
getResp(ts.URL+"/vmalert/"+a.WebLink(), nil, 200)
|
||||||
|
r := rr.ToAPI()
|
||||||
|
getResp(ts.URL+"/vmalert/"+r.WebLink(), nil, 200)
|
||||||
|
})
|
||||||
|
t.Run("/vmalert/alert", func(t *testing.T) {
|
||||||
|
alerts := ar.AlertsToAPI()
|
||||||
|
for _, a := range alerts {
|
||||||
|
getResp(ts.URL+"/vmalert/"+a.WebLink(), nil, 200)
|
||||||
|
}
|
||||||
})
|
})
|
||||||
t.Run("/vmalert/rule?badParam", func(t *testing.T) {
|
t.Run("/vmalert/rule?badParam", func(t *testing.T) {
|
||||||
params := fmt.Sprintf("?%s=0&%s=1", paramGroupID, paramRuleID)
|
params := fmt.Sprintf("?%s=0&%s=1", paramGroupID, paramRuleID)
|
||||||
|
|
Loading…
Reference in a new issue