From c4731089ee76e68e195acace6bc684ca027f4215 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Mierzwa?= Date: Sat, 4 Apr 2020 15:26:24 +0100 Subject: [PATCH] fix(tests): add more test coverage --- internal/filters/filter_test.go | 14 ++++++++ internal/slices/slices.go | 10 ++---- internal/verprobe/verprobe_test.go | 54 ++++++++++++++++++++++++++++++ 3 files changed, 70 insertions(+), 8 deletions(-) create mode 100644 internal/verprobe/verprobe_test.go diff --git a/internal/filters/filter_test.go b/internal/filters/filter_test.go index 9da0d5744..0005560b7 100644 --- a/internal/filters/filter_test.go +++ b/internal/filters/filter_test.go @@ -615,6 +615,20 @@ func TestFilters(t *testing.T) { t.Errorf("[%s] GetRawText() returned %#v != %s passed as the expression", ft.Expression, f.GetRawText(), ft.Expression) } } + if !f.GetIsValid() { + func() { + didPanic := false + defer func() { + if r := recover(); r != nil { + didPanic = true + } + }() + f.Match(&alert, 0) + if !didPanic { + t.Errorf("[%s] Match() on invalid filter didn't cause panic", ft.Expression) + } + }() + } } } diff --git a/internal/slices/slices.go b/internal/slices/slices.go index 47cddf4fb..f526be008 100644 --- a/internal/slices/slices.go +++ b/internal/slices/slices.go @@ -29,14 +29,8 @@ func StringInSlice(stringArray []string, value string) bool { func StringSliceToSHA1(stringArray []string) (string, error) { h := sha1.New() for _, s := range stringArray { - _, err := h.Write([]byte(s)) - if err != nil { - return "", err - } - _, err = h.Write([]byte("\n")) - if err != nil { - return "", err - } + _, _ = h.Write([]byte(s)) + _, _ = h.Write([]byte("\n")) } return fmt.Sprintf("%x", h.Sum(nil)), nil } diff --git a/internal/verprobe/verprobe_test.go b/internal/verprobe/verprobe_test.go new file mode 100644 index 000000000..714db823f --- /dev/null +++ b/internal/verprobe/verprobe_test.go @@ -0,0 +1,54 @@ +package verprobe_test + +import ( + "bytes" + "testing" + + "github.com/prymitive/karma/internal/verprobe" +) + +func TestDetect(t *testing.T) { + type testCaseT struct { + metrics string + version string + isError bool + } + + testCases := []testCaseT{ + { + metrics: "", + version: "", + }, + { + metrics: "xxxx", + version: "", + isError: true, + }, + { + metrics: "alertmanager_build_info 1\n", + version: "", + }, + { + metrics: "alertmanager_build_info{foo=\"bar\"} 1\n", + version: "", + }, + { + metrics: "alertmanager_build_info{version=\"1.2.3\"} 1\n", + version: "1.2.3", + }, + } + + for _, testCase := range testCases { + r := bytes.NewBufferString(testCase.metrics) + version, err := verprobe.Detect(r) + isError := err != nil + if isError != testCase.isError { + t.Errorf("Version probe error=%q, expected isError=%v", err, testCase.isError) + } + if !isError { + if version != testCase.version { + t.Errorf("Version mismatch, got %q, expected %q", version, testCase.version) + } + } + } +}