From 41dbbbc26d61e6ae7ccefdfce9600afdc05899ac Mon Sep 17 00:00:00 2001 From: go-to-k <24818752+go-to-k@users.noreply.github.com> Date: Sun, 4 Aug 2024 04:09:11 +0900 Subject: [PATCH] chore(client): remove ListObjectVersions method --- pkg/client/s3.go | 50 ---- pkg/client/s3_mock.go | 15 -- pkg/client/s3_test.go | 528 ------------------------------------------ 3 files changed, 593 deletions(-) diff --git a/pkg/client/s3.go b/pkg/client/s3.go index c37dcec..dbaeb46 100644 --- a/pkg/client/s3.go +++ b/pkg/client/s3.go @@ -21,11 +21,6 @@ type IS3 interface { objects []types.ObjectIdentifier, region string, ) ([]types.Error, error) - ListObjectVersions(ctx context.Context, - bucketName *string, - region string, - oldVersionsOnly bool, - ) ([]types.ObjectIdentifier, error) ListObjectVersionsByPage( ctx context.Context, bucketName *string, @@ -157,51 +152,6 @@ func (s *S3) DeleteObjects( return errors, nil } -func (s *S3) ListObjectVersions( - ctx context.Context, - bucketName *string, - region string, - oldVersionsOnly bool, -) ([]types.ObjectIdentifier, error) { - var keyMarker *string - var versionIdMarker *string - objectIdentifiers := []types.ObjectIdentifier{} - - for { - select { - case <-ctx.Done(): - return objectIdentifiers, &ClientError{ - ResourceName: bucketName, - Err: ctx.Err(), - } - default: - } - - objectIdentifiersByPage, nextKeyMarker, nextVersionIdMarker, err := - s.ListObjectVersionsByPage( - ctx, - bucketName, - region, - oldVersionsOnly, - keyMarker, - versionIdMarker, - ) - if err != nil { - return nil, err // ListObjectVersionsByPage already wraps the error - } - - objectIdentifiers = append(objectIdentifiers, objectIdentifiersByPage...) - keyMarker = nextKeyMarker - versionIdMarker = nextVersionIdMarker - - if keyMarker == nil && versionIdMarker == nil { - break - } - } - - return objectIdentifiers, nil -} - func (s *S3) ListObjectVersionsByPage( ctx context.Context, bucketName *string, diff --git a/pkg/client/s3_mock.go b/pkg/client/s3_mock.go index 9cb3551..69924a5 100644 --- a/pkg/client/s3_mock.go +++ b/pkg/client/s3_mock.go @@ -108,21 +108,6 @@ func (mr *MockIS3MockRecorder) ListBuckets(ctx interface{}) *gomock.Call { return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListBuckets", reflect.TypeOf((*MockIS3)(nil).ListBuckets), ctx) } -// ListObjectVersions mocks base method. -func (m *MockIS3) ListObjectVersions(ctx context.Context, bucketName *string, region string, oldVersionsOnly bool) ([]types.ObjectIdentifier, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "ListObjectVersions", ctx, bucketName, region, oldVersionsOnly) - ret0, _ := ret[0].([]types.ObjectIdentifier) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// ListObjectVersions indicates an expected call of ListObjectVersions. -func (mr *MockIS3MockRecorder) ListObjectVersions(ctx, bucketName, region, oldVersionsOnly interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListObjectVersions", reflect.TypeOf((*MockIS3)(nil).ListObjectVersions), ctx, bucketName, region, oldVersionsOnly) -} - // ListObjectVersionsByPage mocks base method. func (m *MockIS3) ListObjectVersionsByPage(ctx context.Context, bucketName *string, region string, oldVersionsOnly bool, keyMarker, versionIdMarker *string) ([]types.ObjectIdentifier, *string, *string, error) { m.ctrl.T.Helper() diff --git a/pkg/client/s3_test.go b/pkg/client/s3_test.go index f341dcb..2bd3945 100644 --- a/pkg/client/s3_test.go +++ b/pkg/client/s3_test.go @@ -702,534 +702,6 @@ func TestS3_DeleteObjects(t *testing.T) { } } -func TestS3_ListObjectVersions(t *testing.T) { - type args struct { - ctx context.Context - bucketName *string - region string - oldVersionsOnly bool - withAPIOptionsFunc func(*middleware.Stack) error - } - - type want struct { - output []types.ObjectIdentifier - err error - } - - cases := []struct { - name string - args args - want want - wantErr bool - }{ - { - name: "list objects versions successfully", - args: args{ - ctx: context.Background(), - bucketName: aws.String("test"), - region: "ap-northeast-1", - oldVersionsOnly: false, - withAPIOptionsFunc: func(stack *middleware.Stack) error { - return stack.Finalize.Add( - middleware.FinalizeMiddlewareFunc( - "ListObjectVersionsMock", - func(context.Context, middleware.FinalizeInput, middleware.FinalizeHandler) (middleware.FinalizeOutput, middleware.Metadata, error) { - return middleware.FinalizeOutput{ - Result: &s3.ListObjectVersionsOutput{ - Versions: []types.ObjectVersion{ - { - Key: aws.String("KeyForVersions"), - VersionId: aws.String("VersionIdForVersions"), - }, - }, - DeleteMarkers: []types.DeleteMarkerEntry{ - { - Key: aws.String("KeyForDeleteMarkers"), - VersionId: aws.String("VersionIdForDeleteMarkers"), - }, - }, - }, - }, middleware.Metadata{}, nil - }, - ), - middleware.Before, - ) - }, - }, - want: want{ - output: []types.ObjectIdentifier{ - { - Key: aws.String("KeyForVersions"), - VersionId: aws.String("VersionIdForVersions"), - }, - { - Key: aws.String("KeyForDeleteMarkers"), - VersionId: aws.String("VersionIdForDeleteMarkers"), - }, - }, - err: nil, - }, - wantErr: false, - }, - { - name: "list objects versions failure", - args: args{ - ctx: context.Background(), - bucketName: aws.String("test"), - region: "ap-northeast-1", - oldVersionsOnly: false, - withAPIOptionsFunc: func(stack *middleware.Stack) error { - return stack.Finalize.Add( - middleware.FinalizeMiddlewareFunc( - "ListObjectVersionsErrorMock", - func(context.Context, middleware.FinalizeInput, middleware.FinalizeHandler) (middleware.FinalizeOutput, middleware.Metadata, error) { - return middleware.FinalizeOutput{ - Result: &s3.ListObjectVersionsOutput{}, - }, middleware.Metadata{}, fmt.Errorf("ListObjectVersionsError") - }, - ), - middleware.Before, - ) - }, - }, - want: want{ - output: nil, - err: &ClientError{ - ResourceName: aws.String("test"), - Err: fmt.Errorf("operation error S3: ListObjectVersions, ListObjectVersionsError"), - }, - }, - wantErr: true, - }, - { - name: "list objects versions failure for api error SlowDown", - args: args{ - ctx: context.Background(), - bucketName: aws.String("test"), - region: "ap-northeast-1", - oldVersionsOnly: false, - withAPIOptionsFunc: func(stack *middleware.Stack) error { - return stack.Finalize.Add( - middleware.FinalizeMiddlewareFunc( - "ListObjectVersionsApiErrorMock", - func(context.Context, middleware.FinalizeInput, middleware.FinalizeHandler) (middleware.FinalizeOutput, middleware.Metadata, error) { - return middleware.FinalizeOutput{ - Result: &s3.ListObjectVersionsOutput{}, - }, middleware.Metadata{}, &retry.MaxAttemptsError{ - Attempt: MaxRetryCount, - Err: fmt.Errorf("api error SlowDown"), - } - }, - ), - middleware.Before, - ) - }, - }, - want: want{ - output: nil, - err: &ClientError{ - ResourceName: aws.String("test"), - Err: fmt.Errorf("operation error S3: ListObjectVersions, exceeded maximum number of attempts, 10, api error SlowDown"), - }, - }, - wantErr: true, - }, - { - name: "list objects versions successfully(empty)", - args: args{ - ctx: context.Background(), - bucketName: aws.String("test"), - region: "ap-northeast-1", - oldVersionsOnly: false, - withAPIOptionsFunc: func(stack *middleware.Stack) error { - return stack.Finalize.Add( - middleware.FinalizeMiddlewareFunc( - "ListObjectVersionsEmptyMock", - func(context.Context, middleware.FinalizeInput, middleware.FinalizeHandler) (middleware.FinalizeOutput, middleware.Metadata, error) { - return middleware.FinalizeOutput{ - Result: &s3.ListObjectVersionsOutput{ - Versions: []types.ObjectVersion{}, - DeleteMarkers: []types.DeleteMarkerEntry{}, - }, - }, middleware.Metadata{}, nil - }, - ), - middleware.Before, - ) - }, - }, - want: want{ - output: []types.ObjectIdentifier{}, - err: nil, - }, - wantErr: false, - }, - { - name: "list objects versions successfully(versions only)", - args: args{ - ctx: context.Background(), - bucketName: aws.String("test"), - region: "ap-northeast-1", - oldVersionsOnly: false, - withAPIOptionsFunc: func(stack *middleware.Stack) error { - return stack.Finalize.Add( - middleware.FinalizeMiddlewareFunc( - "ListObjectVersionsWithVersionsMock", - func(context.Context, middleware.FinalizeInput, middleware.FinalizeHandler) (middleware.FinalizeOutput, middleware.Metadata, error) { - return middleware.FinalizeOutput{ - Result: &s3.ListObjectVersionsOutput{ - Versions: []types.ObjectVersion{ - { - Key: aws.String("KeyForVersions"), - VersionId: aws.String("VersionIdForVersions"), - }, - }, - DeleteMarkers: []types.DeleteMarkerEntry{}, - }, - }, middleware.Metadata{}, nil - }, - ), - middleware.Before, - ) - }, - }, - want: want{ - output: []types.ObjectIdentifier{ - { - Key: aws.String("KeyForVersions"), - VersionId: aws.String("VersionIdForVersions"), - }, - }, - err: nil, - }, - wantErr: false, - }, - { - name: "list objects versions successfully(delete markers only)", - args: args{ - ctx: context.Background(), - bucketName: aws.String("test"), - region: "ap-northeast-1", - oldVersionsOnly: false, - withAPIOptionsFunc: func(stack *middleware.Stack) error { - return stack.Finalize.Add( - middleware.FinalizeMiddlewareFunc( - "ListObjectVersionsWithDeleteMarkersMock", - func(context.Context, middleware.FinalizeInput, middleware.FinalizeHandler) (middleware.FinalizeOutput, middleware.Metadata, error) { - return middleware.FinalizeOutput{ - Result: &s3.ListObjectVersionsOutput{ - Versions: []types.ObjectVersion{}, - DeleteMarkers: []types.DeleteMarkerEntry{ - { - Key: aws.String("KeyForDeleteMarkers"), - VersionId: aws.String("VersionIdForDeleteMarkers"), - }, - }, - }, - }, middleware.Metadata{}, nil - }, - ), - middleware.Before, - ) - }, - }, - want: want{ - output: []types.ObjectIdentifier{ - { - Key: aws.String("KeyForDeleteMarkers"), - VersionId: aws.String("VersionIdForDeleteMarkers"), - }, - }, - err: nil, - }, - wantErr: false, - }, - { - name: "list objects versions with marker successfully", - args: args{ - ctx: context.Background(), - bucketName: aws.String("test"), - region: "ap-northeast-1", - oldVersionsOnly: false, - withAPIOptionsFunc: func(stack *middleware.Stack) error { - err := stack.Initialize.Add( - middleware.InitializeMiddlewareFunc( - "GetNextMarker", - getNextMarkerForS3Initialize, - ), middleware.Before, - ) - if err != nil { - return err - } - - err = stack.Finalize.Add( - middleware.FinalizeMiddlewareFunc( - "ListObjectVersionsWithMarkerMock", - func(ctx context.Context, input middleware.FinalizeInput, handler middleware.FinalizeHandler) (middleware.FinalizeOutput, middleware.Metadata, error) { - keyMarker := middleware.GetStackValue(ctx, keyMarkerKeyForS3{}).(*string) - versionIdMarker := middleware.GetStackValue(ctx, versionIdMarkerKeyForS3{}).(*string) - - var nextKeyMarker *string - var nextVersionIdMarker *string - var objectVersions []types.ObjectVersion - var objectDeleteMarkers []types.DeleteMarkerEntry - if keyMarker == nil && versionIdMarker == nil { - nextKeyMarker = aws.String("NextMarker") - nextVersionIdMarker = aws.String("NextMarker") - objectVersions = []types.ObjectVersion{ - { - Key: aws.String("KeyForVersions1"), - VersionId: aws.String("VersionIdForVersions1"), - }, - } - objectDeleteMarkers = []types.DeleteMarkerEntry{ - { - Key: aws.String("KeyForDeleteMarkers1"), - VersionId: aws.String("VersionIdForDeleteMarkers1"), - }, - } - return middleware.FinalizeOutput{ - Result: &s3.ListObjectVersionsOutput{ - Versions: objectVersions, - DeleteMarkers: objectDeleteMarkers, - NextKeyMarker: nextKeyMarker, - NextVersionIdMarker: nextVersionIdMarker, - }, - }, middleware.Metadata{}, nil - } else { - objectVersions = []types.ObjectVersion{ - { - Key: aws.String("KeyForVersions2"), - VersionId: aws.String("VersionIdForVersions2"), - }, - } - objectDeleteMarkers = []types.DeleteMarkerEntry{ - { - Key: aws.String("KeyForDeleteMarkers2"), - VersionId: aws.String("VersionIdForDeleteMarkers2"), - }, - } - return middleware.FinalizeOutput{ - Result: &s3.ListObjectVersionsOutput{ - Versions: objectVersions, - DeleteMarkers: objectDeleteMarkers, - NextKeyMarker: nextKeyMarker, - NextVersionIdMarker: nextVersionIdMarker, - }, - }, middleware.Metadata{}, nil - } - }, - ), - middleware.Before, - ) - return err - }, - }, - want: want{ - output: []types.ObjectIdentifier{ - { - Key: aws.String("KeyForVersions1"), - VersionId: aws.String("VersionIdForVersions1"), - }, - { - Key: aws.String("KeyForDeleteMarkers1"), - VersionId: aws.String("VersionIdForDeleteMarkers1"), - }, - { - Key: aws.String("KeyForVersions2"), - VersionId: aws.String("VersionIdForVersions2"), - }, - { - Key: aws.String("KeyForDeleteMarkers2"), - VersionId: aws.String("VersionIdForDeleteMarkers2"), - }, - }, - err: nil, - }, - wantErr: false, - }, - { - name: "list objects versions with marker failure", - args: args{ - ctx: context.Background(), - bucketName: aws.String("test"), - region: "ap-northeast-1", - oldVersionsOnly: false, - withAPIOptionsFunc: func(stack *middleware.Stack) error { - err := stack.Initialize.Add( - middleware.InitializeMiddlewareFunc( - "GetNextMarker", - getNextMarkerForS3Initialize, - ), middleware.Before, - ) - if err != nil { - return err - } - - err = stack.Finalize.Add( - middleware.FinalizeMiddlewareFunc( - "ListObjectVersionsWithMarkerErrorMock", - func(ctx context.Context, input middleware.FinalizeInput, handler middleware.FinalizeHandler) (middleware.FinalizeOutput, middleware.Metadata, error) { - keyMarker := middleware.GetStackValue(ctx, keyMarkerKeyForS3{}).(*string) - versionIdMarker := middleware.GetStackValue(ctx, versionIdMarkerKeyForS3{}).(*string) - - var nextKeyMarker *string - var nextVersionIdMarker *string - var objectVersions []types.ObjectVersion - var objectDeleteMarkers []types.DeleteMarkerEntry - if keyMarker == nil && versionIdMarker == nil { - nextKeyMarker = aws.String("NextMarker") - nextVersionIdMarker = aws.String("NextMarker") - objectVersions = []types.ObjectVersion{ - { - Key: aws.String("KeyForVersions1"), - VersionId: aws.String("VersionIdForVersions1"), - }, - } - objectDeleteMarkers = []types.DeleteMarkerEntry{ - { - Key: aws.String("KeyForDeleteMarkers1"), - VersionId: aws.String("VersionIdForDeleteMarkers1"), - }, - } - return middleware.FinalizeOutput{ - Result: &s3.ListObjectVersionsOutput{ - Versions: objectVersions, - DeleteMarkers: objectDeleteMarkers, - NextKeyMarker: nextKeyMarker, - NextVersionIdMarker: nextVersionIdMarker, - }, - }, middleware.Metadata{}, nil - } else { - return middleware.FinalizeOutput{ - Result: &s3.ListObjectVersionsOutput{}, - }, middleware.Metadata{}, fmt.Errorf("ListObjectVersionsError") - } - }, - ), - middleware.Before, - ) - return err - }, - }, - want: want{ - output: nil, - err: &ClientError{ - ResourceName: aws.String("test"), - Err: fmt.Errorf("operation error S3: ListObjectVersions, ListObjectVersionsError"), - }, - }, - wantErr: true, - }, - { - name: "list objects versions with old versions if oldVersionsOnly is true successfully", - args: args{ - ctx: context.Background(), - bucketName: aws.String("test"), - region: "ap-northeast-1", - oldVersionsOnly: true, - withAPIOptionsFunc: func(stack *middleware.Stack) error { - return stack.Finalize.Add( - middleware.FinalizeMiddlewareFunc( - "ListObjectVersionsMock", - func(context.Context, middleware.FinalizeInput, middleware.FinalizeHandler) (middleware.FinalizeOutput, middleware.Metadata, error) { - return middleware.FinalizeOutput{ - Result: &s3.ListObjectVersionsOutput{ - Versions: []types.ObjectVersion{ - { - Key: aws.String("KeyForVersions1"), - VersionId: aws.String("VersionIdForVersions1"), - IsLatest: aws.Bool(false), - }, - { - Key: aws.String("KeyForVersions2"), - VersionId: aws.String("VersionIdForVersions2"), - IsLatest: aws.Bool(true), - }, - { - Key: aws.String("KeyForVersions3"), - VersionId: aws.String("VersionIdForVersions3"), - }, - }, - DeleteMarkers: []types.DeleteMarkerEntry{ - { - Key: aws.String("KeyForDeleteMarkers1"), - VersionId: aws.String("VersionIdForDeleteMarkers1"), - IsLatest: aws.Bool(false), - }, - { - Key: aws.String("KeyForDeleteMarkers2"), - VersionId: aws.String("VersionIdForDeleteMarkers2"), - IsLatest: aws.Bool(true), - }, - { - Key: aws.String("KeyForDeleteMarkers3"), - VersionId: aws.String("VersionIdForDeleteMarkers3"), - }, - }, - }, - }, middleware.Metadata{}, nil - }, - ), - middleware.Before, - ) - }, - }, - want: want{ - output: []types.ObjectIdentifier{ - { - Key: aws.String("KeyForVersions1"), - VersionId: aws.String("VersionIdForVersions1"), - }, - { - Key: aws.String("KeyForDeleteMarkers1"), - VersionId: aws.String("VersionIdForDeleteMarkers1"), - }, - { - Key: aws.String("KeyForDeleteMarkers2"), - VersionId: aws.String("VersionIdForDeleteMarkers2"), - }, - { - Key: aws.String("KeyForDeleteMarkers3"), - VersionId: aws.String("VersionIdForDeleteMarkers3"), - }, - }, - err: nil, - }, - wantErr: false, - }, - } - - for _, tt := range cases { - t.Run(tt.name, func(t *testing.T) { - cfg, err := config.LoadDefaultConfig( - tt.args.ctx, - config.WithRegion("ap-northeast-1"), - config.WithAPIOptions([]func(*middleware.Stack) error{tt.args.withAPIOptionsFunc}), - ) - if err != nil { - t.Fatal(err) - } - - client := s3.NewFromConfig(cfg) - s3Client := NewS3(client) - - output, err := s3Client.ListObjectVersions(tt.args.ctx, tt.args.bucketName, tt.args.region, tt.args.oldVersionsOnly) - if (err != nil) != tt.wantErr { - t.Errorf("error = %#v, wantErr %#v", err.Error(), tt.wantErr) - return - } - if tt.wantErr && err.Error() != tt.want.err.Error() { - t.Errorf("err = %#v, want %#v", err.Error(), tt.want.err.Error()) - return - } - if !reflect.DeepEqual(output, tt.want.output) { - t.Errorf("output = %#v, want %#v", output, tt.want.output) - } - }) - } -} - func TestS3_ListObjectVersionsByPage(t *testing.T) { type args struct { ctx context.Context