Exemple #1
0
    def test_should_not_ignore_parent_classes_even_for_remote_ones(self):
        # We want tracebacks
        cfg.CONF.set_override('debug', True)
        cfg.CONF.set_override('allowed_rpc_exception_modules',
                              ['heat.tests.test_fault_middleware'])

        error = StackNotFoundChild(stack_name='a')
        exc_info = (type(error), error, None)
        serialized = rpc_common.serialize_remote_exception(exc_info)
        remote_error = rpc_common.deserialize_remote_exception(
            cfg.CONF, serialized)

        wrapper = fault.FaultWrapper(None)
        msg = wrapper._error(remote_error)
        expected_message, expected_traceback = str(remote_error).split('\n', 1)
        expected = {
            'code': 404,
            'error': {
                'message': expected_message,
                'traceback': expected_traceback,
                'type': 'StackNotFoundChild'
            },
            'explanation': 'The resource could not be found.',
            'title': 'Not Found'
        }
        self.assertEqual(expected, msg)
Exemple #2
0
    def test_exception_with_non_ascii_chars(self):
        # We set debug to true to test the code path for serializing traces too
        cfg.CONF.set_override('debug', True)
        msg = u'Error with non-ascii chars \x80'

        class TestException(heat_exc.HeatException):
            msg_fmt = msg

        wrapper = fault.FaultWrapper(None)
        msg = wrapper._error(TestException())
        expected = {
            'code':
            500,
            'error': {
                'message': u'Error with non-ascii chars \x80',
                'traceback': 'None\n',
                'type': 'TestException'
            },
            'explanation': ('The server has either erred or is '
                            'incapable of performing the requested '
                            'operation.'),
            'title':
            'Internal Server Error'
        }
        self.assertEqual(expected, msg)
Exemple #3
0
 def test_openstack_exception_with_kwargs(self):
     wrapper = fault.FaultWrapper(None)
     msg = wrapper._error(heat_exc.StackNotFound(stack_name='a'))
     expected = {'code': 404,
                 'error': {'message': 'The Stack (a) could not be found.',
                           'traceback': None,
                           'type': 'StackNotFound'},
                 'explanation': 'The resource could not be found.',
                 'title': 'Not Found'}
     self.assertEqual(expected, msg)
Exemple #4
0
    def test_should_not_ignore_parent_classes(self):
        wrapper = fault.FaultWrapper(None)

        msg = wrapper._error(StackNotFoundChild(stack_name='a'))
        expected = {'code': 404,
                    'error': {'message': 'The Stack (a) could not be found.',
                              'traceback': None,
                              'type': 'StackNotFoundChild'},
                    'explanation': 'The resource could not be found.',
                    'title': 'Not Found'}
        self.assertEqual(expected, msg)
Exemple #5
0
 def test_openstack_exception_without_kwargs(self):
     wrapper = fault.FaultWrapper(None)
     msg = wrapper._error(heat_exc.StackResourceLimitExceeded())
     expected = {'code': 500,
                 'error': {'message': 'Maximum resources '
                                      'per stack exceeded.',
                           'traceback': None,
                           'type': 'StackResourceLimitExceeded'},
                 'explanation': 'The server has either erred or is '
                                'incapable of performing the requested '
                                'operation.',
                 'title': 'Internal Server Error'}
     self.assertEqual(expected, msg)
 def test_disguised_http_exception_with_newline(self):
     wrapper = fault.FaultWrapper(None)
     newline_error = ErrorWithNewline('Error with \n newline')
     msg = wrapper._error(heat_exc.HTTPExceptionDisguise(newline_error))
     expected = {'code': 400,
                 'error': {'message': 'Error with \n newline',
                           'traceback': None,
                           'type': 'ErrorWithNewline'},
                 'explanation': ('The server could not comply with the '
                                 'request since it is either malformed '
                                 'or otherwise incorrect.'),
                 'title': 'Bad Request'}
     self.assertEqual(expected, msg)
Exemple #7
0
 def test_openstack_exception_without_kwargs(self):
     wrapper = fault.FaultWrapper(None)
     msg = wrapper._error(heat_exc.NoServiceEndpoint())
     expected = {'code': 500,
                 'error': {'message': 'Response from Keystone does '
                                      'not contain a Heat endpoint.',
                           'traceback': None,
                           'type': 'NoServiceEndpoint'},
                 'explanation': 'The server has either erred or is '
                                'incapable of performing the requested '
                                'operation.',
                 'title': 'Internal Server Error'}
     self.assertEqual(msg, expected)
    def test_internal_server_error_when_exeption_and_parents_not_mapped(self):
        wrapper = fault.FaultWrapper(None)

        class NotMappedException(Exception):
            pass

        msg = wrapper._error(NotMappedException('A message'))
        expected = {'code': 500,
                    'error': {'traceback': None,
                              'type': 'NotMappedException'},
                    'explanation': ('The server has either erred or is '
                                    'incapable of performing the requested '
                                    'operation.'),
                    'title': 'Internal Server Error'}
        self.assertEqual(expected, msg)
    def remote_exception_helper(self, name, error):
        error.args = ()
        exc_info = (type(error), error, None)

        serialized = rpc_common.serialize_remote_exception(exc_info)
        remote_error = rpc_common.deserialize_remote_exception(
            serialized, name)
        wrapper = fault.FaultWrapper(None)
        msg = wrapper._error(remote_error)
        expected = {'code': 500,
                    'error': {'traceback': None,
                              'type': 'RemoteError'},
                    'explanation': msg['explanation'],
                    'title': 'Internal Server Error'}
        self.assertEqual(expected, msg)
 def test_remote_exception(self):
     error = heat_exc.StackNotFound(stack_name='a')
     exc_info = (type(error), error, None)
     serialized = rpc_common.serialize_remote_exception(exc_info)
     remote_error = rpc_common.deserialize_remote_exception(cfg.CONF,
                                                            serialized)
     wrapper = fault.FaultWrapper(None)
     msg = wrapper._error(remote_error)
     expected_message, expected_traceback = str(remote_error).split('\n', 1)
     expected = {'code': 404,
                 'error': {'message': expected_message,
                           'traceback': expected_traceback,
                           'type': 'StackNotFound'},
                 'explanation': 'The resource could not be found.',
                 'title': 'Not Found'}
     self.assertEqual(msg, expected)
 def test_remote_exception(self):
     # We want tracebacks
     cfg.CONF.set_override('debug', True)
     error = heat_exc.EntityNotFound(entity='Stack', name='a')
     exc_info = (type(error), error, None)
     serialized = rpc_common.serialize_remote_exception(exc_info)
     remote_error = rpc_common.deserialize_remote_exception(
         serialized, ["heat.common.exception"])
     wrapper = fault.FaultWrapper(None)
     msg = wrapper._error(remote_error)
     expected_message, expected_traceback = str(
         remote_error).split('\n', 1)
     expected = {'code': 404,
                 'error': {'message': expected_message,
                           'traceback': expected_traceback,
                           'type': 'EntityNotFound'},
                 'explanation': 'The resource could not be found.',
                 'title': 'Not Found'}
     self.assertEqual(expected, msg)
Exemple #12
0
def faultwrap_filter(app, conf, **local_conf):
    return fault.FaultWrapper(app)