From b3803f29f280d6646f9b9644a3e34b0e4f34ed60 Mon Sep 17 00:00:00 2001 From: hatfieldbrian Date: Thu, 19 Aug 2021 13:04:26 -0700 Subject: [PATCH] return a bool from AddFinalizer and RemoveFinalizer Signed-off-by: hatfieldbrian --- pkg/controller/controllerutil/controllerutil.go | 14 +++++++++----- .../controllerutil/controllerutil_test.go | 15 +++++++++++---- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/pkg/controller/controllerutil/controllerutil.go b/pkg/controller/controllerutil/controllerutil.go index 13f14a7ed3..5eb98acddf 100644 --- a/pkg/controller/controllerutil/controllerutil.go +++ b/pkg/controller/controllerutil/controllerutil.go @@ -348,27 +348,31 @@ func mutate(f MutateFn, key client.ObjectKey, obj client.Object) error { // MutateFn is a function which mutates the existing object into it's desired state. type MutateFn func() error -// AddFinalizer accepts an Object and adds the provided finalizer if not present. -func AddFinalizer(o client.Object, finalizer string) { +// AddFinalizer accepts an Object and adds the provided finalizer and returns true if not present. +func AddFinalizer(o client.Object, finalizer string) bool { f := o.GetFinalizers() for _, e := range f { if e == finalizer { - return + return false } } o.SetFinalizers(append(f, finalizer)) + return true } -// RemoveFinalizer accepts an Object and removes the provided finalizer if present. -func RemoveFinalizer(o client.Object, finalizer string) { +// RemoveFinalizer accepts an Object and removes the provided finalizer and returns true if present. +func RemoveFinalizer(o client.Object, finalizer string) bool { + finalizerRemoved := false f := o.GetFinalizers() for i := 0; i < len(f); i++ { if f[i] == finalizer { f = append(f[:i], f[i+1:]...) i-- + finalizerRemoved = true } } o.SetFinalizers(f) + return finalizerRemoved } // ContainsFinalizer checks an Object that the provided finalizer is present. diff --git a/pkg/controller/controllerutil/controllerutil_test.go b/pkg/controller/controllerutil/controllerutil_test.go index d47c691465..54e7d5d26f 100644 --- a/pkg/controller/controllerutil/controllerutil_test.go +++ b/pkg/controller/controllerutil/controllerutil_test.go @@ -677,27 +677,33 @@ var _ = Describe("Controllerutil", func() { } It("should add the finalizer when not present", func() { - controllerutil.AddFinalizer(deploy, testFinalizer) + Expect(controllerutil.AddFinalizer(deploy, testFinalizer)).To(BeTrue()) Expect(deploy.ObjectMeta.GetFinalizers()).To(Equal([]string{testFinalizer})) }) It("should not add the finalizer when already present", func() { - controllerutil.AddFinalizer(deploy, testFinalizer) + Expect(controllerutil.AddFinalizer(deploy, testFinalizer)).To(BeFalse()) Expect(deploy.ObjectMeta.GetFinalizers()).To(Equal([]string{testFinalizer})) }) }) Describe("RemoveFinalizer", func() { + It("should not remove a finalizer not present", func() { + Expect(controllerutil.RemoveFinalizer(deploy, testFinalizer1)).To(BeFalse()) + Expect(deploy.ObjectMeta.GetFinalizers()).To(Equal([]string{testFinalizer})) + }) + It("should remove finalizer if present", func() { - controllerutil.RemoveFinalizer(deploy, testFinalizer) + Expect(controllerutil.RemoveFinalizer(deploy, testFinalizer)).To(BeTrue()) Expect(deploy.ObjectMeta.GetFinalizers()).To(Equal([]string{})) }) It("should remove all equal finalizers if present", func() { deploy.SetFinalizers(append(deploy.Finalizers, testFinalizer, testFinalizer)) - controllerutil.RemoveFinalizer(deploy, testFinalizer) + Expect(controllerutil.RemoveFinalizer(deploy, testFinalizer)).To(BeTrue()) Expect(deploy.ObjectMeta.GetFinalizers()).To(Equal([]string{})) }) + }) Describe("ContainsFinalizer", func() { @@ -715,6 +721,7 @@ var _ = Describe("Controllerutil", func() { }) const testFinalizer = "foo.bar.baz" +const testFinalizer1 = testFinalizer + "1" var _ runtime.Object = &errRuntimeObj{} var _ metav1.Object = &errMetaObj{}