@@ -33,9 +33,11 @@ import (
33
33
operator "github.com/minio/operator/pkg/apis/minio.min.io/v1"
34
34
v1 "github.com/minio/operator/pkg/apis/minio.min.io/v1"
35
35
corev1 "k8s.io/api/core/v1"
36
+ k8sErrors "k8s.io/apimachinery/pkg/api/errors"
36
37
"k8s.io/apimachinery/pkg/api/resource"
37
38
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
38
39
"k8s.io/apimachinery/pkg/runtime"
40
+ "k8s.io/apimachinery/pkg/runtime/schema"
39
41
types "k8s.io/apimachinery/pkg/types"
40
42
"k8s.io/client-go/kubernetes/fake"
41
43
)
@@ -335,12 +337,13 @@ func Test_TenantInfo(t *testing.T) {
335
337
336
338
func Test_deleteTenantAction (t * testing.T ) {
337
339
opClient := opClientMock {}
338
-
339
340
type args struct {
340
341
ctx context.Context
341
342
operatorClient OperatorClient
342
343
nameSpace string
343
344
tenantName string
345
+ deletePvcs bool
346
+ objs []runtime.Object
344
347
mockTenantDelete func (ctx context.Context , namespace string , tenantName string , options metav1.DeleteOptions ) error
345
348
}
346
349
tests := []struct {
@@ -355,6 +358,7 @@ func Test_deleteTenantAction(t *testing.T) {
355
358
operatorClient : opClient ,
356
359
nameSpace : "default" ,
357
360
tenantName : "minio-tenant" ,
361
+ deletePvcs : false ,
358
362
mockTenantDelete : func (ctx context.Context , namespace string , tenantName string , options metav1.DeleteOptions ) error {
359
363
return nil
360
364
},
@@ -368,17 +372,155 @@ func Test_deleteTenantAction(t *testing.T) {
368
372
operatorClient : opClient ,
369
373
nameSpace : "default" ,
370
374
tenantName : "minio-tenant" ,
375
+ deletePvcs : false ,
371
376
mockTenantDelete : func (ctx context.Context , namespace string , tenantName string , options metav1.DeleteOptions ) error {
372
377
return errors .New ("something happened" )
373
378
},
374
379
},
375
380
wantErr : true ,
376
381
},
382
+ {
383
+ // Delete only PVCs of the defined tenant on the specific namespace
384
+ name : "Delete PVCs on Tenant Deletion" ,
385
+ args : args {
386
+ ctx : context .Background (),
387
+ operatorClient : opClient ,
388
+ nameSpace : "minio-tenant" ,
389
+ tenantName : "tenant1" ,
390
+ deletePvcs : true ,
391
+ objs : []runtime.Object {
392
+ & corev1.PersistentVolumeClaim {
393
+ ObjectMeta : metav1.ObjectMeta {
394
+ Name : "PVC1" ,
395
+ Namespace : "minio-tenant" ,
396
+ Labels : map [string ]string {
397
+ operator .TenantLabel : "tenant1" ,
398
+ operator .ZoneLabel : "zone-1" ,
399
+ },
400
+ },
401
+ },
402
+ },
403
+ mockTenantDelete : func (ctx context.Context , namespace string , tenantName string , options metav1.DeleteOptions ) error {
404
+ return nil
405
+ },
406
+ },
407
+ wantErr : false ,
408
+ },
409
+ {
410
+ // Do not delete underlying pvcs
411
+ name : "Don't Delete PVCs on Tenant Deletion" ,
412
+ args : args {
413
+ ctx : context .Background (),
414
+ operatorClient : opClient ,
415
+ nameSpace : "minio-tenant" ,
416
+ tenantName : "tenant1" ,
417
+ deletePvcs : false ,
418
+ objs : []runtime.Object {
419
+ & corev1.PersistentVolumeClaim {
420
+ ObjectMeta : metav1.ObjectMeta {
421
+ Name : "PVC1" ,
422
+ Namespace : "minio-tenant" ,
423
+ Labels : map [string ]string {
424
+ operator .TenantLabel : "tenant1" ,
425
+ operator .ZoneLabel : "zone-1" ,
426
+ },
427
+ },
428
+ },
429
+ },
430
+ mockTenantDelete : func (ctx context.Context , namespace string , tenantName string , options metav1.DeleteOptions ) error {
431
+ return nil
432
+ },
433
+ },
434
+ wantErr : false ,
435
+ },
436
+ {
437
+ // If error is different than NotFound, PVC deletion should not continue
438
+ name : "Don't delete pvcs if error Deleting Tenant, return" ,
439
+ args : args {
440
+ ctx : context .Background (),
441
+ operatorClient : opClient ,
442
+ nameSpace : "minio-tenant" ,
443
+ tenantName : "tenant1" ,
444
+ deletePvcs : true ,
445
+ objs : []runtime.Object {
446
+ & corev1.PersistentVolumeClaim {
447
+ ObjectMeta : metav1.ObjectMeta {
448
+ Name : "PVC1" ,
449
+ Namespace : "minio-tenant" ,
450
+ Labels : map [string ]string {
451
+ operator .TenantLabel : "tenant1" ,
452
+ operator .ZoneLabel : "zone-1" ,
453
+ },
454
+ },
455
+ },
456
+ },
457
+ mockTenantDelete : func (ctx context.Context , namespace string , tenantName string , options metav1.DeleteOptions ) error {
458
+ return errors .New ("error returned" )
459
+ },
460
+ },
461
+ wantErr : true ,
462
+ },
463
+ {
464
+ // If error is NotFound while trying to Delete Tenant, PVC deletion should continue
465
+ name : "Delete pvcs if tenant not found" ,
466
+ args : args {
467
+ ctx : context .Background (),
468
+ operatorClient : opClient ,
469
+ nameSpace : "minio-tenant" ,
470
+ tenantName : "tenant1" ,
471
+ deletePvcs : true ,
472
+ objs : []runtime.Object {
473
+ & corev1.PersistentVolumeClaim {
474
+ ObjectMeta : metav1.ObjectMeta {
475
+ Name : "PVC1" ,
476
+ Namespace : "minio-tenant" ,
477
+ Labels : map [string ]string {
478
+ operator .TenantLabel : "tenant1" ,
479
+ operator .ZoneLabel : "zone-1" ,
480
+ },
481
+ },
482
+ },
483
+ },
484
+ mockTenantDelete : func (ctx context.Context , namespace string , tenantName string , options metav1.DeleteOptions ) error {
485
+ return k8sErrors .NewNotFound (schema.GroupResource {}, "tenant1" )
486
+ },
487
+ },
488
+ wantErr : false ,
489
+ },
490
+ {
491
+ // If error is NotFound while trying to Delete Tenant and pvcdeletion=false,
492
+ // error should be returned
493
+ name : "Don't delete pvcs and return error if tenant not found" ,
494
+ args : args {
495
+ ctx : context .Background (),
496
+ operatorClient : opClient ,
497
+ nameSpace : "minio-tenant" ,
498
+ tenantName : "tenant1" ,
499
+ deletePvcs : false ,
500
+ objs : []runtime.Object {
501
+ & corev1.PersistentVolumeClaim {
502
+ ObjectMeta : metav1.ObjectMeta {
503
+ Name : "PVC1" ,
504
+ Namespace : "minio-tenant" ,
505
+ Labels : map [string ]string {
506
+ operator .TenantLabel : "tenant1" ,
507
+ operator .ZoneLabel : "zone-1" ,
508
+ },
509
+ },
510
+ },
511
+ },
512
+ mockTenantDelete : func (ctx context.Context , namespace string , tenantName string , options metav1.DeleteOptions ) error {
513
+ return k8sErrors .NewNotFound (schema.GroupResource {}, "tenant1" )
514
+ },
515
+ },
516
+ wantErr : true ,
517
+ },
377
518
}
378
519
for _ , tt := range tests {
379
520
opClientTenantDeleteMock = tt .args .mockTenantDelete
521
+ kubeClient := fake .NewSimpleClientset (tt .args .objs ... )
380
522
t .Run (tt .name , func (t * testing.T ) {
381
- if err := deleteTenantAction (tt .args .ctx , tt .args .operatorClient , tt .args .nameSpace , tt .args .tenantName ); (err != nil ) != tt .wantErr {
523
+ if err := deleteTenantAction (tt .args .ctx , tt .args .operatorClient , kubeClient . CoreV1 (), tt .args .nameSpace , tt .args .tenantName , tt . args . deletePvcs ); (err != nil ) != tt .wantErr {
382
524
t .Errorf ("deleteTenantAction() error = %v, wantErr %v" , err , tt .wantErr )
383
525
}
384
526
})
@@ -768,7 +910,7 @@ func Test_UpdateTenantAction(t *testing.T) {
768
910
cnsClient := fake .NewSimpleClientset (tt .objs ... )
769
911
t .Run (tt .name , func (t * testing.T ) {
770
912
if err := updateTenantAction (tt .args .ctx , tt .args .operatorClient , cnsClient .CoreV1 (), tt .args .httpCl , tt .args .nameSpace , tt .args .params ); (err != nil ) != tt .wantErr {
771
- t .Errorf ("deleteTenantAction () error = %v, wantErr %v" , err , tt .wantErr )
913
+ t .Errorf ("updateTenantAction () error = %v, wantErr %v" , err , tt .wantErr )
772
914
}
773
915
})
774
916
}
0 commit comments