Beispiel #1
0
    def test_handler_update(self):

        self.event['RequestType'] = 'Update'
        self.event['PhysicalResourceId'] = 'TestStack-TestLogicalResourceId'

        expected_data = {
            'ConfigurationBucket': 'TestBucket',
            'ConfigurationKey': 'TestKey/lambda-function-code.zip',
            'Runtime': 'TestRuntime',
            'Role': 'TestRole'
        }

        expected_physical_id = self.event['PhysicalResourceId'] + "::{}"

        with mock.patch.object(
                custom_resource_response,
                'succeed') as mock_custom_resource_handler_response_succeed:
            with mock.patch.object(role_utils, 'get_access_control_role_arn'
                                   ) as mock_get_access_control_role_arn:
                mock_get_access_control_role_arn.return_value = expected_data[
                    'Role']
                with mock.patch.object(
                        LambdaConfigurationResourceHandler,
                        '_inject_settings') as mock_inject_settings:
                    with mock.patch.object(LambdaConfigurationResourceHandler,
                                           '_add_built_in_settings'
                                           ) as mock_add_built_in_settings:
                        with mock.patch.object(
                                LambdaConfigurationResourceHandler,
                                '_get_input_key') as mock_get_input_key:
                            mock_get_input_key.return_value = '{}/lambda-function-code.zip'.format(
                                self.event['ResourceProperties']
                                ['ConfigurationKey'])
                            mock_inject_settings.return_value = expected_data[
                                'ConfigurationKey']
                            LambdaConfigurationResourceHandler.handler(
                                self.event, self.context)
                            mock_custom_resource_handler_response_succeed.assert_called_once_with(
                                self.event, self.context, expected_data,
                                expected_physical_id)
                            mock_get_access_control_role_arn.assert_called_once_with(
                                {}, self.event['ResourceProperties']
                                ['FunctionName'])
                            mock_inject_settings.assert_called_once_with(
                                self.event['ResourceProperties']['Settings'],
                                self.event['ResourceProperties']['Runtime'],
                                self.event['ResourceProperties']
                                ['ConfigurationBucket'],
                                '{}/lambda-function-code.zip'.format(
                                    self.event['ResourceProperties']
                                    ['ConfigurationKey']), 'TestFunction')
                            mock_add_built_in_settings.assert_called_once_with(
                                self.event['ResourceProperties']['Settings'],
                                self.event['StackId'])
    def test_handler_delete(self, mock_delete_role,
                            mock_custom_resource_handler_response_succeed):

        self.event['RequestType'] = 'Delete'
        self.event['PhysicalResourceId'] = 'TestStack-TestLogicalResourceId'

        expected_data = {}

        expected_physical_id = self.event['PhysicalResourceId'] + "::{}"

        LambdaConfigurationResourceHandler.handler(self.event, self.context)

        mock_custom_resource_handler_response_succeed.assert_called_once_with(
            self.event, self.context, expected_data, expected_physical_id)
        mock_delete_role.assert_called_once_with(
            {}, self.event['ResourceProperties']['FunctionName'])
Beispiel #3
0
    def test_handler_delete(self):

        self.event['RequestType'] = 'Delete'
        self.event['PhysicalResourceId'] = 'TestStack-TestLogicalResourceId'

        expected_data = {}

        expected_physical_id = self.event['PhysicalResourceId']
                
        with mock.patch.object(custom_resource_response, 'succeed') as mock_custom_resource_response_succeed:
            with mock.patch.object(role_utils, 'delete_role') as mock_delete_role:
                LambdaConfigurationResourceHandler.handler(self.event, self.context)
                mock_custom_resource_response_succeed.assert_called_once_with(self.event, self.context, expected_data, expected_physical_id)
                mock_delete_role.assert_called_once_with(
                    self.event['StackId'], 
                    self.event['LogicalResourceId'], 
                    LambdaConfigurationResourceHandler.POLICY_NAME)
    def test_handler_create(self):

        self.event['RequestType'] = 'Create'

        expected_data = {
            'ConfigurationBucket': 'TestBucket',
            'ConfigurationKey': 'TestOutputKey',
            'Runtime': 'TestRuntime',
            'Role': 'TestRole'
        }

        expected_physical_id = 'TestStack-TestLogicalResourceId'

        with mock.patch.object(
                custom_resource_response,
                'succeed') as mock_custom_resource_response_succeed:
            with mock.patch.object(role_utils,
                                   'create_role') as mock_create_role:
                mock_create_role.return_value = expected_data['Role']
                with mock.patch.object(
                        LambdaConfigurationResourceHandler,
                        '_inject_settings') as mock_inject_settings:
                    mock_inject_settings.return_value = expected_data[
                        'ConfigurationKey']
                    LambdaConfigurationResourceHandler.handler(
                        self.event, self.context)
                    mock_custom_resource_response_succeed.assert_called_once_with(
                        self.event, self.context, expected_data,
                        expected_physical_id)
                    mock_create_role.assert_called_once_with(
                        self.event['StackId'], self.event['LogicalResourceId'],
                        LambdaConfigurationResourceHandler.POLICY_NAME,
                        'lambda.amazonaws.com',
                        LambdaConfigurationResourceHandler.
                        DEFAULT_POLICY_STATEMENTS, AnyFunction())
                    mock_inject_settings.assert_called_once_with(
                        self.event['ResourceProperties']['Settings'],
                        self.event['ResourceProperties']['Runtime'],
                        self.event['ResourceProperties']
                        ['ConfigurationBucket'],
                        '{}/lambda-function-code.zip'.format(
                            self.event['ResourceProperties']
                            ['ConfigurationKey']), 'TestFunction')
