Add missing Fn::GetAtt attributes to S3 bucket mock (#3396)
				
					
				
			* Add missing `Fn::GetAtt` attributes to S3 bucket mock Addresses an issue reported here https://github.com/localstack/aws-cdk-local/issues/1 * Reformat touched files with `black` * Reformat touched files with `black` on Python 3.7
This commit is contained in:
		
							parent
							
								
									53cc3dd67a
								
							
						
					
					
						commit
						a5fc14b5bc
					
				@ -1061,12 +1061,16 @@ class FakeBucket(CloudFormationModel):
 | 
			
		||||
    def get_cfn_attribute(self, attribute_name):
 | 
			
		||||
        from moto.cloudformation.exceptions import UnformattedGetAttTemplateException
 | 
			
		||||
 | 
			
		||||
        if attribute_name == "DomainName":
 | 
			
		||||
            raise NotImplementedError('"Fn::GetAtt" : [ "{0}" , "DomainName" ]"')
 | 
			
		||||
        elif attribute_name == "WebsiteURL":
 | 
			
		||||
            raise NotImplementedError('"Fn::GetAtt" : [ "{0}" , "WebsiteURL" ]"')
 | 
			
		||||
        elif attribute_name == "Arn":
 | 
			
		||||
        if attribute_name == "Arn":
 | 
			
		||||
            return self.arn
 | 
			
		||||
        elif attribute_name == "DomainName":
 | 
			
		||||
            return self.domain_name
 | 
			
		||||
        elif attribute_name == "DualStackDomainName":
 | 
			
		||||
            return self.dual_stack_domain_name
 | 
			
		||||
        elif attribute_name == "RegionalDomainName":
 | 
			
		||||
            return self.regional_domain_name
 | 
			
		||||
        elif attribute_name == "WebsiteURL":
 | 
			
		||||
            return self.website_url
 | 
			
		||||
        raise UnformattedGetAttTemplateException()
 | 
			
		||||
 | 
			
		||||
    def set_acl(self, acl):
 | 
			
		||||
@ -1076,6 +1080,24 @@ class FakeBucket(CloudFormationModel):
 | 
			
		||||
    def arn(self):
 | 
			
		||||
        return "arn:aws:s3:::{}".format(self.name)
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def domain_name(self):
 | 
			
		||||
        return "{}.s3.amazonaws.com".format(self.name)
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def dual_stack_domain_name(self):
 | 
			
		||||
        return "{}.s3.dualstack.{}.amazonaws.com".format(self.name, self.region_name)
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def regional_domain_name(self):
 | 
			
		||||
        return "{}.s3.{}.amazonaws.com".format(self.name, self.region_name)
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def website_url(self):
 | 
			
		||||
        return "http://{}.s3-website.{}.amazonaws.com".format(
 | 
			
		||||
            self.name, self.region_name
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def physical_resource_id(self):
 | 
			
		||||
        return self.name
 | 
			
		||||
 | 
			
		||||
@ -148,8 +148,9 @@ def test_s3_bucket_cloudformation_update_replacement():
 | 
			
		||||
@mock_s3
 | 
			
		||||
@mock_cloudformation
 | 
			
		||||
def test_s3_bucket_cloudformation_outputs():
 | 
			
		||||
    s3 = boto3.client("s3", region_name="us-east-1")
 | 
			
		||||
    cf = boto3.resource("cloudformation", region_name="us-east-1")
 | 
			
		||||
    region_name = "us-east-1"
 | 
			
		||||
    s3 = boto3.client("s3", region_name=region_name)
 | 
			
		||||
    cf = boto3.resource("cloudformation", region_name=region_name)
 | 
			
		||||
    stack_name = "test-stack"
 | 
			
		||||
    bucket_name = "test-bucket"
 | 
			
		||||
    template = {
 | 
			
		||||
@ -165,6 +166,26 @@ def test_s3_bucket_cloudformation_outputs():
 | 
			
		||||
                "Value": {"Fn::GetAtt": ["TestBucket", "Arn"]},
 | 
			
		||||
                "Export": {"Name": {"Fn::Sub": "${AWS::StackName}:BucketARN"}},
 | 
			
		||||
            },
 | 
			
		||||
            "BucketDomainName": {
 | 
			
		||||
                "Value": {"Fn::GetAtt": ["TestBucket", "DomainName"]},
 | 
			
		||||
                "Export": {"Name": {"Fn::Sub": "${AWS::StackName}:BucketDomainName"}},
 | 
			
		||||
            },
 | 
			
		||||
            "BucketDualStackDomainName": {
 | 
			
		||||
                "Value": {"Fn::GetAtt": ["TestBucket", "DualStackDomainName"]},
 | 
			
		||||
                "Export": {
 | 
			
		||||
                    "Name": {"Fn::Sub": "${AWS::StackName}:BucketDualStackDomainName"}
 | 
			
		||||
                },
 | 
			
		||||
            },
 | 
			
		||||
            "BucketRegionalDomainName": {
 | 
			
		||||
                "Value": {"Fn::GetAtt": ["TestBucket", "RegionalDomainName"]},
 | 
			
		||||
                "Export": {
 | 
			
		||||
                    "Name": {"Fn::Sub": "${AWS::StackName}:BucketRegionalDomainName"}
 | 
			
		||||
                },
 | 
			
		||||
            },
 | 
			
		||||
            "BucketWebsiteURL": {
 | 
			
		||||
                "Value": {"Fn::GetAtt": ["TestBucket", "WebsiteURL"]},
 | 
			
		||||
                "Export": {"Name": {"Fn::Sub": "${AWS::StackName}:BucketWebsiteURL"}},
 | 
			
		||||
            },
 | 
			
		||||
            "BucketName": {
 | 
			
		||||
                "Value": {"Ref": "TestBucket"},
 | 
			
		||||
                "Export": {"Name": {"Fn::Sub": "${AWS::StackName}:BucketName"}},
 | 
			
		||||
@ -176,4 +197,22 @@ def test_s3_bucket_cloudformation_outputs():
 | 
			
		||||
    output = {item["OutputKey"]: item["OutputValue"] for item in outputs_list}
 | 
			
		||||
    s3.head_bucket(Bucket=output["BucketName"])
 | 
			
		||||
    output["BucketARN"].should.match("arn:aws:s3.+{bucket}".format(bucket=bucket_name))
 | 
			
		||||
    output["BucketDomainName"].should.equal(
 | 
			
		||||
        "{bucket}.s3.amazonaws.com".format(bucket=bucket_name)
 | 
			
		||||
    )
 | 
			
		||||
    output["BucketDualStackDomainName"].should.equal(
 | 
			
		||||
        "{bucket}.s3.dualstack.{region}.amazonaws.com".format(
 | 
			
		||||
            bucket=bucket_name, region=region_name
 | 
			
		||||
        )
 | 
			
		||||
    )
 | 
			
		||||
    output["BucketRegionalDomainName"].should.equal(
 | 
			
		||||
        "{bucket}.s3.{region}.amazonaws.com".format(
 | 
			
		||||
            bucket=bucket_name, region=region_name
 | 
			
		||||
        )
 | 
			
		||||
    )
 | 
			
		||||
    output["BucketWebsiteURL"].should.equal(
 | 
			
		||||
        "http://{bucket}.s3-website.{region}.amazonaws.com".format(
 | 
			
		||||
            bucket=bucket_name, region=region_name
 | 
			
		||||
        )
 | 
			
		||||
    )
 | 
			
		||||
    output["BucketName"].should.equal(bucket_name)
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user