From 6620f4b024ea43849b4ee357dd5a98d63010cf56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ma=C3=ABl=20Valais?= Date: Sun, 6 Mar 2022 11:22:36 +0100 Subject: [PATCH] e2e: fix flakiness: "CA Injector should update data when the certificate changes" MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The error: Operation cannot be fulfilled on certificates.cert-manager.io "serving-certs" has appeared in 162 different prow builds in the past. Signed-off-by: Maƫl Valais --- test/e2e/suite/serving/BUILD.bazel | 1 + test/e2e/suite/serving/cainjector.go | 18 +++++++++++++++--- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/test/e2e/suite/serving/BUILD.bazel b/test/e2e/suite/serving/BUILD.bazel index 8d15e4f97..3f7b98215 100644 --- a/test/e2e/suite/serving/BUILD.bazel +++ b/test/e2e/suite/serving/BUILD.bazel @@ -19,6 +19,7 @@ go_library( "@io_k8s_apimachinery//pkg/apis/meta/v1:go_default_library", "@io_k8s_apimachinery//pkg/runtime:go_default_library", "@io_k8s_apimachinery//pkg/types:go_default_library", + "@io_k8s_client_go//util/retry:go_default_library", "@io_k8s_kube_aggregator//pkg/apis/apiregistration/v1:go_default_library", "@io_k8s_sigs_controller_runtime//pkg/client:go_default_library", ], diff --git a/test/e2e/suite/serving/cainjector.go b/test/e2e/suite/serving/cainjector.go index 14943f929..6ec0232d8 100644 --- a/test/e2e/suite/serving/cainjector.go +++ b/test/e2e/suite/serving/cainjector.go @@ -29,6 +29,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" + "k8s.io/client-go/util/retry" apireg "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1" certmanager "github.com/cert-manager/cert-manager/pkg/apis/certmanager/v1" @@ -152,9 +153,20 @@ var _ = framework.CertManagerDescribe("CA Injector", func() { injectable, cert := generalSetup(test.makeInjectable("changed")) By("changing the name of the corresponding secret in the cert") - cert = cert.DeepCopy() // DeepCopy before updating - cert.Spec.DNSNames = append(cert.Spec.DNSNames, "something.com") - Expect(f.CRClient.Update(context.Background(), cert)).To(Succeed()) + retry.RetryOnConflict(retry.DefaultRetry, func() error { + err := f.CRClient.Get(context.Background(), types.NamespacedName{Name: cert.Name, Namespace: cert.Namespace}, cert) + if err != nil { + return err + } + + cert.Spec.DNSNames = append(cert.Spec.DNSNames, "something.com") + + err = f.CRClient.Update(context.Background(), cert) + if err != nil { + return err + } + return nil + }) cert, err := f.Helper().WaitForCertificateReadyAndDoneIssuing(cert, time.Second*30) Expect(err).NotTo(HaveOccurred(), "failed to wait for Certificate to become updated")