Skip to content

Commit b8bc54a

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

File tree

2 files changed

+65
-3
lines changed

2 files changed

+65
-3
lines changed

pkg/controller/controllerutil/controllerutil.go

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -349,26 +349,31 @@ func mutate(f MutateFn, key client.ObjectKey, obj client.Object) error {
349349
type MutateFn func() error
350350

351351
// AddFinalizer accepts an Object and adds the provided finalizer if not present.
352-
func AddFinalizer(o client.Object, finalizer string) {
352+
// It returns an indication of whether it updated the object's list of finalizers.
353+
func AddFinalizer(o client.Object, finalizer string) (finalizersUpdated bool) {
353354
f := o.GetFinalizers()
354355
for _, e := range f {
355356
if e == finalizer {
356-
return
357+
return false
357358
}
358359
}
359360
o.SetFinalizers(append(f, finalizer))
361+
return true
360362
}
361363

362364
// RemoveFinalizer accepts an Object and removes the provided finalizer if present.
363-
func RemoveFinalizer(o client.Object, finalizer string) {
365+
// It returns an indication of whether it updated the object's list of finalizers.
366+
func RemoveFinalizer(o client.Object, finalizer string) (finalizersUpdated bool) {
364367
f := o.GetFinalizers()
365368
for i := 0; i < len(f); i++ {
366369
if f[i] == finalizer {
367370
f = append(f[:i], f[i+1:]...)
368371
i--
372+
finalizersUpdated = true
369373
}
370374
}
371375
o.SetFinalizers(f)
376+
return
372377
}
373378

374379
// 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 object's list of finalizers,", func() {
704+
deploy = &appsv1.Deployment{
705+
ObjectMeta: metav1.ObjectMeta{
706+
Finalizers: []string{},
707+
},
708+
}
709+
710+
When("the object's list of finalizers 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 object's list of finalizers", func() {
715+
Expect(deploy.ObjectMeta.GetFinalizers()).To(Equal([]string{testFinalizer}))
716+
})
717+
})
718+
719+
When("the object's list of finalizers 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 object's list of finalizers", 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 object's list of finalizers,", func() {
730+
When("the object's list of finalizers 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 object's list of finalizers", func() {
735+
Expect(deploy.ObjectMeta.GetFinalizers()).To(Equal([]string{testFinalizer}))
736+
})
737+
})
738+
739+
When("the object's list of finalizers 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 object's list of finalizers", func() {
744+
Expect(deploy.ObjectMeta.GetFinalizers()).To(Equal([]string{}))
745+
})
746+
})
747+
748+
When("the object's list of finalizers 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 object's list of finalizers", 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)