S3:CompleteMultipartUpload - error on empty part list
This commit is contained in:
parent
8ba4bb63c5
commit
142249fbdc
@ -365,6 +365,9 @@ class FakeMultipart(BaseModel):
|
|||||||
last = part
|
last = part
|
||||||
count += 1
|
count += 1
|
||||||
|
|
||||||
|
if count == 0:
|
||||||
|
raise MalformedXML
|
||||||
|
|
||||||
etag = hashlib.md5()
|
etag = hashlib.md5()
|
||||||
etag.update(bytes(md5s))
|
etag.update(bytes(md5s))
|
||||||
return total, "{0}-{1}".format(etag.hexdigest(), count)
|
return total, "{0}-{1}".format(etag.hexdigest(), count)
|
||||||
|
@ -8,5 +8,4 @@ TestAccAWSDefaultSecurityGroup_Classic_
|
|||||||
TestAccDataSourceAwsNetworkInterface_CarrierIPAssociation
|
TestAccDataSourceAwsNetworkInterface_CarrierIPAssociation
|
||||||
TestAccAWSRouteTable_IPv4_To_LocalGateway
|
TestAccAWSRouteTable_IPv4_To_LocalGateway
|
||||||
TestAccAWSRouteTable_IPv4_To_VpcEndpoint
|
TestAccAWSRouteTable_IPv4_To_VpcEndpoint
|
||||||
TestAccAWSRouteTable_VpcClassicLink
|
TestAccAWSRouteTable_VpcClassicLink
|
||||||
TestAccAWSS3BucketObject_updatesWithVersioningViaAccessPoint
|
|
@ -120,9 +120,7 @@ TestAccAWSENI_Tags
|
|||||||
TestAccAWSENI_basic
|
TestAccAWSENI_basic
|
||||||
TestAccAWSENI_IPv6
|
TestAccAWSENI_IPv6
|
||||||
TestAccAWSENI_disappears
|
TestAccAWSENI_disappears
|
||||||
TestAccAWSS3BucketObject
|
|
||||||
TestAccAWSS3BucketPolicy
|
TestAccAWSS3BucketPolicy
|
||||||
TestAccAWSS3AccessPoint
|
|
||||||
TestAccAWSS3BucketPublicAccessBlock
|
TestAccAWSS3BucketPublicAccessBlock
|
||||||
TestAccAWSS3ObjectCopy
|
TestAccAWSS3ObjectCopy
|
||||||
TestAccAWSIAMPolicy_
|
TestAccAWSIAMPolicy_
|
||||||
|
@ -1,14 +1,14 @@
|
|||||||
|
import boto3
|
||||||
import os
|
import os
|
||||||
import pytest
|
import pytest
|
||||||
|
import sure # noqa # pylint: disable=unused-import
|
||||||
|
|
||||||
|
from botocore.client import ClientError
|
||||||
from functools import wraps
|
from functools import wraps
|
||||||
from io import BytesIO
|
from io import BytesIO
|
||||||
|
|
||||||
import boto3
|
|
||||||
from botocore.client import ClientError
|
|
||||||
|
|
||||||
from moto.s3.responses import DEFAULT_REGION_NAME
|
from moto.s3.responses import DEFAULT_REGION_NAME
|
||||||
|
|
||||||
import sure # noqa # pylint: disable=unused-import
|
|
||||||
|
|
||||||
from moto import settings, mock_s3
|
from moto import settings, mock_s3
|
||||||
import moto.s3.models as s3model
|
import moto.s3.models as s3model
|
||||||
@ -839,3 +839,30 @@ def test_multipart_part_size():
|
|||||||
for i in range(1, n_parts + 1):
|
for i in range(1, n_parts + 1):
|
||||||
obj = s3.head_object(Bucket="mybucket", Key="the-key", PartNumber=i)
|
obj = s3.head_object(Bucket="mybucket", Key="the-key", PartNumber=i)
|
||||||
assert obj["ContentLength"] == REDUCED_PART_SIZE + i
|
assert obj["ContentLength"] == REDUCED_PART_SIZE + i
|
||||||
|
|
||||||
|
|
||||||
|
@mock_s3
|
||||||
|
def test_complete_multipart_with_empty_partlist():
|
||||||
|
"""
|
||||||
|
When completing a MultipartUpload with an empty part list, AWS responds with an InvalidXML-error
|
||||||
|
|
||||||
|
Verify that we send the same error, to duplicate boto3's behaviour
|
||||||
|
"""
|
||||||
|
bucket = "testbucketthatcompletesmultipartuploadwithoutparts"
|
||||||
|
key = "test-multi-empty"
|
||||||
|
|
||||||
|
client = boto3.client("s3", region_name=DEFAULT_REGION_NAME)
|
||||||
|
client.create_bucket(Bucket=bucket)
|
||||||
|
|
||||||
|
response = client.create_multipart_upload(Bucket=bucket, Key=key,)
|
||||||
|
uid = response["UploadId"]
|
||||||
|
|
||||||
|
upload = boto3.resource("s3").MultipartUpload(bucket, key, uid)
|
||||||
|
|
||||||
|
with pytest.raises(ClientError) as exc:
|
||||||
|
upload.complete(MultipartUpload={"Parts": []})
|
||||||
|
err = exc.value.response["Error"]
|
||||||
|
err["Code"].should.equal("MalformedXML")
|
||||||
|
err["Message"].should.equal(
|
||||||
|
"The XML you provided was not well-formed or did not validate against our published schema"
|
||||||
|
)
|
||||||
|
Loading…
Reference in New Issue
Block a user