Skip to content

Commit d2b0d24

Browse files
Merge pull request #876 from versity/fix/put-bucket-versioning-suspended
fix: Removed ObjectLockConfigurationNotFoundError, when attempting to…
2 parents da98874 + b5b592c commit d2b0d24

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
@@ -530,7 +530,8 @@ func TestVersioning(s *S3Conf) {
530530
// PutBucketVersioning action
531531
PutBucketVersioning_non_existing_bucket(s)
532532
PutBucketVersioning_invalid_status(s)
533-
PutBucketVersioning_success(s)
533+
PutBucketVersioning_success_enabled(s)
534+
PutBucketVersioning_success_suspended(s)
534535
// GetBucketVersioning action
535536
GetBucketVersioning_non_existing_bucket(s)
536537
GetBucketVersioning_empty_response(s)
@@ -906,7 +907,8 @@ func GetIntTests() IntTests {
906907
"AccessControl_copy_object_with_starting_slash_for_user": AccessControl_copy_object_with_starting_slash_for_user,
907908
"PutBucketVersioning_non_existing_bucket": PutBucketVersioning_non_existing_bucket,
908909
"PutBucketVersioning_invalid_status": PutBucketVersioning_invalid_status,
909-
"PutBucketVersioning_success": PutBucketVersioning_success,
910+
"PutBucketVersioning_success_enabled": PutBucketVersioning_success_enabled,
911+
"PutBucketVersioning_success_suspended": PutBucketVersioning_success_suspended,
910912
"GetBucketVersioning_non_existing_bucket": GetBucketVersioning_non_existing_bucket,
911913
"GetBucketVersioning_empty_response": GetBucketVersioning_empty_response,
912914
"GetBucketVersioning_success": GetBucketVersioning_success,

tests/integration/tests.go

+21-2
Original file line numberDiff line numberDiff line change
@@ -10453,8 +10453,8 @@ func PutBucketVersioning_invalid_status(s *S3Conf) error {
1045310453
})
1045410454
}
1045510455

10456-
func PutBucketVersioning_success(s *S3Conf) error {
10457-
testName := "PutBucketVersioning_success"
10456+
func PutBucketVersioning_success_enabled(s *S3Conf) error {
10457+
testName := "PutBucketVersioning_success_enabled"
1045810458
return actionHandler(s, testName, func(s3client *s3.Client, bucket string) error {
1045910459
ctx, cancel := context.WithTimeout(context.Background(), shortTimeout)
1046010460
_, err := s3client.PutBucketVersioning(ctx, &s3.PutBucketVersioningInput{
@@ -10472,6 +10472,25 @@ func PutBucketVersioning_success(s *S3Conf) error {
1047210472
})
1047310473
}
1047410474

10475+
func PutBucketVersioning_success_suspended(s *S3Conf) error {
10476+
testName := "PutBucketVersioning_success_suspended"
10477+
return actionHandler(s, testName, func(s3client *s3.Client, bucket string) error {
10478+
ctx, cancel := context.WithTimeout(context.Background(), shortTimeout)
10479+
_, err := s3client.PutBucketVersioning(ctx, &s3.PutBucketVersioningInput{
10480+
Bucket: &bucket,
10481+
VersioningConfiguration: &types.VersioningConfiguration{
10482+
Status: types.BucketVersioningStatusSuspended,
10483+
},
10484+
})
10485+
cancel()
10486+
if err != nil {
10487+
return err
10488+
}
10489+
10490+
return nil
10491+
})
10492+
}
10493+
1047510494
func GetBucketVersioning_non_existing_bucket(s *S3Conf) error {
1047610495
testName := "GetBucketVersioning_non_existing_bucket"
1047710496
return actionHandler(s, testName, func(s3client *s3.Client, bucket string) error {

0 commit comments

Comments
 (0)