Skip to content

Commit 542ecb8

Browse files
iPraveenPariharmergify[bot]
authored andcommitted
reclaimspace: add unit test case for schedule handling
Signed-off-by: Praveen M <m.praveen@ibm.com>
1 parent eebef4f commit 542ecb8

File tree

1 file changed

+117
-0
lines changed

1 file changed

+117
-0
lines changed

controllers/csiaddons/persistentvolumeclaim_controller_test.go

+117
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,14 @@ import (
2222
"testing"
2323

2424
csiaddonsv1alpha1 "github.com/csi-addons/kubernetes-csi-addons/apis/csiaddons/v1alpha1"
25+
"github.com/csi-addons/kubernetes-csi-addons/internal/connection"
2526
"github.com/go-logr/logr"
2627
"github.com/stretchr/testify/assert"
28+
corev1 "k8s.io/api/core/v1"
29+
storagev1 "k8s.io/api/storage/v1"
2730
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2831
"sigs.k8s.io/controller-runtime/pkg/client"
32+
"sigs.k8s.io/controller-runtime/pkg/client/fake"
2933
"sigs.k8s.io/controller-runtime/pkg/log"
3034
)
3135

@@ -248,3 +252,116 @@ func TestGetScheduleFromAnnotation(t *testing.T) {
248252
})
249253
}
250254
}
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

Comments
 (0)