コード例 #1
0
    def test_missing_event_function(self):
        event = {
            'module': 'test_module',
            # missing: 'function': 'test_function_without_decorator',
            'parameters': {
                'param_a': 'param_a_value'
            }
        }

        context = self.__get_context()

        with self.assertRaisesRegexp(ValueError, 'No "function" property'):
            cgf_lambda_service.dispatch(event, context)
コード例 #2
0
    def test_no_such_module(self, mock_import_module):
        event = {
            'module': 'does_not_exist',
            'function': 'test_function',
            'parameters': {
                'param_a': 'param_a_value'
            }
        }

        context = self.__get_context()

        with self.assertRaises(ImportError):
            cgf_lambda_service.dispatch(event, context)

        mock_import_module.assert_called_once_with('api.does_not_exist')
コード例 #3
0
    def test_normal_last(self, mock_import_module):
        event = {
            'module': 'test_module',
            'function': 'test_function_last',
            'parameters': {
                'param_a': 'param_a_value',
                'param_b': 'param_b_value'
            }
        }

        context = self.__get_context()

        mock_handler.response = 'expected response'

        response = cgf_lambda_service.dispatch(event, context)

        self.assertEquals(mock_handler.response, response)
        self.assertEquals(event['parameters']['param_a'],
                          mock_handler.received_param_a)
        self.assertEquals(event['parameters']['param_b'],
                          mock_handler.received_param_b)
        self.assertIs(event, mock_handler.received_request.event)
        self.assertIs(context, mock_handler.received_request.context)

        mock_import_module.assert_called_once_with('api.test_module')
コード例 #4
0
    def test_logging_filter(self, mock_import_module):
        event = {
            'module': 'test_module',
            'function': 'test_function_with_parameter_logging_filter',
            'parameters': {
                'param_a': {
                    'key1': 'DO_NOT_LOG',
                    'key2': 'THIS_SHOULD_BE_LOGGED'
                },
                'param_b': 'DO_NOT_LOG'
            }
        }

        context = self.__get_context()

        mock_handler.response = {'message': 'expected response'}

        with mock.patch('sys.stdout', six.StringIO()) as mock_stdout:
            response = cgf_lambda_service.dispatch(event, context)

        self.assertEquals(mock_handler.response, response)
        self.assertEquals(event['parameters']['param_a'],
                          mock_handler.received_param_a)
        self.assertEquals(event['parameters']['param_b'],
                          mock_handler.received_param_b)
        self.assertIs(event, mock_handler.received_request.event)
        self.assertIs(context, mock_handler.received_request.context)

        output = mock_stdout.getvalue()
        self.assertTrue('THIS_SHOULD_BE_LOGGED' in output)
        self.assertFalse('DO_NOT_LOG' in output)
        self.assertTrue('REPLACEMENT_VALUE' in output)
コード例 #5
0
    def test_missing_decorator(self, mock_import_module):
        event = {
            'module': 'test_module',
            'function': 'test_function_without_decorator',
            'parameters': {
                'param_a': 'param_a_value'
            }
        }

        context = self.__get_context()

        with self.assertRaisesRegexp(ValueError,
                                     'not a service dispatch handler'):
            cgf_lambda_service.dispatch(event, context)

        mock_import_module.assert_called_once_with('api.test_module')
コード例 #6
0
    def test_no_such_function(self, mock_import_module):
        event = {
            'module': 'test_module',
            'function': 'does_not_exist',
            'parameters': {
                'param_a': 'param_a_value'
            }
        }

        context = self.__get_context()

        with self.assertRaisesRegexp(
                ValueError, 'does not have an "does_not_exist" attribute'):
            cgf_lambda_service.dispatch(event, context)

        mock_import_module.assert_called_once_with('api.test_module')
コード例 #7
0
    def test_missing_parameter_alone(self, mock_import_module):
        event = {
            'module': 'test_module',
            'function': 'test_function_alone',
            'parameters': {
                # missing:   'param_a': 'param_a_value'
            }
        }

        context = self.__get_context()

        with self.assertRaisesRegexp(
                cgf_lambda_service.ClientError,
                'Expected the following parameters: param_a'):
            cgf_lambda_service.dispatch(event, context)

        mock_import_module.assert_called_once_with('api.test_module')
