diff options
author | Jenkins <jenkins@review.openstack.org> | 2016-02-24 16:35:58 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2016-02-24 16:35:59 +0000 |
commit | 571393a63b0a3cd207417f067bdbd77d68ac180f (patch) | |
tree | 50abed9b554672abe107e7debcf957c3ab66c8cf /heat/tests/engine/service/test_stack_update.py | |
parent | 75e945a8514e2ee577e6f2910d3d13422b55854b (diff) | |
parent | 98262c10d8ce0e69e3a4cf53b3d3eca191d26b41 (diff) | |
download | heat-571393a63b0a3cd207417f067bdbd77d68ac180f.tar.gz |
Merge "Immutable parameters"
Diffstat (limited to 'heat/tests/engine/service/test_stack_update.py')
-rw-r--r-- | heat/tests/engine/service/test_stack_update.py | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/heat/tests/engine/service/test_stack_update.py b/heat/tests/engine/service/test_stack_update.py index 22974258c..070e08f66 100644 --- a/heat/tests/engine/service/test_stack_update.py +++ b/heat/tests/engine/service/test_stack_update.py @@ -706,6 +706,112 @@ class ServiceStackUpdateTest(common.HeatTestCase): self.assertIn("PATCH update to non-COMPLETE stack", six.text_type(ex.exc_info[1])) + def test_update_immutable_parameter_disallowed(self): + + template = ''' +heat_template_version: 2014-10-16 +parameters: + param1: + type: string + immutable: true + default: foo +''' + + self.ctx = utils.dummy_context(password=None) + stack_name = 'test_update_immutable_parameters' + params = {} + old_stack = tools.get_stack(stack_name, self.ctx, + template=template) + sid = old_stack.store() + old_stack.set_stack_user_project_id('1234') + s = stack_object.Stack.get_by_id(self.ctx, sid) + + # prepare mocks + self.patchobject(self.man, '_get_stack', return_value=s) + self.patchobject(stack, 'Stack', return_value=old_stack) + self.patchobject(stack.Stack, 'load', return_value=old_stack) + self.patchobject(templatem, 'Template', return_value=old_stack.t) + self.patchobject(environment, 'Environment', + return_value=old_stack.env) + + params = {'param1': 'bar'} + exc = self.assertRaises(dispatcher.ExpectedException, + self.man.update_stack, + self.ctx, old_stack.identifier(), + templatem.Template(template), params, + None, {}) + self.assertEqual(exception.ImmutableParameterModified, exc.exc_info[0]) + self.assertEqual('The following parameters are immutable and may not ' + 'be updated: param1', exc.exc_info[1].message) + + def test_update_mutable_parameter_allowed(self): + + template = ''' +heat_template_version: 2014-10-16 +parameters: + param1: + type: string + immutable: false + default: foo +''' + + self.ctx = utils.dummy_context(password=None) + stack_name = 'test_update_immutable_parameters' + params = {} + old_stack = tools.get_stack(stack_name, self.ctx, + template=template) + sid = old_stack.store() + old_stack.set_stack_user_project_id('1234') + s = stack_object.Stack.get_by_id(self.ctx, sid) + + # prepare mocks + self.patchobject(self.man, '_get_stack', return_value=s) + self.patchobject(stack, 'Stack', return_value=old_stack) + self.patchobject(stack.Stack, 'load', return_value=old_stack) + self.patchobject(templatem, 'Template', return_value=old_stack.t) + self.patchobject(environment, 'Environment', + return_value=old_stack.env) + + params = {'param1': 'bar'} + result = self.man.update_stack(self.ctx, old_stack.identifier(), + templatem.Template(template), params, + None, {}) + self.assertEqual(s.id, result['stack_id']) + + def test_update_immutable_parameter_same_value(self): + + template = ''' +heat_template_version: 2014-10-16 +parameters: + param1: + type: string + immutable: true + default: foo +''' + + self.ctx = utils.dummy_context(password=None) + stack_name = 'test_update_immutable_parameters' + params = {} + old_stack = tools.get_stack(stack_name, self.ctx, + template=template) + sid = old_stack.store() + old_stack.set_stack_user_project_id('1234') + s = stack_object.Stack.get_by_id(self.ctx, sid) + + # prepare mocks + self.patchobject(self.man, '_get_stack', return_value=s) + self.patchobject(stack, 'Stack', return_value=old_stack) + self.patchobject(stack.Stack, 'load', return_value=old_stack) + self.patchobject(templatem, 'Template', return_value=old_stack.t) + self.patchobject(environment, 'Environment', + return_value=old_stack.env) + + params = {'param1': 'foo'} + result = self.man.update_stack(self.ctx, old_stack.identifier(), + templatem.Template(template), params, + None, {}) + self.assertEqual(s.id, result['stack_id']) + class ServiceStackUpdatePreviewTest(common.HeatTestCase): |