From b5b592c6835f5bfbe15941eba1d3c19b289a5053 Mon Sep 17 00:00:00 2001 From: jonaustin09 Date: Mon, 7 Oct 2024 18:26:33 -0400 Subject: [PATCH] fix: Removed ObjectLockConfigurationNotFoundError, when attempting to set bucket versioning status to suspended --- backend/posix/posix.go | 16 +++++++++------- tests/integration/group-tests.go | 6 ++++-- tests/integration/tests.go | 23 +++++++++++++++++++++-- 3 files changed, 34 insertions(+), 11 deletions(-) diff --git a/backend/posix/posix.go b/backend/posix/posix.go index 75bdcfbc..bb9d223e 100644 --- a/backend/posix/posix.go +++ b/backend/posix/posix.go @@ -466,15 +466,17 @@ func (p *Posix) PutBucketVersioning(ctx context.Context, bucket string, status t versioning = []byte{1} case types.BucketVersioningStatusSuspended: lockRaw, err := p.GetObjectLockConfiguration(ctx, bucket) - if err != nil { + if err != nil && !errors.Is(err, s3err.GetAPIError(s3err.ErrObjectLockConfigurationNotFound)) { return err } - lockStatus, err := auth.ParseBucketLockConfigurationOutput(lockRaw) - if err != nil { - return err - } - if lockStatus.ObjectLockEnabled == types.ObjectLockEnabledEnabled { - return s3err.GetAPIError(s3err.ErrSuspendedVersioningNotAllowed) + if err == nil { + lockStatus, err := auth.ParseBucketLockConfigurationOutput(lockRaw) + if err != nil { + return err + } + if lockStatus.ObjectLockEnabled == types.ObjectLockEnabledEnabled { + return s3err.GetAPIError(s3err.ErrSuspendedVersioningNotAllowed) + } } // '0' maps to 'Suspended' diff --git a/tests/integration/group-tests.go b/tests/integration/group-tests.go index a0710905..94dbc7e7 100644 --- a/tests/integration/group-tests.go +++ b/tests/integration/group-tests.go @@ -522,7 +522,8 @@ func TestVersioning(s *S3Conf) { // PutBucketVersioning action PutBucketVersioning_non_existing_bucket(s) PutBucketVersioning_invalid_status(s) - PutBucketVersioning_success(s) + PutBucketVersioning_success_enabled(s) + PutBucketVersioning_success_suspended(s) // GetBucketVersioning action GetBucketVersioning_non_existing_bucket(s) GetBucketVersioning_empty_response(s) @@ -897,7 +898,8 @@ func GetIntTests() IntTests { "AccessControl_copy_object_with_starting_slash_for_user": AccessControl_copy_object_with_starting_slash_for_user, "PutBucketVersioning_non_existing_bucket": PutBucketVersioning_non_existing_bucket, "PutBucketVersioning_invalid_status": PutBucketVersioning_invalid_status, - "PutBucketVersioning_success": PutBucketVersioning_success, + "PutBucketVersioning_success_enabled": PutBucketVersioning_success_enabled, + "PutBucketVersioning_success_suspended": PutBucketVersioning_success_suspended, "GetBucketVersioning_non_existing_bucket": GetBucketVersioning_non_existing_bucket, "GetBucketVersioning_empty_response": GetBucketVersioning_empty_response, "GetBucketVersioning_success": GetBucketVersioning_success, diff --git a/tests/integration/tests.go b/tests/integration/tests.go index 07ac9f52..d3ef2337 100644 --- a/tests/integration/tests.go +++ b/tests/integration/tests.go @@ -10412,8 +10412,8 @@ func PutBucketVersioning_invalid_status(s *S3Conf) error { }) } -func PutBucketVersioning_success(s *S3Conf) error { - testName := "PutBucketVersioning_success" +func PutBucketVersioning_success_enabled(s *S3Conf) error { + testName := "PutBucketVersioning_success_enabled" return actionHandler(s, testName, func(s3client *s3.Client, bucket string) error { ctx, cancel := context.WithTimeout(context.Background(), shortTimeout) _, err := s3client.PutBucketVersioning(ctx, &s3.PutBucketVersioningInput{ @@ -10431,6 +10431,25 @@ func PutBucketVersioning_success(s *S3Conf) error { }) } +func PutBucketVersioning_success_suspended(s *S3Conf) error { + testName := "PutBucketVersioning_success_suspended" + return actionHandler(s, testName, func(s3client *s3.Client, bucket string) error { + ctx, cancel := context.WithTimeout(context.Background(), shortTimeout) + _, err := s3client.PutBucketVersioning(ctx, &s3.PutBucketVersioningInput{ + Bucket: &bucket, + VersioningConfiguration: &types.VersioningConfiguration{ + Status: types.BucketVersioningStatusSuspended, + }, + }) + cancel() + if err != nil { + return err + } + + return nil + }) +} + func GetBucketVersioning_non_existing_bucket(s *S3Conf) error { testName := "GetBucketVersioning_non_existing_bucket" return actionHandler(s, testName, func(s3client *s3.Client, bucket string) error {