From 6d313f5a7225d261d046ebada0b597caecc0917f Mon Sep 17 00:00:00 2001 From: jonaustin09 Date: Fri, 17 May 2024 11:53:25 -0400 Subject: [PATCH] fix: Added mode property validation for PutObjectRetention action --- auth/object_lock.go | 2 +- tests/integration/group-tests.go | 2 ++ tests/integration/tests.go | 22 ++++++++++++++++++++++ 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/auth/object_lock.go b/auth/object_lock.go index 6d070e2e..d3352130 100644 --- a/auth/object_lock.go +++ b/auth/object_lock.go @@ -96,7 +96,7 @@ func ParseObjectLockRetentionInput(input []byte) ([]byte, error) { case types.ObjectLockRetentionModeCompliance: case types.ObjectLockRetentionModeGovernance: default: - return nil, s3err.GetAPIError(s3err.ErrInvalidRequest) + return nil, s3err.GetAPIError(s3err.ErrMalformedXML) } return json.Marshal(retention) diff --git a/tests/integration/group-tests.go b/tests/integration/group-tests.go index 2a93eaf3..36e60e70 100644 --- a/tests/integration/group-tests.go +++ b/tests/integration/group-tests.go @@ -328,6 +328,7 @@ func TestPutObjectRetention(s *S3Conf) { PutObjectRetention_unset_bucket_object_lock_config(s) PutObjectRetention_disabled_bucket_object_lock_config(s) PutObjectRetention_expired_retain_until_date(s) + PutObjectRetention_invalid_mode(s) PutObjectRetention_success(s) } @@ -642,6 +643,7 @@ func GetIntTests() IntTests { "PutObjectRetention_unset_bucket_object_lock_config": PutObjectRetention_unset_bucket_object_lock_config, "PutObjectRetention_disabled_bucket_object_lock_config": PutObjectRetention_disabled_bucket_object_lock_config, "PutObjectRetention_expired_retain_until_date": PutObjectRetention_expired_retain_until_date, + "PutObjectRetention_invalid_mode": PutObjectRetention_invalid_mode, "PutObjectRetention_success": PutObjectRetention_success, "GetObjectRetention_non_existing_bucket": GetObjectRetention_non_existing_bucket, "GetObjectRetention_non_existing_object": GetObjectRetention_non_existing_object, diff --git a/tests/integration/tests.go b/tests/integration/tests.go index 0efdbaf2..177ab6cd 100644 --- a/tests/integration/tests.go +++ b/tests/integration/tests.go @@ -6671,6 +6671,28 @@ func PutObjectRetention_expired_retain_until_date(s *S3Conf) error { }, withLock()) } +func PutObjectRetention_invalid_mode(s *S3Conf) error { + testName := "PutObjectRetention_invalid_mode" + return actionHandler(s, testName, func(s3client *s3.Client, bucket string) error { + date := time.Now().Add(time.Hour * 3) + ctx, cancel := context.WithTimeout(context.Background(), shortTimeout) + _, err := s3client.PutObjectRetention(ctx, &s3.PutObjectRetentionInput{ + Bucket: &bucket, + Key: getPtr("my-obj"), + Retention: &types.ObjectLockRetention{ + Mode: types.ObjectLockRetentionMode("invalid_mode"), + RetainUntilDate: &date, + }, + }) + cancel() + if err := checkApiErr(err, s3err.GetAPIError(s3err.ErrMalformedXML)); err != nil { + return err + } + + return nil + }, withLock()) +} + func PutObjectRetention_success(s *S3Conf) error { testName := "PutObjectRetention_success" return actionHandler(s, testName, func(s3client *s3.Client, bucket string) error {