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)