Skip to content

Commit

Permalink
return a bool from AddFinalizer and RemoveFinalizer
Browse files Browse the repository at this point in the history
Signed-off-by: hatfieldbrian <bhatfiel@redhat.com>
  • Loading branch information
hatfieldbrian committed Apr 15, 2022
1 parent e52a8b1 commit 4761631
Show file tree
Hide file tree
Showing 3 changed files with 71 additions and 2 deletions.
1 change: 0 additions & 1 deletion pkg/config/v1alpha1/zz_generated.deepcopy.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

15 changes: 14 additions & 1 deletion pkg/controller/controllerutil/controllerutil.go
Expand Up @@ -350,25 +350,38 @@ type MutateFn func() error

// AddFinalizer accepts an Object and adds the provided finalizer if not present.
func AddFinalizer(o client.Object, finalizer string) {
AddFinalizerV2(o, finalizer)
}

// AddFinalizerV2 accepts an Object and adds the provided finalizer and returns true if not present.
func AddFinalizerV2(o client.Object, finalizer string) (finalizersUpdated 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) {
RemoveFinalizerV2(o, finalizer)
}

// RemoveFinalizerV2 accepts an Object and removes the provided finalizer and returns true if present.
func RemoveFinalizerV2(o client.Object, finalizer string) (finalizersUpdated bool) {
f := o.GetFinalizers()
for i := 0; i < len(f); i++ {
if f[i] == finalizer {
f = append(f[:i], f[i+1:]...)
i--
finalizersUpdated = true
}
}
o.SetFinalizers(f)
return
}

// ContainsFinalizer checks an Object that the provided finalizer is present.
Expand Down
57 changes: 57 additions & 0 deletions pkg/controller/controllerutil/controllerutil_test.go
Expand Up @@ -700,6 +700,62 @@ var _ = Describe("Controllerutil", func() {
})
})

Describe("AddFinalizerV2, which returns an indication of whether it modified the input object's finalizers list,", func() {
deploy = &appsv1.Deployment{
ObjectMeta: metav1.ObjectMeta{
Finalizers: []string{},
},
}

When("the input object's finalizers list has no instances of the input finalizer", func() {
It("should return true", func() {
Expect(controllerutil.AddFinalizerV2(deploy, testFinalizer)).To(BeTrue())
})
It("should add the input finalizer to the input object's finalizers list", func() {
Expect(deploy.ObjectMeta.GetFinalizers()).To(Equal([]string{testFinalizer}))
})
})

When("the input object's finalizers list has an instance of the input finalizer", func() {
It("should return false", func() {
Expect(controllerutil.AddFinalizerV2(deploy, testFinalizer)).To(BeFalse())
})
It("should not modify the input object's finalizers list", func() {
Expect(deploy.ObjectMeta.GetFinalizers()).To(Equal([]string{testFinalizer}))
})
})
})

Describe("RemoveFinalizerV2, which returns an indication of whether it modified the input object's finalizers list,", func() {
When("the input object's finalizers list has no instances of the input finalizer", func() {
It("should return false", func() {
Expect(controllerutil.RemoveFinalizerV2(deploy, testFinalizer1)).To(BeFalse())
})
It("should not modify the input object's finalizers list", func() {
Expect(deploy.ObjectMeta.GetFinalizers()).To(Equal([]string{testFinalizer}))
})
})

When("the input object's finalizers list has one instance of the input finalizer", func() {
It("should return true", func() {
Expect(controllerutil.RemoveFinalizerV2(deploy, testFinalizer)).To(BeTrue())
})
It("should remove the instance of the input finalizer from the input object's finalizers list", func() {
Expect(deploy.ObjectMeta.GetFinalizers()).To(Equal([]string{}))
})
})

When("the input object's finalizers list has multiple instances of the input finalizer", func() {
It("should return true", func() {
deploy.SetFinalizers(append(deploy.Finalizers, testFinalizer, testFinalizer))
Expect(controllerutil.RemoveFinalizerV2(deploy, testFinalizer)).To(BeTrue())
})
It("should remove each instance of the input finalizer from the input object's finalizers list", func() {
Expect(deploy.ObjectMeta.GetFinalizers()).To(Equal([]string{}))
})
})
})

Describe("ContainsFinalizer", func() {
It("should check that finalizer is present", func() {
controllerutil.AddFinalizer(deploy, testFinalizer)
Expand All @@ -715,6 +771,7 @@ var _ = Describe("Controllerutil", func() {
})

const testFinalizer = "foo.bar.baz"
const testFinalizer1 = testFinalizer + "1"

var _ runtime.Object = &errRuntimeObj{}
var _ metav1.Object = &errMetaObj{}
Expand Down

0 comments on commit 4761631

Please sign in to comment.