Example #1
0
    def test_any_enabled_false_if_all_of_three_disabled(self):
        deployment_preference_collection = DeploymentPreferenceCollection()
        deployment_preference_collection.add('1', {'Type': 'Linear', 'Enabled': False})
        deployment_preference_collection.add('2', {'Type': 'LINEAR', 'Enabled': False})
        deployment_preference_collection.add('3', {'Type': 'CANARY', 'Enabled': False})

        self.assertFalse(deployment_preference_collection.any_enabled())
Example #2
0
    def test_deployment_preference_with_conditional_custom_configuration(self):
        deployment_type = {
            "Fn::If": [
                "IsDevEnv",
                {"Fn::If": ["IsDevEnv1", "AllAtOnce", "TestDeploymentConfiguration"]},
                "Canary10Percent15Minutes",
            ]
        }

        expected_deployment_config_name = {
            "Fn::If": [
                "IsDevEnv",
                {
                    "Fn::If": [
                        "IsDevEnv1",
                        {"Fn::Sub": ["CodeDeployDefault.Lambda${ConfigName}", {"ConfigName": "AllAtOnce"}]},
                        "TestDeploymentConfiguration",
                    ]
                },
                {"Fn::Sub": ["CodeDeployDefault.Lambda${ConfigName}", {"ConfigName": "Canary10Percent15Minutes"}]},
            ]
        }
        deployment_preference_collection = DeploymentPreferenceCollection()
        deployment_preference_collection.add(self.function_logical_id, {"Type": deployment_type})
        deployment_group = deployment_preference_collection.deployment_group(self.function_logical_id)
        print(deployment_group.DeploymentConfigName)
        self.assertEqual(expected_deployment_config_name, deployment_group.DeploymentConfigName)
Example #3
0
    def test_deployment_preference_with_conditional_custom_configuration(self):
        deployment_type = {'Fn::If': ['IsDevEnv', {'Fn::If':
                                                   ['IsDevEnv1', 'AllAtOnce', 'TestDeploymentConfiguration']},
                                      'Canary10Percent15Minutes']}

        expected_deployment_config_name = {'Fn::If':
                                           ['IsDevEnv', {'Fn::If':
                                                         ['IsDevEnv1', {'Fn::Sub': [
                                                                'CodeDeployDefault.Lambda${ConfigName}',
                                                                {
                                                                   'ConfigName': 'AllAtOnce'
                                                                }
                                                            ]
                                                         },
                                                            'TestDeploymentConfiguration']},
                                            {'Fn::Sub': [
                                               'CodeDeployDefault.Lambda${ConfigName}',
                                               {
                                                   'ConfigName': 'Canary10Percent15Minutes'
                                               }
                                                ]
                                             }
                                            ]
                                           }
        deployment_preference_collection = DeploymentPreferenceCollection()
        deployment_preference_collection.add(self.function_logical_id, {'Type': deployment_type})
        deployment_group = deployment_preference_collection.deployment_group(self.function_logical_id)
        print(deployment_group.DeploymentConfigName)
        self.assertEqual(expected_deployment_config_name, deployment_group.DeploymentConfigName)
Example #4
0
    def test_any_enabled_true_if_all_of_three_enabled(self):
        deployment_preference_collection = DeploymentPreferenceCollection()
        deployment_preference_collection.add('1', {'Type': 'LINEAR'})
        deployment_preference_collection.add('2', {'Type': 'LINEAR', 'Enabled': True})
        deployment_preference_collection.add('3', {'Type': 'CANARY', 'Enabled': True})

        self.assertTrue(deployment_preference_collection.any_enabled())
