From: Casey Bodley Date: Thu, 3 Jul 2025 20:49:54 +0000 (-0400) Subject: s3: test delete_objects() with Size X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=fef5f6063294de32b12aa898ab465259ce80a243;p=s3-tests.git s3: test delete_objects() with Size Signed-off-by: Casey Bodley (cherry picked from commit 474a7e25b109e8e5394b8c11a509b51e40dbef2f) --- diff --git a/s3tests_boto3/functional/test_s3.py b/s3tests_boto3/functional/test_s3.py index 6c881e68..03208cb4 100644 --- a/s3tests_boto3/functional/test_s3.py +++ b/s3tests_boto3/functional/test_s3.py @@ -18415,3 +18415,69 @@ def test_delete_objects_version_if_match_last_modified_time(): response = client.delete_objects(Bucket=bucket, Delete={'Objects': [{'Key': key, 'VersionId': version, 'LastModifiedTime': badmtime}]}) assert 'NoSuchKey' == response['Errors'][0]['Code'] + +@pytest.mark.fails_on_aws # only supported for directory buckets +@pytest.mark.conditional_write +def test_delete_objects_if_match_size(): + client = get_client() + bucket = get_new_bucket(client) + key = 'obj' + + size = 0 + badsize = 9999 + + client.put_object(Bucket=bucket, Key=key) + + response = client.delete_objects(Bucket=bucket, Delete={'Objects': [{'Key': key, 'Size': badsize}]}) + assert 'PreconditionFailed' == response['Errors'][0]['Code'] + + response = client.delete_objects(Bucket=bucket, Delete={'Objects': [{'Key': key, 'Size': size}]}) + assert key == response['Deleted'][0]['Key'] # success + + response = client.delete_objects(Bucket=bucket, Delete={'Objects': [{'Key': key, 'Size': badsize}]}) + assert 'NoSuchKey' == response['Errors'][0]['Code'] + +@pytest.mark.fails_on_aws # only supported for directory buckets +@pytest.mark.conditional_write +def test_delete_objects_current_if_match_size(): + client = get_client() + bucket = get_new_bucket(client) + check_configure_versioning_retry(bucket, "Enabled", "Enabled") + key = 'obj' + + size = 0 + badsize = 9999 + + client.put_object(Bucket=bucket, Key=key) + + response = client.delete_objects(Bucket=bucket, Delete={'Objects': [{'Key': key, 'Size': badsize}]}) + assert 'PreconditionFailed' == response['Errors'][0]['Code'] + + response = client.delete_objects(Bucket=bucket, Delete={'Objects': [{'Key': key, 'Size': size}]}) + assert key == response['Deleted'][0]['Key'] # success + assert response['Deleted'][0]['DeleteMarker'] + + response = client.delete_objects(Bucket=bucket, Delete={'Objects': [{'Key': key, 'Size': badsize}]}) + assert 'NoSuchKey' == response['Errors'][0]['Code'] + +@pytest.mark.fails_on_aws # only supported for directory buckets +@pytest.mark.conditional_write +def test_delete_objects_version_if_match_size(): + client = get_client() + bucket = get_new_bucket(client) + check_configure_versioning_retry(bucket, "Enabled", "Enabled") + key = 'obj' + + size = 0 + badsize = 9999 + + version = client.put_object(Bucket=bucket, Key=key)['VersionId'] + + response = client.delete_objects(Bucket=bucket, Delete={'Objects': [{'Key': key, 'VersionId': version, 'Size': badsize}]}) + assert 'PreconditionFailed' == response['Errors'][0]['Code'] + + response = client.delete_objects(Bucket=bucket, Delete={'Objects': [{'Key': key, 'VersionId': version, 'Size': size}]}) + assert key == response['Deleted'][0]['Key'] # success + + response = client.delete_objects(Bucket=bucket, Delete={'Objects': [{'Key': key, 'VersionId': version, 'Size': badsize}]}) + assert 'NoSuchKey' == response['Errors'][0]['Code']