VictoriaMetrics/lib/promscrape/discovery/kuma/api_test.go

177 lines
4.0 KiB
Go

package kuma
import (
"reflect"
"testing"
"github.com/VictoriaMetrics/VictoriaMetrics/lib/promauth"
)
func Test_buildAPIPath(t *testing.T) {
type args struct {
server string
}
tests := []struct {
name string
args args
want string
wantErr bool
}{
{
name: "get api path ok",
args: args{server: "http://localhost:5676"},
want: "/v3/discovery:monitoringassignments",
},
{
name: "get api path incorrect server URL",
args: args{server: ":"},
wantErr: true,
},
{
name: "get api path incorrect server URL err",
args: args{server: "api"},
wantErr: true,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
sdConf := &SDConfig{
Server: tt.args.server,
HTTPClientConfig: promauth.HTTPClientConfig{},
ProxyClientConfig: promauth.ProxyClientConfig{},
}
apiConf, err := getAPIConfig(sdConf, ".")
if tt.wantErr {
if err == nil {
t.Errorf("buildAPIPath() error = %v, wantErr %v", err, tt.wantErr)
}
return
}
if apiConf.path != tt.want {
t.Errorf("buildAPIPath() got = %v, want = %v", apiConf.path, tt.want)
}
sdConf.MustStop()
})
}
}
func Test_parseAPIResponse(t *testing.T) {
type args struct {
data []byte
}
tests := []struct {
name string
args args
want []kumaTarget
wantErr bool
}{
{
name: "parse ok",
args: args{
data: []byte(`{
"version_info":"5dc9a5dd-2091-4426-a886-dfdc24fc99d7",
"resources":[
{
"@type":"type.googleapis.com/kuma.observability.v1.MonitoringAssignment",
"mesh":"default",
"service":"redis",
"labels":{ "test":"test1" },
"targets":[
{
"name":"redis",
"scheme":"http",
"address":"127.0.0.1:5670",
"metrics_path":"/metrics",
"labels":{ "kuma_io_protocol":"tcp" }
}
]
},
{
"@type":"type.googleapis.com/kuma.observability.v1.MonitoringAssignment",
"mesh":"default",
"service":"app",
"labels":{ "test":"test2" },
"targets":[
{
"name":"app",
"scheme":"http",
"address":"127.0.0.1:5671",
"metrics_path":"/metrics",
"labels":{ "kuma_io_protocol":"http" }
}
]
}
],
"type_url":"type.googleapis.com/kuma.observability.v1.MonitoringAssignment"
}`),
},
want: []kumaTarget{
{
Mesh: "default",
Service: "redis",
DataPlane: "redis",
Instance: "redis",
Scheme: "http",
Address: "127.0.0.1:5670",
MetricsPath: "/metrics",
Labels: map[string]string{"kuma_io_protocol": "tcp", "test": "test1"},
},
{
Mesh: "default",
Service: "app",
DataPlane: "app",
Instance: "app",
Scheme: "http",
Address: "127.0.0.1:5671",
MetricsPath: "/metrics",
Labels: map[string]string{"kuma_io_protocol": "http", "test": "test2"},
},
},
},
{
name: "parse err",
args: args{data: []byte(`[]`)},
wantErr: true,
},
{
name: "api version err",
args: args{
data: []byte(`{
"resources":[
{
"@type":"type.googleapis.com/kuma.observability.v2.MonitoringAssignment",
"mesh":"default",
"service":"redis",
"targets":[]
}
],
"type_url":"type.googleapis.com/kuma.observability.v2.MonitoringAssignment"
}`),
},
wantErr: true,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
resp, err := parseDiscoveryResponse(tt.args.data)
if tt.wantErr {
if err == nil {
t.Errorf("parseDiscoveryResponse() error = %v, wantErr %v", err, tt.wantErr)
}
return
}
got := parseKumaTargets(resp)
if !reflect.DeepEqual(got, tt.want) {
t.Errorf("parseDiscoveryResponse() got = %v, want %v", got, tt.want)
}
})
}
}