diff --git a/internal/ingress/annotations/class/main.go b/internal/ingress/annotations/class/main.go index ef8df711e..6b6bfa434 100644 --- a/internal/ingress/annotations/class/main.go +++ b/internal/ingress/annotations/class/main.go @@ -63,5 +63,8 @@ func IsValid(ing *networking.Ingress) bool { } // 4. with IngressClass - return k8s.IngressClass.Name == *ing.Spec.IngressClassName + if ing.Spec.IngressClassName != nil { + return k8s.IngressClass.Name == *ing.Spec.IngressClassName + } + return false } diff --git a/internal/ingress/annotations/class/main_test.go b/internal/ingress/annotations/class/main_test.go index f38eeb790..9aa891822 100644 --- a/internal/ingress/annotations/class/main_test.go +++ b/internal/ingress/annotations/class/main_test.go @@ -22,45 +22,71 @@ import ( api "k8s.io/api/core/v1" networking "k8s.io/api/networking/v1beta1" meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/ingress-nginx/internal/k8s" ) func TestIsValidClass(t *testing.T) { dc := DefaultClass ic := IngressClass + k8sic := k8s.IngressClass + v1Ready := k8s.IsIngressV1Ready // restore original values after the tests defer func() { DefaultClass = dc IngressClass = ic + k8s.IngressClass = k8sic + k8s.IsIngressV1Ready = v1Ready }() tests := []struct { ingress string controller string defClass string + annotation bool + k8sClass *networking.IngressClass + v1Ready bool isValid bool }{ - {"", "", "nginx", true}, - {"", "nginx", "nginx", true}, - {"nginx", "nginx", "nginx", true}, - {"custom", "custom", "nginx", true}, - {"", "killer", "nginx", false}, - {"custom", "nginx", "nginx", false}, + {"", "", "nginx", true, nil, false, true}, + {"", "nginx", "nginx", true, nil, false, true}, + {"nginx", "nginx", "nginx", true, nil, false, true}, + {"custom", "custom", "nginx", true, nil, false, true}, + {"", "killer", "nginx", true, nil, false, false}, + {"custom", "nginx", "nginx", true, nil, false, false}, + {"", "custom", "nginx", false, + &networking.IngressClass{ + ObjectMeta: meta_v1.ObjectMeta{ + Name: "custom", + }, + }, + false, false}, + {"", "custom", "nginx", false, + &networking.IngressClass{ + ObjectMeta: meta_v1.ObjectMeta{ + Name: "custom", + }, + }, + true, false}, } - ing := &networking.Ingress{ - ObjectMeta: meta_v1.ObjectMeta{ - Name: "foo", - Namespace: api.NamespaceDefault, - }, - } - - data := map[string]string{} - ing.SetAnnotations(data) for _, test := range tests { - ing.Annotations[IngressKey] = test.ingress + ing := &networking.Ingress{ + ObjectMeta: meta_v1.ObjectMeta{ + Name: "foo", + Namespace: api.NamespaceDefault, + }, + } + + data := map[string]string{} + ing.SetAnnotations(data) + if test.annotation { + ing.Annotations[IngressKey] = test.ingress + } IngressClass = test.controller DefaultClass = test.defClass + k8s.IngressClass = test.k8sClass + k8s.IsIngressV1Ready = test.v1Ready b := IsValid(ing) if b != test.isValid {