Example #5
0
    def test_deployment_group_with_all_parameters(self):
        expected_deployment_group = CodeDeployDeploymentGroup(self.function_logical_id + "DeploymentGroup")
        expected_deployment_group.AlarmConfiguration = {
            "Enabled": True,
            "Alarms": [{"Name": {"Ref": "alarm1"}}, {"Name": {"Ref": "alarm2"}}],
        }
        expected_deployment_group.ApplicationName = {"Ref": CODEDEPLOY_APPLICATION_LOGICAL_ID}
        expected_deployment_group.AutoRollbackConfiguration = {
            "Enabled": True,
            "Events": ["DEPLOYMENT_FAILURE", "DEPLOYMENT_STOP_ON_ALARM", "DEPLOYMENT_STOP_ON_REQUEST"],
        }
        expected_deployment_group.DeploymentConfigName = {
            "Fn::Sub": ["CodeDeployDefault.Lambda${ConfigName}", {"ConfigName": self.deployment_type_global}]
        }
        expected_deployment_group.DeploymentStyle = {
            "DeploymentType": "BLUE_GREEN",
            "DeploymentOption": "WITH_TRAFFIC_CONTROL",
        }
        expected_deployment_group.ServiceRoleArn = {"Fn::GetAtt": [CODE_DEPLOY_SERVICE_ROLE_LOGICAL_ID, "Arn"]}

        deployment_preference_collection = DeploymentPreferenceCollection()
        deployment_preference_collection.add(self.function_logical_id, self.global_deployment_preference_yaml_dict())
        deployment_group = deployment_preference_collection.deployment_group(self.function_logical_id)

        self.assertEqual(deployment_group.to_dict(), expected_deployment_group.to_dict())
Example #6
0
    def test_deployment_group_with_minimal_parameters(self):
        expected_deployment_group = CodeDeployDeploymentGroup(self.function_logical_id + 'DeploymentGroup')
        expected_deployment_group.ApplicationName = {'Ref': CODEDEPLOY_APPLICATION_LOGICAL_ID}
        expected_deployment_group.AutoRollbackConfiguration = {'Enabled': True,
                                                               'Events': ['DEPLOYMENT_FAILURE',
                                                                          'DEPLOYMENT_STOP_ON_ALARM',
                                                                          'DEPLOYMENT_STOP_ON_REQUEST']}
        expected_deployment_group.DeploymentConfigName = {
            'Fn::Sub': [
                'CodeDeployDefault.Lambda${ConfigName}',
                {
                    'ConfigName': self.deployment_type_global
                }
            ]
        }
        expected_deployment_group.DeploymentStyle = {'DeploymentType': 'BLUE_GREEN',
                                                     'DeploymentOption': 'WITH_TRAFFIC_CONTROL'}
        expected_deployment_group.ServiceRoleArn = {'Fn::GetAtt': [CODE_DEPLOY_SERVICE_ROLE_LOGICAL_ID, 'Arn']}

        deployment_preference_collection = DeploymentPreferenceCollection()
        deployment_preference_collection.add(self.function_logical_id, {'Type': self.deployment_type_global})
        deployment_group = deployment_preference_collection.deployment_group(self.function_logical_id)

        self.assertEqual(deployment_group.to_dict(),
                         expected_deployment_group.to_dict())
Example #7
0
    def test_deployment_preference_with_codedeploy_custom_configuration(self):
        deployment_type = "TestDeploymentConfiguration"
        deployment_preference_collection = DeploymentPreferenceCollection()
        deployment_preference_collection.add(self.function_logical_id, {'Type': deployment_type})
        deployment_group = deployment_preference_collection.deployment_group(self.function_logical_id)

        self.assertEqual(deployment_type, deployment_group.DeploymentConfigName)
Example #8
0
    def test_deployment_preference_with_alarms_intrinsic_if_noref_else(self):
        deployment_preference = {
            "Type": "TestDeploymentConfiguration",
            "Alarms": {
                "Fn::If": [
                    "MyCondition", ["Alarm1", "Alarm2"],
                    [{
                        "Ref": "AWS::NoValue"
                    }]
                ]
            },
        }
        expected_alarm_configuration = {
            "Fn::If": [
                "MyCondition", {
                    "Enabled": True,
                    "Alarms": [{
                        "Name": "Alarm1"
                    }, {
                        "Name": "Alarm2"
                    }]
                }, {}
            ],
        }
        deployment_preference_collection = DeploymentPreferenceCollection()
        deployment_preference_collection.add(self.function_logical_id,
                                             deployment_preference)
        deployment_group = deployment_preference_collection.deployment_group(
            self.function_logical_id)

        self.assertEqual(expected_alarm_configuration,
                         deployment_group.AlarmConfiguration)
Example #9
0
    def test_any_enabled_false_if_all_of_three_disabled(self):
        deployment_preference_collection = DeploymentPreferenceCollection()
        deployment_preference_collection.add("1", {"Type": "Linear", "Enabled": False})
        deployment_preference_collection.add("2", {"Type": "LINEAR", "Enabled": False})
        deployment_preference_collection.add("3", {"Type": "CANARY", "Enabled": False})

        self.assertFalse(deployment_preference_collection.any_enabled())
