@@ -3606,12 +3606,8 @@ def test_delete_non_existing_keys(self, s3_bucket, snapshot, aws_client):
36063606
36073607 @markers .aws .validated
36083608 @markers .snapshot .skip_snapshot_verify (
3609- path = [
3610- "$..Deleted..VersionId" , # we cannot guarantee order nor we can sort it
3611- "$..Delimiter" ,
3612- "$..EncodingType" ,
3613- "$..VersionIdMarker" ,
3614- ]
3609+ # we cannot guarantee order nor we can sort it
3610+ path = ["$..Deleted..VersionId" ],
36153611 )
36163612 def test_delete_keys_in_versioned_bucket (self , s3_bucket , snapshot , aws_client ):
36173613 # see https://docs.aws.amazon.com/AmazonS3/latest/userguide/DeletingObjectVersions.html
@@ -4434,9 +4430,6 @@ def test_upload_big_file(self, s3_create_bucket, snapshot, aws_client):
44344430 snapshot .match ("head_object_key2" , rs )
44354431
44364432 @markers .aws .validated
4437- @markers .snapshot .skip_snapshot_verify (
4438- paths = ["$..Delimiter" , "$..EncodingType" , "$..VersionIdMarker" ]
4439- )
44404433 def test_get_bucket_versioning_order (self , s3_bucket , snapshot , aws_client ):
44414434 snapshot .add_transformer (snapshot .transform .s3_api ())
44424435 rs = aws_client .s3 .list_object_versions (Bucket = s3_bucket , EncodingType = "url" )
@@ -4478,9 +4471,6 @@ def test_etag_on_get_object_call(self, s3_bucket, snapshot, aws_client):
44784471 snapshot .match ("get_object_range" , rs )
44794472
44804473 @markers .aws .validated
4481- @markers .snapshot .skip_snapshot_verify (
4482- paths = ["$..Delimiter" , "$..EncodingType" , "$..VersionIdMarker" ]
4483- )
44844474 def test_s3_delete_object_with_version_id (self , s3_bucket , snapshot , aws_client ):
44854475 snapshot .add_transformer (snapshot .transform .s3_api ())
44864476
@@ -4527,9 +4517,6 @@ def test_s3_delete_object_with_version_id(self, s3_bucket, snapshot, aws_client)
45274517 snapshot .match ("get_bucket_versioning_suspended" , rs )
45284518
45294519 @markers .aws .validated
4530- @markers .snapshot .skip_snapshot_verify (
4531- paths = ["$..Delimiter" , "$..EncodingType" , "$..VersionIdMarker" ]
4532- )
45334520 def test_s3_put_object_versioned (self , s3_bucket , snapshot , aws_client ):
45344521 snapshot .add_transformer (snapshot .transform .s3_api ())
45354522
@@ -4661,9 +4648,6 @@ def test_s3_batch_delete_objects_using_requests_with_acl(
46614648 snapshot .match ("list-remaining-objects" , response )
46624649
46634650 @markers .aws .validated
4664- @markers .snapshot .skip_snapshot_verify (
4665- paths = ["$..DeleteResult.Deleted..VersionId" , "$..Prefix" , "$..DeleteResult.@xmlns" ]
4666- )
46674651 def test_s3_batch_delete_public_objects_using_requests (
46684652 self , s3_bucket , allow_bucket_acl , snapshot , aws_client , anonymous_client
46694653 ):
@@ -4713,11 +4697,6 @@ def test_s3_batch_delete_public_objects_using_requests(
47134697 snapshot .match ("list-remaining-objects" , response )
47144698
47154699 @markers .aws .validated
4716- @markers .snapshot .skip_snapshot_verify (
4717- paths = [
4718- "$..Prefix" ,
4719- ]
4720- )
47214700 def test_s3_batch_delete_objects (self , s3_bucket , snapshot , aws_client ):
47224701 snapshot .add_transformer (snapshot .transform .s3_api ())
47234702 snapshot .add_transformer (snapshot .transform .key_value ("Key" ))
@@ -6179,7 +6158,6 @@ def _put_bucket_inventory_configuration(config_id: str):
61796158 "use_virtual_address" ,
61806159 [True , False ],
61816160 )
6182- @markers .snapshot .skip_snapshot_verify (paths = ["$..x-amz-server-side-encryption" ])
61836161 @markers .aws .validated
61846162 def test_get_object_content_length_with_virtual_host (
61856163 self ,
@@ -9375,25 +9353,19 @@ def test_lifecycle_expired_object_delete_marker(self, s3_bucket, snapshot, aws_c
93759353
93769354class TestS3ObjectLockRetention :
93779355 @markers .aws .validated
9378- @markers .snapshot .skip_snapshot_verify (
9379- paths = [
9380- # TODO: fix the exception for update-retention-no-bypass
9381- "$.update-retention-no-bypass..ArgumentName" ,
9382- "$.update-retention-no-bypass..ArgumentValue" ,
9383- "$.update-retention-no-bypass..Code" ,
9384- "$.update-retention-no-bypass..HTTPStatusCode" ,
9385- "$.update-retention-no-bypass..Message" ,
9386- ]
9387- )
93889356 def test_s3_object_retention_exc (self , aws_client , s3_create_bucket , snapshot ):
93899357 snapshot .add_transformer (snapshot .transform .key_value ("BucketName" ))
93909358 s3_bucket_locked = s3_create_bucket (ObjectLockEnabledForBucket = True )
9359+
9360+ current_year = datetime .datetime .now ().year
9361+ future_datetime = datetime .datetime (current_year + 5 , 1 , 1 )
9362+
93919363 # non-existing bucket
93929364 with pytest .raises (ClientError ) as e :
93939365 aws_client .s3 .put_object_retention (
93949366 Bucket = f"non-existing-bucket-{ long_uid ()} " ,
93959367 Key = "fake-key" ,
9396- Retention = {"Mode" : "GOVERNANCE" , "RetainUntilDate" : datetime . datetime ( 2030 , 1 , 1 ) },
9368+ Retention = {"Mode" : "GOVERNANCE" , "RetainUntilDate" : future_datetime },
93979369 )
93989370 snapshot .match ("put-object-retention-no-bucket" , e .value .response )
93999371
@@ -9402,7 +9374,7 @@ def test_s3_object_retention_exc(self, aws_client, s3_create_bucket, snapshot):
94029374 aws_client .s3 .put_object_retention (
94039375 Bucket = s3_bucket_locked ,
94049376 Key = "non-existing-key" ,
9405- Retention = {"Mode" : "GOVERNANCE" , "RetainUntilDate" : datetime . datetime ( 2030 , 1 , 1 ) },
9377+ Retention = {"Mode" : "GOVERNANCE" , "RetainUntilDate" : future_datetime },
94069378 )
94079379 snapshot .match ("put-object-retention-no-key" , e .value .response )
94089380
@@ -9431,26 +9403,38 @@ def test_s3_object_retention_exc(self, aws_client, s3_create_bucket, snapshot):
94319403 aws_client .s3 .put_object_retention (
94329404 Bucket = s3_bucket_locked ,
94339405 Key = object_key ,
9434- Retention = {"Mode" : "GOVERNANCE" , "RetainUntilDate" : datetime . datetime ( 2030 , 1 , 1 ) },
9406+ Retention = {"Mode" : "GOVERNANCE" , "RetainUntilDate" : future_datetime },
94359407 )
9436- # update a retention without bypass
9408+
9409+ # update a retention to be lower than the existing one without bypass
9410+ earlier_datetime = future_datetime - datetime .timedelta (days = 365 )
94379411 with pytest .raises (ClientError ) as e :
94389412 aws_client .s3 .put_object_retention (
94399413 Bucket = s3_bucket_locked ,
94409414 Key = object_key ,
94419415 VersionId = version_id ,
9442- Retention = {"Mode" : "GOVERNANCE" , "RetainUntilDate" : datetime . datetime ( 2025 , 1 , 1 ) },
9416+ Retention = {"Mode" : "GOVERNANCE" , "RetainUntilDate" : earlier_datetime },
94439417 )
94449418 snapshot .match ("update-retention-no-bypass" , e .value .response )
94459419
9420+ # update a retention with date in the past
9421+ with pytest .raises (ClientError ) as e :
9422+ aws_client .s3 .put_object_retention (
9423+ Bucket = s3_bucket_locked ,
9424+ Key = object_key ,
9425+ VersionId = version_id ,
9426+ Retention = {"Mode" : "GOVERNANCE" , "RetainUntilDate" : datetime .datetime (2020 , 1 , 1 )},
9427+ )
9428+ snapshot .match ("update-retention-past-date" , e .value .response )
9429+
94469430 s3_bucket_basic = s3_create_bucket (ObjectLockEnabledForBucket = False ) # same as default
94479431 aws_client .s3 .put_object (Bucket = s3_bucket_basic , Key = object_key , Body = "test" )
94489432 # put object retention in a object in bucket without lock configured
94499433 with pytest .raises (ClientError ) as e :
94509434 aws_client .s3 .put_object_retention (
94519435 Bucket = s3_bucket_basic ,
94529436 Key = object_key ,
9453- Retention = {"Mode" : "GOVERNANCE" , "RetainUntilDate" : datetime . datetime ( 2030 , 1 , 1 ) },
9437+ Retention = {"Mode" : "GOVERNANCE" , "RetainUntilDate" : future_datetime },
94549438 )
94559439 snapshot .match ("put-object-retention-regular-bucket" , e .value .response )
94569440
0 commit comments