@@ -3606,12 +3606,8 @@ def test_delete_non_existing_keys(self, s3_bucket, snapshot, aws_client):
3606
3606
3607
3607
@markers .aws .validated
3608
3608
@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" ],
3615
3611
)
3616
3612
def test_delete_keys_in_versioned_bucket (self , s3_bucket , snapshot , aws_client ):
3617
3613
# 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):
4434
4430
snapshot .match ("head_object_key2" , rs )
4435
4431
4436
4432
@markers .aws .validated
4437
- @markers .snapshot .skip_snapshot_verify (
4438
- paths = ["$..Delimiter" , "$..EncodingType" , "$..VersionIdMarker" ]
4439
- )
4440
4433
def test_get_bucket_versioning_order (self , s3_bucket , snapshot , aws_client ):
4441
4434
snapshot .add_transformer (snapshot .transform .s3_api ())
4442
4435
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):
4478
4471
snapshot .match ("get_object_range" , rs )
4479
4472
4480
4473
@markers .aws .validated
4481
- @markers .snapshot .skip_snapshot_verify (
4482
- paths = ["$..Delimiter" , "$..EncodingType" , "$..VersionIdMarker" ]
4483
- )
4484
4474
def test_s3_delete_object_with_version_id (self , s3_bucket , snapshot , aws_client ):
4485
4475
snapshot .add_transformer (snapshot .transform .s3_api ())
4486
4476
@@ -4527,9 +4517,6 @@ def test_s3_delete_object_with_version_id(self, s3_bucket, snapshot, aws_client)
4527
4517
snapshot .match ("get_bucket_versioning_suspended" , rs )
4528
4518
4529
4519
@markers .aws .validated
4530
- @markers .snapshot .skip_snapshot_verify (
4531
- paths = ["$..Delimiter" , "$..EncodingType" , "$..VersionIdMarker" ]
4532
- )
4533
4520
def test_s3_put_object_versioned (self , s3_bucket , snapshot , aws_client ):
4534
4521
snapshot .add_transformer (snapshot .transform .s3_api ())
4535
4522
@@ -4661,9 +4648,6 @@ def test_s3_batch_delete_objects_using_requests_with_acl(
4661
4648
snapshot .match ("list-remaining-objects" , response )
4662
4649
4663
4650
@markers .aws .validated
4664
- @markers .snapshot .skip_snapshot_verify (
4665
- paths = ["$..DeleteResult.Deleted..VersionId" , "$..Prefix" , "$..DeleteResult.@xmlns" ]
4666
- )
4667
4651
def test_s3_batch_delete_public_objects_using_requests (
4668
4652
self , s3_bucket , allow_bucket_acl , snapshot , aws_client , anonymous_client
4669
4653
):
@@ -4713,11 +4697,6 @@ def test_s3_batch_delete_public_objects_using_requests(
4713
4697
snapshot .match ("list-remaining-objects" , response )
4714
4698
4715
4699
@markers .aws .validated
4716
- @markers .snapshot .skip_snapshot_verify (
4717
- paths = [
4718
- "$..Prefix" ,
4719
- ]
4720
- )
4721
4700
def test_s3_batch_delete_objects (self , s3_bucket , snapshot , aws_client ):
4722
4701
snapshot .add_transformer (snapshot .transform .s3_api ())
4723
4702
snapshot .add_transformer (snapshot .transform .key_value ("Key" ))
@@ -6179,7 +6158,6 @@ def _put_bucket_inventory_configuration(config_id: str):
6179
6158
"use_virtual_address" ,
6180
6159
[True , False ],
6181
6160
)
6182
- @markers .snapshot .skip_snapshot_verify (paths = ["$..x-amz-server-side-encryption" ])
6183
6161
@markers .aws .validated
6184
6162
def test_get_object_content_length_with_virtual_host (
6185
6163
self ,
@@ -9375,25 +9353,19 @@ def test_lifecycle_expired_object_delete_marker(self, s3_bucket, snapshot, aws_c
9375
9353
9376
9354
class TestS3ObjectLockRetention :
9377
9355
@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
- )
9388
9356
def test_s3_object_retention_exc (self , aws_client , s3_create_bucket , snapshot ):
9389
9357
snapshot .add_transformer (snapshot .transform .key_value ("BucketName" ))
9390
9358
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
+
9391
9363
# non-existing bucket
9392
9364
with pytest .raises (ClientError ) as e :
9393
9365
aws_client .s3 .put_object_retention (
9394
9366
Bucket = f"non-existing-bucket-{ long_uid ()} " ,
9395
9367
Key = "fake-key" ,
9396
- Retention = {"Mode" : "GOVERNANCE" , "RetainUntilDate" : datetime . datetime ( 2030 , 1 , 1 ) },
9368
+ Retention = {"Mode" : "GOVERNANCE" , "RetainUntilDate" : future_datetime },
9397
9369
)
9398
9370
snapshot .match ("put-object-retention-no-bucket" , e .value .response )
9399
9371
@@ -9402,7 +9374,7 @@ def test_s3_object_retention_exc(self, aws_client, s3_create_bucket, snapshot):
9402
9374
aws_client .s3 .put_object_retention (
9403
9375
Bucket = s3_bucket_locked ,
9404
9376
Key = "non-existing-key" ,
9405
- Retention = {"Mode" : "GOVERNANCE" , "RetainUntilDate" : datetime . datetime ( 2030 , 1 , 1 ) },
9377
+ Retention = {"Mode" : "GOVERNANCE" , "RetainUntilDate" : future_datetime },
9406
9378
)
9407
9379
snapshot .match ("put-object-retention-no-key" , e .value .response )
9408
9380
@@ -9431,26 +9403,38 @@ def test_s3_object_retention_exc(self, aws_client, s3_create_bucket, snapshot):
9431
9403
aws_client .s3 .put_object_retention (
9432
9404
Bucket = s3_bucket_locked ,
9433
9405
Key = object_key ,
9434
- Retention = {"Mode" : "GOVERNANCE" , "RetainUntilDate" : datetime . datetime ( 2030 , 1 , 1 ) },
9406
+ Retention = {"Mode" : "GOVERNANCE" , "RetainUntilDate" : future_datetime },
9435
9407
)
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 )
9437
9411
with pytest .raises (ClientError ) as e :
9438
9412
aws_client .s3 .put_object_retention (
9439
9413
Bucket = s3_bucket_locked ,
9440
9414
Key = object_key ,
9441
9415
VersionId = version_id ,
9442
- Retention = {"Mode" : "GOVERNANCE" , "RetainUntilDate" : datetime . datetime ( 2025 , 1 , 1 ) },
9416
+ Retention = {"Mode" : "GOVERNANCE" , "RetainUntilDate" : earlier_datetime },
9443
9417
)
9444
9418
snapshot .match ("update-retention-no-bypass" , e .value .response )
9445
9419
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
+
9446
9430
s3_bucket_basic = s3_create_bucket (ObjectLockEnabledForBucket = False ) # same as default
9447
9431
aws_client .s3 .put_object (Bucket = s3_bucket_basic , Key = object_key , Body = "test" )
9448
9432
# put object retention in a object in bucket without lock configured
9449
9433
with pytest .raises (ClientError ) as e :
9450
9434
aws_client .s3 .put_object_retention (
9451
9435
Bucket = s3_bucket_basic ,
9452
9436
Key = object_key ,
9453
- Retention = {"Mode" : "GOVERNANCE" , "RetainUntilDate" : datetime . datetime ( 2030 , 1 , 1 ) },
9437
+ Retention = {"Mode" : "GOVERNANCE" , "RetainUntilDate" : future_datetime },
9454
9438
)
9455
9439
snapshot .match ("put-object-retention-regular-bucket" , e .value .response )
9456
9440
0 commit comments