Skip to content

Commit ce76ac9

Browse files
committed
more testing
1 parent 0ac9fb6 commit ce76ac9

File tree

2 files changed

+96
-15
lines changed

2 files changed

+96
-15
lines changed

cloud/services/object_storage_buckets_test.go

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@ import (
55
"fmt"
66
"testing"
77

8+
"github.com/aws/aws-sdk-go-v2/aws"
9+
"github.com/aws/aws-sdk-go-v2/service/s3"
10+
s3types "github.com/aws/aws-sdk-go-v2/service/s3/types"
11+
"github.com/aws/smithy-go/middleware"
812
"github.com/linode/linodego"
913
"github.com/stretchr/testify/assert"
1014
"go.uber.org/mock/gomock"
@@ -397,3 +401,79 @@ func TestDeleteBucket(t *testing.T) {
397401
})
398402
}
399403
}
404+
405+
func TestPurgeAllObjects(t *testing.T) {
406+
t.Parallel()
407+
408+
tests := []struct {
409+
name string
410+
bucketName string
411+
s3Client *mock.MockS3Client
412+
forceDelete bool
413+
expectedError error
414+
expects func(s3mock *mock.MockS3Client)
415+
}{
416+
{
417+
name: "Success - Successfully purge all objects (versioning enabled)",
418+
bucketName: "test-bucket",
419+
forceDelete: true,
420+
expects: func(s3mock *mock.MockS3Client) {
421+
s3mock.EXPECT().GetBucketVersioning(gomock.Any(), gomock.Any()).Return(&s3.GetBucketVersioningOutput{
422+
Status: s3types.BucketVersioningStatusEnabled,
423+
ResultMetadata: middleware.Metadata{},
424+
}, nil)
425+
s3mock.EXPECT().ListObjectVersions(gomock.Any(), gomock.Any(), gomock.Any()).Return(&s3.ListObjectVersionsOutput{
426+
Versions: []s3types.ObjectVersion{
427+
{Key: aws.String("object1"), VersionId: aws.String("version1")},
428+
{Key: aws.String("object2"), VersionId: aws.String("version2")},
429+
},
430+
}, nil)
431+
s3mock.EXPECT().DeleteObjects(gomock.Any(), gomock.Any()).Return(&s3.DeleteObjectsOutput{}, nil)
432+
},
433+
},
434+
{
435+
name: "Success - Successfully purge all objects",
436+
bucketName: "test-bucket",
437+
forceDelete: true,
438+
expects: func(s3mock *mock.MockS3Client) {
439+
s3mock.EXPECT().GetBucketVersioning(gomock.Any(), gomock.Any()).Return(&s3.GetBucketVersioningOutput{}, nil)
440+
s3mock.EXPECT().ListObjectsV2(gomock.Any(), gomock.Any(), gomock.Any()).Return(&s3.ListObjectsV2Output{
441+
Contents: []s3types.Object{
442+
{Key: aws.String("object1")},
443+
{Key: aws.String("object2")},
444+
},
445+
}, nil)
446+
s3mock.EXPECT().DeleteObjects(gomock.Any(), gomock.Any()).Return(&s3.DeleteObjectsOutput{}, nil)
447+
},
448+
},
449+
{
450+
name: "Error - Failed to list objects",
451+
bucketName: "test-bucket",
452+
forceDelete: true,
453+
expectedError: fmt.Errorf("failed to list objects"),
454+
expects: func(s3mock *mock.MockS3Client) {
455+
s3mock.EXPECT().GetBucketVersioning(gomock.Any(), gomock.Any()).Return(&s3.GetBucketVersioningOutput{}, nil)
456+
s3mock.EXPECT().ListObjectsV2(gomock.Any(), gomock.Any(), gomock.Any()).Return(nil, fmt.Errorf("failed to list objects"))
457+
},
458+
},
459+
}
460+
461+
for _, tt := range tests {
462+
testcase := tt
463+
t.Run(testcase.name, func(t *testing.T) {
464+
t.Parallel()
465+
466+
ctrl := gomock.NewController(t)
467+
defer ctrl.Finish()
468+
469+
mockS3Client := mock.NewMockS3Client(ctrl)
470+
testcase.s3Client = mockS3Client
471+
testcase.expects(mockS3Client)
472+
473+
err := PurgeAllObjects(t.Context(), testcase.bucketName, testcase.s3Client, testcase.forceDelete, false)
474+
if testcase.expectedError != nil {
475+
assert.ErrorContains(t, err, testcase.expectedError.Error())
476+
}
477+
})
478+
}
479+
}

cloud/services/object_storage_objects_test.go

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"errors"
66
"testing"
77

8+
"github.com/aws/aws-sdk-go-v2/aws"
89
awssigner "github.com/aws/aws-sdk-go-v2/aws/signer/v4"
910
"github.com/aws/aws-sdk-go-v2/service/s3"
1011
"github.com/aws/aws-sdk-go-v2/service/s3/types"
@@ -472,9 +473,9 @@ func TestDeleteAllObjectVersionsAndDeleteMarkers(t *testing.T) {
472473
Name: ptr.To("test"),
473474
Versions: []types.ObjectVersion{
474475
{
475-
IsLatest: ptr.To(true),
476-
Key: ptr.To("test"),
477-
VersionId: ptr.To("version2"),
476+
IsLatest: aws.Bool(true),
477+
Key: aws.String("test"),
478+
VersionId: aws.String("version2"),
478479
},
479480
},
480481
ResultMetadata: middleware.Metadata{},
@@ -492,27 +493,27 @@ func TestDeleteAllObjectVersionsAndDeleteMarkers(t *testing.T) {
492493
Name: ptr.To("test"),
493494
Versions: []types.ObjectVersion{
494495
{
495-
IsLatest: ptr.To(false),
496-
Key: ptr.To("test"),
497-
VersionId: ptr.To("version1"),
496+
IsLatest: aws.Bool(false),
497+
Key: aws.String("test"),
498+
VersionId: aws.String("version1"),
498499
},
499500
{
500-
IsLatest: ptr.To(true),
501-
Key: ptr.To("test"),
502-
VersionId: ptr.To("version2"),
501+
IsLatest: aws.Bool(true),
502+
Key: aws.String("test"),
503+
VersionId: aws.String("version2"),
503504
},
504505
},
505506
ResultMetadata: middleware.Metadata{},
506507
DeleteMarkers: []types.DeleteMarkerEntry{
507508
{
508-
IsLatest: ptr.To(false),
509-
Key: ptr.To("test"),
510-
VersionId: ptr.To("version1"),
509+
IsLatest: aws.Bool(false),
510+
Key: aws.String("test"),
511+
VersionId: aws.String("version1"),
511512
},
512513
{
513-
IsLatest: ptr.To(true),
514-
Key: ptr.To("test"),
515-
VersionId: ptr.To("version2"),
514+
IsLatest: aws.Bool(true),
515+
Key: aws.String("test"),
516+
VersionId: aws.String("version2"),
516517
},
517518
},
518519
}, nil)

0 commit comments

Comments
 (0)