| #    Licensed under the Apache License, Version 2.0 (the "License"); you may | 
 | #    not use this file except in compliance with the License. You may obtain | 
 | #    a copy of the License at | 
 | # | 
 | #         http://www.apache.org/licenses/LICENSE-2.0 | 
 | # | 
 | #    Unless required by applicable law or agreed to in writing, software | 
 | #    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT | 
 | #    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the | 
 | #    License for the specific language governing permissions and limitations | 
 | #    under the License. | 
 |  | 
 | from heat_integrationtests.functional import functional_base | 
 |  | 
 |  | 
 | cfn_template = ''' | 
 | AWSTemplateFormatVersion: 2010-09-09 | 
 | Parameters: | 
 |   env_type: | 
 |     Default: test | 
 |     Type: String | 
 |     AllowedValues: [prod, test] | 
 |   zone: | 
 |     Type: String | 
 |     Default: beijing | 
 | Conditions: | 
 |   Prod: {"Fn::Equals" : [{Ref: env_type}, "prod"]} | 
 |   Test: | 
 |     Fn::Not: | 
 |     - Fn::Equals: | 
 |       - Ref: env_type | 
 |       - prod | 
 |   Beijing_Prod: | 
 |     Fn::And: | 
 |     - Fn::Equals: | 
 |       - Ref: env_type | 
 |       - prod | 
 |     - Fn::Equals: | 
 |       - Ref: zone | 
 |       - beijing | 
 |   Xian_Zone: | 
 |     Fn::Equals: | 
 |     - Ref: zone | 
 |     - xian | 
 |   Xianyang_Zone: | 
 |     Fn::Equals: | 
 |     - Ref: zone | 
 |     - xianyang | 
 |   Fujian_Zone: | 
 |     Fn::Or: | 
 |     - Fn::Equals: | 
 |       - Ref: zone | 
 |       - fuzhou | 
 |     - Fn::Equals: | 
 |       - Ref: zone | 
 |       - xiamen | 
 |   Fujian_Prod: | 
 |     Fn::And: | 
 |     - Fujian_Zone | 
 |     - Prod | 
 |   Shannxi_Provice: | 
 |     Fn::Or: | 
 |     - Xian_Zone | 
 |     - Xianyang_Zone | 
 |   Not_Shannxi: | 
 |     Fn::Not: [Shannxi_Provice] | 
 | Resources: | 
 |   test_res: | 
 |     Type: OS::Heat::TestResource | 
 |     Properties: | 
 |       value: {"Fn::If": ["Prod", "env_is_prod", "env_is_test"]} | 
 |   prod_res: | 
 |     Type: OS::Heat::TestResource | 
 |     Properties: | 
 |       value: prod_res | 
 |     Condition: Prod | 
 |   test_res1: | 
 |     Type: OS::Heat::TestResource | 
 |     Properties: | 
 |       value: just in test env | 
 |     Condition: Test | 
 |   beijing_prod_res: | 
 |     Type: OS::Heat::TestResource | 
 |     Properties: | 
 |       value: beijing_prod_res | 
 |     Condition: Beijing_Prod | 
 |   fujian_res: | 
 |     Type: OS::Heat::TestResource | 
 |     Condition: Fujian_Zone | 
 |     Properties: | 
 |       value: fujian_res | 
 |   fujian_prod_res: | 
 |     Type: OS::Heat::TestResource | 
 |     Condition: Fujian_Prod | 
 |     Properties: | 
 |       value: fujian_prod_res | 
 |   shannxi_res: | 
 |     Type: OS::Heat::TestResource | 
 |     Condition: Shannxi_Provice | 
 |     Properties: | 
 |       value: shannxi_res | 
 |   not_shannxi_res: | 
 |     Type: OS::Heat::TestResource | 
 |     Condition: Not_Shannxi | 
 |     Properties: | 
 |       value: not_shannxi_res | 
 | Outputs: | 
 |   res_value: | 
 |     Value: {"Fn::GetAtt": [prod_res, output]} | 
 |     Condition: Prod | 
 |   test_res_value: | 
 |     Value: {"Fn::GetAtt": [test_res, output]} | 
 |   prod_resource: | 
 |     Value: {"Fn::If": [Prod, {Ref: prod_res}, 'no_prod_res']} | 
 |   test_res1_value: | 
 |     Value: {"Fn::If": [Test, {"Fn::GetAtt": [test_res1, output]}, | 
 |                        'no_test_res1']} | 
 |   beijing_prod_res: | 
 |     Value: {"Fn::If": [Beijing_Prod, {Ref: beijing_prod_res}, 'no_prod_res']} | 
 | ''' | 
 |  | 
 | hot_template = ''' | 
 | heat_template_version: 2016-10-14 | 
 | parameters: | 
 |   env_type: | 
 |     default: test | 
 |     type: string | 
 |     constraints: | 
 |       - allowed_values: [prod, test] | 
 |   zone: | 
 |     type: string | 
 |     default: beijing | 
 | conditions: | 
 |   prod: {equals : [{get_param: env_type}, "prod"]} | 
 |   test: | 
 |     not: | 
 |       equals: | 
 |       - get_param: env_type | 
 |       - prod | 
 |   beijing_prod: | 
 |     and: | 
 |     - equals: | 
 |       - get_param: zone | 
 |       - beijing | 
 |     - equals: | 
 |       - get_param: env_type | 
 |       - prod | 
 |   xian_zone: | 
 |     equals: | 
 |     - get_param: zone | 
 |     - xian | 
 |   xianyang_zone: | 
 |     equals: | 
 |     - get_param: zone | 
 |     - xianyang | 
 |   fujian_zone: | 
 |     or: | 
 |     - equals: | 
 |       - get_param: zone | 
 |       - fuzhou | 
 |     - equals: | 
 |       - get_param: zone | 
 |       - xiamen | 
 |   fujian_prod: | 
 |     and: | 
 |     - fujian_zone | 
 |     - prod | 
 |   shannxi_provice: | 
 |     or: | 
 |     - xian_zone | 
 |     - xianyang_zone | 
 |   not_shannxi: | 
 |     not: shannxi_provice | 
 | resources: | 
 |   test_res: | 
 |     type: OS::Heat::TestResource | 
 |     properties: | 
 |       value: {if: ["prod", "env_is_prod", "env_is_test"]} | 
 |   prod_res: | 
 |     type: OS::Heat::TestResource | 
 |     properties: | 
 |       value: prod_res | 
 |     condition: prod | 
 |   test_res1: | 
 |     type: OS::Heat::TestResource | 
 |     properties: | 
 |       value: just in test env | 
 |     condition: test | 
 |   beijing_prod_res: | 
 |     type: OS::Heat::TestResource | 
 |     properties: | 
 |       value: beijing_prod_res | 
 |     condition: beijing_prod | 
 |   fujian_res: | 
 |     type: OS::Heat::TestResource | 
 |     condition: fujian_zone | 
 |     properties: | 
 |       value: fujian_res | 
 |   fujian_prod_res: | 
 |     type: OS::Heat::TestResource | 
 |     condition: fujian_prod | 
 |     properties: | 
 |       value: fujian_prod_res | 
 |   shannxi_res: | 
 |     type: OS::Heat::TestResource | 
 |     condition: shannxi_provice | 
 |     properties: | 
 |       value: shannxi_res | 
 |   not_shannxi_res: | 
 |     type: OS::Heat::TestResource | 
 |     condition: not_shannxi | 
 |     properties: | 
 |       value: not_shannxi_res | 
 | outputs: | 
 |   res_value: | 
 |     value: {get_attr: [prod_res, output]} | 
 |     condition: prod | 
 |   test_res_value: | 
 |     value: {get_attr: [test_res, output]} | 
 |   prod_resource: | 
 |     value: {if: [prod, {get_resource: prod_res}, 'no_prod_res']} | 
 |   test_res1_value: | 
 |     value: {if: [test, {get_attr: [test_res1, output]}, 'no_test_res1']} | 
 |   beijing_prod_res: | 
 |     value: {if: [beijing_prod, {get_resource: beijing_prod_res}, | 
 |                  'no_prod_res']} | 
 | ''' | 
 |  | 
 | before_rename_tmpl = ''' | 
 | heat_template_version: 2016-10-14 | 
 | parameters: | 
 |   env_type: | 
 |     default: test | 
 |     type: string | 
 | conditions: | 
 |   cd1: {equals : [{get_param: env_type}, "prod"]} | 
 | resources: | 
 |   test: | 
 |     type: OS::Heat::TestResource | 
 |     properties: | 
 |       value: {if: [cd1, 'prod', 'test']} | 
 | ''' | 
 |  | 
 | after_rename_tmpl = ''' | 
 | heat_template_version: 2016-10-14 | 
 | parameters: | 
 |   env_type: | 
 |     default: prod | 
 |     type: string | 
 | conditions: | 
 |   cd2: {equals : [{get_param: env_type}, "prod"]} | 
 | resources: | 
 |   test: | 
 |     type: OS::Heat::TestResource | 
 |     properties: | 
 |       value: {if: [cd2, 'prod', 'test']} | 
 |   test2: | 
 |     type: OS::Heat::TestResource | 
 |     properties: | 
 |       value: {if: [cd2, 'prod', 'test']} | 
 | ''' | 
 |  | 
 | fail_rename_tmpl = ''' | 
 | heat_template_version: 2016-10-14 | 
 | parameters: | 
 |   env_type: | 
 |     default: prod | 
 |     type: string | 
 | conditions: | 
 |   cd3: {equals : [{get_param: env_type}, "prod"]} | 
 | resources: | 
 |   test: | 
 |     type: OS::Heat::TestResource | 
 |     properties: | 
 |       value: {if: [cd3, 'prod', 'test']} | 
 |   test2: | 
 |     type: OS::Heat::TestResource | 
 |     properties: | 
 |       value: {if: [cd3, 'prod', 'test']} | 
 |   test_fail: | 
 |     type: OS::Heat::TestResource | 
 |     properties: | 
 |       fail: True | 
 |     depends_on: [test, test2] | 
 | ''' | 
 |  | 
 | recover_rename_tmpl = ''' | 
 | heat_template_version: 2016-10-14 | 
 | parameters: | 
 |   env_type: | 
 |     default: prod | 
 |     type: string | 
 | conditions: | 
 |   cd3: {equals : [{get_param: env_type}, "prod"]} | 
 | resources: | 
 |   test2: | 
 |     type: OS::Heat::TestResource | 
 |     properties: | 
 |       value: {if: [cd3, 'prod', 'test']} | 
 |   test_fail: | 
 |     type: OS::Heat::TestResource | 
 |     properties: | 
 |       fail: False | 
 |     depends_on: [test2] | 
 | ''' | 
 |  | 
 |  | 
 | class CreateUpdateResConditionTest(functional_base.FunctionalTestsBase): | 
 |  | 
 |     def res_assert_for_prod(self, resources, bj_prod=True, fj_zone=False, | 
 |                             shannxi_provice=False): | 
 |         res_names = [res.resource_name for res in resources] | 
 |         if bj_prod: | 
 |             self.assertEqual(4, len(resources)) | 
 |             self.assertIn('beijing_prod_res', res_names) | 
 |             self.assertIn('not_shannxi_res', res_names) | 
 |         elif fj_zone: | 
 |             self.assertEqual(5, len(resources)) | 
 |             self.assertIn('fujian_res', res_names) | 
 |             self.assertNotIn('beijing_prod_res', res_names) | 
 |             self.assertIn('not_shannxi_res', res_names) | 
 |             self.assertIn('fujian_prod_res', res_names) | 
 |         elif shannxi_provice: | 
 |             self.assertEqual(3, len(resources)) | 
 |             self.assertIn('shannxi_res', res_names) | 
 |         else: | 
 |             self.assertEqual(3, len(resources)) | 
 |             self.assertIn('not_shannxi_res', res_names) | 
 |         self.assertIn('prod_res', res_names) | 
 |         self.assertIn('test_res', res_names) | 
 |  | 
 |     def res_assert_for_test(self, resources, fj_zone=False, | 
 |                             shannxi_provice=False): | 
 |         res_names = [res.resource_name for res in resources] | 
 |  | 
 |         if fj_zone: | 
 |             self.assertEqual(4, len(resources)) | 
 |             self.assertIn('fujian_res', res_names) | 
 |             self.assertIn('not_shannxi_res', res_names) | 
 |         elif shannxi_provice: | 
 |             self.assertEqual(3, len(resources)) | 
 |             self.assertNotIn('fujian_res', res_names) | 
 |             self.assertIn('shannxi_res', res_names) | 
 |         else: | 
 |             self.assertEqual(3, len(resources)) | 
 |             self.assertIn('not_shannxi_res', res_names) | 
 |         self.assertIn('test_res', res_names) | 
 |         self.assertIn('test_res1', res_names) | 
 |         self.assertNotIn('prod_res', res_names) | 
 |  | 
 |     def output_assert_for_prod(self, stack_id, bj_prod=True): | 
 |         output = self.client.stacks.output_show(stack_id, | 
 |                                                 'res_value')['output'] | 
 |         self.assertEqual('prod_res', output['output_value']) | 
 |  | 
 |         test_res_value = self.client.stacks.output_show( | 
 |             stack_id, 'test_res_value')['output'] | 
 |         self.assertEqual('env_is_prod', test_res_value['output_value']) | 
 |  | 
 |         prod_resource = self.client.stacks.output_show( | 
 |             stack_id, 'prod_resource')['output'] | 
 |         self.assertNotEqual('no_prod_res', prod_resource['output_value']) | 
 |  | 
 |         test_res_output = self.client.stacks.output_show( | 
 |             stack_id, 'test_res1_value')['output'] | 
 |         self.assertEqual('no_test_res1', test_res_output['output_value']) | 
 |  | 
 |         beijing_prod_res = self.client.stacks.output_show( | 
 |             stack_id, 'beijing_prod_res')['output'] | 
 |         if bj_prod: | 
 |             self.assertNotEqual('no_prod_res', | 
 |                                 beijing_prod_res['output_value']) | 
 |         else: | 
 |             self.assertEqual('no_prod_res', beijing_prod_res['output_value']) | 
 |  | 
 |     def output_assert_for_test(self, stack_id): | 
 |         output = self.client.stacks.output_show(stack_id, | 
 |                                                 'res_value')['output'] | 
 |         self.assertIsNone(output['output_value']) | 
 |  | 
 |         test_res_value = self.client.stacks.output_show( | 
 |             stack_id, 'test_res_value')['output'] | 
 |         self.assertEqual('env_is_test', test_res_value['output_value']) | 
 |  | 
 |         prod_resource = self.client.stacks.output_show( | 
 |             stack_id, 'prod_resource')['output'] | 
 |         self.assertEqual('no_prod_res', prod_resource['output_value']) | 
 |  | 
 |         test_res_output = self.client.stacks.output_show( | 
 |             stack_id, 'test_res1_value')['output'] | 
 |         self.assertEqual('just in test env', | 
 |                          test_res_output['output_value']) | 
 |  | 
 |         beijing_prod_res = self.client.stacks.output_show( | 
 |             stack_id, 'beijing_prod_res')['output'] | 
 |         self.assertEqual('no_prod_res', beijing_prod_res['output_value']) | 
 |  | 
 |     def test_stack_create_update_cfn_template_test_to_prod(self): | 
 |         stack_identifier = self.stack_create(template=cfn_template) | 
 |         resources = self.client.resources.list(stack_identifier) | 
 |         self.res_assert_for_test(resources) | 
 |         self.output_assert_for_test(stack_identifier) | 
 |  | 
 |         parms = {'zone': 'fuzhou'} | 
 |         self.update_stack(stack_identifier, | 
 |                           template=cfn_template, | 
 |                           parameters=parms) | 
 |  | 
 |         resources = self.client.resources.list(stack_identifier) | 
 |         self.res_assert_for_test(resources, fj_zone=True) | 
 |         self.output_assert_for_test(stack_identifier) | 
 |  | 
 |         parms = {'zone': 'xianyang'} | 
 |         self.update_stack(stack_identifier, | 
 |                           template=cfn_template, | 
 |                           parameters=parms) | 
 |  | 
 |         resources = self.client.resources.list(stack_identifier) | 
 |         self.res_assert_for_test(resources, shannxi_provice=True) | 
 |         self.output_assert_for_test(stack_identifier) | 
 |  | 
 |         parms = {'env_type': 'prod'} | 
 |         self.update_stack(stack_identifier, | 
 |                           template=cfn_template, | 
 |                           parameters=parms) | 
 |  | 
 |         resources = self.client.resources.list(stack_identifier) | 
 |         self.res_assert_for_prod(resources) | 
 |         self.output_assert_for_prod(stack_identifier) | 
 |  | 
 |         parms = {'env_type': 'prod', | 
 |                  'zone': 'shanghai'} | 
 |         self.update_stack(stack_identifier, | 
 |                           template=cfn_template, | 
 |                           parameters=parms) | 
 |  | 
 |         resources = self.client.resources.list(stack_identifier) | 
 |         self.res_assert_for_prod(resources, False) | 
 |         self.output_assert_for_prod(stack_identifier, False) | 
 |  | 
 |         parms = {'env_type': 'prod', | 
 |                  'zone': 'xiamen'} | 
 |         self.update_stack(stack_identifier, | 
 |                           template=cfn_template, | 
 |                           parameters=parms) | 
 |  | 
 |         resources = self.client.resources.list(stack_identifier) | 
 |         self.res_assert_for_prod(resources, bj_prod=False, fj_zone=True) | 
 |         self.output_assert_for_prod(stack_identifier, False) | 
 |  | 
 |         parms = {'env_type': 'prod', | 
 |                  'zone': 'xianyang'} | 
 |         self.update_stack(stack_identifier, | 
 |                           template=cfn_template, | 
 |                           parameters=parms) | 
 |  | 
 |         resources = self.client.resources.list(stack_identifier) | 
 |         self.res_assert_for_prod(resources, bj_prod=False, fj_zone=False, | 
 |                                  shannxi_provice=True) | 
 |         self.output_assert_for_prod(stack_identifier, False) | 
 |  | 
 |     def test_stack_create_update_cfn_template_prod_to_test(self): | 
 |         parms = {'env_type': 'prod'} | 
 |         stack_identifier = self.stack_create(template=cfn_template, | 
 |                                              parameters=parms) | 
 |         resources = self.client.resources.list(stack_identifier) | 
 |         self.res_assert_for_prod(resources) | 
 |         self.output_assert_for_prod(stack_identifier) | 
 |  | 
 |         parms = {'zone': 'xiamen', | 
 |                  'env_type': 'prod'} | 
 |         self.update_stack(stack_identifier, | 
 |                           template=cfn_template, | 
 |                           parameters=parms) | 
 |  | 
 |         resources = self.client.resources.list(stack_identifier) | 
 |         self.res_assert_for_prod(resources, bj_prod=False, fj_zone=True) | 
 |         self.output_assert_for_prod(stack_identifier, bj_prod=False) | 
 |  | 
 |         parms = {'zone': 'xianyang', | 
 |                  'env_type': 'prod'} | 
 |         self.update_stack(stack_identifier, | 
 |                           template=cfn_template, | 
 |                           parameters=parms) | 
 |  | 
 |         resources = self.client.resources.list(stack_identifier) | 
 |         self.res_assert_for_prod(resources, bj_prod=False, fj_zone=False, | 
 |                                  shannxi_provice=True) | 
 |         self.output_assert_for_prod(stack_identifier, bj_prod=False) | 
 |  | 
 |         parms = {'zone': 'shanghai', | 
 |                  'env_type': 'prod'} | 
 |         self.update_stack(stack_identifier, | 
 |                           template=cfn_template, | 
 |                           parameters=parms) | 
 |  | 
 |         resources = self.client.resources.list(stack_identifier) | 
 |         self.res_assert_for_prod(resources, bj_prod=False, fj_zone=False, | 
 |                                  shannxi_provice=False) | 
 |         self.output_assert_for_prod(stack_identifier, bj_prod=False) | 
 |  | 
 |         parms = {'env_type': 'test'} | 
 |         self.update_stack(stack_identifier, | 
 |                           template=cfn_template, | 
 |                           parameters=parms) | 
 |  | 
 |         resources = self.client.resources.list(stack_identifier) | 
 |         self.res_assert_for_test(resources) | 
 |         self.output_assert_for_test(stack_identifier) | 
 |  | 
 |         parms = {'env_type': 'test', | 
 |                  'zone': 'fuzhou'} | 
 |         self.update_stack(stack_identifier, | 
 |                           template=cfn_template, | 
 |                           parameters=parms) | 
 |  | 
 |         resources = self.client.resources.list(stack_identifier) | 
 |         self.res_assert_for_test(resources, fj_zone=True) | 
 |         self.output_assert_for_test(stack_identifier) | 
 |  | 
 |         parms = {'env_type': 'test', | 
 |                  'zone': 'xianyang'} | 
 |         self.update_stack(stack_identifier, | 
 |                           template=cfn_template, | 
 |                           parameters=parms) | 
 |  | 
 |         resources = self.client.resources.list(stack_identifier) | 
 |         self.res_assert_for_test(resources, fj_zone=False, | 
 |                                  shannxi_provice=True) | 
 |         self.output_assert_for_test(stack_identifier) | 
 |  | 
 |     def test_stack_create_update_hot_template_test_to_prod(self): | 
 |         stack_identifier = self.stack_create(template=hot_template) | 
 |         resources = self.client.resources.list(stack_identifier) | 
 |         self.res_assert_for_test(resources) | 
 |         self.output_assert_for_test(stack_identifier) | 
 |  | 
 |         parms = {'zone': 'xianyang'} | 
 |         self.update_stack(stack_identifier, | 
 |                           template=hot_template, | 
 |                           parameters=parms) | 
 |  | 
 |         resources = self.client.resources.list(stack_identifier) | 
 |         self.res_assert_for_test(resources, shannxi_provice=True) | 
 |         self.output_assert_for_test(stack_identifier) | 
 |  | 
 |         parms = {'env_type': 'prod'} | 
 |         self.update_stack(stack_identifier, | 
 |                           template=hot_template, | 
 |                           parameters=parms) | 
 |  | 
 |         resources = self.client.resources.list(stack_identifier) | 
 |         self.res_assert_for_prod(resources) | 
 |         self.output_assert_for_prod(stack_identifier) | 
 |  | 
 |         parms = {'env_type': 'prod', | 
 |                  'zone': 'shanghai'} | 
 |         self.update_stack(stack_identifier, | 
 |                           template=hot_template, | 
 |                           parameters=parms) | 
 |  | 
 |         resources = self.client.resources.list(stack_identifier) | 
 |         self.res_assert_for_prod(resources, False) | 
 |         self.output_assert_for_prod(stack_identifier, False) | 
 |  | 
 |         parms = {'env_type': 'prod', | 
 |                  'zone': 'xianyang'} | 
 |         self.update_stack(stack_identifier, | 
 |                           template=hot_template, | 
 |                           parameters=parms) | 
 |  | 
 |         resources = self.client.resources.list(stack_identifier) | 
 |         self.res_assert_for_prod(resources, False, shannxi_provice=True) | 
 |         self.output_assert_for_prod(stack_identifier, False) | 
 |  | 
 |     def test_stack_create_update_hot_template_prod_to_test(self): | 
 |         parms = {'env_type': 'prod'} | 
 |         stack_identifier = self.stack_create(template=hot_template, | 
 |                                              parameters=parms) | 
 |         resources = self.client.resources.list(stack_identifier) | 
 |         self.res_assert_for_prod(resources) | 
 |         self.output_assert_for_prod(stack_identifier) | 
 |  | 
 |         parms = {'env_type': 'prod', | 
 |                  'zone': 'xianyang'} | 
 |         self.update_stack(stack_identifier, | 
 |                           template=hot_template, | 
 |                           parameters=parms) | 
 |  | 
 |         resources = self.client.resources.list(stack_identifier) | 
 |         self.res_assert_for_prod(resources, False, shannxi_provice=True) | 
 |         self.output_assert_for_prod(stack_identifier, False) | 
 |  | 
 |         parms = {'env_type': 'test'} | 
 |         self.update_stack(stack_identifier, | 
 |                           template=hot_template, | 
 |                           parameters=parms) | 
 |  | 
 |         resources = self.client.resources.list(stack_identifier) | 
 |         self.res_assert_for_test(resources) | 
 |         self.output_assert_for_test(stack_identifier) | 
 |  | 
 |         parms = {'env_type': 'test', | 
 |                  'zone': 'xianyang'} | 
 |         self.update_stack(stack_identifier, | 
 |                           template=hot_template, | 
 |                           parameters=parms) | 
 |  | 
 |         resources = self.client.resources.list(stack_identifier) | 
 |         self.res_assert_for_test(resources, fj_zone=False, | 
 |                                  shannxi_provice=True) | 
 |         self.output_assert_for_test(stack_identifier) | 
 |  | 
 |     def test_condition_rename(self): | 
 |         stack_identifier = self.stack_create(template=before_rename_tmpl) | 
 |         self.update_stack(stack_identifier, template=after_rename_tmpl) | 
 |         self.update_stack(stack_identifier, template=fail_rename_tmpl, | 
 |                           expected_status='UPDATE_FAILED') | 
 |         self.update_stack(stack_identifier, template=recover_rename_tmpl) |