From ae7b097630c6bd6d8c067af287826ba42c71c4e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Mierzwa?= Date: Thu, 5 Dec 2019 19:10:56 +0000 Subject: [PATCH] fix(backend): correct pre-release version parsing for alertmanager upstreams Fixes #1229 --- internal/alertmanager/mapper_test.go | 40 ++++++++++++++++++++++++++++ internal/mapper/mapper.go | 12 ++++++--- 2 files changed, 49 insertions(+), 3 deletions(-) create mode 100644 internal/alertmanager/mapper_test.go diff --git a/internal/alertmanager/mapper_test.go b/internal/alertmanager/mapper_test.go new file mode 100644 index 000000000..b81c55ba0 --- /dev/null +++ b/internal/alertmanager/mapper_test.go @@ -0,0 +1,40 @@ +package alertmanager + +import ( + "testing" + + "github.com/prymitive/karma/internal/mapper" +) + +func TestGetAlertMapper(t *testing.T) { + versions := []string{ + "0.4.0", + "0.4.1", + "0.4.99", + "0.5.0-alpha.0", + "0.5.0-beta.0", + "0.10", + "0.10.11", + "0.15.0-rc.3", + "0.17.0", + "0.20.0-rc.0", + "0.20.0-rc.0-2", + } + + for _, version := range versions { + _, err := mapper.GetAlertMapper(version) + if err != nil { + t.Errorf("mapper.GetAlertMapper(%s) returned error: %s", version, err) + } + + _, err = mapper.GetSilenceMapper(version) + if err != nil { + t.Errorf("mapper.GetSilenceMapper(%s) returned error: %s", version, err) + } + + _, err = mapper.GetStatusMapper(version) + if err != nil { + t.Errorf("mapper.GetStatusMapper(%s) returned error: %s", version, err) + } + } +} diff --git a/internal/mapper/mapper.go b/internal/mapper/mapper.go index 2c490cca3..c08e21b2d 100644 --- a/internal/mapper/mapper.go +++ b/internal/mapper/mapper.go @@ -4,6 +4,7 @@ import ( "fmt" "io" "net/http" + "strings" "time" "github.com/prymitive/karma/internal/models" @@ -50,10 +51,15 @@ func RegisterAlertMapper(m AlertMapper) { alertMappers = append(alertMappers, m) } +func fixSemVersion(version string) string { + // https://github.com/Masterminds/semver/issues/135 + return strings.SplitN(version, "-", 2)[0] +} + // GetAlertMapper returns mapper for given version func GetAlertMapper(version string) (AlertMapper, error) { for _, m := range alertMappers { - if m.IsSupported(version) { + if m.IsSupported(fixSemVersion(version)) { return m, nil } } @@ -69,7 +75,7 @@ func RegisterSilenceMapper(m SilenceMapper) { // GetSilenceMapper returns mapper for given version func GetSilenceMapper(version string) (SilenceMapper, error) { for _, m := range silenceMappers { - if m.IsSupported(version) { + if m.IsSupported(fixSemVersion(version)) { return m, nil } } @@ -85,7 +91,7 @@ func RegisterStatusMapper(m StatusMapper) { // GetStatusMapper returns mapper for given version func GetStatusMapper(version string) (StatusMapper, error) { for _, m := range statusMappers { - if m.IsSupported(version) { + if m.IsSupported(fixSemVersion(version)) { return m, nil } }