Example #10
0
    def test_any_enabled_true_if_all_of_three_enabled(self):
        deployment_preference_collection = DeploymentPreferenceCollection()
        deployment_preference_collection.add("1", {"Type": "LINEAR"})
        deployment_preference_collection.add("2", {"Type": "LINEAR", "Enabled": True})
        deployment_preference_collection.add("3", {"Type": "CANARY", "Enabled": True})

        self.assertTrue(deployment_preference_collection.any_enabled())
Example #11
0
    def test_enabled_logical_ids_returns_one_if_one_of_three_enabled(self):
        deployment_preference_collection = DeploymentPreferenceCollection()
        enabled_logical_id = "1"
        deployment_preference_collection.add(enabled_logical_id, {"Type": "LINEAR"})
        deployment_preference_collection.add("2", {"Type": "LINEAR", "Enabled": False})
        deployment_preference_collection.add("3", {"Type": "CANARY", "Enabled": False})

        enabled_logical_ids = deployment_preference_collection.enabled_logical_ids()
        self.assertEqual(1, len(enabled_logical_ids))
        self.assertEqual(enabled_logical_id, enabled_logical_ids[0])
Example #12
0
    def test_enabled_logical_ids_returns_one_if_one_of_three_enabled(self):
        deployment_preference_collection = DeploymentPreferenceCollection()
        enabled_logical_id = '1'
        deployment_preference_collection.add(enabled_logical_id, {'Type': 'LINEAR'})
        deployment_preference_collection.add('2', {'Type': 'LINEAR', 'Enabled': False})
        deployment_preference_collection.add('3', {'Type': 'CANARY', 'Enabled': False})

        enabled_logical_ids = deployment_preference_collection.enabled_logical_ids()
        self.assertEqual(1, len(enabled_logical_ids))
        self.assertEqual(enabled_logical_id,
                         enabled_logical_ids[0])
Example #13
0
    def test_deployment_preference_with_codedeploy_predifined_configuration(self):
        deployment_type = "Canary10Percent5Minutes"
        expected_deployment_config_name = {
            "Fn::Sub": ["CodeDeployDefault.Lambda${ConfigName}", {"ConfigName": deployment_type}]
        }
        deployment_preference_collection = DeploymentPreferenceCollection()
        deployment_preference_collection.add(self.function_logical_id, {"Type": deployment_type})
        deployment_group = deployment_preference_collection.deployment_group(self.function_logical_id)

        print(deployment_group.DeploymentConfigName)
        self.assertEqual(expected_deployment_config_name, deployment_group.DeploymentConfigName)
Example #14
0
    def test_deployment_preference_with_alarms_empty(self):
        deployment_preference = {
            "Type": "TestDeploymentConfiguration",
            "Alarms": [],
        }
        deployment_preference_collection = DeploymentPreferenceCollection()
        deployment_preference_collection.add(self.function_logical_id,
                                             deployment_preference)
        deployment_group = deployment_preference_collection.deployment_group(
            self.function_logical_id)

        self.assertIsNone(deployment_group.AlarmConfiguration)
Example #15
0
    def test_update_policy_with_minimal_parameters(self):
        expected_update_policy = {
            'CodeDeployLambdaAliasUpdate': {
                'ApplicationName': {'Ref': CODEDEPLOY_APPLICATION_LOGICAL_ID},
                'DeploymentGroupName': {'Ref': self.function_logical_id + 'DeploymentGroup'},
            }
        }

        deployment_preference_collection = DeploymentPreferenceCollection()
        deployment_preference_collection.add(self.function_logical_id, {'Type': 'CANARY'})
        update_policy = deployment_preference_collection.update_policy(self.function_logical_id)

        self.assertEqual(expected_update_policy, update_policy.to_dict())
Example #16
0
    def test_update_policy_with_minimal_parameters(self):
        expected_update_policy = {
            "CodeDeployLambdaAliasUpdate": {
                "ApplicationName": {"Ref": CODEDEPLOY_APPLICATION_LOGICAL_ID},
                "DeploymentGroupName": {"Ref": self.function_logical_id + "DeploymentGroup"},
            }
        }

        deployment_preference_collection = DeploymentPreferenceCollection()
        deployment_preference_collection.add(self.function_logical_id, {"Type": "CANARY"})
        update_policy = deployment_preference_collection.update_policy(self.function_logical_id)

        self.assertEqual(expected_update_policy, update_policy.to_dict())
