| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- # Copyright 2023 Cloudbase Solutions Srl
- # All Rights Reserved.
- from unittest import mock
- from coriolis import exception
- from coriolis.tests import test_base
- class ConvertedExceptionTestCase(test_base.CoriolisBaseTestCase):
- """Test suite for the Coriolis ConvertedException class."""
- def test__init__(self):
- result = exception.ConvertedException(
- code=403, title='Forbidden', explanation='test')
- self.assertEqual(result.code, 403)
- self.assertEqual(result.title, 'Forbidden')
- self.assertEqual(result.explanation, 'test')
- def test__init__without_title(self):
- result = exception.ConvertedException(code=403, explanation='test')
- self.assertEqual(result.code, 403)
- self.assertEqual(result.title, 'Forbidden')
- self.assertEqual(result.explanation, 'test')
- def test__init__with_code_not_in_status_reasons(self):
- result = exception.ConvertedException(code=450, explanation='test')
- self.assertEqual(result.code, 450)
- self.assertEqual(result.title, 'Unknown Client Error')
- self.assertEqual(result.explanation, 'test')
- class CoriolisTestException(exception.CoriolisException):
- message = "Test message with missing placeholder: %(missing_key)s"
- class CoriolisExceptionTestCase(test_base.CoriolisBaseTestCase):
- """Test suite for the Coriolis CoriolisException class."""
- def test__init__(self):
- result = exception.CoriolisException()
- self.assertEqual(result.message, 'An unknown exception occurred.')
- self.assertEqual(result.code, 500)
- self.assertEqual(result.headers, {})
- self.assertEqual(result.safe, False)
- def test__init__with_exception_in_kwargs_items(self):
- kwargs = {'test_key': 'test_value', 'code': 500}
- kwargs['exc'] = ValueError('Test exception message')
- result = exception.CoriolisException(**kwargs)
- kwargs['exc'] = str(kwargs['exc'])
- self.assertEqual(result.msg, 'An unknown exception occurred.')
- self.assertEqual(result.kwargs, kwargs)
- def test__init__custom_message_and_kwargs(self):
- custom_message = 'test-message'
- kwargs = {'test-key': 'test-value'}
- result = exception.CoriolisException(custom_message, **kwargs)
- expected_message = custom_message % kwargs
- expected_kwargs = {'test-key': 'test-value', 'code': 500}
- self.assertEqual(result.msg, expected_message)
- self.assertEqual(result.kwargs, expected_kwargs)
- @mock.patch.object(exception, 'LOG')
- @mock.patch.object(exception, 'CONF')
- def test__init__with_exception_in_string_format(self, mock_conf, mock_log):
- mock_conf.fatal_exception_format_errors = False
- kwargs = {'some_key': 'some_value'}
- result = CoriolisTestException(**kwargs)
- self.assertEqual(result.msg, CoriolisTestException.message)
- mock_log.exception.assert_called_once_with(
- 'Exception in string format operation')
- expected_calls = [
- mock.call("%(name)s: %(value)s",
- {'name': 'some_key', 'value': 'some_value'}),
- mock.call("%(name)s: %(value)s", {'name': 'code', 'value': 500})
- ]
- mock_log.error.assert_has_calls(expected_calls)
- self.assertEqual(mock_log.error.call_count, 2)
- @mock.patch.object(exception, 'CONF')
- def test__init__with_fatal_exception_format_errors(self, mock_conf):
- mock_conf.fatal_exception_format_errors = True
- kwargs = {'some_key': 'some_value'}
- self.assertRaises(KeyError, CoriolisTestException, **kwargs)
- def test__init__with_exception_message(self):
- message = ValueError('Test exception message')
- result = exception.CoriolisException(message)
- self.assertEqual(str(result), 'Test exception message')
- @mock.patch.object(exception, 'CONF')
- def test__unicode__(self, mock_conf):
- mock_conf.fatal_exception_format_errors = False
- kwargs = {'missing_key': 'some_value'}
- exception_instance = CoriolisTestException(**kwargs)
- result = exception_instance.__unicode__()
- self.assertEqual(
- result, "Test message with missing placeholder: some_value")
- class APIExceptionTestCase(test_base.CoriolisBaseTestCase):
- """Test suite for the Coriolis APIException class."""
- def test__init__(self):
- result = exception.APIException(service='test_service')
- self.assertEqual(result.kwargs['service'], 'test_service')
- def test__init__no_service(self):
- result = exception.APIException()
- self.assertEqual(result.kwargs['service'], 'unknown')
|