@@ -22,10 +22,14 @@ import (
22
22
"testing"
23
23
24
24
csiaddonsv1alpha1 "github.com/csi-addons/kubernetes-csi-addons/apis/csiaddons/v1alpha1"
25
+ "github.com/csi-addons/kubernetes-csi-addons/internal/connection"
25
26
"github.com/go-logr/logr"
26
27
"github.com/stretchr/testify/assert"
28
+ corev1 "k8s.io/api/core/v1"
29
+ storagev1 "k8s.io/api/storage/v1"
27
30
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
28
31
"sigs.k8s.io/controller-runtime/pkg/client"
32
+ "sigs.k8s.io/controller-runtime/pkg/client/fake"
29
33
"sigs.k8s.io/controller-runtime/pkg/log"
30
34
)
31
35
@@ -248,3 +252,116 @@ func TestGetScheduleFromAnnotation(t *testing.T) {
248
252
})
249
253
}
250
254
}
255
+
256
+ func TestDetermineScheduleAndRequeue (t * testing.T ) {
257
+ type args struct {
258
+ pvcAnnotations map [string ]string
259
+ nsAnnotations map [string ]string
260
+ scAnnotations map [string ]string
261
+ }
262
+ tests := []struct {
263
+ name string
264
+ args args
265
+ want string
266
+ }{
267
+ {
268
+ name : "pvc annotation set" ,
269
+ args : args {
270
+ pvcAnnotations : map [string ]string {rsCronJobScheduleTimeAnnotation : "@daily" },
271
+ },
272
+ want : "@daily" ,
273
+ },
274
+ {
275
+ name : "sc annotation set" ,
276
+ args : args {
277
+ scAnnotations : map [string ]string {rsCronJobScheduleTimeAnnotation : "@monthly" },
278
+ },
279
+ want : "@monthly" ,
280
+ },
281
+ {
282
+ name : "pvc & sc annotation set" ,
283
+ args : args {
284
+ pvcAnnotations : map [string ]string {rsCronJobScheduleTimeAnnotation : "@daily" },
285
+ scAnnotations : map [string ]string {rsCronJobScheduleTimeAnnotation : "@weekly" },
286
+ },
287
+ want : "@daily" ,
288
+ },
289
+ }
290
+
291
+ ctx := context .TODO ()
292
+ logger := logr .Discard ()
293
+ client := fake .NewClientBuilder ().Build ()
294
+ driverName := "test-driver"
295
+
296
+ ns := & corev1.Namespace {
297
+ ObjectMeta : metav1.ObjectMeta {
298
+ Name : "test-namespace" ,
299
+ },
300
+ }
301
+ sc := & storagev1.StorageClass {
302
+ ObjectMeta : metav1.ObjectMeta {
303
+ Name : "test-sc" ,
304
+ },
305
+ }
306
+ pvc := & corev1.PersistentVolumeClaim {
307
+ ObjectMeta : metav1.ObjectMeta {
308
+ Name : "test-pvc" ,
309
+ Namespace : ns .Name ,
310
+ },
311
+ Spec : corev1.PersistentVolumeClaimSpec {
312
+ StorageClassName : & sc .Name ,
313
+ },
314
+ }
315
+
316
+ r := & PersistentVolumeClaimReconciler {
317
+ Client : client ,
318
+ ConnPool : connection .NewConnectionPool (),
319
+ }
320
+
321
+ // Create the namespace, storage class, and PVC
322
+ err := r .Client .Create (ctx , ns )
323
+ assert .NoError (t , err )
324
+ err = r .Client .Create (ctx , sc )
325
+ assert .NoError (t , err )
326
+ err = r .Client .Create (ctx , pvc )
327
+ assert .NoError (t , err )
328
+
329
+ for _ , tt := range tests {
330
+ t .Run (tt .name , func (t * testing.T ) {
331
+ pvc .Annotations = tt .args .pvcAnnotations
332
+ ns .Annotations = tt .args .nsAnnotations
333
+ sc .Annotations = tt .args .scAnnotations
334
+
335
+ err = r .Client .Update (ctx , ns )
336
+ assert .NoError (t , err )
337
+ err = r .Client .Update (ctx , sc )
338
+ assert .NoError (t , err )
339
+ err = r .Client .Update (ctx , pvc )
340
+ assert .NoError (t , err )
341
+
342
+ schedule , error := r .determineScheduleAndRequeue (ctx , & logger , pvc , driverName )
343
+ assert .NoError (t , error )
344
+ assert .Equal (t , tt .want , schedule )
345
+ })
346
+ }
347
+
348
+ t .Run ("empty StorageClassName for static pv" , func (t * testing.T ) {
349
+ emptyScName := ""
350
+ pvc .Spec .StorageClassName = & emptyScName
351
+ pvc .Annotations = nil
352
+ schedule , error := r .determineScheduleAndRequeue (ctx , & logger , pvc , driverName )
353
+ assert .ErrorIs (t , error , ErrScheduleNotFound )
354
+ assert .Equal (t , "" , schedule )
355
+ })
356
+
357
+ // test for StorageClassName not found
358
+ t .Run ("StorageClassName not found" , func (t * testing.T ) {
359
+ sc .Name = "non-existent-sc"
360
+ pvc .Spec .StorageClassName = & sc .Name
361
+ pvc .Annotations = nil
362
+ schedule , error := r .determineScheduleAndRequeue (ctx , & logger , pvc , driverName )
363
+ assert .ErrorIs (t , error , ErrScheduleNotFound )
364
+ assert .Equal (t , "" , schedule )
365
+ })
366
+
367
+ }
0 commit comments