Skip to content
Prev Previous commit
Next Next commit
Move tests from cmd/thanos to pkg/alert
Signed-off-by: Simon Pasquier <spasquie@redhat.com>
  • Loading branch information
simonpasquier committed Dec 17, 2019
commit 282681efa73bf4fcc65b1ffcddbe3b99d68d2d22
98 changes: 0 additions & 98 deletions cmd/thanos/rule_test.go
Original file line number Diff line number Diff line change
@@ -1,12 +1,8 @@
package main

import (
"context"
"net/url"
"testing"

"github.com/pkg/errors"
"github.com/thanos-io/thanos/pkg/discovery/dns"
"github.com/thanos-io/thanos/pkg/testutil"
)

Expand Down Expand Up @@ -49,97 +45,3 @@ func Test_parseFlagLabels(t *testing.T) {
testutil.Equals(t, err != nil, td.expectErr)
}
}

func TestRule_AlertmanagerResolveWithoutPort(t *testing.T) {
mockResolver := mockResolver{
resultIPs: map[string][]string{
"alertmanager.com:9093": {"1.1.1.1:9300"},
},
}
am := alertmanagerSet{resolver: mockResolver, addrs: []string{"dns+http://alertmanager.com"}}

ctx := context.TODO()
err := am.update(ctx)
testutil.Ok(t, err)

expected := []*url.URL{
{
Scheme: "http",
Host: "1.1.1.1:9300",
},
}
gotURLs := am.get()
testutil.Equals(t, expected, gotURLs)
}

func TestRule_AlertmanagerResolveWithPort(t *testing.T) {
mockResolver := mockResolver{
resultIPs: map[string][]string{
"alertmanager.com:19093": {"1.1.1.1:9300"},
},
}
am := alertmanagerSet{resolver: mockResolver, addrs: []string{"dns+http://alertmanager.com:19093"}}

ctx := context.TODO()
err := am.update(ctx)
testutil.Ok(t, err)

expected := []*url.URL{
{
Scheme: "http",
Host: "1.1.1.1:9300",
},
}
gotURLs := am.get()
testutil.Equals(t, expected, gotURLs)
}

type mockResolver struct {
resultIPs map[string][]string
err error
}

func (m mockResolver) Resolve(ctx context.Context, name string, qtype dns.QType) ([]string, error) {
if m.err != nil {
return nil, m.err
}
if res, ok := m.resultIPs[name]; ok {
return res, nil
}
return nil, errors.Errorf("mockResolver not found response for name: %s", name)
}

func Test_ParseAlertmanagerAddress(t *testing.T) {
var tData = []struct {
address string
expectQueryType dns.QType
expectUrl *url.URL
expectError error
}{
{
address: "http://user:pass+word@foo.bar:3289",
expectQueryType: dns.QType(""),
expectUrl: &url.URL{Host: "foo.bar:3289", Scheme: "http", User: url.UserPassword("user", "pass+word")},
expectError: nil,
},
{
address: "dnssrvnoa+http://user:pass+word@foo.bar:3289",
expectQueryType: dns.QType("dnssrvnoa"),
expectUrl: &url.URL{Host: "foo.bar:3289", Scheme: "http", User: url.UserPassword("user", "pass+word")},
expectError: nil,
},
{
address: "foo+bar+http://foo.bar:3289",
expectQueryType: dns.QType("foo+bar"),
expectUrl: &url.URL{Host: "foo.bar:3289", Scheme: "http"},
expectError: nil,
},
}

for _, d := range tData {
q, u, e := parseAlertmanagerAddress(d.address)
testutil.Equals(t, d.expectError, e)
testutil.Equals(t, d.expectUrl, u)
testutil.Equals(t, d.expectQueryType, q)
}
}
99 changes: 99 additions & 0 deletions pkg/alert/client_test.go
Original file line number Diff line number Diff line change
@@ -1,9 +1,14 @@
package alert

import (
"context"
"strings"
"testing"
"time"

"github.com/pkg/errors"

"github.com/thanos-io/thanos/pkg/discovery/dns"
"github.com/thanos-io/thanos/pkg/testutil"
)

Expand Down Expand Up @@ -82,3 +87,97 @@ func TestBuildAlertmanagerConfiguration(t *testing.T) {
})
}
}

type mockEntry struct {
name string
qtype dns.QType
}

type mockResolver struct {
entries map[mockEntry][]string
err error
}

func (m mockResolver) Resolve(ctx context.Context, name string, qtype dns.QType) ([]string, error) {
if m.err != nil {
return nil, m.err
}
if res, ok := m.entries[mockEntry{name: name, qtype: qtype}]; ok {
return res, nil
}
return nil, errors.Errorf("mockResolver not found response for name: %s", name)
}

func TestUpdate(t *testing.T) {
for _, tc := range []struct {
cfg AlertmanagerConfig
resolver mockResolver

resolved []string
err bool
}{
{
cfg: AlertmanagerConfig{
StaticAddresses: []string{"dns+alertmanager.example.com:9095"},
},
resolver: mockResolver{
entries: map[mockEntry][]string{
mockEntry{name: "alertmanager.example.com:9095", qtype: dns.A}: []string{"1.1.1.1:9095", "2.2.2.2:9095"},
},
},
resolved: []string{"1.1.1.1:9095", "2.2.2.2:9095"},
},
{
cfg: AlertmanagerConfig{
StaticAddresses: []string{"dns+alertmanager.example.com"},
},
resolver: mockResolver{
entries: map[mockEntry][]string{
mockEntry{name: "alertmanager.example.com:9093", qtype: dns.A}: []string{"1.1.1.1:9093", "2.2.2.2:9093"},
},
},
resolved: []string{"1.1.1.1:9093", "2.2.2.2:9093"},
},
{
cfg: AlertmanagerConfig{
StaticAddresses: []string{"alertmanager.example.com:9096"},
},
resolved: []string{"alertmanager.example.com:9096"},
},
{
cfg: AlertmanagerConfig{
StaticAddresses: []string{"dnssrv+_web._tcp.alertmanager.example.com"},
},
resolver: mockResolver{
entries: map[mockEntry][]string{
mockEntry{name: "_web._tcp.alertmanager.example.com", qtype: dns.SRV}: []string{"1.1.1.1:9097", "2.2.2.2:9097"},
},
},
resolved: []string{"1.1.1.1:9097", "2.2.2.2:9097"},
},
{
cfg: AlertmanagerConfig{
StaticAddresses: []string{"dnssrv+_web._tcp.notfound.example.com"},
},
resolver: mockResolver{
entries: map[mockEntry][]string{},
},
err: true,
},
} {
t.Run(strings.Join(tc.cfg.StaticAddresses, ","), func(t *testing.T) {
am, err := NewAlertmanager(nil, tc.cfg)
testutil.Ok(t, err)
ctx := context.Background()
err = am.Update(ctx, &tc.resolver)
if tc.err {
t.Logf("%v", err)
testutil.NotOk(t, err)
return
}

testutil.Equals(t, tc.resolved, am.resolved)
})
}

}