Example #17
0
    def test_deployment_preference_with_alarms_ref_novalue(self):
        deployment_preference = {
            "Type": "TestDeploymentConfiguration",
            "Alarms": {
                "Ref": "AWS::NoValue"
            },
        }
        deployment_preference_collection = DeploymentPreferenceCollection()
        deployment_preference_collection.add(self.function_logical_id,
                                             deployment_preference)
        deployment_group = deployment_preference_collection.deployment_group(
            self.function_logical_id)

        self.assertIsNone(deployment_group.AlarmConfiguration)
Example #18
0
    def test_update_policy_with_all_parameters(self):
        expected_update_polcy = {
            'CodeDeployLambdaAliasUpdate': {
                'ApplicationName': {'Ref': CODEDEPLOY_APPLICATION_LOGICAL_ID},
                'DeploymentGroupName': {'Ref': self.function_logical_id + 'DeploymentGroup'},
                'BeforeAllowTrafficHook': self.pre_traffic_hook_global,
                'AfterAllowTrafficHook': self.post_traffic_host_global,
            }
        }

        deployment_preference_collection = DeploymentPreferenceCollection()
        deployment_preference_collection.add(self.function_logical_id, self.global_deployment_preference_yaml_dict())
        update_policy = deployment_preference_collection.update_policy(self.function_logical_id)

        self.assertEqual(expected_update_polcy, update_policy.to_dict())
Example #19
0
 def test_deployment_preference_with_alarms_not_list(self):
     deployment_preference = {
         "Type": "TestDeploymentConfiguration",
         "Alarms": "Alarm1",
     }
     deployment_preference_collection = DeploymentPreferenceCollection()
     deployment_preference_collection.add(self.function_logical_id,
                                          deployment_preference)
     with self.assertRaises(InvalidResourceException) as e:
         deployment_preference_collection.deployment_group(
             self.function_logical_id)
     self.assertEqual(
         e.exception.message,
         "Resource with id [{}] is invalid. Alarms must be a list".format(
             self.function_logical_id),
     )
Example #20
0
 def test_deployment_preference_with_alarms_intrinsic_if_missing_arg(self):
     deployment_preference = {
         "Type": "TestDeploymentConfiguration",
         "Alarms": {
             "Fn::If": ["MyCondition", ["Alarm1", "Alarm2"]]
         },
     }
     deployment_preference_collection = DeploymentPreferenceCollection()
     deployment_preference_collection.add(self.function_logical_id,
                                          deployment_preference)
     with self.assertRaises(InvalidResourceException) as e:
         deployment_preference_collection.deployment_group(
             self.function_logical_id)
     self.assertEqual(
         e.exception.message,
         "Resource with id [{}] is invalid. Fn::If requires 3 arguments".
         format(self.function_logical_id),
     )
Example #21
0
    def test_deployment_preference_with_alarms(self):
        deployment_preference = {
            "Type": "TestDeploymentConfiguration",
            "Alarms": ["Alarm1", "Alarm2", "Alarm3"],
        }
        expected_alarm_configuration = {
            "Enabled": True,
            "Alarms": [{
                "Name": "Alarm1"
            }, {
                "Name": "Alarm2"
            }, {
                "Name": "Alarm3"
            }],
        }
        deployment_preference_collection = DeploymentPreferenceCollection()
        deployment_preference_collection.add(self.function_logical_id,
                                             deployment_preference)
        deployment_group = deployment_preference_collection.deployment_group(
            self.function_logical_id)

        self.assertEqual(expected_alarm_configuration,
                         deployment_group.AlarmConfiguration)
 def test_add_when_logical_id_previously_added_raises_value_error(self):
     with self.assertRaises(ValueError):
         deployment_preference_collection = DeploymentPreferenceCollection()
         deployment_preference_collection.add("1", {"Type": "Canary"})
         deployment_preference_collection.add("1", {"Type": "Linear"})
Example #23
0
 def test_add_when_logical_id_previously_added_raises_value_error(self):
     with self.assertRaises(ValueError):
         deployment_preference_collection = DeploymentPreferenceCollection()
         deployment_preference_collection.add('1', {'Type': 'Canary'})
         deployment_preference_collection.add('1', {'Type': 'Linear'})