mirror of
https://github.com/VictoriaMetrics/VictoriaMetrics.git
synced 2024-12-01 14:47:38 +00:00
efcdf613c2
This should reduce CPU usage on repeated SDConfig.GetLabels() calls.
98 lines
3.1 KiB
Go
98 lines
3.1 KiB
Go
package kubernetes
|
|
|
|
import (
|
|
"reflect"
|
|
"testing"
|
|
|
|
"github.com/VictoriaMetrics/VictoriaMetrics/lib/prompbmarshal"
|
|
"github.com/VictoriaMetrics/VictoriaMetrics/lib/promscrape/discoveryutils"
|
|
)
|
|
|
|
func TestParseIngressListFailure(t *testing.T) {
|
|
f := func(s string) {
|
|
t.Helper()
|
|
objectsByKey, _, err := parseIngressList([]byte(s))
|
|
if err == nil {
|
|
t.Fatalf("expecting non-nil error")
|
|
}
|
|
if len(objectsByKey) != 0 {
|
|
t.Fatalf("unexpected non-empty IngressList: %v", objectsByKey)
|
|
}
|
|
}
|
|
f(``)
|
|
f(`[1,23]`)
|
|
f(`{"items":[{"metadata":1}]}`)
|
|
f(`{"items":[{"metadata":{"labels":[1]}}]}`)
|
|
}
|
|
|
|
func TestParseIngressListSuccess(t *testing.T) {
|
|
data := `
|
|
{
|
|
"kind": "IngressList",
|
|
"apiVersion": "extensions/v1beta1",
|
|
"metadata": {
|
|
"selfLink": "/apis/extensions/v1beta1/ingresses",
|
|
"resourceVersion": "351452"
|
|
},
|
|
"items": [
|
|
{
|
|
"metadata": {
|
|
"name": "test-ingress",
|
|
"namespace": "default",
|
|
"selfLink": "/apis/extensions/v1beta1/namespaces/default/ingresses/test-ingress",
|
|
"uid": "6d3f38f9-de89-4bc9-b273-c8faf74e8a27",
|
|
"resourceVersion": "351445",
|
|
"generation": 1,
|
|
"creationTimestamp": "2020-04-13T16:43:52Z",
|
|
"annotations": {
|
|
"kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"networking.k8s.io/v1beta1\",\"kind\":\"Ingress\",\"metadata\":{\"annotations\":{},\"name\":\"test-ingress\",\"namespace\":\"default\"},\"spec\":{\"backend\":{\"serviceName\":\"testsvc\",\"servicePort\":80}}}\n"
|
|
}
|
|
},
|
|
"spec": {
|
|
"backend": {
|
|
"serviceName": "testsvc",
|
|
"servicePort": 80
|
|
},
|
|
"rules": [
|
|
{
|
|
"host": "foobar"
|
|
}
|
|
]
|
|
},
|
|
"status": {
|
|
"loadBalancer": {
|
|
"ingress": [
|
|
{
|
|
"ip": "172.17.0.2"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
}
|
|
]
|
|
}`
|
|
objectsByKey, meta, err := parseIngressList([]byte(data))
|
|
if err != nil {
|
|
t.Fatalf("unexpected error: %s", err)
|
|
}
|
|
expectedResourceVersion := "351452"
|
|
if meta.ResourceVersion != expectedResourceVersion {
|
|
t.Fatalf("unexpected resource version; got %s; want %s", meta.ResourceVersion, expectedResourceVersion)
|
|
}
|
|
sortedLabelss := getSortedLabelss(objectsByKey)
|
|
expectedLabelss := [][]prompbmarshal.Label{
|
|
discoveryutils.GetSortedLabels(map[string]string{
|
|
"__address__": "foobar",
|
|
"__meta_kubernetes_ingress_annotation_kubectl_kubernetes_io_last_applied_configuration": `{"apiVersion":"networking.k8s.io/v1beta1","kind":"Ingress","metadata":{"annotations":{},"name":"test-ingress","namespace":"default"},"spec":{"backend":{"serviceName":"testsvc","servicePort":80}}}` + "\n",
|
|
"__meta_kubernetes_ingress_annotationpresent_kubectl_kubernetes_io_last_applied_configuration": "true",
|
|
"__meta_kubernetes_ingress_host": "foobar",
|
|
"__meta_kubernetes_ingress_name": "test-ingress",
|
|
"__meta_kubernetes_ingress_path": "/",
|
|
"__meta_kubernetes_ingress_scheme": "http",
|
|
"__meta_kubernetes_namespace": "default",
|
|
}),
|
|
}
|
|
if !reflect.DeepEqual(sortedLabelss, expectedLabelss) {
|
|
t.Fatalf("unexpected labels:\ngot\n%v\nwant\n%v", sortedLabelss, expectedLabelss)
|
|
}
|
|
}
|