|
|
@ -22,8 +22,9 @@ import (
|
|
|
|
|
|
|
|
|
|
|
|
"github.com/go-kit/kit/log"
|
|
|
|
"github.com/go-kit/kit/log"
|
|
|
|
"github.com/miekg/dns"
|
|
|
|
"github.com/miekg/dns"
|
|
|
|
"github.com/prometheus/common/model"
|
|
|
|
"gopkg.in/yaml.v2"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
"github.com/prometheus/common/model"
|
|
|
|
"github.com/prometheus/prometheus/discovery/targetgroup"
|
|
|
|
"github.com/prometheus/prometheus/discovery/targetgroup"
|
|
|
|
"github.com/prometheus/prometheus/util/testutil"
|
|
|
|
"github.com/prometheus/prometheus/util/testutil"
|
|
|
|
)
|
|
|
|
)
|
|
|
@ -103,6 +104,7 @@ func TestDNS(t *testing.T) {
|
|
|
|
name: "SRV record query",
|
|
|
|
name: "SRV record query",
|
|
|
|
config: SDConfig{
|
|
|
|
config: SDConfig{
|
|
|
|
Names: []string{"_mysql._tcp.db.example.com."},
|
|
|
|
Names: []string{"_mysql._tcp.db.example.com."},
|
|
|
|
|
|
|
|
Type: "SRV",
|
|
|
|
RefreshInterval: model.Duration(time.Minute),
|
|
|
|
RefreshInterval: model.Duration(time.Minute),
|
|
|
|
},
|
|
|
|
},
|
|
|
|
lookup: func(name string, qtype uint16, logger log.Logger) (*dns.Msg, error) {
|
|
|
|
lookup: func(name string, qtype uint16, logger log.Logger) (*dns.Msg, error) {
|
|
|
@ -178,3 +180,93 @@ func TestDNS(t *testing.T) {
|
|
|
|
})
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func TestSDConfigUnmarshalYAML(t *testing.T) {
|
|
|
|
|
|
|
|
marshal := func(c SDConfig) []byte {
|
|
|
|
|
|
|
|
d, err := yaml.Marshal(c)
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
|
|
panic(err)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return d
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
unmarshal := func(d []byte) func(interface{}) error {
|
|
|
|
|
|
|
|
return func(o interface{}) error {
|
|
|
|
|
|
|
|
return yaml.Unmarshal(d, o)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cases := []struct {
|
|
|
|
|
|
|
|
name string
|
|
|
|
|
|
|
|
input SDConfig
|
|
|
|
|
|
|
|
expectErr bool
|
|
|
|
|
|
|
|
}{
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
name: "valid srv",
|
|
|
|
|
|
|
|
input: SDConfig{
|
|
|
|
|
|
|
|
Names: []string{"a.example.com", "b.example.com"},
|
|
|
|
|
|
|
|
Type: "SRV",
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
expectErr: false,
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
name: "valid a",
|
|
|
|
|
|
|
|
input: SDConfig{
|
|
|
|
|
|
|
|
Names: []string{"a.example.com", "b.example.com"},
|
|
|
|
|
|
|
|
Type: "A",
|
|
|
|
|
|
|
|
Port: 5300,
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
expectErr: false,
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
name: "valid aaaa",
|
|
|
|
|
|
|
|
input: SDConfig{
|
|
|
|
|
|
|
|
Names: []string{"a.example.com", "b.example.com"},
|
|
|
|
|
|
|
|
Type: "AAAA",
|
|
|
|
|
|
|
|
Port: 5300,
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
expectErr: false,
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
name: "invalid a without port",
|
|
|
|
|
|
|
|
input: SDConfig{
|
|
|
|
|
|
|
|
Names: []string{"a.example.com", "b.example.com"},
|
|
|
|
|
|
|
|
Type: "A",
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
expectErr: true,
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
name: "invalid aaaa without port",
|
|
|
|
|
|
|
|
input: SDConfig{
|
|
|
|
|
|
|
|
Names: []string{"a.example.com", "b.example.com"},
|
|
|
|
|
|
|
|
Type: "AAAA",
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
expectErr: true,
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
name: "invalid empty names",
|
|
|
|
|
|
|
|
input: SDConfig{
|
|
|
|
|
|
|
|
Names: []string{},
|
|
|
|
|
|
|
|
Type: "AAAA",
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
expectErr: true,
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
name: "invalid unkown dns type",
|
|
|
|
|
|
|
|
input: SDConfig{
|
|
|
|
|
|
|
|
Names: []string{"a.example.com", "b.example.com"},
|
|
|
|
|
|
|
|
Type: "PTR",
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
expectErr: true,
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for _, c := range cases {
|
|
|
|
|
|
|
|
t.Run(c.name, func(t *testing.T) {
|
|
|
|
|
|
|
|
var config SDConfig
|
|
|
|
|
|
|
|
d := marshal(c.input)
|
|
|
|
|
|
|
|
err := config.UnmarshalYAML(unmarshal(d))
|
|
|
|
|
|
|
|
testutil.Equals(t, c.expectErr, err != nil)
|
|
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|