Merge "Copy template version when update fails"
diff --git a/functional/test_create_update.py b/functional/test_create_update.py
index 771404a..ae81463 100644
--- a/functional/test_create_update.py
+++ b/functional/test_create_update.py
@@ -625,3 +625,51 @@
self.assertEqual({'test1': 'OS::Heat::TestResource',
'test2': 'My::TestResource'},
self.list_resources(stack_identifier))
+
+ def test_stack_update_with_new_version(self):
+ """Update handles new template version in failure.
+
+ If a stack update fails while changing the template version, update is
+ able to handle the new version fine.
+ """
+ stack_identifier = self.stack_create(
+ template=test_template_one_resource)
+
+ # Update with a new function and make the update fails
+ template = _change_rsrc_properties(test_template_two_resource,
+ ['test1'], {'fail': True})
+
+ template['heat_template_version'] = '2015-10-15'
+ template['resources']['test2']['properties']['value'] = {
+ 'list_join': [',', ['a'], ['b']]}
+ self.update_stack(stack_identifier,
+ template=template,
+ expected_status='UPDATE_FAILED')
+
+ template = _change_rsrc_properties(template,
+ ['test2'], {'value': 'Test2'})
+ self.update_stack(stack_identifier,
+ template=template,
+ expected_status='UPDATE_FAILED')
+ self._stack_delete(stack_identifier)
+
+ def test_stack_update_with_old_version(self):
+ """Update handles old template version in failure.
+
+ If a stack update fails while changing the template version, update is
+ able to handle the old version fine.
+ """
+ template = _change_rsrc_properties(
+ test_template_one_resource,
+ ['test1'], {'value': {'list_join': [',', ['a'], ['b']]}})
+ template['heat_template_version'] = '2015-10-15'
+ stack_identifier = self.stack_create(
+ template=template)
+
+ # Update with a new function and make the update fails
+ template = _change_rsrc_properties(test_template_one_resource,
+ ['test1'], {'fail': True})
+ self.update_stack(stack_identifier,
+ template=template,
+ expected_status='UPDATE_FAILED')
+ self._stack_delete(stack_identifier)