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'])
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')
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)
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'])
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'])
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