@@ -2,6 +2,7 @@ package finalizer
2
2
3
3
import (
4
4
"context"
5
+ "fmt"
5
6
"testing"
6
7
7
8
. "github.com/onsi/ginkgo"
@@ -12,10 +13,13 @@ import (
12
13
"sigs.k8s.io/controller-runtime/pkg/envtest/printer"
13
14
)
14
15
15
- type mockFinalizer struct {}
16
+ type mockFinalizer struct {
17
+ needsUpdate bool
18
+ err error
19
+ }
16
20
17
21
func (f mockFinalizer ) Finalize (context.Context , client.Object ) (needsUpdate bool , err error ) {
18
- return true , nil
22
+ return f . needsUpdate , f . err
19
23
}
20
24
func TestFinalizer (t * testing.T ) {
21
25
RegisterFailHandler (Fail )
@@ -129,5 +133,65 @@ var _ = Describe("TestFinalizer", func() {
129
133
Expect (err ).To (BeNil ())
130
134
Expect (needsUpdate ).To (BeTrue ())
131
135
})
136
+
137
+ It ("should return needsUpdate as false and a non-nil error" , func () {
138
+ now := metav1 .Now ()
139
+ pod .DeletionTimestamp = & now
140
+ pod .Finalizers = []string {"finalizers.sigs.k8s.io/testfinalizer" }
141
+
142
+ f .needsUpdate = false
143
+ f .err = fmt .Errorf ("finalizer failed for %q" , pod .Finalizers [0 ])
144
+
145
+ err = finalizers .Register ("finalizers.sigs.k8s.io/testfinalizer" , f )
146
+ Expect (err ).To (BeNil ())
147
+
148
+ needsUpdate , err := finalizers .Finalize (context .TODO (), pod )
149
+ Expect (err ).ToNot (BeNil ())
150
+ Expect (err .Error ()).To (ContainSubstring ("finalizer failed" ))
151
+ Expect (needsUpdate ).To (BeFalse ())
152
+ })
153
+
154
+ It ("should return expected needsUpdate and error values when registering multiple finalizers" , func () {
155
+ now := metav1 .Now ()
156
+ pod .DeletionTimestamp = & now
157
+ pod .Finalizers = []string {
158
+ "finalizers.sigs.k8s.io/testfinalizer1" ,
159
+ "finalizers.sigs.k8s.io/testfinalizer2" ,
160
+ "finalizers.sigs.k8s.io/testfinalizer3" ,
161
+ }
162
+
163
+ // registering multiple finalizers with different return values
164
+ // test for needsUpdate as true, and nil error
165
+ f .needsUpdate = true
166
+ f .err = nil
167
+ err = finalizers .Register ("finalizers.sigs.k8s.io/testfinalizer1" , f )
168
+ Expect (err ).To (BeNil ())
169
+
170
+ result , err := finalizers .Finalize (context .TODO (), pod )
171
+ Expect (err ).To (BeNil ())
172
+ Expect (result ).To (BeTrue ())
173
+
174
+ // test for needsUpdate as false, and non-nil error
175
+ f .needsUpdate = false
176
+ f .err = fmt .Errorf ("finalizer failed" )
177
+ err = finalizers .Register ("finalizers.sigs.k8s.io/testfinalizer2" , f )
178
+ Expect (err ).To (BeNil ())
179
+
180
+ result , err = finalizers .Finalize (context .TODO (), pod )
181
+ Expect (err ).ToNot (BeNil ())
182
+ Expect (err .Error ()).To (ContainSubstring ("finalizer failed" ))
183
+ Expect (result ).To (BeFalse ())
184
+
185
+ // test for needsUpdate as true, and non-nil error
186
+ f .needsUpdate = true
187
+ f .err = fmt .Errorf ("finalizer failed" )
188
+ err = finalizers .Register ("finalizers.sigs.k8s.io/testfinalizer3" , f )
189
+ Expect (err ).To (BeNil ())
190
+
191
+ result , err = finalizers .Finalize (context .TODO (), pod )
192
+ Expect (err ).ToNot (BeNil ())
193
+ Expect (err .Error ()).To (ContainSubstring ("finalizer failed" ))
194
+ Expect (result ).To (BeTrue ())
195
+ })
132
196
})
133
197
})
0 commit comments