mirror of
https://github.com/VictoriaMetrics/VictoriaMetrics.git
synced 2024-12-01 14:47:38 +00:00
8fc29ffc67
Previously multiple scrape jobs could create multiple watchers for the same apiURL. Now only a single watcher is used. This should reduce load on Kubernetes API server when many scrape job configs use Kubernetes service discovery.
100 lines
3.2 KiB
Go
100 lines
3.2 KiB
Go
package kubernetes
|
|
|
|
import (
|
|
"bytes"
|
|
"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()
|
|
r := bytes.NewBufferString(s)
|
|
objectsByKey, _, err := parseIngressList(r)
|
|
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"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
}
|
|
]
|
|
}`
|
|
r := bytes.NewBufferString(data)
|
|
objectsByKey, meta, err := parseIngressList(r)
|
|
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 !areEqualLabelss(sortedLabelss, expectedLabelss) {
|
|
t.Fatalf("unexpected labels:\ngot\n%v\nwant\n%v", sortedLabelss, expectedLabelss)
|
|
}
|
|
}
|