mirror of
https://github.com/kubernetes-sigs/external-dns.git
synced 2025-08-07 01:56:57 +02:00
Add test cases for Traefik API group flags
This commit is contained in:
parent
9015377c12
commit
21398ecb7f
@ -19,6 +19,7 @@ package source
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
@ -1566,3 +1567,166 @@ func TestTraefikProxyOldIngressRouteUDPEndpoints(t *testing.T) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestTraefikAPIGroupDisableFlags(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
|
||||||
|
for _, ti := range []struct {
|
||||||
|
title string
|
||||||
|
ingressRoute IngressRoute
|
||||||
|
gvr schema.GroupVersionResource
|
||||||
|
ignoreHostnameAnnotation bool
|
||||||
|
disableLegacy bool
|
||||||
|
disableNew bool
|
||||||
|
expected []*endpoint.Endpoint
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
title: "IngressRoute.traefik.containo.us with the legacy API group enabled",
|
||||||
|
ingressRoute: IngressRoute{
|
||||||
|
TypeMeta: metav1.TypeMeta{
|
||||||
|
APIVersion: oldIngressrouteGVR.GroupVersion().String(),
|
||||||
|
Kind: "IngressRoute",
|
||||||
|
},
|
||||||
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
|
Name: "ingressroute-annotation",
|
||||||
|
Namespace: defaultTraefikNamespace,
|
||||||
|
Annotations: map[string]string{
|
||||||
|
"external-dns.alpha.kubernetes.io/hostname": "a.example.com",
|
||||||
|
"external-dns.alpha.kubernetes.io/target": "target.domain.tld",
|
||||||
|
"kubernetes.io/ingress.class": "traefik",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
gvr: oldIngressrouteGVR,
|
||||||
|
disableLegacy: false,
|
||||||
|
disableNew: false,
|
||||||
|
expected: []*endpoint.Endpoint{
|
||||||
|
{
|
||||||
|
DNSName: "a.example.com",
|
||||||
|
Targets: []string{"target.domain.tld"},
|
||||||
|
RecordType: endpoint.RecordTypeCNAME,
|
||||||
|
RecordTTL: 0,
|
||||||
|
Labels: endpoint.Labels{
|
||||||
|
"resource": "ingressroute/traefik/ingressroute-annotation",
|
||||||
|
},
|
||||||
|
ProviderSpecific: endpoint.ProviderSpecific{},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "IngressRoute.traefik.containo.us with the legacy API group disabled",
|
||||||
|
ingressRoute: IngressRoute{
|
||||||
|
TypeMeta: metav1.TypeMeta{
|
||||||
|
APIVersion: oldIngressrouteGVR.GroupVersion().String(),
|
||||||
|
Kind: "IngressRoute",
|
||||||
|
},
|
||||||
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
|
Name: "ingressroute-annotation",
|
||||||
|
Namespace: defaultTraefikNamespace,
|
||||||
|
Annotations: map[string]string{
|
||||||
|
"external-dns.alpha.kubernetes.io/hostname": "a.example.com",
|
||||||
|
"external-dns.alpha.kubernetes.io/target": "target.domain.tld",
|
||||||
|
"kubernetes.io/ingress.class": "traefik",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
gvr: oldIngressrouteGVR,
|
||||||
|
disableLegacy: true,
|
||||||
|
disableNew: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "IngressRoute.traefik.io with the new API group enabled",
|
||||||
|
ingressRoute: IngressRoute{
|
||||||
|
TypeMeta: metav1.TypeMeta{
|
||||||
|
APIVersion: ingressrouteGVR.GroupVersion().String(),
|
||||||
|
Kind: "IngressRoute",
|
||||||
|
},
|
||||||
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
|
Name: "ingressroute-annotation",
|
||||||
|
Namespace: defaultTraefikNamespace,
|
||||||
|
Annotations: map[string]string{
|
||||||
|
"external-dns.alpha.kubernetes.io/hostname": "a.example.com",
|
||||||
|
"external-dns.alpha.kubernetes.io/target": "target.domain.tld",
|
||||||
|
"kubernetes.io/ingress.class": "traefik",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
gvr: ingressrouteGVR,
|
||||||
|
disableLegacy: false,
|
||||||
|
disableNew: false,
|
||||||
|
expected: []*endpoint.Endpoint{
|
||||||
|
{
|
||||||
|
DNSName: "a.example.com",
|
||||||
|
Targets: []string{"target.domain.tld"},
|
||||||
|
RecordType: endpoint.RecordTypeCNAME,
|
||||||
|
RecordTTL: 0,
|
||||||
|
Labels: endpoint.Labels{
|
||||||
|
"resource": "ingressroute/traefik/ingressroute-annotation",
|
||||||
|
},
|
||||||
|
ProviderSpecific: endpoint.ProviderSpecific{},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "IngressRoute.traefik.io with the new API group disabled",
|
||||||
|
ingressRoute: IngressRoute{
|
||||||
|
TypeMeta: metav1.TypeMeta{
|
||||||
|
APIVersion: ingressrouteGVR.GroupVersion().String(),
|
||||||
|
Kind: "IngressRoute",
|
||||||
|
},
|
||||||
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
|
Name: "ingressroute-annotation",
|
||||||
|
Namespace: defaultTraefikNamespace,
|
||||||
|
Annotations: map[string]string{
|
||||||
|
"external-dns.alpha.kubernetes.io/hostname": "a.example.com",
|
||||||
|
"external-dns.alpha.kubernetes.io/target": "target.domain.tld",
|
||||||
|
"kubernetes.io/ingress.class": "traefik",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
gvr: ingressrouteGVR,
|
||||||
|
disableLegacy: false,
|
||||||
|
disableNew: true,
|
||||||
|
},
|
||||||
|
} {
|
||||||
|
ti := ti
|
||||||
|
t.Run(ti.title, func(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
|
||||||
|
fakeKubernetesClient := fakeKube.NewSimpleClientset()
|
||||||
|
scheme := runtime.NewScheme()
|
||||||
|
scheme.AddKnownTypes(ingressrouteGVR.GroupVersion(), &IngressRoute{}, &IngressRouteList{})
|
||||||
|
scheme.AddKnownTypes(ingressrouteTCPGVR.GroupVersion(), &IngressRouteTCP{}, &IngressRouteTCPList{})
|
||||||
|
scheme.AddKnownTypes(ingressrouteUDPGVR.GroupVersion(), &IngressRouteUDP{}, &IngressRouteUDPList{})
|
||||||
|
scheme.AddKnownTypes(oldIngressrouteGVR.GroupVersion(), &IngressRoute{}, &IngressRouteList{})
|
||||||
|
scheme.AddKnownTypes(oldIngressrouteTCPGVR.GroupVersion(), &IngressRouteTCP{}, &IngressRouteTCPList{})
|
||||||
|
scheme.AddKnownTypes(oldIngressrouteUDPGVR.GroupVersion(), &IngressRouteUDP{}, &IngressRouteUDPList{})
|
||||||
|
fakeDynamicClient := fakeDynamic.NewSimpleDynamicClient(scheme)
|
||||||
|
|
||||||
|
ir := unstructured.Unstructured{}
|
||||||
|
|
||||||
|
ingressRouteAsJSON, err := json.Marshal(ti.ingressRoute)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
assert.NoError(t, ir.UnmarshalJSON(ingressRouteAsJSON))
|
||||||
|
|
||||||
|
// Create proxy resources
|
||||||
|
_, err = fakeDynamicClient.Resource(ti.gvr).Namespace(defaultTraefikNamespace).Create(context.Background(), &ir, metav1.CreateOptions{})
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
source, err := NewTraefikSource(context.TODO(), fakeDynamicClient, fakeKubernetesClient, defaultTraefikNamespace, "kubernetes.io/ingress.class=traefik", ti.ignoreHostnameAnnotation, ti.disableLegacy, ti.disableNew)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.NotNil(t, source)
|
||||||
|
|
||||||
|
count := &unstructured.UnstructuredList{}
|
||||||
|
for len(count.Items) < 1 {
|
||||||
|
count, _ = fakeDynamicClient.Resource(ti.gvr).Namespace(defaultTraefikNamespace).List(context.Background(), metav1.ListOptions{})
|
||||||
|
}
|
||||||
|
|
||||||
|
endpoints, err := source.Endpoints(context.Background())
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Len(t, endpoints, len(ti.expected))
|
||||||
|
assert.Equal(t, ti.expected, endpoints)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user