e = assert_raises(ClientError, client.delete_object, Bucket=bucket, Key=key, VersionId=version, IfMatchSize=badsize)
assert (404, 'NoSuchKey') == _get_status_and_error_code(e.response)
+
+@pytest.mark.fails_on_aws # only supported for directory buckets
+@pytest.mark.conditional_write
+def test_delete_objects_if_match():
+ client = get_client()
+ bucket = get_new_bucket(client)
+ key = 'obj'
+
+ etag = client.put_object(Bucket=bucket, Key=key)['ETag']
+
+ response = client.delete_objects(Bucket=bucket, Delete={'Objects': [{'Key': key, 'ETag': 'badetag'}]})
+ assert 'PreconditionFailed' == response['Errors'][0]['Code']
+
+ response = client.delete_objects(Bucket=bucket, Delete={'Objects': [{'Key': key, 'ETag': etag}]})
+ assert key == response['Deleted'][0]['Key'] # success
+
+ response = client.delete_objects(Bucket=bucket, Delete={'Objects': [{'Key': key, 'ETag': 'badetag'}]})
+ 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():
+ client = get_client()
+ bucket = get_new_bucket(client)
+ check_configure_versioning_retry(bucket, "Enabled", "Enabled")
+ key = 'obj'
+
+ etag = client.put_object(Bucket=bucket, Key=key)['ETag']
+
+ response = client.delete_objects(Bucket=bucket, Delete={'Objects': [{'Key': key, 'ETag': 'badetag'}]})
+ assert 'PreconditionFailed' == response['Errors'][0]['Code']
+
+ response = client.delete_objects(Bucket=bucket, Delete={'Objects': [{'Key': key, 'ETag': etag}]})
+ assert key == response['Deleted'][0]['Key'] # success
+ assert response['Deleted'][0]['DeleteMarker']
+
+ response = client.delete_objects(Bucket=bucket, Delete={'Objects': [{'Key': key, 'ETag': 'badetag'}]})
+ 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():
+ client = get_client()
+ bucket = get_new_bucket(client)
+ check_configure_versioning_retry(bucket, "Enabled", "Enabled")
+ key = 'obj'
+
+ response = client.put_object(Bucket=bucket, Key=key)
+ etag = response['ETag']
+ version = response['VersionId']
+
+ response = client.delete_objects(Bucket=bucket, Delete={'Objects': [{'Key': key, 'VersionId': version, 'ETag': 'badetag'}]})
+ assert 'PreconditionFailed' == response['Errors'][0]['Code']
+
+ response = client.delete_objects(Bucket=bucket, Delete={'Objects': [{'Key': key, 'VersionId': version, 'ETag': etag}]})
+ assert key == response['Deleted'][0]['Key'] # success
+ assert not response['Deleted'][0]['DeleteMarker']
+
+ response = client.delete_objects(Bucket=bucket, Delete={'Objects': [{'Key': key, 'VersionId': version, 'ETag': 'badetag'}]})
+ assert 'NoSuchKey' == response['Errors'][0]['Code']