diff --git a/src/github.com/matrix-org/go-neb/services/alertmanager/alertmanager_test.go b/src/github.com/matrix-org/go-neb/services/alertmanager/alertmanager_test.go
index 3771eb6..b39c9fa 100644
--- a/src/github.com/matrix-org/go-neb/services/alertmanager/alertmanager_test.go
+++ b/src/github.com/matrix-org/go-neb/services/alertmanager/alertmanager_test.go
@@ -11,6 +11,7 @@ import (
"io/ioutil"
"net/http"
"net/http/httptest"
+ "net/url"
"regexp"
"strings"
"testing"
@@ -70,8 +71,7 @@ func TestNotify(t *testing.T) {
lines := strings.Split(msg.FormattedBody, "\n")
- // silence
- silenceRegexp := regexp.MustCompile(`silence`)
+ // silence
matchedSilence := 0
for _, line := range lines {
if !strings.Contains(line, "silence") {
@@ -79,16 +79,10 @@ func TestNotify(t *testing.T) {
}
matchedSilence++
- m := silenceRegexp.FindStringSubmatch(line)
- if m == nil {
- t.Errorf("silence line %s had bad format", line)
- } else {
- url := m[1]
- expected := "http://alertmanager#silences/new?filter=%7balertname%3D%22alert%201%22,severity%3D%22huge%22%7d"
- if url != expected {
- t.Errorf("silence url: got %s, want %s", url, expected)
- }
- }
+ checkSilenceLine(t, line, map[string]string{
+ "alertname": "\"alert 1\"",
+ "severity": "\"huge\"",
+ })
break
}
@@ -154,3 +148,36 @@ func buildTestService(t *testing.T) types.Service {
return srv
}
+
+func checkSilenceLine(t *testing.T, line string, expectedKeys map[string]string) {
+ silenceRegexp := regexp.MustCompile(`silence`)
+ m := silenceRegexp.FindStringSubmatch(line)
+ if m == nil {
+ t.Errorf("silence line %s had bad format", line)
+ return
+ }
+
+ unesc, err := url.QueryUnescape(m[1])
+ if err != nil {
+ t.Errorf("Unable to decode filter, %v", err)
+ return
+ }
+
+ matched := 0
+ for _, f := range strings.Split(unesc, ",") {
+ splits := strings.SplitN(f, "=", 2)
+ key := splits[0]
+ exp, ok := expectedKeys[key]
+ if !ok {
+ t.Errorf("unexpected key in filter: %v", key)
+ } else if exp != splits[1] {
+ t.Errorf("bad value for filter key %v: got %q, want %q", key, splits[1], exp)
+ } else {
+ matched++
+ }
+ }
+
+ if matched != len(expectedKeys) {
+ t.Errorf("number of filter fields got %i, want %i", matched, len(expectedKeys))
+ }
+}