S3 - Add IllegalLocationConstraint validation when creating buckets

This commit is contained in:
Bert Blommers 2020-02-02 10:36:51 +00:00
parent b971aee9d5
commit f74f08581a
6 changed files with 182 additions and 95 deletions

View File

@ -127,6 +127,18 @@ class InvalidRequest(S3ClientError):
) )
class IllegalLocationConstraintException(S3ClientError):
code = 400
def __init__(self, *args, **kwargs):
super(IllegalLocationConstraintException, self).__init__(
"IllegalLocationConstraintException",
"The unspecified location constraint is incompatible for the region specific endpoint this request was sent to.",
*args,
**kwargs
)
class MalformedXML(S3ClientError): class MalformedXML(S3ClientError):
code = 400 code = 400

View File

@ -29,6 +29,7 @@ from .exceptions import (
InvalidPartOrder, InvalidPartOrder,
MalformedXML, MalformedXML,
MalformedACLError, MalformedACLError,
IllegalLocationConstraintException,
InvalidNotificationARN, InvalidNotificationARN,
InvalidNotificationEvent, InvalidNotificationEvent,
ObjectNotInActiveTierError, ObjectNotInActiveTierError,
@ -585,6 +586,15 @@ class ResponseObject(_TemplateEnvironmentMixin, ActionAuthenticatorMixin):
next_continuation_token = None next_continuation_token = None
return result_keys, is_truncated, next_continuation_token return result_keys, is_truncated, next_continuation_token
def _body_contains_location_constraint(self, body):
if body:
try:
xmltodict.parse(body)["CreateBucketConfiguration"]["LocationConstraint"]
return True
except KeyError:
pass
return False
def _bucket_response_put( def _bucket_response_put(
self, request, body, region_name, bucket_name, querystring self, request, body, region_name, bucket_name, querystring
): ):
@ -680,10 +690,16 @@ class ResponseObject(_TemplateEnvironmentMixin, ActionAuthenticatorMixin):
return "" return ""
else: else:
if body:
# us-east-1, the default AWS region behaves a bit differently # us-east-1, the default AWS region behaves a bit differently
# - you should not use it as a location constraint --> it fails # - you should not use it as a location constraint --> it fails
# - querying the location constraint returns None # - querying the location constraint returns None
# - LocationConstraint has to be specified if outside us-east-1
if (
region_name != DEFAULT_REGION_NAME
and not self._body_contains_location_constraint(body)
):
raise IllegalLocationConstraintException()
if body:
try: try:
forced_region = xmltodict.parse(body)["CreateBucketConfiguration"][ forced_region = xmltodict.parse(body)["CreateBucketConfiguration"][
"LocationConstraint" "LocationConstraint"

View File

@ -37,7 +37,7 @@ def bucket_name_from_url(url):
REGION_URL_REGEX = re.compile( REGION_URL_REGEX = re.compile(
r"^https?://(s3[-\.](?P<region1>.+)\.amazonaws\.com/(.+)|" r"^https?://(s3[-\.](?P<region1>.+)\.amazonaws\.com/(.+)|"
r"(.+)\.s3-(?P<region2>.+)\.amazonaws\.com)/?" r"(.+)\.s3[-\.](?P<region2>.+)\.amazonaws\.com)/?"
) )

View File

@ -27,6 +27,7 @@ from parameterized import parameterized
import six import six
import requests import requests
import tests.backport_assert_raises # noqa import tests.backport_assert_raises # noqa
from moto.s3.responses import DEFAULT_REGION_NAME
from nose import SkipTest from nose import SkipTest
from nose.tools import assert_raises from nose.tools import assert_raises
@ -68,7 +69,7 @@ class MyModel(object):
self.value = value self.value = value
def save(self): def save(self):
s3 = boto3.client("s3", region_name="us-east-1") s3 = boto3.client("s3", region_name=DEFAULT_REGION_NAME)
s3.put_object(Bucket="mybucket", Key=self.name, Body=self.value) s3.put_object(Bucket="mybucket", Key=self.name, Body=self.value)
@ -119,7 +120,7 @@ def test_append_to_value__empty_key():
@mock_s3 @mock_s3
def test_my_model_save(): def test_my_model_save():
# Create Bucket so that test can run # Create Bucket so that test can run
conn = boto3.resource("s3", region_name="us-east-1") conn = boto3.resource("s3", region_name=DEFAULT_REGION_NAME)
conn.create_bucket(Bucket="mybucket") conn.create_bucket(Bucket="mybucket")
#################################### ####################################
@ -133,7 +134,7 @@ def test_my_model_save():
@mock_s3 @mock_s3
def test_key_etag(): def test_key_etag():
conn = boto3.resource("s3", region_name="us-east-1") conn = boto3.resource("s3", region_name=DEFAULT_REGION_NAME)
conn.create_bucket(Bucket="mybucket") conn.create_bucket(Bucket="mybucket")
model_instance = MyModel("steve", "is awesome") model_instance = MyModel("steve", "is awesome")
@ -519,9 +520,9 @@ def test_bucket_with_dash():
def test_create_existing_bucket(): def test_create_existing_bucket():
"Trying to create a bucket that already exists should raise an Error" "Trying to create a bucket that already exists should raise an Error"
conn = boto.s3.connect_to_region("us-west-2") conn = boto.s3.connect_to_region("us-west-2")
conn.create_bucket("foobar") conn.create_bucket("foobar", location="us-west-2")
with assert_raises(S3CreateError): with assert_raises(S3CreateError):
conn.create_bucket("foobar") conn.create_bucket("foobar", location="us-west-2")
@mock_s3_deprecated @mock_s3_deprecated
@ -535,7 +536,7 @@ def test_create_existing_bucket_in_us_east_1():
us-east-1. In us-east-1 region, you will get 200 OK, but it is no-op (if us-east-1. In us-east-1 region, you will get 200 OK, but it is no-op (if
bucket exists it Amazon S3 will not do anything). bucket exists it Amazon S3 will not do anything).
""" """
conn = boto.s3.connect_to_region("us-east-1") conn = boto.s3.connect_to_region(DEFAULT_REGION_NAME)
conn.create_bucket("foobar") conn.create_bucket("foobar")
bucket = conn.create_bucket("foobar") bucket = conn.create_bucket("foobar")
bucket.name.should.equal("foobar") bucket.name.should.equal("foobar")
@ -544,7 +545,7 @@ def test_create_existing_bucket_in_us_east_1():
@mock_s3_deprecated @mock_s3_deprecated
def test_other_region(): def test_other_region():
conn = S3Connection("key", "secret", host="s3-website-ap-southeast-2.amazonaws.com") conn = S3Connection("key", "secret", host="s3-website-ap-southeast-2.amazonaws.com")
conn.create_bucket("foobar") conn.create_bucket("foobar", location="ap-southeast-2")
list(conn.get_bucket("foobar").get_all_keys()).should.equal([]) list(conn.get_bucket("foobar").get_all_keys()).should.equal([])
@ -995,7 +996,9 @@ def test_bucket_acl_switching():
def test_s3_object_in_public_bucket(): def test_s3_object_in_public_bucket():
s3 = boto3.resource("s3") s3 = boto3.resource("s3")
bucket = s3.Bucket("test-bucket") bucket = s3.Bucket("test-bucket")
bucket.create(ACL="public-read") bucket.create(
ACL="public-read", CreateBucketConfiguration={"LocationConstraint": "us-west-1"}
)
bucket.put_object(Body=b"ABCD", Key="file.txt") bucket.put_object(Body=b"ABCD", Key="file.txt")
s3_anonymous = boto3.resource("s3") s3_anonymous = boto3.resource("s3")
@ -1026,7 +1029,9 @@ def test_s3_object_in_public_bucket():
def test_s3_object_in_private_bucket(): def test_s3_object_in_private_bucket():
s3 = boto3.resource("s3") s3 = boto3.resource("s3")
bucket = s3.Bucket("test-bucket") bucket = s3.Bucket("test-bucket")
bucket.create(ACL="private") bucket.create(
ACL="private", CreateBucketConfiguration={"LocationConstraint": "us-west-1"}
)
bucket.put_object(ACL="private", Body=b"ABCD", Key="file.txt") bucket.put_object(ACL="private", Body=b"ABCD", Key="file.txt")
s3_anonymous = boto3.resource("s3") s3_anonymous = boto3.resource("s3")
@ -1086,19 +1091,46 @@ def test_setting_content_encoding():
@mock_s3_deprecated @mock_s3_deprecated
def test_bucket_location(): def test_bucket_location():
conn = boto.s3.connect_to_region("us-west-2") conn = boto.s3.connect_to_region("us-west-2")
bucket = conn.create_bucket("mybucket") bucket = conn.create_bucket("mybucket", location="us-west-2")
bucket.get_location().should.equal("us-west-2") bucket.get_location().should.equal("us-west-2")
@mock_s3 @mock_s3
def test_bucket_location_us_east_1(): def test_bucket_location_default():
cli = boto3.client("s3") cli = boto3.client("s3", region_name=DEFAULT_REGION_NAME)
bucket_name = "mybucket" bucket_name = "mybucket"
# No LocationConstraint ==> us-east-1 # No LocationConstraint ==> us-east-1
cli.create_bucket(Bucket=bucket_name) cli.create_bucket(Bucket=bucket_name)
cli.get_bucket_location(Bucket=bucket_name)["LocationConstraint"].should.equal(None) cli.get_bucket_location(Bucket=bucket_name)["LocationConstraint"].should.equal(None)
@mock_s3
def test_bucket_location_nondefault():
cli = boto3.client("s3", region_name="eu-central-1")
bucket_name = "mybucket"
# LocationConstraint set for non default regions
resp = cli.create_bucket(
Bucket=bucket_name,
CreateBucketConfiguration={"LocationConstraint": "eu-central-1"},
)
cli.get_bucket_location(Bucket=bucket_name)["LocationConstraint"].should.equal(
"eu-central-1"
)
@mock_s3
def test_s3_location_should_error_outside_useast1():
s3 = boto3.client("s3", region_name="eu-west-1")
bucket_name = "asdfasdfsdfdsfasda"
with assert_raises(ClientError) as e:
s3.create_bucket(Bucket=bucket_name)
e.exception.response["Error"]["Message"].should.equal(
"The unspecified location constraint is incompatible for the region specific endpoint this request was sent to."
)
@mock_s3_deprecated @mock_s3_deprecated
def test_ranged_get(): def test_ranged_get():
conn = boto.connect_s3() conn = boto.connect_s3()
@ -1222,7 +1254,7 @@ def test_key_with_trailing_slash_in_ordinary_calling_format():
@mock_s3 @mock_s3
def test_boto3_key_etag(): def test_boto3_key_etag():
s3 = boto3.client("s3", region_name="us-east-1") s3 = boto3.client("s3", region_name=DEFAULT_REGION_NAME)
s3.create_bucket(Bucket="mybucket") s3.create_bucket(Bucket="mybucket")
s3.put_object(Bucket="mybucket", Key="steve", Body=b"is awesome") s3.put_object(Bucket="mybucket", Key="steve", Body=b"is awesome")
resp = s3.get_object(Bucket="mybucket", Key="steve") resp = s3.get_object(Bucket="mybucket", Key="steve")
@ -1231,7 +1263,7 @@ def test_boto3_key_etag():
@mock_s3 @mock_s3
def test_website_redirect_location(): def test_website_redirect_location():
s3 = boto3.client("s3", region_name="us-east-1") s3 = boto3.client("s3", region_name=DEFAULT_REGION_NAME)
s3.create_bucket(Bucket="mybucket") s3.create_bucket(Bucket="mybucket")
s3.put_object(Bucket="mybucket", Key="steve", Body=b"is awesome") s3.put_object(Bucket="mybucket", Key="steve", Body=b"is awesome")
@ -1248,7 +1280,7 @@ def test_website_redirect_location():
@mock_s3 @mock_s3
def test_boto3_list_objects_truncated_response(): def test_boto3_list_objects_truncated_response():
s3 = boto3.client("s3", region_name="us-east-1") s3 = boto3.client("s3", region_name=DEFAULT_REGION_NAME)
s3.create_bucket(Bucket="mybucket") s3.create_bucket(Bucket="mybucket")
s3.put_object(Bucket="mybucket", Key="one", Body=b"1") s3.put_object(Bucket="mybucket", Key="one", Body=b"1")
s3.put_object(Bucket="mybucket", Key="two", Body=b"22") s3.put_object(Bucket="mybucket", Key="two", Body=b"22")
@ -1294,7 +1326,7 @@ def test_boto3_list_objects_truncated_response():
@mock_s3 @mock_s3
def test_boto3_list_keys_xml_escaped(): def test_boto3_list_keys_xml_escaped():
s3 = boto3.client("s3", region_name="us-east-1") s3 = boto3.client("s3", region_name=DEFAULT_REGION_NAME)
s3.create_bucket(Bucket="mybucket") s3.create_bucket(Bucket="mybucket")
key_name = "Q&A.txt" key_name = "Q&A.txt"
s3.put_object(Bucket="mybucket", Key=key_name, Body=b"is awesome") s3.put_object(Bucket="mybucket", Key=key_name, Body=b"is awesome")
@ -1314,7 +1346,7 @@ def test_boto3_list_keys_xml_escaped():
@mock_s3 @mock_s3
def test_boto3_list_objects_v2_common_prefix_pagination(): def test_boto3_list_objects_v2_common_prefix_pagination():
s3 = boto3.client("s3", region_name="us-east-1") s3 = boto3.client("s3", region_name=DEFAULT_REGION_NAME)
s3.create_bucket(Bucket="mybucket") s3.create_bucket(Bucket="mybucket")
max_keys = 1 max_keys = 1
@ -1343,7 +1375,7 @@ def test_boto3_list_objects_v2_common_prefix_pagination():
@mock_s3 @mock_s3
def test_boto3_list_objects_v2_truncated_response(): def test_boto3_list_objects_v2_truncated_response():
s3 = boto3.client("s3", region_name="us-east-1") s3 = boto3.client("s3", region_name=DEFAULT_REGION_NAME)
s3.create_bucket(Bucket="mybucket") s3.create_bucket(Bucket="mybucket")
s3.put_object(Bucket="mybucket", Key="one", Body=b"1") s3.put_object(Bucket="mybucket", Key="one", Body=b"1")
s3.put_object(Bucket="mybucket", Key="two", Body=b"22") s3.put_object(Bucket="mybucket", Key="two", Body=b"22")
@ -1400,7 +1432,7 @@ def test_boto3_list_objects_v2_truncated_response():
@mock_s3 @mock_s3
def test_boto3_list_objects_v2_truncated_response_start_after(): def test_boto3_list_objects_v2_truncated_response_start_after():
s3 = boto3.client("s3", region_name="us-east-1") s3 = boto3.client("s3", region_name=DEFAULT_REGION_NAME)
s3.create_bucket(Bucket="mybucket") s3.create_bucket(Bucket="mybucket")
s3.put_object(Bucket="mybucket", Key="one", Body=b"1") s3.put_object(Bucket="mybucket", Key="one", Body=b"1")
s3.put_object(Bucket="mybucket", Key="two", Body=b"22") s3.put_object(Bucket="mybucket", Key="two", Body=b"22")
@ -1442,7 +1474,7 @@ def test_boto3_list_objects_v2_truncated_response_start_after():
@mock_s3 @mock_s3
def test_boto3_list_objects_v2_fetch_owner(): def test_boto3_list_objects_v2_fetch_owner():
s3 = boto3.client("s3", region_name="us-east-1") s3 = boto3.client("s3", region_name=DEFAULT_REGION_NAME)
s3.create_bucket(Bucket="mybucket") s3.create_bucket(Bucket="mybucket")
s3.put_object(Bucket="mybucket", Key="one", Body=b"11") s3.put_object(Bucket="mybucket", Key="one", Body=b"11")
@ -1456,7 +1488,7 @@ def test_boto3_list_objects_v2_fetch_owner():
@mock_s3 @mock_s3
def test_boto3_list_objects_v2_truncate_combined_keys_and_folders(): def test_boto3_list_objects_v2_truncate_combined_keys_and_folders():
s3 = boto3.client("s3", region_name="us-east-1") s3 = boto3.client("s3", region_name=DEFAULT_REGION_NAME)
s3.create_bucket(Bucket="mybucket") s3.create_bucket(Bucket="mybucket")
s3.put_object(Bucket="mybucket", Key="1/2", Body="") s3.put_object(Bucket="mybucket", Key="1/2", Body="")
s3.put_object(Bucket="mybucket", Key="2", Body="") s3.put_object(Bucket="mybucket", Key="2", Body="")
@ -1486,7 +1518,7 @@ def test_boto3_list_objects_v2_truncate_combined_keys_and_folders():
@mock_s3 @mock_s3
def test_boto3_bucket_create(): def test_boto3_bucket_create():
s3 = boto3.resource("s3", region_name="us-east-1") s3 = boto3.resource("s3", region_name=DEFAULT_REGION_NAME)
s3.create_bucket(Bucket="blah") s3.create_bucket(Bucket="blah")
s3.Object("blah", "hello.txt").put(Body="some text") s3.Object("blah", "hello.txt").put(Body="some text")
@ -1511,10 +1543,10 @@ def test_bucket_create_duplicate():
@mock_s3 @mock_s3
def test_bucket_create_force_us_east_1(): def test_bucket_create_force_us_east_1():
s3 = boto3.resource("s3", region_name="us-east-1") s3 = boto3.resource("s3", region_name=DEFAULT_REGION_NAME)
with assert_raises(ClientError) as exc: with assert_raises(ClientError) as exc:
s3.create_bucket( s3.create_bucket(
Bucket="blah", CreateBucketConfiguration={"LocationConstraint": "us-east-1"} Bucket="blah", CreateBucketConfiguration={"LocationConstraint": DEFAULT_REGION_NAME}
) )
exc.exception.response["Error"]["Code"].should.equal("InvalidLocationConstraint") exc.exception.response["Error"]["Code"].should.equal("InvalidLocationConstraint")
@ -1522,7 +1554,9 @@ def test_bucket_create_force_us_east_1():
@mock_s3 @mock_s3
def test_boto3_bucket_create_eu_central(): def test_boto3_bucket_create_eu_central():
s3 = boto3.resource("s3", region_name="eu-central-1") s3 = boto3.resource("s3", region_name="eu-central-1")
s3.create_bucket(Bucket="blah") s3.create_bucket(
Bucket="blah", CreateBucketConfiguration={"LocationConstraint": "eu-central-1"}
)
s3.Object("blah", "hello.txt").put(Body="some text") s3.Object("blah", "hello.txt").put(Body="some text")
@ -1533,7 +1567,7 @@ def test_boto3_bucket_create_eu_central():
@mock_s3 @mock_s3
def test_boto3_head_object(): def test_boto3_head_object():
s3 = boto3.resource("s3", region_name="us-east-1") s3 = boto3.resource("s3", region_name=DEFAULT_REGION_NAME)
s3.create_bucket(Bucket="blah") s3.create_bucket(Bucket="blah")
s3.Object("blah", "hello.txt").put(Body="some text") s3.Object("blah", "hello.txt").put(Body="some text")
@ -1551,7 +1585,7 @@ def test_boto3_head_object():
@mock_s3 @mock_s3
def test_boto3_bucket_deletion(): def test_boto3_bucket_deletion():
cli = boto3.client("s3", region_name="us-east-1") cli = boto3.client("s3", region_name=DEFAULT_REGION_NAME)
cli.create_bucket(Bucket="foobar") cli.create_bucket(Bucket="foobar")
cli.put_object(Bucket="foobar", Key="the-key", Body="some value") cli.put_object(Bucket="foobar", Key="the-key", Body="some value")
@ -1582,7 +1616,7 @@ def test_boto3_bucket_deletion():
@mock_s3 @mock_s3
def test_boto3_get_object(): def test_boto3_get_object():
s3 = boto3.resource("s3", region_name="us-east-1") s3 = boto3.resource("s3", region_name=DEFAULT_REGION_NAME)
s3.create_bucket(Bucket="blah") s3.create_bucket(Bucket="blah")
s3.Object("blah", "hello.txt").put(Body="some text") s3.Object("blah", "hello.txt").put(Body="some text")
@ -1599,7 +1633,7 @@ def test_boto3_get_object():
@mock_s3 @mock_s3
def test_boto3_get_missing_object_with_part_number(): def test_boto3_get_missing_object_with_part_number():
s3 = boto3.resource("s3", region_name="us-east-1") s3 = boto3.resource("s3", region_name=DEFAULT_REGION_NAME)
s3.create_bucket(Bucket="blah") s3.create_bucket(Bucket="blah")
with assert_raises(ClientError) as e: with assert_raises(ClientError) as e:
@ -1612,7 +1646,7 @@ def test_boto3_get_missing_object_with_part_number():
@mock_s3 @mock_s3
def test_boto3_head_object_with_versioning(): def test_boto3_head_object_with_versioning():
s3 = boto3.resource("s3", region_name="us-east-1") s3 = boto3.resource("s3", region_name=DEFAULT_REGION_NAME)
bucket = s3.create_bucket(Bucket="blah") bucket = s3.create_bucket(Bucket="blah")
bucket.Versioning().enable() bucket.Versioning().enable()
@ -1642,7 +1676,7 @@ def test_boto3_head_object_with_versioning():
@mock_s3 @mock_s3
def test_boto3_copy_object_with_versioning(): def test_boto3_copy_object_with_versioning():
client = boto3.client("s3", region_name="us-east-1") client = boto3.client("s3", region_name=DEFAULT_REGION_NAME)
client.create_bucket( client.create_bucket(
Bucket="blah", CreateBucketConfiguration={"LocationConstraint": "eu-west-1"} Bucket="blah", CreateBucketConfiguration={"LocationConstraint": "eu-west-1"}
@ -1706,7 +1740,7 @@ def test_boto3_copy_object_with_versioning():
@mock_s3 @mock_s3
def test_boto3_copy_object_from_unversioned_to_versioned_bucket(): def test_boto3_copy_object_from_unversioned_to_versioned_bucket():
client = boto3.client("s3", region_name="us-east-1") client = boto3.client("s3", region_name=DEFAULT_REGION_NAME)
client.create_bucket( client.create_bucket(
Bucket="src", CreateBucketConfiguration={"LocationConstraint": "eu-west-1"} Bucket="src", CreateBucketConfiguration={"LocationConstraint": "eu-west-1"}
@ -1730,7 +1764,7 @@ def test_boto3_copy_object_from_unversioned_to_versioned_bucket():
@mock_s3 @mock_s3
def test_boto3_deleted_versionings_list(): def test_boto3_deleted_versionings_list():
client = boto3.client("s3", region_name="us-east-1") client = boto3.client("s3", region_name=DEFAULT_REGION_NAME)
client.create_bucket(Bucket="blah") client.create_bucket(Bucket="blah")
client.put_bucket_versioning( client.put_bucket_versioning(
@ -1747,7 +1781,7 @@ def test_boto3_deleted_versionings_list():
@mock_s3 @mock_s3
def test_boto3_delete_versioned_bucket(): def test_boto3_delete_versioned_bucket():
client = boto3.client("s3", region_name="us-east-1") client = boto3.client("s3", region_name=DEFAULT_REGION_NAME)
client.create_bucket(Bucket="blah") client.create_bucket(Bucket="blah")
client.put_bucket_versioning( client.put_bucket_versioning(
@ -1762,7 +1796,7 @@ def test_boto3_delete_versioned_bucket():
@mock_s3 @mock_s3
def test_boto3_get_object_if_modified_since(): def test_boto3_get_object_if_modified_since():
s3 = boto3.client("s3", region_name="us-east-1") s3 = boto3.client("s3", region_name=DEFAULT_REGION_NAME)
bucket_name = "blah" bucket_name = "blah"
s3.create_bucket(Bucket=bucket_name) s3.create_bucket(Bucket=bucket_name)
@ -1782,7 +1816,7 @@ def test_boto3_get_object_if_modified_since():
@mock_s3 @mock_s3
def test_boto3_head_object_if_modified_since(): def test_boto3_head_object_if_modified_since():
s3 = boto3.client("s3", region_name="us-east-1") s3 = boto3.client("s3", region_name=DEFAULT_REGION_NAME)
bucket_name = "blah" bucket_name = "blah"
s3.create_bucket(Bucket=bucket_name) s3.create_bucket(Bucket=bucket_name)
@ -1804,7 +1838,7 @@ def test_boto3_head_object_if_modified_since():
@reduced_min_part_size @reduced_min_part_size
def test_boto3_multipart_etag(): def test_boto3_multipart_etag():
# Create Bucket so that test can run # Create Bucket so that test can run
s3 = boto3.client("s3", region_name="us-east-1") s3 = boto3.client("s3", region_name=DEFAULT_REGION_NAME)
s3.create_bucket(Bucket="mybucket") s3.create_bucket(Bucket="mybucket")
upload_id = s3.create_multipart_upload(Bucket="mybucket", Key="the-key")["UploadId"] upload_id = s3.create_multipart_upload(Bucket="mybucket", Key="the-key")["UploadId"]
@ -1848,7 +1882,7 @@ def test_boto3_multipart_etag():
@mock_s3 @mock_s3
@reduced_min_part_size @reduced_min_part_size
def test_boto3_multipart_part_size(): def test_boto3_multipart_part_size():
s3 = boto3.client("s3", region_name="us-east-1") s3 = boto3.client("s3", region_name=DEFAULT_REGION_NAME)
s3.create_bucket(Bucket="mybucket") s3.create_bucket(Bucket="mybucket")
mpu = s3.create_multipart_upload(Bucket="mybucket", Key="the-key") mpu = s3.create_multipart_upload(Bucket="mybucket", Key="the-key")
@ -1883,7 +1917,7 @@ def test_boto3_multipart_part_size():
@mock_s3 @mock_s3
def test_boto3_put_object_with_tagging(): def test_boto3_put_object_with_tagging():
s3 = boto3.client("s3", region_name="us-east-1") s3 = boto3.client("s3", region_name=DEFAULT_REGION_NAME)
bucket_name = "mybucket" bucket_name = "mybucket"
key = "key-with-tags" key = "key-with-tags"
s3.create_bucket(Bucket=bucket_name) s3.create_bucket(Bucket=bucket_name)
@ -1897,7 +1931,7 @@ def test_boto3_put_object_with_tagging():
@mock_s3 @mock_s3
def test_boto3_put_bucket_tagging(): def test_boto3_put_bucket_tagging():
s3 = boto3.client("s3", region_name="us-east-1") s3 = boto3.client("s3", region_name=DEFAULT_REGION_NAME)
bucket_name = "mybucket" bucket_name = "mybucket"
s3.create_bucket(Bucket=bucket_name) s3.create_bucket(Bucket=bucket_name)
@ -1944,7 +1978,7 @@ def test_boto3_put_bucket_tagging():
@mock_s3 @mock_s3
def test_boto3_get_bucket_tagging(): def test_boto3_get_bucket_tagging():
s3 = boto3.client("s3", region_name="us-east-1") s3 = boto3.client("s3", region_name=DEFAULT_REGION_NAME)
bucket_name = "mybucket" bucket_name = "mybucket"
s3.create_bucket(Bucket=bucket_name) s3.create_bucket(Bucket=bucket_name)
s3.put_bucket_tagging( s3.put_bucket_tagging(
@ -1975,7 +2009,7 @@ def test_boto3_get_bucket_tagging():
@mock_s3 @mock_s3
def test_boto3_delete_bucket_tagging(): def test_boto3_delete_bucket_tagging():
s3 = boto3.client("s3", region_name="us-east-1") s3 = boto3.client("s3", region_name=DEFAULT_REGION_NAME)
bucket_name = "mybucket" bucket_name = "mybucket"
s3.create_bucket(Bucket=bucket_name) s3.create_bucket(Bucket=bucket_name)
@ -2002,7 +2036,7 @@ def test_boto3_delete_bucket_tagging():
@mock_s3 @mock_s3
def test_boto3_put_bucket_cors(): def test_boto3_put_bucket_cors():
s3 = boto3.client("s3", region_name="us-east-1") s3 = boto3.client("s3", region_name=DEFAULT_REGION_NAME)
bucket_name = "mybucket" bucket_name = "mybucket"
s3.create_bucket(Bucket=bucket_name) s3.create_bucket(Bucket=bucket_name)
@ -2062,7 +2096,7 @@ def test_boto3_put_bucket_cors():
@mock_s3 @mock_s3
def test_boto3_get_bucket_cors(): def test_boto3_get_bucket_cors():
s3 = boto3.client("s3", region_name="us-east-1") s3 = boto3.client("s3", region_name=DEFAULT_REGION_NAME)
bucket_name = "mybucket" bucket_name = "mybucket"
s3.create_bucket(Bucket=bucket_name) s3.create_bucket(Bucket=bucket_name)
@ -2103,7 +2137,7 @@ def test_boto3_get_bucket_cors():
@mock_s3 @mock_s3
def test_boto3_delete_bucket_cors(): def test_boto3_delete_bucket_cors():
s3 = boto3.client("s3", region_name="us-east-1") s3 = boto3.client("s3", region_name=DEFAULT_REGION_NAME)
bucket_name = "mybucket" bucket_name = "mybucket"
s3.create_bucket(Bucket=bucket_name) s3.create_bucket(Bucket=bucket_name)
s3.put_bucket_cors( s3.put_bucket_cors(
@ -2127,7 +2161,7 @@ def test_boto3_delete_bucket_cors():
@mock_s3 @mock_s3
def test_put_bucket_acl_body(): def test_put_bucket_acl_body():
s3 = boto3.client("s3", region_name="us-east-1") s3 = boto3.client("s3", region_name=DEFAULT_REGION_NAME)
s3.create_bucket(Bucket="bucket") s3.create_bucket(Bucket="bucket")
bucket_owner = s3.get_bucket_acl(Bucket="bucket")["Owner"] bucket_owner = s3.get_bucket_acl(Bucket="bucket")["Owner"]
s3.put_bucket_acl( s3.put_bucket_acl(
@ -2225,7 +2259,7 @@ def test_put_bucket_acl_body():
@mock_s3 @mock_s3
def test_put_bucket_notification(): def test_put_bucket_notification():
s3 = boto3.client("s3", region_name="us-east-1") s3 = boto3.client("s3", region_name=DEFAULT_REGION_NAME)
s3.create_bucket(Bucket="bucket") s3.create_bucket(Bucket="bucket")
# With no configuration: # With no configuration:
@ -2421,7 +2455,7 @@ def test_put_bucket_notification():
@mock_s3 @mock_s3
def test_put_bucket_notification_errors(): def test_put_bucket_notification_errors():
s3 = boto3.client("s3", region_name="us-east-1") s3 = boto3.client("s3", region_name=DEFAULT_REGION_NAME)
s3.create_bucket(Bucket="bucket") s3.create_bucket(Bucket="bucket")
# With incorrect ARNs: # With incorrect ARNs:
@ -2488,7 +2522,7 @@ def test_put_bucket_notification_errors():
@mock_s3 @mock_s3
def test_boto3_put_bucket_logging(): def test_boto3_put_bucket_logging():
s3 = boto3.client("s3", region_name="us-east-1") s3 = boto3.client("s3", region_name=DEFAULT_REGION_NAME)
bucket_name = "mybucket" bucket_name = "mybucket"
log_bucket = "logbucket" log_bucket = "logbucket"
wrong_region_bucket = "wrongregionlogbucket" wrong_region_bucket = "wrongregionlogbucket"
@ -2667,7 +2701,7 @@ def test_boto3_put_bucket_logging():
@mock_s3 @mock_s3
def test_boto3_put_object_tagging(): def test_boto3_put_object_tagging():
s3 = boto3.client("s3", region_name="us-east-1") s3 = boto3.client("s3", region_name=DEFAULT_REGION_NAME)
bucket_name = "mybucket" bucket_name = "mybucket"
key = "key-with-tags" key = "key-with-tags"
s3.create_bucket(Bucket=bucket_name) s3.create_bucket(Bucket=bucket_name)
@ -2711,7 +2745,7 @@ def test_boto3_put_object_tagging():
@mock_s3 @mock_s3
def test_boto3_put_object_tagging_on_earliest_version(): def test_boto3_put_object_tagging_on_earliest_version():
s3 = boto3.client("s3", region_name="us-east-1") s3 = boto3.client("s3", region_name=DEFAULT_REGION_NAME)
bucket_name = "mybucket" bucket_name = "mybucket"
key = "key-with-tags" key = "key-with-tags"
s3.create_bucket(Bucket=bucket_name) s3.create_bucket(Bucket=bucket_name)
@ -2778,7 +2812,7 @@ def test_boto3_put_object_tagging_on_earliest_version():
@mock_s3 @mock_s3
def test_boto3_put_object_tagging_on_both_version(): def test_boto3_put_object_tagging_on_both_version():
s3 = boto3.client("s3", region_name="us-east-1") s3 = boto3.client("s3", region_name=DEFAULT_REGION_NAME)
bucket_name = "mybucket" bucket_name = "mybucket"
key = "key-with-tags" key = "key-with-tags"
s3.create_bucket(Bucket=bucket_name) s3.create_bucket(Bucket=bucket_name)
@ -2858,7 +2892,7 @@ def test_boto3_put_object_tagging_on_both_version():
@mock_s3 @mock_s3
def test_boto3_put_object_tagging_with_single_tag(): def test_boto3_put_object_tagging_with_single_tag():
s3 = boto3.client("s3", region_name="us-east-1") s3 = boto3.client("s3", region_name=DEFAULT_REGION_NAME)
bucket_name = "mybucket" bucket_name = "mybucket"
key = "key-with-tags" key = "key-with-tags"
s3.create_bucket(Bucket=bucket_name) s3.create_bucket(Bucket=bucket_name)
@ -2876,7 +2910,7 @@ def test_boto3_put_object_tagging_with_single_tag():
@mock_s3 @mock_s3
def test_boto3_get_object_tagging(): def test_boto3_get_object_tagging():
s3 = boto3.client("s3", region_name="us-east-1") s3 = boto3.client("s3", region_name=DEFAULT_REGION_NAME)
bucket_name = "mybucket" bucket_name = "mybucket"
key = "key-with-tags" key = "key-with-tags"
s3.create_bucket(Bucket=bucket_name) s3.create_bucket(Bucket=bucket_name)
@ -2905,7 +2939,7 @@ def test_boto3_get_object_tagging():
@mock_s3 @mock_s3
def test_boto3_list_object_versions(): def test_boto3_list_object_versions():
s3 = boto3.client("s3", region_name="us-east-1") s3 = boto3.client("s3", region_name=DEFAULT_REGION_NAME)
bucket_name = "mybucket" bucket_name = "mybucket"
key = "key-with-versions" key = "key-with-versions"
s3.create_bucket(Bucket=bucket_name) s3.create_bucket(Bucket=bucket_name)
@ -2927,7 +2961,7 @@ def test_boto3_list_object_versions():
@mock_s3 @mock_s3
def test_boto3_list_object_versions_with_versioning_disabled(): def test_boto3_list_object_versions_with_versioning_disabled():
s3 = boto3.client("s3", region_name="us-east-1") s3 = boto3.client("s3", region_name=DEFAULT_REGION_NAME)
bucket_name = "mybucket" bucket_name = "mybucket"
key = "key-with-versions" key = "key-with-versions"
s3.create_bucket(Bucket=bucket_name) s3.create_bucket(Bucket=bucket_name)
@ -2950,7 +2984,7 @@ def test_boto3_list_object_versions_with_versioning_disabled():
@mock_s3 @mock_s3
def test_boto3_list_object_versions_with_versioning_enabled_late(): def test_boto3_list_object_versions_with_versioning_enabled_late():
s3 = boto3.client("s3", region_name="us-east-1") s3 = boto3.client("s3", region_name=DEFAULT_REGION_NAME)
bucket_name = "mybucket" bucket_name = "mybucket"
key = "key-with-versions" key = "key-with-versions"
s3.create_bucket(Bucket=bucket_name) s3.create_bucket(Bucket=bucket_name)
@ -2978,7 +3012,7 @@ def test_boto3_list_object_versions_with_versioning_enabled_late():
@mock_s3 @mock_s3
def test_boto3_bad_prefix_list_object_versions(): def test_boto3_bad_prefix_list_object_versions():
s3 = boto3.client("s3", region_name="us-east-1") s3 = boto3.client("s3", region_name=DEFAULT_REGION_NAME)
bucket_name = "mybucket" bucket_name = "mybucket"
key = "key-with-versions" key = "key-with-versions"
bad_prefix = "key-that-does-not-exist" bad_prefix = "key-that-does-not-exist"
@ -2997,7 +3031,7 @@ def test_boto3_bad_prefix_list_object_versions():
@mock_s3 @mock_s3
def test_boto3_delete_markers(): def test_boto3_delete_markers():
s3 = boto3.client("s3", region_name="us-east-1") s3 = boto3.client("s3", region_name=DEFAULT_REGION_NAME)
bucket_name = "mybucket" bucket_name = "mybucket"
key = "key-with-versions-and-unicode-ó" key = "key-with-versions-and-unicode-ó"
s3.create_bucket(Bucket=bucket_name) s3.create_bucket(Bucket=bucket_name)
@ -3040,7 +3074,7 @@ def test_boto3_delete_markers():
@mock_s3 @mock_s3
def test_boto3_multiple_delete_markers(): def test_boto3_multiple_delete_markers():
s3 = boto3.client("s3", region_name="us-east-1") s3 = boto3.client("s3", region_name=DEFAULT_REGION_NAME)
bucket_name = "mybucket" bucket_name = "mybucket"
key = "key-with-versions-and-unicode-ó" key = "key-with-versions-and-unicode-ó"
s3.create_bucket(Bucket=bucket_name) s3.create_bucket(Bucket=bucket_name)
@ -3091,7 +3125,7 @@ def test_boto3_multiple_delete_markers():
def test_get_stream_gzipped(): def test_get_stream_gzipped():
payload = b"this is some stuff here" payload = b"this is some stuff here"
s3_client = boto3.client("s3", region_name="us-east-1") s3_client = boto3.client("s3", region_name=DEFAULT_REGION_NAME)
s3_client.create_bucket(Bucket="moto-tests") s3_client.create_bucket(Bucket="moto-tests")
buffer_ = BytesIO() buffer_ = BytesIO()
with GzipFile(fileobj=buffer_, mode="w") as f: with GzipFile(fileobj=buffer_, mode="w") as f:
@ -3129,7 +3163,7 @@ TEST_XML = """\
@mock_s3 @mock_s3
def test_boto3_bucket_name_too_long(): def test_boto3_bucket_name_too_long():
s3 = boto3.client("s3", region_name="us-east-1") s3 = boto3.client("s3", region_name=DEFAULT_REGION_NAME)
with assert_raises(ClientError) as exc: with assert_raises(ClientError) as exc:
s3.create_bucket(Bucket="x" * 64) s3.create_bucket(Bucket="x" * 64)
exc.exception.response["Error"]["Code"].should.equal("InvalidBucketName") exc.exception.response["Error"]["Code"].should.equal("InvalidBucketName")
@ -3137,7 +3171,7 @@ def test_boto3_bucket_name_too_long():
@mock_s3 @mock_s3
def test_boto3_bucket_name_too_short(): def test_boto3_bucket_name_too_short():
s3 = boto3.client("s3", region_name="us-east-1") s3 = boto3.client("s3", region_name=DEFAULT_REGION_NAME)
with assert_raises(ClientError) as exc: with assert_raises(ClientError) as exc:
s3.create_bucket(Bucket="x" * 2) s3.create_bucket(Bucket="x" * 2)
exc.exception.response["Error"]["Code"].should.equal("InvalidBucketName") exc.exception.response["Error"]["Code"].should.equal("InvalidBucketName")
@ -3146,7 +3180,7 @@ def test_boto3_bucket_name_too_short():
@mock_s3 @mock_s3
def test_accelerated_none_when_unspecified(): def test_accelerated_none_when_unspecified():
bucket_name = "some_bucket" bucket_name = "some_bucket"
s3 = boto3.client("s3") s3 = boto3.client("s3", region_name=DEFAULT_REGION_NAME)
s3.create_bucket(Bucket=bucket_name) s3.create_bucket(Bucket=bucket_name)
resp = s3.get_bucket_accelerate_configuration(Bucket=bucket_name) resp = s3.get_bucket_accelerate_configuration(Bucket=bucket_name)
resp.shouldnt.have.key("Status") resp.shouldnt.have.key("Status")
@ -3155,7 +3189,7 @@ def test_accelerated_none_when_unspecified():
@mock_s3 @mock_s3
def test_can_enable_bucket_acceleration(): def test_can_enable_bucket_acceleration():
bucket_name = "some_bucket" bucket_name = "some_bucket"
s3 = boto3.client("s3") s3 = boto3.client("s3", region_name=DEFAULT_REGION_NAME)
s3.create_bucket(Bucket=bucket_name) s3.create_bucket(Bucket=bucket_name)
resp = s3.put_bucket_accelerate_configuration( resp = s3.put_bucket_accelerate_configuration(
Bucket=bucket_name, AccelerateConfiguration={"Status": "Enabled"} Bucket=bucket_name, AccelerateConfiguration={"Status": "Enabled"}
@ -3171,7 +3205,7 @@ def test_can_enable_bucket_acceleration():
@mock_s3 @mock_s3
def test_can_suspend_bucket_acceleration(): def test_can_suspend_bucket_acceleration():
bucket_name = "some_bucket" bucket_name = "some_bucket"
s3 = boto3.client("s3") s3 = boto3.client("s3", region_name=DEFAULT_REGION_NAME)
s3.create_bucket(Bucket=bucket_name) s3.create_bucket(Bucket=bucket_name)
resp = s3.put_bucket_accelerate_configuration( resp = s3.put_bucket_accelerate_configuration(
Bucket=bucket_name, AccelerateConfiguration={"Status": "Enabled"} Bucket=bucket_name, AccelerateConfiguration={"Status": "Enabled"}
@ -3191,7 +3225,10 @@ def test_can_suspend_bucket_acceleration():
def test_suspending_acceleration_on_not_configured_bucket_does_nothing(): def test_suspending_acceleration_on_not_configured_bucket_does_nothing():
bucket_name = "some_bucket" bucket_name = "some_bucket"
s3 = boto3.client("s3") s3 = boto3.client("s3")
s3.create_bucket(Bucket=bucket_name) s3.create_bucket(
Bucket=bucket_name,
CreateBucketConfiguration={"LocationConstraint": "us-west-1"},
)
resp = s3.put_bucket_accelerate_configuration( resp = s3.put_bucket_accelerate_configuration(
Bucket=bucket_name, AccelerateConfiguration={"Status": "Suspended"} Bucket=bucket_name, AccelerateConfiguration={"Status": "Suspended"}
) )
@ -3205,7 +3242,7 @@ def test_suspending_acceleration_on_not_configured_bucket_does_nothing():
@mock_s3 @mock_s3
def test_accelerate_configuration_status_validation(): def test_accelerate_configuration_status_validation():
bucket_name = "some_bucket" bucket_name = "some_bucket"
s3 = boto3.client("s3") s3 = boto3.client("s3", region_name=DEFAULT_REGION_NAME)
s3.create_bucket(Bucket=bucket_name) s3.create_bucket(Bucket=bucket_name)
with assert_raises(ClientError) as exc: with assert_raises(ClientError) as exc:
s3.put_bucket_accelerate_configuration( s3.put_bucket_accelerate_configuration(
@ -3217,7 +3254,7 @@ def test_accelerate_configuration_status_validation():
@mock_s3 @mock_s3
def test_accelerate_configuration_is_not_supported_when_bucket_name_has_dots(): def test_accelerate_configuration_is_not_supported_when_bucket_name_has_dots():
bucket_name = "some.bucket.with.dots" bucket_name = "some.bucket.with.dots"
s3 = boto3.client("s3") s3 = boto3.client("s3", region_name=DEFAULT_REGION_NAME)
s3.create_bucket(Bucket=bucket_name) s3.create_bucket(Bucket=bucket_name)
with assert_raises(ClientError) as exc: with assert_raises(ClientError) as exc:
s3.put_bucket_accelerate_configuration( s3.put_bucket_accelerate_configuration(
@ -3227,7 +3264,7 @@ def test_accelerate_configuration_is_not_supported_when_bucket_name_has_dots():
def store_and_read_back_a_key(key): def store_and_read_back_a_key(key):
s3 = boto3.client("s3", region_name="us-east-1") s3 = boto3.client("s3", region_name=DEFAULT_REGION_NAME)
bucket_name = "mybucket" bucket_name = "mybucket"
body = b"Some body" body = b"Some body"
@ -3255,7 +3292,7 @@ def test_root_dir_with_empty_name_works():
) )
@mock_s3 @mock_s3
def test_delete_objects_with_url_encoded_key(key): def test_delete_objects_with_url_encoded_key(key):
s3 = boto3.client("s3", region_name="us-east-1") s3 = boto3.client("s3", region_name=DEFAULT_REGION_NAME)
bucket_name = "mybucket" bucket_name = "mybucket"
body = b"Some body" body = b"Some body"
@ -3282,7 +3319,7 @@ def test_delete_objects_with_url_encoded_key(key):
@mock_s3 @mock_s3
@mock_config @mock_config
def test_public_access_block(): def test_public_access_block():
client = boto3.client("s3") client = boto3.client("s3", region_name=DEFAULT_REGION_NAME)
client.create_bucket(Bucket="mybucket") client.create_bucket(Bucket="mybucket")
# Try to get the public access block (should not exist by default) # Try to get the public access block (should not exist by default)
@ -3349,7 +3386,7 @@ def test_public_access_block():
assert ce.exception.response["ResponseMetadata"]["HTTPStatusCode"] == 400 assert ce.exception.response["ResponseMetadata"]["HTTPStatusCode"] == 400
# Test that things work with AWS Config: # Test that things work with AWS Config:
config_client = boto3.client("config", region_name="us-east-1") config_client = boto3.client("config", region_name=DEFAULT_REGION_NAME)
result = config_client.get_resource_config_history( result = config_client.get_resource_config_history(
resourceType="AWS::S3::Bucket", resourceId="mybucket" resourceType="AWS::S3::Bucket", resourceId="mybucket"
) )

View File

@ -16,7 +16,7 @@ from moto import mock_s3_deprecated, mock_s3
@mock_s3_deprecated @mock_s3_deprecated
def test_lifecycle_create(): def test_lifecycle_create():
conn = boto.s3.connect_to_region("us-west-1") conn = boto.s3.connect_to_region("us-west-1")
bucket = conn.create_bucket("foobar") bucket = conn.create_bucket("foobar", location="us-west-1")
lifecycle = Lifecycle() lifecycle = Lifecycle()
lifecycle.add_rule("myid", "", "Enabled", 30) lifecycle.add_rule("myid", "", "Enabled", 30)
@ -33,7 +33,9 @@ def test_lifecycle_create():
@mock_s3 @mock_s3
def test_lifecycle_with_filters(): def test_lifecycle_with_filters():
client = boto3.client("s3") client = boto3.client("s3")
client.create_bucket(Bucket="bucket") client.create_bucket(
Bucket="bucket", CreateBucketConfiguration={"LocationConstraint": "us-west-1"}
)
# Create a lifecycle rule with a Filter (no tags): # Create a lifecycle rule with a Filter (no tags):
lfc = { lfc = {
@ -245,7 +247,9 @@ def test_lifecycle_with_filters():
@mock_s3 @mock_s3
def test_lifecycle_with_eodm(): def test_lifecycle_with_eodm():
client = boto3.client("s3") client = boto3.client("s3")
client.create_bucket(Bucket="bucket") client.create_bucket(
Bucket="bucket", CreateBucketConfiguration={"LocationConstraint": "us-west-1"}
)
lfc = { lfc = {
"Rules": [ "Rules": [
@ -293,7 +297,9 @@ def test_lifecycle_with_eodm():
@mock_s3 @mock_s3
def test_lifecycle_with_nve(): def test_lifecycle_with_nve():
client = boto3.client("s3") client = boto3.client("s3")
client.create_bucket(Bucket="bucket") client.create_bucket(
Bucket="bucket", CreateBucketConfiguration={"LocationConstraint": "us-west-1"}
)
lfc = { lfc = {
"Rules": [ "Rules": [
@ -327,7 +333,9 @@ def test_lifecycle_with_nve():
@mock_s3 @mock_s3
def test_lifecycle_with_nvt(): def test_lifecycle_with_nvt():
client = boto3.client("s3") client = boto3.client("s3")
client.create_bucket(Bucket="bucket") client.create_bucket(
Bucket="bucket", CreateBucketConfiguration={"LocationConstraint": "us-west-1"}
)
lfc = { lfc = {
"Rules": [ "Rules": [
@ -393,7 +401,9 @@ def test_lifecycle_with_nvt():
@mock_s3 @mock_s3
def test_lifecycle_with_aimu(): def test_lifecycle_with_aimu():
client = boto3.client("s3") client = boto3.client("s3")
client.create_bucket(Bucket="bucket") client.create_bucket(
Bucket="bucket", CreateBucketConfiguration={"LocationConstraint": "us-west-1"}
)
lfc = { lfc = {
"Rules": [ "Rules": [
@ -432,7 +442,7 @@ def test_lifecycle_with_aimu():
@mock_s3_deprecated @mock_s3_deprecated
def test_lifecycle_with_glacier_transition(): def test_lifecycle_with_glacier_transition():
conn = boto.s3.connect_to_region("us-west-1") conn = boto.s3.connect_to_region("us-west-1")
bucket = conn.create_bucket("foobar") bucket = conn.create_bucket("foobar", location="us-west-1")
lifecycle = Lifecycle() lifecycle = Lifecycle()
transition = Transition(days=30, storage_class="GLACIER") transition = Transition(days=30, storage_class="GLACIER")
@ -451,7 +461,7 @@ def test_lifecycle_with_glacier_transition():
@mock_s3_deprecated @mock_s3_deprecated
def test_lifecycle_multi(): def test_lifecycle_multi():
conn = boto.s3.connect_to_region("us-west-1") conn = boto.s3.connect_to_region("us-west-1")
bucket = conn.create_bucket("foobar") bucket = conn.create_bucket("foobar", location="us-west-1")
date = "2022-10-12T00:00:00.000Z" date = "2022-10-12T00:00:00.000Z"
sc = "GLACIER" sc = "GLACIER"
@ -493,7 +503,7 @@ def test_lifecycle_multi():
@mock_s3_deprecated @mock_s3_deprecated
def test_lifecycle_delete(): def test_lifecycle_delete():
conn = boto.s3.connect_to_region("us-west-1") conn = boto.s3.connect_to_region("us-west-1")
bucket = conn.create_bucket("foobar") bucket = conn.create_bucket("foobar", location="us-west-1")
lifecycle = Lifecycle() lifecycle = Lifecycle()
lifecycle.add_rule(expiration=30) lifecycle.add_rule(expiration=30)

View File

@ -11,7 +11,7 @@ from moto import mock_s3
@mock_s3 @mock_s3
def test_s3_storage_class_standard(): def test_s3_storage_class_standard():
s3 = boto3.client("s3") s3 = boto3.client("s3", region_name="us-east-1")
s3.create_bucket(Bucket="Bucket") s3.create_bucket(Bucket="Bucket")
# add an object to the bucket with standard storage # add an object to the bucket with standard storage
@ -26,7 +26,9 @@ def test_s3_storage_class_standard():
@mock_s3 @mock_s3
def test_s3_storage_class_infrequent_access(): def test_s3_storage_class_infrequent_access():
s3 = boto3.client("s3") s3 = boto3.client("s3")
s3.create_bucket(Bucket="Bucket") s3.create_bucket(
Bucket="Bucket", CreateBucketConfiguration={"LocationConstraint": "us-west-2"}
)
# add an object to the bucket with standard storage # add an object to the bucket with standard storage
@ -46,7 +48,9 @@ def test_s3_storage_class_infrequent_access():
def test_s3_storage_class_intelligent_tiering(): def test_s3_storage_class_intelligent_tiering():
s3 = boto3.client("s3") s3 = boto3.client("s3")
s3.create_bucket(Bucket="Bucket") s3.create_bucket(
Bucket="Bucket", CreateBucketConfiguration={"LocationConstraint": "us-east-2"}
)
s3.put_object( s3.put_object(
Bucket="Bucket", Bucket="Bucket",
Key="my_key_infrequent", Key="my_key_infrequent",
@ -61,7 +65,7 @@ def test_s3_storage_class_intelligent_tiering():
@mock_s3 @mock_s3
def test_s3_storage_class_copy(): def test_s3_storage_class_copy():
s3 = boto3.client("s3") s3 = boto3.client("s3", region_name="us-east-1")
s3.create_bucket(Bucket="Bucket") s3.create_bucket(Bucket="Bucket")
s3.put_object( s3.put_object(
Bucket="Bucket", Key="First_Object", Body="Body", StorageClass="STANDARD" Bucket="Bucket", Key="First_Object", Body="Body", StorageClass="STANDARD"
@ -86,7 +90,7 @@ def test_s3_storage_class_copy():
@mock_s3 @mock_s3
def test_s3_invalid_copied_storage_class(): def test_s3_invalid_copied_storage_class():
s3 = boto3.client("s3") s3 = boto3.client("s3", region_name="us-east-1")
s3.create_bucket(Bucket="Bucket") s3.create_bucket(Bucket="Bucket")
s3.put_object( s3.put_object(
Bucket="Bucket", Key="First_Object", Body="Body", StorageClass="STANDARD" Bucket="Bucket", Key="First_Object", Body="Body", StorageClass="STANDARD"
@ -119,7 +123,9 @@ def test_s3_invalid_copied_storage_class():
@mock_s3 @mock_s3
def test_s3_invalid_storage_class(): def test_s3_invalid_storage_class():
s3 = boto3.client("s3") s3 = boto3.client("s3")
s3.create_bucket(Bucket="Bucket") s3.create_bucket(
Bucket="Bucket", CreateBucketConfiguration={"LocationConstraint": "us-west-1"}
)
# Try to add an object with an invalid storage class # Try to add an object with an invalid storage class
with assert_raises(ClientError) as err: with assert_raises(ClientError) as err:
@ -137,7 +143,9 @@ def test_s3_invalid_storage_class():
@mock_s3 @mock_s3
def test_s3_default_storage_class(): def test_s3_default_storage_class():
s3 = boto3.client("s3") s3 = boto3.client("s3")
s3.create_bucket(Bucket="Bucket") s3.create_bucket(
Bucket="Bucket", CreateBucketConfiguration={"LocationConstraint": "us-west-1"}
)
s3.put_object(Bucket="Bucket", Key="First_Object", Body="Body") s3.put_object(Bucket="Bucket", Key="First_Object", Body="Body")
@ -150,7 +158,9 @@ def test_s3_default_storage_class():
@mock_s3 @mock_s3
def test_s3_copy_object_error_for_glacier_storage_class(): def test_s3_copy_object_error_for_glacier_storage_class():
s3 = boto3.client("s3") s3 = boto3.client("s3")
s3.create_bucket(Bucket="Bucket") s3.create_bucket(
Bucket="Bucket", CreateBucketConfiguration={"LocationConstraint": "us-west-1"}
)
s3.put_object( s3.put_object(
Bucket="Bucket", Key="First_Object", Body="Body", StorageClass="GLACIER" Bucket="Bucket", Key="First_Object", Body="Body", StorageClass="GLACIER"
@ -169,7 +179,9 @@ def test_s3_copy_object_error_for_glacier_storage_class():
@mock_s3 @mock_s3
def test_s3_copy_object_error_for_deep_archive_storage_class(): def test_s3_copy_object_error_for_deep_archive_storage_class():
s3 = boto3.client("s3") s3 = boto3.client("s3")
s3.create_bucket(Bucket="Bucket") s3.create_bucket(
Bucket="Bucket", CreateBucketConfiguration={"LocationConstraint": "us-west-1"}
)
s3.put_object( s3.put_object(
Bucket="Bucket", Key="First_Object", Body="Body", StorageClass="DEEP_ARCHIVE" Bucket="Bucket", Key="First_Object", Body="Body", StorageClass="DEEP_ARCHIVE"