From 794ef6df6a14c5653a862967532692ae8f6fd4e6 Mon Sep 17 00:00:00 2001 From: Axel Christ Date: Tue, 14 May 2019 22:02:16 +0200 Subject: [PATCH] Implement `IgnoreNotFound` implement `IgnoreNotFound` that ignores `NotFound` errors create test cases --- pkg/client/client_test.go | 36 +++++++++++++++++++++++++++++++----- pkg/client/interfaces.go | 11 +++++++++++ 2 files changed, 42 insertions(+), 5 deletions(-) diff --git a/pkg/client/client_test.go b/pkg/client/client_test.go index 930e97d9f6..6ebc26e083 100644 --- a/pkg/client/client_test.go +++ b/pkg/client/client_test.go @@ -28,7 +28,7 @@ import ( . "github.com/onsi/gomega" appsv1 "k8s.io/api/apps/v1" corev1 "k8s.io/api/core/v1" - "k8s.io/apimachinery/pkg/api/errors" + apierrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/runtime" @@ -232,7 +232,7 @@ var _ = Describe("Client", func() { By("creating the object a second time") err = cl.Create(context.TODO(), old) Expect(err).To(HaveOccurred()) - Expect(errors.IsAlreadyExists(err)).To(BeTrue()) + Expect(apierrors.IsAlreadyExists(err)).To(BeTrue()) close(done) }) @@ -281,7 +281,7 @@ var _ = Describe("Client", func() { actual, err := clientset.AppsV1().Deployments(ns).Get(dep.Name, metav1.GetOptions{}) Expect(err).To(HaveOccurred()) - Expect(errors.IsNotFound(err)).To(BeTrue()) + Expect(apierrors.IsNotFound(err)).To(BeTrue()) Expect(actual).To(Equal(&appsv1.Deployment{})) close(done) @@ -371,7 +371,7 @@ var _ = Describe("Client", func() { By("creating the object a second time") err = cl.Create(context.TODO(), u) Expect(err).To(HaveOccurred()) - Expect(errors.IsAlreadyExists(err)).To(BeTrue()) + Expect(apierrors.IsAlreadyExists(err)).To(BeTrue()) close(done) }) @@ -420,7 +420,7 @@ var _ = Describe("Client", func() { actual, err := clientset.AppsV1().Deployments(ns).Get(dep.Name, metav1.GetOptions{}) Expect(err).To(HaveOccurred()) - Expect(errors.IsNotFound(err)).To(BeTrue()) + Expect(apierrors.IsNotFound(err)).To(BeTrue()) Expect(actual).To(Equal(&appsv1.Deployment{})) close(done) @@ -2279,6 +2279,32 @@ var _ = Describe("Patch", func() { }) }) +var _ = Describe("IgnoreNotFound", func() { + It("should return nil on a 'NotFound' error", func() { + By("creating a NotFound error") + err := apierrors.NewNotFound(schema.GroupResource{}, "") + + By("returning no error") + Expect(client.IgnoreNotFound(err)).To(Succeed()) + }) + + It("should return the error on a status other than not found", func() { + By("creating a BadRequest error") + err := apierrors.NewBadRequest("") + + By("returning an error") + Expect(client.IgnoreNotFound(err)).To(HaveOccurred()) + }) + + It("should return the error on a non-status error", func() { + By("creating an fmt error") + err := fmt.Errorf("arbitrary error") + + By("returning an error") + Expect(client.IgnoreNotFound(err)).To(HaveOccurred()) + }) +}) + type fakeReader struct { Called int } diff --git a/pkg/client/interfaces.go b/pkg/client/interfaces.go index 70149a9224..2f4994033a 100644 --- a/pkg/client/interfaces.go +++ b/pkg/client/interfaces.go @@ -19,6 +19,8 @@ package client import ( "context" + apierrors "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/fields" @@ -504,3 +506,12 @@ func PatchWithForce() PatchOptionFunc { opts.Force = &force } } + +// IgnoreNotFound returns nil on NotFound errors. +// All other values that are not NotFound errors or nil are returned unmodified. +func IgnoreNotFound(err error) error { + if apierrors.IsNotFound(err) { + return nil + } + return err +}