From bfbc1f3479423b5c53231cfec58895746ef2de69 Mon Sep 17 00:00:00 2001 From: Alexander Zielenski <351783+alexzielenski@users.noreply.github.com> Date: Fri, 21 Oct 2022 09:47:18 -0700 Subject: [PATCH] fix flaky admission tests would fllake .04% of the time on my machine. In tests waiting for objects to be reconciled, would erroneously treat the "Not Found" case as an error rather than waiting a bit. also add some more context to test errors to improve debuggability --- .../pkg/admission/plugin/cel/admission_test.go | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/staging/src/k8s.io/apiserver/pkg/admission/plugin/cel/admission_test.go b/staging/src/k8s.io/apiserver/pkg/admission/plugin/cel/admission_test.go index f46661e0153..16b86a8fa4d 100644 --- a/staging/src/k8s.io/apiserver/pkg/admission/plugin/cel/admission_test.go +++ b/staging/src/k8s.io/apiserver/pkg/admission/plugin/cel/admission_test.go @@ -141,6 +141,8 @@ func setupTest(t *testing.T) (plugin admission.ValidationInterface, paramTracker // Gets the last reconciled value in the controller of an object with the same // gvk and name as the given object +// +// If the object is not found both the error and object will be nil. func (c *celAdmissionController) getCurrentObject(obj runtime.Object) (runtime.Object, error) { accessor, err := meta.Accessor(obj) if err != nil { @@ -157,7 +159,8 @@ func (c *celAdmissionController) getCurrentObject(obj runtime.Object) (runtime.O if paramInfo, ok := c.paramsCRDControllers[paramSource]; ok { paramInformer = paramInfo.controller.Informer() } else { - return nil, fmt.Errorf("paramSource kind `%v` not known", paramSource.String()) + // Treat unknown CRD the same as not found + return nil, nil } // Param type. Just check informer for its GVK @@ -198,16 +201,19 @@ func waitForReconcile(ctx context.Context, controller *celAdmissionController, o for _, obj := range objects { currentValue, err := controller.getCurrentObject(obj) if err != nil { - return false, err + return false, fmt.Errorf("error getting current object: %w", err) + } else if currentValue == nil { + // Object not found, but not an error. Keep waiting. + return false, nil } objMeta, err := meta.Accessor(obj) if err != nil { - return false, err + return false, fmt.Errorf("error getting meta accessor for original %T object (%v): %w", obj, obj, err) } valueMeta, err := meta.Accessor(currentValue) if err != nil { - return false, err + return false, fmt.Errorf("error getting meta accessor for current %T object (%v): %w", currentValue, currentValue, err) } if len(objMeta.GetResourceVersion()) == 0 {