Beispiel #5
0
    def test_handler_delete(self):

        self.event['RequestType'] = 'Delete'
        self.event['PhysicalResourceId'] = 'TestStack-TestLogicalResourceId'

        expected_data = {}

        expected_physical_id = self.event['PhysicalResourceId'] + "::{}"

        with mock.patch.object(
                custom_resource_response,
                'succeed') as mock_custom_resource_handler_response_succeed:
            with mock.patch.object(
                    role_utils,
                    'delete_access_control_role') as mock_delete_role:
                LambdaConfigurationResourceHandler.handler(
                    self.event, self.context)
                mock_custom_resource_handler_response_succeed.assert_called_once_with(
                    self.event, self.context, expected_data,
                    expected_physical_id)
                mock_delete_role.assert_called_once_with(
                    {}, self.event['ResourceProperties']['FunctionName'])
    def test_handler_create(self, mock_StackInfoManager,
                            mock_add_service_access_policy_to_role,
                            mock_add_services_settings, mock_get_input_key,
                            mock_get_project_service_lambda_arn,
                            mock_add_built_in_settings, mock_inject_settings,
                            mock_get_access_control_role_name,
                            mock_create_role,
                            mock_custom_resource_handler_response_succeed):

        mock_get_stack_info = mock_StackInfoManager.return_value.get_stack_info

        self.event['RequestType'] = 'Create'

        expected_data = {
            'ConfigurationBucket': 'TestBucket',
            'ConfigurationKey': 'TestOutputKey',
            'Runtime': 'TestRuntime',
            'Role': 'TestRole',
            'RoleName': 'TestRoleName',
            'ComposedLambdaConfiguration': {
                'Code': {
                    'S3Bucket': 'TestBucket',
                    'S3Key': 'TestOutputKey'
                },
                'Role': 'TestRole',
                'Runtime': 'TestRuntime'
            }
        }

        expected_physical_id = 'TestStack-TestLogicalResourceId::{}'

        mock_create_role.return_value = expected_data['Role']
        mock_get_access_control_role_name.return_value = expected_data[
            'RoleName']
        mock_get_input_key.return_value = '{}/lambda-function-code.zip'.format(
            self.event['ResourceProperties']['ConfigurationKey'])
        mock_inject_settings.return_value = expected_data['ConfigurationKey']
        mock_get_project_service_lambda_arn.return_value = None

        LambdaConfigurationResourceHandler.handler(self.event, self.context)

        mock_custom_resource_handler_response_succeed.assert_called_once_with(
            self.event, self.context, expected_data, expected_physical_id)

        mock_create_role.assert_called_once_with(
            mock_StackInfoManager.return_value, {},
            self.event['StackId'],
            self.event['ResourceProperties']['FunctionName'],
            'lambda.amazonaws.com',
            default_policy=LambdaConfigurationResourceHandler.
            get_default_policy(None))

        mock_inject_settings.assert_called_once_with(
            self.event['ResourceProperties']['Settings'],
            self.event['ResourceProperties']['Runtime'],
            self.event['ResourceProperties']['ConfigurationBucket'],
            '{}/lambda-function-code.zip'.format(
                self.event['ResourceProperties']['ConfigurationKey']),
            'TestFunction')

        mock_add_built_in_settings.assert_called_once_with(
            self.event['ResourceProperties']['Settings'],
            mock_get_stack_info.return_value)

        mock_get_project_service_lambda_arn.assert_called_once_with(
            mock_get_stack_info.return_value)

        mock_get_stack_info.assert_called_once_with(self.event['StackId'])

        mock_add_services_settings.assert_called_once_with(
            mock_get_stack_info.return_value,
            self.event['ResourceProperties']['Settings'], [
                PropertiesMatcher(i)
                for i in self.event['ResourceProperties']['Services']
            ])

        mock_add_service_access_policy_to_role.assert_called_once_with(
            expected_data['Role'], mock_add_services_settings.return_value)
