コード例 #1
0
    def test_others(self):
        """
        GetAtt should be replaced by ${Thing.Property}
        """

        source = {
            "Fn::Join": [
                " ",
                ["The", {"Fn::Base64": "Notreallybase64"}, "is", "a", "lie"],
            ],
        }

        expected = {
            "Fn::Sub": [
                "The ${Param1} is a lie",
                {
                    "Param1": {
                        "Fn::Base64": "Notreallybase64",
                    },
                },
            ],
        }

        actual = cfn_flip.clean(source)

        self.assertEqual(expected, actual)
コード例 #2
0
    def test_others(self):
        """
        GetAtt should be replaced by ${Thing.Property}
        """

        source = {
            "Fn::Join": [
                " ",
                ["The", {
                    "Fn::Base64": "Notreallybase64"
                }, "is", "a", "lie"],
            ],
        }

        expected = {
            "Fn::Sub": [
                "The ${Param1} is a lie",
                {
                    "Param1": {
                        "Fn::Base64": "Notreallybase64",
                    },
                },
            ],
        }

        actual = cfn_flip.clean(source)

        self.assertEqual(expected, actual)
コード例 #3
0
    def test_basic_case(self):
        """
        As simple as it gets
        """

        source = {"Fn::Join": [" ", ["The", "cake", "is", "a", "lie"]]}

        expected = "The cake is a lie"

        actual = cfn_flip.clean(source)

        self.assertEqual(expected, actual)
コード例 #4
0
    def test_ref(self):
        """
        Refs should be replaced by ${value}
        """

        source = {
            "Fn::Join": [" ", ["The", {
                "Ref": "Cake"
            }, "is", "a", "lie"]]
        }

        expected = {"Fn::Sub": "The ${Cake} is a lie"}

        actual = cfn_flip.clean(source)

        self.assertEqual(expected, actual)
コード例 #5
0
    def test_in_array(self):
        """
        Converting Join to Sub should still work when the join is part of a larger array
        """

        source = {
            "things": [
                "Just a string",
                {
                    "Fn::Join": [
                        " ",
                        [
                            "The", {
                                "Fn::Base64": "Notreallybase64"
                            }, "is", "a", "lie"
                        ],
                    ],
                },
                {
                    "Another": "thing",
                },
            ],
        }

        expected = {
            "things": [
                "Just a string",
                {
                    "Fn::Sub": [
                        "The ${Param1} is a lie",
                        {
                            "Param1": {
                                "Fn::Base64": "Notreallybase64",
                            },
                        },
                    ],
                },
                {
                    "Another": "thing",
                },
            ],
        }

        actual = cfn_flip.clean(source)

        self.assertEqual(expected, actual)
コード例 #6
0
    def test_literals(self):
        """
        Test that existing ${var} in source is respected
        """

        source = {
            "Fn::Join": [
                " ",
                ["The", "${cake}", "is", "a", "lie"],
            ],
        }

        expected = "The ${!cake} is a lie"

        actual = cfn_flip.clean(source)

        self.assertEqual(expected, actual)
コード例 #7
0
    def test_get_att(self):
        """
        Base64 etc should be replaced by parameters to Sub
        """

        source = {
            "Fn::Join":
            [" ", ["The", {
                "Fn::GetAtt": ["Cake", "Hole"]
            }, "is", "a", "lie"]]
        }

        expected = {"Fn::Sub": "The ${Cake.Hole} is a lie"}

        actual = cfn_flip.clean(source)

        self.assertEqual(expected, actual)
コード例 #8
0
    def test_basic_case(self):
        """
        As simple as it gets
        """

        source = {
            "Fn::Join": [
                " ",
                ["The", "cake", "is", "a", "lie"],
            ],
        }

        expected = "The cake is a lie"

        actual = cfn_flip.clean(source)

        self.assertEqual(expected, actual)
