From 2efa67ebd3f4d5004422d7c3a87cda9203bf8aad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Mierzwa?= Date: Sun, 12 May 2019 13:19:24 +0100 Subject: [PATCH] chore(tests): add more backend test coverage --- internal/alertmanager/dedup_test.go | 67 ++++++++++++++++++++++++ internal/filters/autocomplete_test.go | 74 +++++++++++++++++++++++++-- internal/filters/filter_test.go | 24 +++++++++ 3 files changed, 161 insertions(+), 4 deletions(-) diff --git a/internal/alertmanager/dedup_test.go b/internal/alertmanager/dedup_test.go index f5b8dc158..b1e07e326 100644 --- a/internal/alertmanager/dedup_test.go +++ b/internal/alertmanager/dedup_test.go @@ -132,3 +132,70 @@ func TestStripReceivers(t *testing.T) { t.Errorf("Expected no alerts after stripping all receivers, got %d", len(alerts)) } } + +func TestClearData(t *testing.T) { + log.SetLevel(log.PanicLevel) + httpmock.Activate() + for _, version := range mock.ListAllMocks() { + name := fmt.Sprintf("clear-data-mock-%s", version) + uri := fmt.Sprintf("http://localhost/clear/%s", version) + am, _ := alertmanager.NewAlertmanager(name, uri, alertmanager.WithRequestTimeout(time.Second)) + + mock.RegisterURL(fmt.Sprintf("%s/metrics", uri), version, "metrics") + _ = am.Pull() + if am.Version() != "" { + t.Errorf("[%s] Got non-empty version string: %s", am.Name, am.Version()) + } + if am.Error() == "" { + t.Errorf("[%s] Got empty error string", am.Name) + } + if len(am.Silences()) != 0 { + t.Errorf("[%s] Get %d silences", am.Name, len(am.Silences())) + } + if len(am.Alerts()) != 0 { + t.Errorf("[%s] Get %d alerts", am.Name, len(am.Alerts())) + } + if len(am.KnownLabels()) != 0 { + t.Errorf("[%s] Get %d known labels", am.Name, len(am.KnownLabels())) + } + + mock.RegisterURL(fmt.Sprintf("%s/api/v1/status", uri), version, "api/v1/status") + mock.RegisterURL(fmt.Sprintf("%s/api/v1/silences", uri), version, "api/v1/silences") + mock.RegisterURL(fmt.Sprintf("%s/api/v2/silences", uri), version, "api/v2/silences") + _ = am.Pull() + if am.Version() != "" { + t.Errorf("[%s] Got non-empty version string: %s", am.Name, am.Version()) + } + if am.Error() == "" { + t.Errorf("[%s] Got empty error string", am.Name) + } + if len(am.Silences()) != 0 { + t.Errorf("[%s] Get %d silences", am.Name, len(am.Silences())) + } + if len(am.Alerts()) != 0 { + t.Errorf("[%s] Get %d alerts", am.Name, len(am.Alerts())) + } + if len(am.KnownLabels()) != 0 { + t.Errorf("[%s] Get %d known labels", am.Name, len(am.KnownLabels())) + } + + mock.RegisterURL(fmt.Sprintf("%s/api/v1/alerts/groups", uri), version, "api/v1/alerts/groups") + mock.RegisterURL(fmt.Sprintf("%s/api/v2/alerts/groups", uri), version, "api/v2/alerts/groups") + _ = am.Pull() + if am.Version() == "" { + t.Errorf("[%s] Got empty version string", am.Name) + } + if am.Error() != "" { + t.Errorf("[%s] Got non-empty error string: %s", am.Name, am.Error()) + } + if len(am.Silences()) == 0 { + t.Errorf("[%s] Get %d silences", am.Name, len(am.Silences())) + } + if len(am.Alerts()) == 0 { + t.Errorf("[%s] Get %d alerts", am.Name, len(am.Alerts())) + } + if len(am.KnownLabels()) == 0 { + t.Errorf("[%s] Get %d known labels", am.Name, len(am.KnownLabels())) + } + } +} diff --git a/internal/filters/autocomplete_test.go b/internal/filters/autocomplete_test.go index 1bad262be..4c96fe44d 100644 --- a/internal/filters/autocomplete_test.go +++ b/internal/filters/autocomplete_test.go @@ -31,22 +31,88 @@ var acTests = []acTest{ { Alerts: []models.Alert{ models.Alert{ + State: models.AlertStateActive, Labels: map[string]string{ - "foo": "bar", + "foo": "bar", + "number": "1", }, + Receiver: "default", + Alertmanager: []models.AlertmanagerInstance{ + {Name: "am1"}, + {Name: "am2"}, + }, + }, + models.Alert{ + State: models.AlertStateSuppressed, + Labels: map[string]string{ + "foo": "bar baz", + "number": "5", + }, + Receiver: "not default", + Alertmanager: []models.AlertmanagerInstance{ + {Name: "am1"}, + { + Name: "am2", + Silences: map[string]*models.Silence{ + "1234567890": &models.Silence{ + ID: "1234567890", + CreatedBy: "me@example.com", + JiraID: "JIRA-1", + }, + }}, + }, + SilencedBy: []string{"1234567890"}, }, }, Expected: []string{ - "@age\u003e1h", "@age\u003c10m", "@age\u003c1h", "@age\u003e10m", + "@age\u003e1h", + "@alertmanager!=am1", + "@alertmanager!=am2", + "@alertmanager=am1", + "@alertmanager=am2", "@limit=10", "@limit=50", - "@state!=", - "@state=", + "@receiver!=default", + "@receiver!=not default", + "@receiver!~default", + "@receiver!~not", + "@receiver=default", + "@receiver=not default", + "@receiver=~default", + "@receiver=~not", + "@silence_author!=me@example.com", + "@silence_author!~me@example.com", + "@silence_author=me@example.com", + "@silence_author=~me@example.com", + "@silence_id!=1234567890", + "@silence_id=1234567890", + "@silence_jira!=JIRA-1", + "@silence_jira!~JIRA-1", + "@silence_jira=JIRA-1", + "@silence_jira=~JIRA-1", + "@state!=active", + "@state!=suppressed", + "@state=active", + "@state=suppressed", "foo!=bar", + "foo!=bar baz", + "foo!~bar", + "foo!~baz", "foo=bar", + "foo=bar baz", + "foo=~bar", + "foo=~baz", + "number!=1", + "number!=5", + "number\u003c1", + "number\u003c5", + "number=1", + "number=5", + "number\u003e1", + "number\u003e5", }, }, } diff --git a/internal/filters/filter_test.go b/internal/filters/filter_test.go index 750413196..8e3140370 100644 --- a/internal/filters/filter_test.go +++ b/internal/filters/filter_test.go @@ -541,6 +541,30 @@ var tests = []filterTest{ Alert: models.Alert{}, IsMatch: true, }, + filterTest{ + Expression: "@receiver=by-name", + IsValid: true, + Alert: models.Alert{ + Receiver: "by-name", + }, + IsMatch: true, + }, + filterTest{ + Expression: "@receiver=by-name", + IsValid: true, + Alert: models.Alert{ + Receiver: "by-not-name", + }, + IsMatch: false, + }, + filterTest{ + Expression: "@receiver=~name", + IsValid: true, + Alert: models.Alert{ + Receiver: "by-not-name", + }, + IsMatch: true, + }, } func TestFilters(t *testing.T) {