mirror of https://github.com/prometheus/prometheus
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
136 lines
3.8 KiB
136 lines
3.8 KiB
// Copyright 2016 The Prometheus Authors |
|
// Licensed under the Apache License, Version 2.0 (the "License"); |
|
// you may not use this file except in compliance with the License. |
|
// You may obtain a copy of the License at |
|
// |
|
// http://www.apache.org/licenses/LICENSE-2.0 |
|
// |
|
// Unless required by applicable law or agreed to in writing, software |
|
// distributed under the License is distributed on an "AS IS" BASIS, |
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
// See the License for the specific language governing permissions and |
|
// limitations under the License. |
|
|
|
package kubernetes |
|
|
|
import ( |
|
"testing" |
|
|
|
"github.com/prometheus/common/model" |
|
"github.com/prometheus/prometheus/config" |
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" |
|
"k8s.io/client-go/pkg/apis/extensions/v1beta1" |
|
) |
|
|
|
func ingressStoreKeyFunc(obj interface{}) (string, error) { |
|
return obj.(*v1beta1.Ingress).ObjectMeta.Name, nil |
|
} |
|
|
|
func newFakeIngressInformer() *fakeInformer { |
|
return newFakeInformer(ingressStoreKeyFunc) |
|
} |
|
|
|
func makeTestIngressDiscovery() (*Ingress, *fakeInformer) { |
|
i := newFakeIngressInformer() |
|
return NewIngress(nil, i), i |
|
} |
|
|
|
func makeIngress(tls []v1beta1.IngressTLS) *v1beta1.Ingress { |
|
return &v1beta1.Ingress{ |
|
ObjectMeta: metav1.ObjectMeta{ |
|
Name: "testingress", |
|
Namespace: "default", |
|
Labels: map[string]string{"testlabel": "testvalue"}, |
|
Annotations: map[string]string{"testannotation": "testannotationvalue"}, |
|
}, |
|
Spec: v1beta1.IngressSpec{ |
|
TLS: tls, |
|
Rules: []v1beta1.IngressRule{ |
|
{ |
|
Host: "example.com", |
|
IngressRuleValue: v1beta1.IngressRuleValue{ |
|
HTTP: &v1beta1.HTTPIngressRuleValue{ |
|
Paths: []v1beta1.HTTPIngressPath{ |
|
{Path: "/"}, |
|
{Path: "/foo"}, |
|
}, |
|
}, |
|
}, |
|
}, |
|
{ |
|
// No backend config, ignored |
|
Host: "nobackend.example.com", |
|
IngressRuleValue: v1beta1.IngressRuleValue{ |
|
HTTP: &v1beta1.HTTPIngressRuleValue{}, |
|
}, |
|
}, |
|
{ |
|
Host: "test.example.com", |
|
IngressRuleValue: v1beta1.IngressRuleValue{ |
|
HTTP: &v1beta1.HTTPIngressRuleValue{ |
|
Paths: []v1beta1.HTTPIngressPath{{}}, |
|
}, |
|
}, |
|
}, |
|
}, |
|
}, |
|
} |
|
} |
|
|
|
func expectedTargetGroups(tls bool) []*config.TargetGroup { |
|
scheme := "http" |
|
if tls { |
|
scheme = "https" |
|
} |
|
return []*config.TargetGroup{ |
|
{ |
|
Targets: []model.LabelSet{ |
|
{ |
|
"__meta_kubernetes_ingress_scheme": lv(scheme), |
|
"__meta_kubernetes_ingress_host": "example.com", |
|
"__meta_kubernetes_ingress_path": "/", |
|
"__address__": "example.com", |
|
}, |
|
{ |
|
"__meta_kubernetes_ingress_scheme": lv(scheme), |
|
"__meta_kubernetes_ingress_host": "example.com", |
|
"__meta_kubernetes_ingress_path": "/foo", |
|
"__address__": "example.com", |
|
}, |
|
{ |
|
"__meta_kubernetes_ingress_scheme": lv(scheme), |
|
"__meta_kubernetes_ingress_host": "test.example.com", |
|
"__address__": "test.example.com", |
|
"__meta_kubernetes_ingress_path": "/", |
|
}, |
|
}, |
|
Labels: model.LabelSet{ |
|
"__meta_kubernetes_ingress_name": "testingress", |
|
"__meta_kubernetes_namespace": "default", |
|
"__meta_kubernetes_ingress_label_testlabel": "testvalue", |
|
"__meta_kubernetes_ingress_annotation_testannotation": "testannotationvalue", |
|
}, |
|
Source: "ingress/default/testingress", |
|
}, |
|
} |
|
} |
|
|
|
func TestIngressDiscoveryInitial(t *testing.T) { |
|
n, i := makeTestIngressDiscovery() |
|
i.GetStore().Add(makeIngress(nil)) |
|
|
|
k8sDiscoveryTest{ |
|
discovery: n, |
|
expectedInitial: expectedTargetGroups(false), |
|
}.Run(t) |
|
} |
|
|
|
func TestIngressDiscoveryInitialTLS(t *testing.T) { |
|
n, i := makeTestIngressDiscovery() |
|
i.GetStore().Add(makeIngress([]v1beta1.IngressTLS{{}})) |
|
|
|
k8sDiscoveryTest{ |
|
discovery: n, |
|
expectedInitial: expectedTargetGroups(true), |
|
}.Run(t) |
|
}
|
|
|