From f0854020d7fbecc414bd1555a3f93b0725485edc Mon Sep 17 00:00:00 2001 From: Casey Bodley Date: Thu, 20 Feb 2025 14:41:44 -0500 Subject: [PATCH] s3: test that object lock can be enabled on an existing bucket Signed-off-by: Casey Bodley --- s3tests_boto3/functional/test_s3.py | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/s3tests_boto3/functional/test_s3.py b/s3tests_boto3/functional/test_s3.py index 40249fa..a247c00 100644 --- a/s3tests_boto3/functional/test_s3.py +++ b/s3tests_boto3/functional/test_s3.py @@ -12360,6 +12360,35 @@ def test_object_lock_put_obj_lock_invalid_bucket(): assert status == 409 assert error_code == 'InvalidBucketState' +def test_object_lock_put_obj_lock_enable_after_create(): + bucket_name = get_new_bucket_name() + client = get_client() + client.create_bucket(Bucket=bucket_name) + conf = {'ObjectLockEnabled':'Enabled', + 'Rule': { + 'DefaultRetention':{ + 'Mode':'GOVERNANCE', + 'Days':1 + } + }} + + # fail if bucket is not versioned + e = assert_raises(ClientError, client.put_object_lock_configuration, Bucket=bucket_name, ObjectLockConfiguration=conf) + status, error_code = _get_status_and_error_code(e.response) + assert status == 409 + assert error_code == 'InvalidBucketState' + + # fail if versioning is suspended + check_configure_versioning_retry(bucket_name, "Suspended", "Suspended") + e = assert_raises(ClientError, client.put_object_lock_configuration, Bucket=bucket_name, ObjectLockConfiguration=conf) + status, error_code = _get_status_and_error_code(e.response) + assert status == 409 + assert error_code == 'InvalidBucketState' + + # enable object lock if versioning is enabled + check_configure_versioning_retry(bucket_name, "Enabled", "Enabled") + response = client.put_object_lock_configuration(Bucket=bucket_name, ObjectLockConfiguration=conf) + assert response['ResponseMetadata']['HTTPStatusCode'] == 200 @pytest.mark.fails_on_dbstore def test_object_lock_put_obj_lock_with_days_and_years():