From 77973b527943a2acbdb9609734d69104d6969c18 Mon Sep 17 00:00:00 2001 From: Clayton Coleman Date: Fri, 17 Apr 2020 19:47:26 -0400 Subject: [PATCH] test: IngressClass exclusion test races with admission cache The admission cache may take longer to see both ingress classes than it takes to create the ingress. We must loop until we see the appropriate error, cleaning up after ourselves as we go. --- test/e2e/network/ingressclass.go | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/test/e2e/network/ingressclass.go b/test/e2e/network/ingressclass.go index 8df59460814..e1eb98de09c 100644 --- a/test/e2e/network/ingressclass.go +++ b/test/e2e/network/ingressclass.go @@ -19,10 +19,12 @@ package network import ( "context" "strings" + "time" networkingv1beta1 "k8s.io/api/networking/v1beta1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/intstr" + "k8s.io/apimachinery/pkg/util/wait" clientset "k8s.io/client-go/kubernetes" "k8s.io/kubernetes/test/e2e/framework" @@ -73,14 +75,19 @@ var _ = SIGDescribe("IngressClass [Feature:Ingress]", func() { framework.ExpectNoError(err) defer deleteIngressClass(cs, ingressClass2.Name) - _, err = createBasicIngress(cs, f.Namespace.Name) - if err == nil { - framework.Failf("Expected error creating Ingress") - } - + // the admission controller may take a few seconds to observe both ingress classes expectedErr := "2 default IngressClasses were found, only 1 allowed" - if !strings.Contains(err.Error(), expectedErr) { - framework.Failf("Expected error to contain %s, got %s", expectedErr, err.Error()) + var lastErr error + if err := wait.Poll(time.Second, time.Minute, func() (bool, error) { + defer cs.NetworkingV1beta1().Ingresses(f.Namespace.Name).Delete(context.TODO(), "ingress1", metav1.DeleteOptions{}) + _, err := createBasicIngress(cs, f.Namespace.Name) + if err == nil { + return false, nil + } + lastErr = err + return strings.Contains(err.Error(), expectedErr), nil + }); err != nil { + framework.Failf("Expected error to contain %s, got %s", expectedErr, lastErr.Error()) } })