From 5e3fa366aea23505a6f8cb43a1521df7dc2fa4cb Mon Sep 17 00:00:00 2001 From: Rashmi Gottipati Date: Wed, 19 May 2021 09:53:29 -0400 Subject: [PATCH] Add needsUpdate and err fields on mockFinalizer struct for customizations Signed-off-by: Rashmi Gottipati --- pkg/finalizer/finalizer_test.go | 68 ++++++++++++++++++++++++++++++++- 1 file changed, 66 insertions(+), 2 deletions(-) diff --git a/pkg/finalizer/finalizer_test.go b/pkg/finalizer/finalizer_test.go index 80a197ec04..f809f52028 100644 --- a/pkg/finalizer/finalizer_test.go +++ b/pkg/finalizer/finalizer_test.go @@ -2,6 +2,7 @@ package finalizer import ( "context" + "fmt" "testing" . "github.com/onsi/ginkgo" @@ -12,10 +13,13 @@ import ( "sigs.k8s.io/controller-runtime/pkg/envtest/printer" ) -type mockFinalizer struct{} +type mockFinalizer struct { + needsUpdate bool + err error +} func (f mockFinalizer) Finalize(context.Context, client.Object) (needsUpdate bool, err error) { - return true, nil + return f.needsUpdate, f.err } func TestFinalizer(t *testing.T) { RegisterFailHandler(Fail) @@ -129,5 +133,65 @@ var _ = Describe("TestFinalizer", func() { Expect(err).To(BeNil()) Expect(needsUpdate).To(BeTrue()) }) + + It("should return needsUpdate as false and a non-nil error", func() { + now := metav1.Now() + pod.DeletionTimestamp = &now + pod.Finalizers = []string{"finalizers.sigs.k8s.io/testfinalizer"} + + f.needsUpdate = false + f.err = fmt.Errorf("finalizer failed for %q", pod.Finalizers[0]) + + err = finalizers.Register("finalizers.sigs.k8s.io/testfinalizer", f) + Expect(err).To(BeNil()) + + needsUpdate, err := finalizers.Finalize(context.TODO(), pod) + Expect(err).ToNot(BeNil()) + Expect(err.Error()).To(ContainSubstring("finalizer failed")) + Expect(needsUpdate).To(BeFalse()) + }) + + It("should return expected needsUpdate and error values when registering multiple finalizers", func() { + now := metav1.Now() + pod.DeletionTimestamp = &now + pod.Finalizers = []string{ + "finalizers.sigs.k8s.io/testfinalizer1", + "finalizers.sigs.k8s.io/testfinalizer2", + "finalizers.sigs.k8s.io/testfinalizer3", + } + + // registering multiple finalizers with different return values + // test for needsUpdate as true, and nil error + f.needsUpdate = true + f.err = nil + err = finalizers.Register("finalizers.sigs.k8s.io/testfinalizer1", f) + Expect(err).To(BeNil()) + + result, err := finalizers.Finalize(context.TODO(), pod) + Expect(err).To(BeNil()) + Expect(result).To(BeTrue()) + + // test for needsUpdate as false, and non-nil error + f.needsUpdate = false + f.err = fmt.Errorf("finalizer failed") + err = finalizers.Register("finalizers.sigs.k8s.io/testfinalizer2", f) + Expect(err).To(BeNil()) + + result, err = finalizers.Finalize(context.TODO(), pod) + Expect(err).ToNot(BeNil()) + Expect(err.Error()).To(ContainSubstring("finalizer failed")) + Expect(result).To(BeFalse()) + + // test for needsUpdate as true, and non-nil error + f.needsUpdate = true + f.err = fmt.Errorf("finalizer failed") + err = finalizers.Register("finalizers.sigs.k8s.io/testfinalizer3", f) + Expect(err).To(BeNil()) + + result, err = finalizers.Finalize(context.TODO(), pod) + Expect(err).ToNot(BeNil()) + Expect(err.Error()).To(ContainSubstring("finalizer failed")) + Expect(result).To(BeTrue()) + }) }) })