Added tests for checking of handling AssertionErrors

The following tests have been added:
*test_engine_service.test_validate_new_stack_handle_assertion_error
*test_stack.test_validate_assertion_exception_rethrow
*test_stack_resource.test_validate_assertion_exception_rethrow

These tests are focused on checking the cases when we should
return 500 status codes and log the tracebacks for
AssertionException, but not wrap in the validation exception.

Related commit: I71d91a5413d7f026b332014487583b7f2762b322
Closes-Bug: #1456839
Change-Id: I30c2a91043465aa14c39cae5fb0b0d2c17e059e9
This commit is contained in:
Andrew Orlov 2015-06-16 08:11:58 -07:00
parent 25cff7933d
commit e18bb22acd
3 changed files with 57 additions and 0 deletions

View File

@ -2931,6 +2931,14 @@ class StackServiceTest(common.HeatTestCase):
self.eng._validate_new_stack,
self.ctx, 'test_existing_stack', parsed_template)
def test_validate_new_stack_handle_assertion_error(self):
tmpl = mock.MagicMock()
expected_message = 'Expected assertion error'
tmpl.validate.side_effect = AssertionError(expected_message)
exc = self.assertRaises(AssertionError, self.eng._validate_new_stack,
self.ctx, 'stack_name', tmpl)
self.assertEqual(expected_message, six.text_type(exc))
@mock.patch('heat.engine.service.ThreadGroupManager',
return_value=mock.Mock())
@mock.patch.object(stack_object.Stack, 'get_all')

View File

@ -2122,6 +2122,39 @@ class StackTest(common.HeatTestCase):
self.assertIsNone(tmpl_stack.prev_raw_template_id)
self.assertFalse(mock_store.called)
def test_validate_assertion_exception_rethrow(self):
expected_msg = 'Expected Assertion Error'
with mock.patch('heat.engine.stack.dependencies',
new_callable=mock.PropertyMock) as mock_dependencies:
mock_dependency = mock.MagicMock()
mock_dependency.validate.side_effect = AssertionError(expected_msg)
mock_dependencies.Dependencies.return_value = [mock_dependency]
stc = stack.Stack(self.ctx, utils.random_name(), self.tmpl)
expected_exception = self.assertRaises(AssertionError,
stc.validate)
self.assertEqual(expected_msg, six.text_type(expected_exception))
mock_dependency.validate.assert_called_once_with()
stc = stack.Stack(self.ctx, utils.random_name(), self.tmpl)
output_value = mock.MagicMock()
output_value.get.side_effect = AssertionError(expected_msg)
stc.outputs = {'foo': output_value}
expected_exception = self.assertRaises(AssertionError, stc.validate)
self.assertEqual(expected_msg, six.text_type(expected_exception))
output_value.get.assert_called_once_with('Value')
def test_resolve_static_data_assertion_exception_rethrow(self):
tmpl = mock.MagicMock()
expected_message = 'Expected Assertion Error'
tmpl.parse.side_effect = AssertionError(expected_message)
stc = stack.Stack(self.ctx, utils.random_name(),
tmpl, resolve_data=False)
expected_exception = self.assertRaises(AssertionError,
stc.resolve_static_data,
None)
self.assertEqual(expected_message, six.text_type(expected_exception))
class StackKwargsForCloningTest(common.HeatTestCase):
scenarios = [

View File

@ -645,6 +645,22 @@ class StackResourceAttrTest(StackResourceBaseTest):
self.assertFalse(nested.strict_validate)
self.m.VerifyAll()
def test_validate_assertion_exception_rethrow(self):
expected_message = 'Expected Assertion Error'
self.parent_resource.child_template = mock.Mock(return_value='foo')
self.parent_resource.child_params = mock.Mock(return_value={})
self.m.StubOutWithMock(stack_resource.StackResource,
'_parse_nested_stack')
name = '%s-%s' % (self.parent_stack.name, self.parent_resource.name)
stack_resource.StackResource._parse_nested_stack(
name, 'foo', {}).AndRaise(AssertionError(expected_message))
self.m.ReplayAll()
exc = self.assertRaises(AssertionError,
self.parent_resource.validate_nested_stack)
self.assertEqual(expected_message, six.text_type(exc))
self.m.VerifyAll()
class StackResourceCheckCompleteTest(StackResourceBaseTest):
scenarios = [