コード例 #8
0
    def test_first_parameter_name_conflict(self, mock_import_module):
        event = {
            'module': 'test_module',
            'function': 'test_function_with_first_parameter_name_conflict',
            'parameters': {
                'param_a': 'param_a_value',
                'param_b': 'param_b_value'
            }
        }

        context = self.__get_context()

        with self.assertRaisesRegexp(
                ValueError,
                'The first parameter\'s name, param_a, matches an api parameter name.'
        ):
            cgf_lambda_service.dispatch(event, context)

        mock_import_module.assert_called_once_with('api.test_module')
コード例 #9
0
    def test_no_parameter_value_with_default_value(self, mock_import_module):
        event = {
            'module': 'test_module',
            'function': 'test_function_with_default_value',
            'parameters': {
                # missing: 'param_a': 'param_a_value'
            }
        }

        context = self.__get_context()

        mock_handler.response = {'message': 'expected response'}

        response = cgf_lambda_service.dispatch(event, context)

        self.assertEquals(mock_handler.response, response)
        self.assertEquals('default param a', mock_handler.received_param_a)
        self.assertIs(event, mock_handler.received_request.event)
        self.assertIs(context, mock_handler.received_request.context)

        mock_import_module.assert_called_once_with('api.test_module')
コード例 #10
0
    def test_missing_parameters_when_no_parameters_expected(
            self, mock_import_module):
        event = {
            'module': 'test_module',
            'function': 'test_function_without_parameters'
            # missing 'parameters': {
            #    'param_a': 'param_a_value'
            # }
        }

        context = self.__get_context()

        mock_handler.response = 'expected response'

        response = cgf_lambda_service.dispatch(event, context)

        self.assertEquals(mock_handler.response, response)
        self.assertIs(event, mock_handler.received_request.event)
        self.assertIs(context, mock_handler.received_request.context)

        mock_import_module.assert_called_once_with('api.test_module')
コード例 #11
0
    def test_logging_filter(self, mock_import_module):

        event = {
            'module': 'test_module',
            'function': 'test_function_with_parameter_logging_filter',
            'parameters': {
                'param_a': {
                    'key1': 'DO_NOT_LOG',
                    'key2': 'THIS_SHOULD_BE_LOGGED'
                },
                'param_b': 'DO_NOT_LOG'
            }
        }

        context = self.__get_context()

        mock_handler.response = 'expected response'

        printed_lines = []
        with mock.patch('__builtin__.print',
                        lambda line: printed_lines.append(line)):
            response = cgf_lambda_service.dispatch(event, context)

        output = '\n'.join(printed_lines)
        print(output)
        print()

        self.assertEquals(mock_handler.response, response)
        self.assertEquals(event['parameters']['param_a'],
                          mock_handler.received_param_a)
        self.assertEquals(event['parameters']['param_b'],
                          mock_handler.received_param_b)
        self.assertIs(event, mock_handler.received_request.event)
        self.assertIs(context, mock_handler.received_request.context)

        self.assertTrue('THIS_SHOULD_BE_LOGGED' in output)
        self.assertFalse('DO_NOT_LOG' in output)
        self.assertTrue('REPLACEMENT_VALUE' in output)
コード例 #12
0
    def test_extra_parameter_with_kwargs(self, mock_import_module):
        event = {
            'module': 'test_module',
            'function': 'test_function_with_kwargs',
            'parameters': {
                'param_a': 'param_a_value',
                'param_b': 'param_b_value'
            }
        }

        context = self.__get_context()

        mock_handler.response = {'message': 'expected response'}

        response = cgf_lambda_service.dispatch(event, context)

        self.assertEquals(mock_handler.response, response)
        self.assertEquals({'param_b': event['parameters']['param_b']},
                          mock_handler.received_kwargs)
        self.assertIs(event, mock_handler.received_request.event)
        self.assertIs(context, mock_handler.received_request.context)

        mock_import_module.assert_called_once_with('api.test_module')