Beispiel #7
0
    def test_handler_update(self, mock_StackInfoManager, mock_get_input_key,
                            mock_add_built_in_settings, mock_inject_settings,
                            mock_get_access_control_role_name,
                            mock_get_access_control_role_arn,
                            mock_custom_resource_handler_response_succeed):

        mock_get_stack_info = mock_StackInfoManager.return_value.get_stack_info

        self.event['RequestType'] = 'Update'
        self.event['PhysicalResourceId'] = 'TestStack-TestLogicalResourceId'

        expected_data = {
            'CCSettings': {
                'TestSettingKey1': 'TestSettingValue1',
                'TestSettingKey2': 'TestSettingValue2'
            },
            'ConfigurationBucket': 'TestBucket',
            'ConfigurationKey': 'TestKey/lambda-function-code.zip',
            'Runtime': 'TestRuntime',
            'Role': 'TestRole',
            'RoleName': 'TestRoleName',
            'ComposedLambdaConfiguration': {
                'Environment': {
                    'Variables': {
                        'TestSettingKey1': 'TestSettingValue1',
                        'TestSettingKey2': 'TestSettingValue2'
                    }
                },
                'Code': {
                    'S3Bucket': 'TestBucket',
                    'S3Key': 'TestKey/lambda-function-code.zip'
                },
                'Role': 'TestRole',
                'Runtime': 'TestRuntime'
            }
        }

        expected_physical_id = self.event['PhysicalResourceId'] + "::{}"

        mock_get_access_control_role_arn.return_value = expected_data['Role']
        mock_get_access_control_role_name.return_value = expected_data[
            'RoleName']
        mock_get_input_key.return_value = '{}/lambda-function-code.zip'.format(
            self.event['ResourceProperties']['ConfigurationKey'])
        mock_inject_settings.return_value = expected_data['ConfigurationKey']

        LambdaConfigurationResourceHandler.handler(self.event, self.context)

        mock_custom_resource_handler_response_succeed.assert_called_once_with(
            self.event, self.context, expected_data, expected_physical_id)

        mock_get_access_control_role_arn.assert_called_once_with(
            {}, self.event['ResourceProperties']['FunctionName'])

        mock_inject_settings.assert_called_once_with(
            self.event['ResourceProperties']['Settings'],
            self.event['ResourceProperties']['Runtime'],
            self.event['ResourceProperties']['ConfigurationBucket'],
            '{}/lambda-function-code.zip'.format(
                self.event['ResourceProperties']['ConfigurationKey']),
            'TestFunction')

        mock_add_built_in_settings.assert_called_once_with(
            self.event['ResourceProperties']['Settings'],
            mock_get_stack_info.return_value)

        mock_get_stack_info.assert_called_once_with(self.event['StackId'])