コード例 #9
0
    def test_multi_level_get_att(self):
        """
        Base64 etc should be replaced by parameters to Sub
        """

        source = {
            "Fn::Join": [
                " ",
                ["The", {"Fn::GetAtt": ["First", "Second", "Third"]}, "is", "a", "lie"],
            ],
        }

        expected = {
            "Fn::Sub": "The ${First.Second.Third} is a lie",
        }

        actual = cfn_flip.clean(source)

        self.assertEqual(expected, actual)
コード例 #10
0
    def test_get_att(self):
        """
        Base64 etc should be replaced by parameters to Sub
        """

        source = {
            "Fn::Join": [
                " ",
                ["The", {"Fn::GetAtt": ["Cake", "Hole"]}, "is", "a", "lie"],
            ],
        }

        expected = {
            "Fn::Sub": "The ${Cake.Hole} is a lie",
        }

        actual = cfn_flip.clean(source)

        self.assertEqual(expected, actual)
コード例 #11
0
    def test_ref(self):
        """
        Refs should be replaced by ${value}
        """

        source = {
            "Fn::Join": [
                " ",
                ["The", {"Ref": "Cake"}, "is", "a", "lie"],
            ],
        }

        expected = {
            "Fn::Sub": "The ${Cake} is a lie",
        }

        actual = cfn_flip.clean(source)

        self.assertEqual(expected, actual)
コード例 #12
0
    def test_in_array(self):
        """
        Converting Join to Sub should still work when the join is part of a larger array
        """

        source = {
            "things": [
                "Just a string",
                {
                    "Fn::Join": [
                        " ",
                        ["The", {"Fn::Base64": "Notreallybase64"}, "is", "a", "lie"],
                    ],
                },
                {
                    "Another": "thing",
                },
            ],
        }

        expected = {
            "things": [
                "Just a string",
                {
                    "Fn::Sub": [
                        "The ${Param1} is a lie",
                        {
                            "Param1": {
                                "Fn::Base64": "Notreallybase64",
                            },
                        },
                    ],
                },
                {
                    "Another": "thing",
                },
            ],
        }

        actual = cfn_flip.clean(source)

        self.assertEqual(expected, actual)
コード例 #13
0
    def test_multi_level_get_att(self):
        """
        Base64 etc should be replaced by parameters to Sub
        """

        source = {
            "Fn::Join": [
                " ",
                [
                    "The", {
                        "Fn::GetAtt": ["First", "Second", "Third"]
                    }, "is", "a", "lie"
                ]
            ]
        }

        expected = {"Fn::Sub": "The ${First.Second.Third} is a lie"}

        actual = cfn_flip.clean(source)

        self.assertEqual(expected, actual)
コード例 #14
0
    def test_deep_nested_join(self):
        """
        Test that a join works correctly when inside an intrinsic, inside a join
        """

        source = {
            "Fn::Join": [
                " ",
                [
                    "The", "cake", "is", "a", {
                        "Fn::ImportValue": {
                            "Fn::Join": [
                                "-",
                                [{
                                    "Ref": "lieStack"
                                }, "lieValue"],
                            ]
                        },
                    }
                ],
            ],
        }

        expected = {
            "Fn::Sub": [
                "The cake is a ${Param1}",
                {
                    "Param1": {
                        "Fn::ImportValue": {
                            "Fn::Sub": "${lieStack}-lieValue",
                        },
                    },
                },
            ]
        }

        actual = cfn_flip.clean(source)

        self.assertEqual(expected, actual)
コード例 #15
0
    def test_nested_join(self):
        """
        Test that a join of joins works correctly
        """

        source = {
            "Fn::Join": [
                " ",
                ["The", "cake", {
                    "Fn::Join": [
                        " ",
                        ["is", "a"],
                    ],
                }, "lie"],
            ],
        }

        expected = "The cake is a lie"

        actual = cfn_flip.clean(source)

        self.assertEqual(expected, actual)