@@ -8,11 +8,13 @@ import (
8
8
awssigner "github.com/aws/aws-sdk-go-v2/aws/signer/v4"
9
9
"github.com/aws/aws-sdk-go-v2/service/s3"
10
10
"github.com/aws/aws-sdk-go-v2/service/s3/types"
11
+ "github.com/aws/smithy-go/middleware"
11
12
"github.com/stretchr/testify/assert"
12
13
"github.com/stretchr/testify/require"
13
14
"go.uber.org/mock/gomock"
14
15
corev1 "k8s.io/api/core/v1"
15
16
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
17
+ "k8s.io/utils/ptr"
16
18
"sigs.k8s.io/controller-runtime/pkg/client"
17
19
18
20
infrav1alpha2 "github.com/linode/cluster-api-provider-linode/api/v1alpha2"
@@ -413,3 +415,114 @@ func TestDeleteObject(t *testing.T) {
413
415
),
414
416
)
415
417
}
418
+
419
+ func TestDeleteAllObjects (t * testing.T ) {
420
+ t .Parallel ()
421
+
422
+ NewSuite (t , mock.MockK8sClient {}, mock.MockS3Client {}).Run (
423
+ OneOf (
424
+ Path (
425
+ Call ("fail to list objects" , func (ctx context.Context , mck Mock ) {
426
+ mck .S3Client .EXPECT ().ListObjectsV2 (gomock .Any (), gomock .Any (), gomock .Any ()).Return (nil , errors .New ("fail" ))
427
+ }),
428
+ Result ("error" , func (ctx context.Context , mck Mock ) {
429
+ err := DeleteAllObjects (ctx , mck .S3Client , "test" , true )
430
+ assert .Error (t , err )
431
+ }),
432
+ ),
433
+ Path (
434
+ Call ("no objects" , func (ctx context.Context , mck Mock ) {
435
+ mck .S3Client .EXPECT ().ListObjectsV2 (gomock .Any (), gomock .Any (), gomock .Any ()).Return (& s3.ListObjectsV2Output {}, nil )
436
+ }),
437
+ Result ("success" , func (ctx context.Context , mck Mock ) {
438
+ err := DeleteAllObjects (ctx , mck .S3Client , "test" , true )
439
+ assert .NoError (t , err )
440
+ }),
441
+ ),
442
+ ),
443
+ )
444
+ }
445
+
446
+ func TestDeleteAllObjectVersionsAndDeleteMarkers (t * testing.T ) {
447
+ t .Parallel ()
448
+
449
+ NewSuite (t , mock.MockK8sClient {}, mock.MockS3Client {}).Run (
450
+ OneOf (
451
+ Path (
452
+ Call ("fail to list object versions" , func (ctx context.Context , mck Mock ) {
453
+ mck .S3Client .EXPECT ().ListObjectVersions (gomock .Any (), gomock .Any (), gomock .Any ()).Return (nil , errors .New ("fail" ))
454
+ }),
455
+ Result ("error" , func (ctx context.Context , mck Mock ) {
456
+ err := DeleteAllObjectVersionsAndDeleteMarkers (ctx , mck .S3Client , "test" , "" , true , false )
457
+ assert .Error (t , err )
458
+ }),
459
+ ),
460
+ Path (
461
+ Call ("no objects" , func (ctx context.Context , mck Mock ) {
462
+ mck .S3Client .EXPECT ().ListObjectVersions (gomock .Any (), gomock .Any (), gomock .Any ()).Return (& s3.ListObjectVersionsOutput {}, nil )
463
+ }),
464
+ Result ("error" , func (ctx context.Context , mck Mock ) {
465
+ err := DeleteAllObjectVersionsAndDeleteMarkers (ctx , mck .S3Client , "test" , "" , true , false )
466
+ assert .NoError (t , err )
467
+ }),
468
+ ),
469
+ Path (
470
+ Call ("with an object" , func (ctx context.Context , mck Mock ) {
471
+ mck .S3Client .EXPECT ().ListObjectVersions (gomock .Any (), gomock .Any (), gomock .Any ()).Return (& s3.ListObjectVersionsOutput {
472
+ Name : ptr .To ("test" ),
473
+ Versions : []types.ObjectVersion {
474
+ {
475
+ IsLatest : ptr .To (true ),
476
+ Key : ptr .To ("test" ),
477
+ VersionId : ptr .To ("version2" ),
478
+ },
479
+ },
480
+ ResultMetadata : middleware.Metadata {},
481
+ }, nil )
482
+ mck .S3Client .EXPECT ().DeleteObjects (gomock .Any (), gomock .Any (), gomock .Any ()).Return (& s3.DeleteObjectsOutput {}, nil )
483
+ }),
484
+ Result ("success" , func (ctx context.Context , mck Mock ) {
485
+ err := DeleteAllObjectVersionsAndDeleteMarkers (ctx , mck .S3Client , "test" , "" , true , false )
486
+ assert .NoError (t , err )
487
+ }),
488
+ ),
489
+ Path (
490
+ Call ("with versions and delete markers" , func (ctx context.Context , mck Mock ) {
491
+ mck .S3Client .EXPECT ().ListObjectVersions (gomock .Any (), gomock .Any (), gomock .Any ()).Return (& s3.ListObjectVersionsOutput {
492
+ Name : ptr .To ("test" ),
493
+ Versions : []types.ObjectVersion {
494
+ {
495
+ IsLatest : ptr .To (false ),
496
+ Key : ptr .To ("test" ),
497
+ VersionId : ptr .To ("version1" ),
498
+ },
499
+ {
500
+ IsLatest : ptr .To (true ),
501
+ Key : ptr .To ("test" ),
502
+ VersionId : ptr .To ("version2" ),
503
+ },
504
+ },
505
+ ResultMetadata : middleware.Metadata {},
506
+ DeleteMarkers : []types.DeleteMarkerEntry {
507
+ {
508
+ IsLatest : ptr .To (false ),
509
+ Key : ptr .To ("test" ),
510
+ VersionId : ptr .To ("version1" ),
511
+ },
512
+ {
513
+ IsLatest : ptr .To (true ),
514
+ Key : ptr .To ("test" ),
515
+ VersionId : ptr .To ("version2" ),
516
+ },
517
+ },
518
+ }, nil )
519
+ mck .S3Client .EXPECT ().DeleteObjects (gomock .Any (), gomock .Any (), gomock .Any ()).Return (& s3.DeleteObjectsOutput {}, nil )
520
+ }),
521
+ Result ("success" , func (ctx context.Context , mck Mock ) {
522
+ err := DeleteAllObjectVersionsAndDeleteMarkers (ctx , mck .S3Client , "test" , "" , true , false )
523
+ assert .NoError (t , err )
524
+ }),
525
+ ),
526
+ ),
527
+ )
528
+ }
0 commit comments