Skip to content

Commit b5b592c

Browse files
committed
fix: Removed ObjectLockConfigurationNotFoundError, when attempting to set bucket versioning status to suspended
1 parent f388859 commit b5b592c

File tree

3 files changed

+34
-11
lines changed

3 files changed

+34
-11
lines changed

backend/posix/posix.go

+9-7
Original file line numberDiff line numberDiff line change
@@ -466,15 +466,17 @@ func (p *Posix) PutBucketVersioning(ctx context.Context, bucket string, status t
466466
versioning = []byte{1}
467467
case types.BucketVersioningStatusSuspended:
468468
lockRaw, err := p.GetObjectLockConfiguration(ctx, bucket)
469-
if err != nil {
469+
if err != nil && !errors.Is(err, s3err.GetAPIError(s3err.ErrObjectLockConfigurationNotFound)) {
470470
return err
471471
}
472-
lockStatus, err := auth.ParseBucketLockConfigurationOutput(lockRaw)
473-
if err != nil {
474-
return err
475-
}
476-
if lockStatus.ObjectLockEnabled == types.ObjectLockEnabledEnabled {
477-
return s3err.GetAPIError(s3err.ErrSuspendedVersioningNotAllowed)
472+
if err == nil {
473+
lockStatus, err := auth.ParseBucketLockConfigurationOutput(lockRaw)
474+
if err != nil {
475+
return err
476+
}
477+
if lockStatus.ObjectLockEnabled == types.ObjectLockEnabledEnabled {
478+
return s3err.GetAPIError(s3err.ErrSuspendedVersioningNotAllowed)
479+
}
478480
}
479481

480482
// '0' maps to 'Suspended'

tests/integration/group-tests.go

+4-2
Original file line numberDiff line numberDiff line change
@@ -522,7 +522,8 @@ func TestVersioning(s *S3Conf) {
522522
// PutBucketVersioning action
523523
PutBucketVersioning_non_existing_bucket(s)
524524
PutBucketVersioning_invalid_status(s)
525-
PutBucketVersioning_success(s)
525+
PutBucketVersioning_success_enabled(s)
526+
PutBucketVersioning_success_suspended(s)
526527
// GetBucketVersioning action
527528
GetBucketVersioning_non_existing_bucket(s)
528529
GetBucketVersioning_empty_response(s)
@@ -897,7 +898,8 @@ func GetIntTests() IntTests {
897898
"AccessControl_copy_object_with_starting_slash_for_user": AccessControl_copy_object_with_starting_slash_for_user,
898899
"PutBucketVersioning_non_existing_bucket": PutBucketVersioning_non_existing_bucket,
899900
"PutBucketVersioning_invalid_status": PutBucketVersioning_invalid_status,
900-
"PutBucketVersioning_success": PutBucketVersioning_success,
901+
"PutBucketVersioning_success_enabled": PutBucketVersioning_success_enabled,
902+
"PutBucketVersioning_success_suspended": PutBucketVersioning_success_suspended,
901903
"GetBucketVersioning_non_existing_bucket": GetBucketVersioning_non_existing_bucket,
902904
"GetBucketVersioning_empty_response": GetBucketVersioning_empty_response,
903905
"GetBucketVersioning_success": GetBucketVersioning_success,

tests/integration/tests.go

+21-2
Original file line numberDiff line numberDiff line change
@@ -10412,8 +10412,8 @@ func PutBucketVersioning_invalid_status(s *S3Conf) error {
1041210412
})
1041310413
}
1041410414

10415-
func PutBucketVersioning_success(s *S3Conf) error {
10416-
testName := "PutBucketVersioning_success"
10415+
func PutBucketVersioning_success_enabled(s *S3Conf) error {
10416+
testName := "PutBucketVersioning_success_enabled"
1041710417
return actionHandler(s, testName, func(s3client *s3.Client, bucket string) error {
1041810418
ctx, cancel := context.WithTimeout(context.Background(), shortTimeout)
1041910419
_, err := s3client.PutBucketVersioning(ctx, &s3.PutBucketVersioningInput{
@@ -10431,6 +10431,25 @@ func PutBucketVersioning_success(s *S3Conf) error {
1043110431
})
1043210432
}
1043310433

10434+
func PutBucketVersioning_success_suspended(s *S3Conf) error {
10435+
testName := "PutBucketVersioning_success_suspended"
10436+
return actionHandler(s, testName, func(s3client *s3.Client, bucket string) error {
10437+
ctx, cancel := context.WithTimeout(context.Background(), shortTimeout)
10438+
_, err := s3client.PutBucketVersioning(ctx, &s3.PutBucketVersioningInput{
10439+
Bucket: &bucket,
10440+
VersioningConfiguration: &types.VersioningConfiguration{
10441+
Status: types.BucketVersioningStatusSuspended,
10442+
},
10443+
})
10444+
cancel()
10445+
if err != nil {
10446+
return err
10447+
}
10448+
10449+
return nil
10450+
})
10451+
}
10452+
1043410453
func GetBucketVersioning_non_existing_bucket(s *S3Conf) error {
1043510454
testName := "GetBucketVersioning_non_existing_bucket"
1043610455
return actionHandler(s, testName, func(s3client *s3.Client, bucket string) error {

0 commit comments

Comments
 (0)