Skip to content

Commit 724c752

Browse files
committed
return a bool from AddFinalizer and RemoveFinalizer
Signed-off-by: hatfieldbrian <[email protected]>
1 parent e52a8b1 commit 724c752

File tree

2 files changed

+65
-5
lines changed

2 files changed

+65
-5
lines changed

pkg/controller/controllerutil/controllerutil.go

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -348,27 +348,30 @@ func mutate(f MutateFn, key client.ObjectKey, obj client.Object) error {
348348
// MutateFn is a function which mutates the existing object into it's desired state.
349349
type MutateFn func() error
350350

351-
// AddFinalizer accepts an Object and adds the provided finalizer if not present.
352-
func AddFinalizer(o client.Object, finalizer string) {
351+
// AddFinalizer accepts an Object and adds the provided finalizer and returns true if not present.
352+
func AddFinalizer(o client.Object, finalizer string) (finalizersUpdated bool) {
353353
f := o.GetFinalizers()
354354
for _, e := range f {
355355
if e == finalizer {
356-
return
356+
return false
357357
}
358358
}
359359
o.SetFinalizers(append(f, finalizer))
360+
return true
360361
}
361362

362-
// RemoveFinalizer accepts an Object and removes the provided finalizer if present.
363-
func RemoveFinalizer(o client.Object, finalizer string) {
363+
// RemoveFinalizer accepts an Object and removes the provided finalizer and returns true if present.
364+
func RemoveFinalizer(o client.Object, finalizer string) (finalizersUpdated bool) {
364365
f := o.GetFinalizers()
365366
for i := 0; i < len(f); i++ {
366367
if f[i] == finalizer {
367368
f = append(f[:i], f[i+1:]...)
368369
i--
370+
finalizersUpdated = true
369371
}
370372
}
371373
o.SetFinalizers(f)
374+
return
372375
}
373376

374377
// ContainsFinalizer checks an Object that the provided finalizer is present.

pkg/controller/controllerutil/controllerutil_test.go

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -700,6 +700,62 @@ var _ = Describe("Controllerutil", func() {
700700
})
701701
})
702702

703+
Describe("AddFinalizer, which returns an indication of whether it modified the input object's finalizers list,", func() {
704+
deploy = &appsv1.Deployment{
705+
ObjectMeta: metav1.ObjectMeta{
706+
Finalizers: []string{},
707+
},
708+
}
709+
710+
When("the input object's finalizers list has no instances of the input finalizer", func() {
711+
It("should return true", func() {
712+
Expect(controllerutil.AddFinalizer(deploy, testFinalizer)).To(BeTrue())
713+
})
714+
It("should add the input finalizer to the input object's finalizers list", func() {
715+
Expect(deploy.ObjectMeta.GetFinalizers()).To(Equal([]string{testFinalizer}))
716+
})
717+
})
718+
719+
When("the input object's finalizers list has an instance of the input finalizer", func() {
720+
It("should return false", func() {
721+
Expect(controllerutil.AddFinalizer(deploy, testFinalizer)).To(BeFalse())
722+
})
723+
It("should not modify the input object's finalizers list", func() {
724+
Expect(deploy.ObjectMeta.GetFinalizers()).To(Equal([]string{testFinalizer}))
725+
})
726+
})
727+
})
728+
729+
Describe("RemoveFinalizer, which returns an indication of whether it modified the input object's finalizers list,", func() {
730+
When("the input object's finalizers list has no instances of the input finalizer", func() {
731+
It("should return false", func() {
732+
Expect(controllerutil.RemoveFinalizer(deploy, testFinalizer1)).To(BeFalse())
733+
})
734+
It("should not modify the input object's finalizers list", func() {
735+
Expect(deploy.ObjectMeta.GetFinalizers()).To(Equal([]string{testFinalizer}))
736+
})
737+
})
738+
739+
When("the input object's finalizers list has one instance of the input finalizer", func() {
740+
It("should return true", func() {
741+
Expect(controllerutil.RemoveFinalizer(deploy, testFinalizer)).To(BeTrue())
742+
})
743+
It("should remove the instance of the input finalizer from the input object's finalizers list", func() {
744+
Expect(deploy.ObjectMeta.GetFinalizers()).To(Equal([]string{}))
745+
})
746+
})
747+
748+
When("the input object's finalizers list has multiple instances of the input finalizer", func() {
749+
It("should return true", func() {
750+
deploy.SetFinalizers(append(deploy.Finalizers, testFinalizer, testFinalizer))
751+
Expect(controllerutil.RemoveFinalizer(deploy, testFinalizer)).To(BeTrue())
752+
})
753+
It("should remove each instance of the input finalizer from the input object's finalizers list", func() {
754+
Expect(deploy.ObjectMeta.GetFinalizers()).To(Equal([]string{}))
755+
})
756+
})
757+
})
758+
703759
Describe("ContainsFinalizer", func() {
704760
It("should check that finalizer is present", func() {
705761
controllerutil.AddFinalizer(deploy, testFinalizer)
@@ -715,6 +771,7 @@ var _ = Describe("Controllerutil", func() {
715771
})
716772

717773
const testFinalizer = "foo.bar.baz"
774+
const testFinalizer1 = testFinalizer + "1"
718775

719776
var _ runtime.Object = &errRuntimeObj{}
720777
var _ metav1.Object = &errMetaObj{}

0 commit comments

Comments
 (0)