class TestIntrinsicsSymbolTablePseudoProperties(TestCase):
    def setUp(self):
        self.symbol_table = IntrinsicsSymbolTable(template={})

    def test_handle_account_id_default(self):
        self.assertEquals(self.symbol_table.handle_pseudo_account_id(), "123456789012")

    def test_pseudo_partition(self):
        self.assertEquals(self.symbol_table.handle_pseudo_partition(), "aws")

    @patch("samcli.lib.intrinsic_resolver.intrinsics_symbol_table.os")
    def test_pseudo_partition_gov(self, mock_os):
        mock_os.getenv.return_value = "us-west-gov-1"
        self.assertEquals(self.symbol_table.handle_pseudo_partition(), "aws-us-gov")

    @patch("samcli.lib.intrinsic_resolver.intrinsics_symbol_table.os")
    def test_pseudo_partition_china(self, mock_os):
        mock_os.getenv.return_value = "cn-west-1"
        self.assertEquals(self.symbol_table.handle_pseudo_partition(), "aws-cn")

    @patch("samcli.lib.intrinsic_resolver.intrinsics_symbol_table.os")
    def test_pseudo_region_environ(self, mock_os):
        mock_os.getenv.return_value = "mytemp"
        self.assertEquals(self.symbol_table.handle_pseudo_region(), "mytemp")

    @patch("samcli.lib.intrinsic_resolver.intrinsics_symbol_table.os")
    def test_pseudo_default_region(self, mock_os):
        mock_os.getenv.return_value = None
        self.assertEquals(self.symbol_table.handle_pseudo_region(), "us-east-1")

    def test_pseudo_no_value(self):
        self.assertIsNone(self.symbol_table.handle_pseudo_no_value())

    def test_pseudo_url_prefix_default(self):
        self.assertEquals(self.symbol_table.handle_pseudo_url_prefix(), "amazonaws.com")

    @patch("samcli.lib.intrinsic_resolver.intrinsics_symbol_table.os")
    def test_pseudo_url_prefix_china(self, mock_os):
        mock_os.getenv.return_value = "cn-west-1"
        self.assertEquals(
            self.symbol_table.handle_pseudo_url_prefix(), "amazonaws.com.cn"
        )

    def test_get_availability_zone(self):
        res = IntrinsicsSymbolTable.get_availability_zone("us-east-1")
        self.assertIn("us-east-1a", res)

    def test_handle_pseudo_account_id(self):
        res = IntrinsicsSymbolTable.handle_pseudo_account_id()
        self.assertEqual(res, "123456789012")

    def test_handle_pseudo_stack_name(self):
        res = IntrinsicsSymbolTable.handle_pseudo_stack_name()
        self.assertEqual(res, "local")

    def test_handle_pseudo_stack_id(self):
        res = IntrinsicsSymbolTable.handle_pseudo_stack_id()
        self.assertEqual(res, "arn:aws:cloudformation:us-east-1:123456789012:stack/"
                              "local/51af3dc0-da77-11e4-872e-1234567db123")
示例#2
0
 def test_parameter_symbols(self):
     template = {
         "Resources": {},
         "Parameters": {
             "Test": {
                 "Default": "data"
             }
         }
     }
     symbol_resolver = IntrinsicsSymbolTable(template=template)
     result = symbol_resolver.resolve_symbols("Test", IntrinsicResolver.REF)
     self.assertEqual(result, "data")
示例#3
0
    def test_custom_attribute_resolver(self):
        template = {
            "Resources": {
                "MyApi": {
                    "Type": "AWS::ApiGateway::RestApi"
                }
            }
        }
        common_attribute_resolver = {"Arn": "test"}

        symbol_resolver = IntrinsicsSymbolTable(
            template=template,
            common_attribute_resolver=common_attribute_resolver)
        result = symbol_resolver.resolve_symbols("MyApi", "Arn")

        self.assertEqual(result, "test")
