mirror of
https://github.com/kubernetes-sigs/external-dns.git
synced 2025-08-05 17:16:59 +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 (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||
"testing"
|
||||
|
||||
"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