VictoriaMetrics/lib/promscrape/discovery/consulagent/service_node_test.go
2023-05-08 23:43:59 -07:00

142 lines
3.9 KiB
Go

package consulagent
import (
"testing"
"github.com/VictoriaMetrics/VictoriaMetrics/lib/promscrape/discovery/consul"
"github.com/VictoriaMetrics/VictoriaMetrics/lib/promscrape/discoveryutils"
"github.com/VictoriaMetrics/VictoriaMetrics/lib/promutils"
)
func TestParseServiceNodesFailure(t *testing.T) {
f := func(s string) {
t.Helper()
sns, err := consul.ParseServiceNodes([]byte(s))
if err == nil {
t.Fatalf("expecting non-nil error")
}
if sns != nil {
t.Fatalf("unexpected non-nil ServiceNodes: %v", sns)
}
}
f(``)
f(`[1,23]`)
f(`{"items":[{"metadata":1}]}`)
}
func TestParseServiceNodesSuccess(t *testing.T) {
data := `
[
{
"Service": {
"ID": "redis",
"Service": "redis",
"Tags": ["primary","foo=bar"],
"Address": "10.1.10.12",
"TaggedAddresses": {
"lan": {
"address": "10.1.10.12",
"port": 8000
},
"wan": {
"address": "198.18.1.2",
"port": 80
}
},
"Meta": {
"redis_version": "4.0"
},
"Port": 8000,
"Weights": {
"Passing": 10,
"Warning": 1
},
"Namespace": "ns-dev",
"Partition": "part-foobar"
},
"Checks": [
{
"Node": "foobar",
"CheckID": "service:redis",
"Name": "Service 'redis' check",
"Status": "passing",
"Notes": "",
"Output": "",
"ServiceID": "redis",
"ServiceName": "redis",
"ServiceTags": ["primary"],
"Namespace": "default"
},
{
"Node": "foobar",
"CheckID": "serfHealth",
"Name": "Serf Health Status",
"Status": "passing",
"Notes": "",
"Output": "",
"ServiceID": "",
"ServiceName": "",
"ServiceTags": [],
"Namespace": "default"
}
]
}
]
`
sns, err := consul.ParseServiceNodes([]byte(data))
if err != nil {
t.Fatalf("unexpected error: %s", err)
}
if len(sns) != 1 {
t.Fatalf("unexpected length of ServiceNodes; got %d; want %d", len(sns), 1)
}
sn := sns[0]
agentData := `
{
"Member": {
"Addr": "10.1.10.12"
},
"Config": {
"Datacenter": "dc1",
"NodeName": "foobar"
},
"Meta": {
"instance_type": "t2.medium"
}
}
`
agent, err := consul.ParseAgent([]byte(agentData))
if err != nil {
t.Fatalf("unexpected error: %s", err)
}
// Check sn.appendTargetLabels()
tagSeparator := ","
labelss := appendTargetLabels(sn, nil, "redis", tagSeparator, agent)
expectedLabelss := []*promutils.Labels{
promutils.NewLabelsFromMap(map[string]string{
"__address__": "10.1.10.12:8000",
"__meta_consulagent_address": "10.1.10.12",
"__meta_consulagent_dc": "dc1",
"__meta_consulagent_health": "passing",
"__meta_consulagent_metadata_instance_type": "t2.medium",
"__meta_consulagent_namespace": "ns-dev",
"__meta_consulagent_node": "foobar",
"__meta_consulagent_service": "redis",
"__meta_consulagent_service_address": "10.1.10.12",
"__meta_consulagent_service_id": "redis",
"__meta_consulagent_service_metadata_redis_version": "4.0",
"__meta_consulagent_service_port": "8000",
"__meta_consulagent_tagged_address_lan": "10.1.10.12:8000",
"__meta_consulagent_tagged_address_wan": "198.18.1.2:80",
"__meta_consulagent_tag_foo": "bar",
"__meta_consulagent_tag_primary": "",
"__meta_consulagent_tagpresent_foo": "true",
"__meta_consulagent_tagpresent_primary": "true",
"__meta_consulagent_tags": ",primary,foo=bar,",
}),
}
discoveryutils.TestEqualLabelss(t, labelss, expectedLabelss)
}