示例#4
0
    def get_template(template_dict, parameter_overrides=None):
        """
        Given a SAM template dictionary, return a cleaned copy of the template where SAM plugins have been run
        and parameter values have been substituted.

        Parameters
        ----------
        template_dict : dict
            unprocessed SAM template dictionary

        parameter_overrides: dict
            Optional dictionary of values for template parameters

        Returns
        -------
        dict
            Processed SAM template
        """
        template_dict = template_dict or {}
        if template_dict:
            template_dict = SamTranslatorWrapper(template_dict).run_plugins()
        ResourceMetadataNormalizer.normalize(template_dict)
        logical_id_translator = SamBaseProvider._get_parameter_values(
            template_dict, parameter_overrides)

        resolver = IntrinsicResolver(
            template=template_dict,
            symbol_resolver=IntrinsicsSymbolTable(
                logical_id_translator=logical_id_translator,
                template=template_dict),
        )
        template_dict = resolver.resolve_template(ignore_errors=True)
        return template_dict
    def test_default_type_resolver_function(self):
        template = {
            "Resources": {
                "MyApi": {
                    "Type": "AWS::ApiGateway::RestApi"
                }
            },
        }
        default_type_resolver = {
            "AWS::ApiGateway::RestApi": {
                "RootResourceId": lambda logical_id: logical_id
            }
        }

        symbol_resolver = IntrinsicsSymbolTable(template=template, default_type_resolver=default_type_resolver)
        result = symbol_resolver.resolve_symbols("MyApi", "RootResourceId")

        self.assertEquals(result, "MyApi")
示例#6
0
 def test_arn_resolver_lambda_with_function_name(self):
     template = {
         "Resources": {
             "LambdaFunction": {
                 "Properties": {
                     "FunctionName": "function-name-override"
                 }
             }
         }
     }
     res = IntrinsicsSymbolTable(template=template).arn_resolver(
         "LambdaFunction", service_name="lambda")
     self.assertEquals(
         res,
         "arn:aws:lambda:us-east-1:123456789012:function:function-name-override"
     )
示例#7
0
 def setUp(self):
     self.symbol_table = IntrinsicsSymbolTable(template={})
示例#8
0
 def test_handle_pseudo_stack_name(self):
     res = IntrinsicsSymbolTable.handle_pseudo_stack_name()
     self.assertEqual(res, "local")
示例#9
0
 def test_handle_pseudo_stack_id(self):
     res = IntrinsicsSymbolTable.handle_pseudo_stack_id()
     self.assertEqual(
         res, "arn:aws:cloudformation:us-east-1:123456789012:stack/"
         "local/51af3dc0-da77-11e4-872e-1234567db123")
示例#10
0
 def test_get_availability_zone(self):
     res = IntrinsicsSymbolTable.get_availability_zone("us-east-1")
     self.assertIn("us-east-1a", res)
示例#11
0
 def test_handle_pseudo_account_id(self):
     res = IntrinsicsSymbolTable.handle_pseudo_account_id()
     self.assertEqual(res, "123456789012")
示例#12
0
 def test_resolver_ignore_errors(self):
     resolver = IntrinsicsSymbolTable()
     res = resolver.resolve_symbols("UNKNOWN",
                                    "SOME UNKNOWN RESOURCE PROPERTY",
                                    ignore_errors=True)
     self.assertEqual(res, "$UNKNOWN.SOME UNKNOWN RESOURCE PROPERTY")
示例#13
0
 def test_symbol_resolver_unknown_fail(self):
     resolver = IntrinsicsSymbolTable()
     with self.assertRaises(InvalidSymbolException):
         resolver.resolve_symbols("UNKNOWN",
                                  "SOME UNKNOWN RESOURCE PROPERTY")
示例#14
0
 def test_unknown_symbol_translation(self):
     symbol_resolver = IntrinsicsSymbolTable(template={})
     res = symbol_resolver.get_translation("UNKNOWN MAP")
     self.assertEqual(res, None)
示例#15
0
 def test_arn_resolver_sns(self):
     res = IntrinsicsSymbolTable().arn_resolver("test", service_name="sns")
     self.assertEqual(res, "arn:aws:sns:us-east-1:123456789012:test")
示例#16
0
 def test_arn_resolver_lambda(self):
     res = IntrinsicsSymbolTable().arn_resolver("test",
                                                service_name="lambda")
     self.assertEquals(
         res, "arn:aws:lambda:us-east-1:123456789012:function:test")
示例#17
0
 def test_basic_unknown_translated_string_translation(self):
     symbol_resolver = IntrinsicsSymbolTable(
         template={}, logical_id_translator={"item": "test"})
     res = symbol_resolver.get_translation("item", "RootResourceId")
     self.assertEqual(res, None)
示例#18
0
 def test_basic_symbol_translation(self):
     symbol_resolver = IntrinsicsSymbolTable(
         template={}, logical_id_translator={"item": "test"})
     res = symbol_resolver.get_translation("item")
     self.assertEqual(res, "test")