Beispiel #8
0
    def test_handler_create(self):

        self.event['RequestType'] = 'Create'

        expected_data = {
            'ConfigurationBucket': 'TestBucket',
            'ConfigurationKey': 'TestOutputKey',
            'Runtime': 'TestRuntime',
            'Role': 'TestRole'
        }

        expected_physical_id = 'TestStack-TestLogicalResourceId::{}'

        with mock.patch.object(
                custom_resource_response,
                'succeed') as mock_custom_resource_handler_response_succeed:
            with mock.patch.object(
                    role_utils,
                    'create_access_control_role') as mock_create_role:
                mock_create_role.return_value = expected_data['Role']
                with mock.patch.object(
                        LambdaConfigurationResourceHandler,
                        '_inject_settings') as mock_inject_settings:
                    with mock.patch.object(LambdaConfigurationResourceHandler,
                                           '_add_built_in_settings'
                                           ) as mock_add_built_in_settings:
                        with mock.patch.object(
                                LambdaConfigurationResourceHandler,
                                '_get_project_service_lambda_arn'
                        ) as mock_get_project_service_lambda_arn:
                            with mock.patch.object(
                                    LambdaConfigurationResourceHandler,
                                    '_get_input_key') as mock_get_input_key:
                                mock_get_input_key.return_value = '{}/lambda-function-code.zip'.format(
                                    self.event['ResourceProperties']
                                    ['ConfigurationKey'])
                                mock_inject_settings.return_value = expected_data[
                                    'ConfigurationKey']
                                mock_get_project_service_lambda_arn.return_value = None
                                LambdaConfigurationResourceHandler.handler(
                                    self.event, self.context)
                                mock_custom_resource_handler_response_succeed.assert_called_once_with(
                                    self.event, self.context, expected_data,
                                    expected_physical_id)
                                mock_create_role.assert_called_once_with(
                                    {},
                                    self.event['StackId'],
                                    self.event['ResourceProperties']
                                    ['FunctionName'],
                                    'lambda.amazonaws.com',
                                    default_policy=
                                    LambdaConfigurationResourceHandler.
                                    get_default_policy(None))
                                mock_inject_settings.assert_called_once_with(
                                    self.event['ResourceProperties']
                                    ['Settings'],
                                    self.event['ResourceProperties']
                                    ['Runtime'],
                                    self.event['ResourceProperties']
                                    ['ConfigurationBucket'],
                                    '{}/lambda-function-code.zip'.format(
                                        self.event['ResourceProperties']
                                        ['ConfigurationKey']), 'TestFunction')
                                mock_add_built_in_settings.assert_called_once_with(
                                    self.event['ResourceProperties']
                                    ['Settings'], self.event['StackId'])
                                mock_get_project_service_lambda_arn.assert_called_once_with(
                                    self.event['StackId'])
Beispiel #9
0
    def test_integration_create_update_delete_role(self):
        
        with mock.patch.object(discovery_utils,'ResourceGroupInfo') as mock_ResourceGroupInfo:

            mock_ResourceGroupInfo.return_value.resource_group_name = 'TestGroup'
            mock_ResourceGroupInfo.return_value.deployment = mock.MagicMock()
            mock_ResourceGroupInfo.return_value.deployment.deployment_name = 'TestDeployment'
            mock_ResourceGroupInfo.return_value.deployment.project = mock.MagicMock()
            mock_ResourceGroupInfo.return_value.deployment.project.project_name = 'TestProject'

            with mock.patch.object(custom_resource_response, 'succeed') as mock_custom_resource_response_succeed:

                with mock.patch.object(LambdaConfigurationResourceHandler, '_inject_settings') as mock_inject_settings:

                    mock_inject_settings.return_value = 'TestOutputConfigurationKey'

                    stack_arn = self._create_role_test_stack()

                    self.event['StackId'] = stack_arn

                    try:

                        capture_data = CaptureValue()
                        capture_physical_resource_id = CaptureValue()

                        # test create

                        self.event['RequestType'] = 'Create'
                        LambdaConfigurationResourceHandler.handler(self.event, self.context)

                        mock_custom_resource_response_succeed.assert_called_once_with(
                            self.event, 
                            self.context, 
                            capture_data, 
                            capture_physical_resource_id)

                        created_role_arn = capture_data.value['Role']

                        self._validate_role(created_role_arn, stack_arn)

                        # test update

                        mock_custom_resource_response_succeed.reset_mock()

                        self.event['RequestType'] = 'Update'
                        self.event['PhysicalResourceId'] = capture_physical_resource_id.value
                        LambdaConfigurationResourceHandler.handler(self.event, self.context)

                        mock_custom_resource_response_succeed.assert_called_once_with(
                            self.event, 
                            self.context, 
                            capture_data, 
                            capture_physical_resource_id)

                        updated_role_arn = capture_data.value['Role']

                        self.assertEquals(created_role_arn, updated_role_arn)
                        self._validate_role(updated_role_arn, stack_arn)

                        # rest delete

                        mock_custom_resource_response_succeed.reset_mock()

                        self.event['RequestType'] = 'Delete'
                        self.event['PhysicalResourceId'] = capture_physical_resource_id.value
                        LambdaConfigurationResourceHandler.handler(self.event, self.context)

                        mock_custom_resource_response_succeed.assert_called_once_with(
                            self.event, 
                            self.context, 
                            capture_data, 
                            capture_physical_resource_id)

                        self._validate_role_deleted(created_role_arn)

                    finally:

                        # self._delete_role_test_stack(stack_arn)
                        pass