def test_bucket_name(self): # array description : 'path', 'header', 'expected_ouput' bucket_names = [ ('/bucket/keyname', {'host': f'https://{HOSTNAME}:4566'}, 'bucket'), ('/bucket//keyname', {'host': f'https://{HOSTNAME}:4566'}, 'bucket'), ('/keyname', {'host': f'bucket.{S3_VIRTUAL_HOSTNAME}:4566'}, 'bucket'), ('//keyname', {'host': f'bucket.{S3_VIRTUAL_HOSTNAME}:4566'}, 'bucket'), ('/', {'host': f'{S3_VIRTUAL_HOSTNAME}:4566'}, None), ('/', {'host': 'bucket.s3-ap-northeast-1.amazonaws.com:4566'}, 'bucket'), ('/', {'host': 'bucket.s3-ap-northeast-2.amazonaws.com:4566'}, 'bucket'), ('/', {'host': 'bucket.s3-ap-south-1.amazonaws.com'}, 'bucket'), ('/', {'host': 'bucket.s3-ap-southeast-1.amazonaws.com'}, 'bucket'), ('/', {'host': 'bucket.s3-ap-southeast-2.amazonaws.com'}, 'bucket'), ('/', {'host': 'bucket.s3-ca-central-1.amazonaws.com'}, 'bucket'), ('/', {'host': 'bucket.s3-eu-central-1.amazonaws.com'}, 'bucket'), ('/', {'host': 'http://bucket.s3-eu-west-1.amazonaws.com'}, 'bucket'), ('/', {'host': 'http://bucket.s3-eu-west-2.amazonaws.com'}, 'bucket'), ('/', {'host': 'http://bucket.s3-eu-west-3.amazonaws.com'}, 'bucket'), ('/', {'host': 'http://bucket.s3-external-1.amazonaws.com'}, 'bucket'), ('/', {'host': 'http://bucket.s3-sa-east-1.amazonaws.com'}, 'bucket'), ('/', {'host': 'bucket.s3-us-east-2.amazonaws.com'}, 'bucket'), ('/', {'host': 'bucket.s3-us-west-1.amazonaws.com'}, 'bucket'), ('/', {'host': 'bucket.s3-us-west-2.amazonaws.com'}, 'bucket'), ('/', {'host': 'bucket.s3.amazonaws.com'}, 'bucket'), ('/', {'host': 'bucket.s3.ap-northeast-1.amazonaws.com'}, 'bucket'), ('/', {'host': 'bucket.s3.ap-northeast-2.amazonaws.com'}, 'bucket'), ('/', {'host': 'bucket.s3.ap-south-1.amazonaws.com'}, 'bucket'), ('/', {'host': 'bucket.s3.ap-southeast-1.amazonaws.com'}, 'bucket'), ('/', {'host': 'bucket.s3.ap-southeast-2.amazonaws.com'}, 'bucket'), ('/', {'host': 'bucket.s3.ca-central-1.amazonaws.com'}, 'bucket'), ('/', {'host': 'bucket.s3.cn-north-1.amazonaws.com.cn'}, 'bucket'), ('/', {'host': 'bucket.s3.cn-northwest-1.amazonaws.com.cn'}, 'bucket'), ('/', {'host': 'bucket.s3.dualstack.ap-northeast-1.amazonaws.com'}, 'bucket'), ('/', {'host': 'https://bucket.s3.dualstack.ap-northeast-2.amazonaws.com'}, 'bucket'), ('/', {'host': 'https://bucket.s3.dualstack.ap-south-1.amazonaws.com'}, 'bucket'), ('/', {'host': 'https://bucket.s3.dualstack.ap-southeast-1.amazonaws.com'}, 'bucket'), ('/', {'host': 'https://bucket.s3.dualstack.ap-southeast-2.amazonaws.com'}, 'bucket'), ('/', {'host': 'https://bucket.s3.dualstack.ca-central-1.amazonaws.com'}, 'bucket'), ('/', {'host': 'https://bucket.s3.dualstack.eu-central-1.amazonaws.com'}, 'bucket'), ('/', {'host': 'bucket.s3.dualstack.eu-west-1.amazonaws.com'}, 'bucket'), ('/', {'host': 'bucket.s3.dualstack.eu-west-2.amazonaws.com'}, 'bucket'), ('/', {'host': 'bucket.s3.dualstack.eu-west-3.amazonaws.com'}, 'bucket'), ('/', {'host': 'bucket.s3.dualstack.sa-east-1.amazonaws.com'}, 'bucket'), ('/', {'host': 'bucket.s3.dualstack.us-east-1.amazonaws.com'}, 'bucket'), ('/', {'host': 'bucket.s3.dualstack.us-east-2.amazonaws.com'}, 'bucket'), ('/', {'host': 'bucket.s3.dualstack.us-west-1.amazonaws.com'}, 'bucket'), ('/', {'host': 'bucket.s3.dualstack.us-west-2.amazonaws.com'}, 'bucket'), ('/', {'host': 'bucket.s3.eu-central-1.amazonaws.com'}, 'bucket'), ('/', {'host': 'bucket.s3.eu-west-1.amazonaws.com'}, 'bucket'), ('/', {'host': 'bucket.s3.eu-west-2.amazonaws.com'}, 'bucket'), ('/', {'host': 'bucket.s3.eu-west-3.amazonaws.com'}, 'bucket'), ('/', {'host': 'bucket.s3.sa-east-1.amazonaws.com'}, 'bucket'), ('/', {'host': 'bucket.s3.us-east-1.amazonaws.com'}, 'bucket'), ('/', {'host': 'bucket.s3.us-east-2.amazonaws.com'}, 'bucket'), ('/', {'host': 'bucket.s3.us-west-1.amazonaws.com'}, 'bucket'), ('/', {'host': 'bucket.s3.us-west-2.amazonaws.com'}, 'bucket') ] for path, headers, expected_result in bucket_names: self.assertEqual(expected_result, s3_utils.extract_bucket_name(headers, path))
def convert_s3_to_local_url(url): url_parsed = urlparse(url) path = url_parsed.path headers = CaseInsensitiveDict({"Host": url_parsed.netloc}) bucket_name = s3_utils.extract_bucket_name(headers, path) key_name = s3_utils.extract_key_name(headers, path) # note: make sure to normalize the bucket name here! bucket_name = s3_listener.normalize_bucket_name(bucket_name) local_url = f"{config.service_url('s3')}/{bucket_name}/{key_name}" return local_url
def convert_s3_to_local_url(url): url_parsed = urlparse.urlparse(url) path = url_parsed.path headers = CaseInsensitiveDict({"Host": url_parsed.netloc}) bucket_name = s3_utils.extract_bucket_name(headers, path) key_name = s3_utils.extract_key_name(headers, path) # note: make sure to normalize the bucket name here! bucket_name = s3_listener.normalize_bucket_name(bucket_name) local_url = "%s/%s/%s" % (config.TEST_S3_URL, bucket_name, key_name) return local_url
def parse_bucket_name_from_url(self, request, url): path = urlparse(url).path return s3_utils.extract_bucket_name(request.headers, path)
def test_bucket_name(self): # array description : 'path', 'header', 'expected_ouput' bucket_names = [ ("/bucket/keyname", {"host": f"https://{LOCALHOST}:4566"}, "bucket"), ("/bucket//keyname", {"host": f"https://{LOCALHOST}:4566"}, "bucket"), ("/keyname", {"host": f"bucket.{S3_VIRTUAL_HOSTNAME}:4566"}, "bucket"), ("//keyname", {"host": f"bucket.{S3_VIRTUAL_HOSTNAME}:4566"}, "bucket"), ("/", {"host": f"{S3_VIRTUAL_HOSTNAME}:4566"}, None), ("/", {"host": "bucket.s3-ap-northeast-1.amazonaws.com:4566"}, "bucket"), ("/", {"host": "bucket.s3-ap-northeast-2.amazonaws.com:4566"}, "bucket"), ("/", {"host": "bucket.s3-ap-south-1.amazonaws.com"}, "bucket"), ("/", {"host": "bucket.s3-ap-southeast-1.amazonaws.com"}, "bucket"), ("/", {"host": "bucket.s3-ap-southeast-2.amazonaws.com"}, "bucket"), ("/", {"host": "bucket.s3-ca-central-1.amazonaws.com"}, "bucket"), ("/", {"host": "bucket.s3-eu-central-1.amazonaws.com"}, "bucket"), ("/", {"host": "http://bucket.s3-eu-west-1.amazonaws.com"}, "bucket"), ("/", {"host": "http://bucket.s3-eu-west-2.amazonaws.com"}, "bucket"), ("/", {"host": "http://bucket.s3-eu-west-3.amazonaws.com"}, "bucket"), ("/", {"host": "http://bucket.s3-external-1.amazonaws.com"}, "bucket"), ("/", {"host": "http://bucket.s3-sa-east-1.amazonaws.com"}, "bucket"), ("/", {"host": "bucket.s3-us-east-2.amazonaws.com"}, "bucket"), ("/", {"host": "bucket.s3-us-west-1.amazonaws.com"}, "bucket"), ("/", {"host": "bucket.s3-us-west-2.amazonaws.com"}, "bucket"), ("/", {"host": "bucket.s3.amazonaws.com"}, "bucket"), ("/", {"host": "bucket.s3.ap-northeast-1.amazonaws.com"}, "bucket"), ("/", {"host": "bucket.s3.ap-northeast-2.amazonaws.com"}, "bucket"), ("/", {"host": "bucket.s3.ap-south-1.amazonaws.com"}, "bucket"), ("/", {"host": "bucket.s3.ap-southeast-1.amazonaws.com"}, "bucket"), ("/", {"host": "bucket.s3.ap-southeast-2.amazonaws.com"}, "bucket"), ("/", {"host": "bucket.s3.ca-central-1.amazonaws.com"}, "bucket"), ("/", {"host": "bucket.s3.cn-north-1.amazonaws.com.cn"}, "bucket"), ("/", {"host": "bucket.s3.cn-northwest-1.amazonaws.com.cn"}, "bucket"), ( "/", {"host": "bucket.s3.dualstack.ap-northeast-1.amazonaws.com"}, "bucket", ), ( "/", {"host": "https://bucket.s3.dualstack.ap-northeast-2.amazonaws.com"}, "bucket", ), ( "/", {"host": "https://bucket.s3.dualstack.ap-south-1.amazonaws.com"}, "bucket", ), ( "/", {"host": "https://bucket.s3.dualstack.ap-southeast-1.amazonaws.com"}, "bucket", ), ( "/", {"host": "https://bucket.s3.dualstack.ap-southeast-2.amazonaws.com"}, "bucket", ), ( "/", {"host": "https://bucket.s3.dualstack.ca-central-1.amazonaws.com"}, "bucket", ), ( "/", {"host": "https://bucket.s3.dualstack.eu-central-1.amazonaws.com"}, "bucket", ), ("/", {"host": "bucket.s3.dualstack.eu-west-1.amazonaws.com"}, "bucket"), ("/", {"host": "bucket.s3.dualstack.eu-west-2.amazonaws.com"}, "bucket"), ("/", {"host": "bucket.s3.dualstack.eu-west-3.amazonaws.com"}, "bucket"), ("/", {"host": "bucket.s3.dualstack.sa-east-1.amazonaws.com"}, "bucket"), ("/", {"host": "bucket.s3.dualstack.us-east-1.amazonaws.com"}, "bucket"), ("/", {"host": "bucket.s3.dualstack.us-east-2.amazonaws.com"}, "bucket"), ("/", {"host": "bucket.s3.dualstack.us-west-1.amazonaws.com"}, "bucket"), ("/", {"host": "bucket.s3.dualstack.us-west-2.amazonaws.com"}, "bucket"), ("/", {"host": "bucket.s3.eu-central-1.amazonaws.com"}, "bucket"), ("/", {"host": "bucket.s3.eu-west-1.amazonaws.com"}, "bucket"), ("/", {"host": "bucket.s3.eu-west-2.amazonaws.com"}, "bucket"), ("/", {"host": "bucket.s3.eu-west-3.amazonaws.com"}, "bucket"), ("/", {"host": "bucket.s3.sa-east-1.amazonaws.com"}, "bucket"), ("/", {"host": "bucket.s3.us-east-1.amazonaws.com"}, "bucket"), ("/", {"host": "bucket.s3.us-east-2.amazonaws.com"}, "bucket"), ("/", {"host": "bucket.s3.us-west-1.amazonaws.com"}, "bucket"), ("/", {"host": "bucket.s3.us-west-2.amazonaws.com"}, "bucket"), ("/", {"host": "bucket.s3.localhost.localstack.cloud"}, "bucket"), ( "/", {"host": "bucket-1.s3-website.localhost.localstack.cloud"}, "bucket-1", ), ( "/", {"host": "bucket.localhost.localstack.cloud"}, "bucket", ), # internally agreed upon special case ("/", {"host": "localhost.localstack.cloud"}, None), ("/", {"host": "test.dynamodb.amazonaws.com"}, None), ("/", {"host": "dynamodb.amazonaws.com"}, None), ] for path, headers, expected_result in bucket_names: self.assertEqual(expected_result, s3_utils.extract_bucket_name(headers, path), headers)