Merge "Add functional test for immutable parameters"
This commit is contained in:
commit
7405d45312
141
heat_integrationtests/functional/test_immutable_parameters.py
Normal file
141
heat_integrationtests/functional/test_immutable_parameters.py
Normal file
@ -0,0 +1,141 @@
|
|||||||
|
# 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
|
||||||
|
from heatclient import exc as heat_exceptions
|
||||||
|
|
||||||
|
|
||||||
|
class ImmutableParametersTest(functional_base.FunctionalTestsBase):
|
||||||
|
|
||||||
|
template_param_has_no_immutable_field = '''
|
||||||
|
heat_template_version: 2014-10-16
|
||||||
|
parameters:
|
||||||
|
param1:
|
||||||
|
type: string
|
||||||
|
default: default_value
|
||||||
|
outputs:
|
||||||
|
param1_output:
|
||||||
|
description: 'parameter 1 details'
|
||||||
|
value: { get_param: param1 }
|
||||||
|
'''
|
||||||
|
|
||||||
|
template_param_has_immutable_field = '''
|
||||||
|
heat_template_version: 2014-10-16
|
||||||
|
parameters:
|
||||||
|
param1:
|
||||||
|
type: string
|
||||||
|
default: default_value
|
||||||
|
immutable: false
|
||||||
|
outputs:
|
||||||
|
param1_output:
|
||||||
|
description: 'parameter 1 details'
|
||||||
|
value: { get_param: param1 }
|
||||||
|
'''
|
||||||
|
|
||||||
|
def test_no_immutable_param_field(self):
|
||||||
|
param1_create_value = 'value1'
|
||||||
|
create_parameters = {"param1": param1_create_value}
|
||||||
|
|
||||||
|
stack_identifier = self.stack_create(
|
||||||
|
template=self.template_param_has_no_immutable_field,
|
||||||
|
parameters=create_parameters
|
||||||
|
)
|
||||||
|
stack = self.client.stacks.get(stack_identifier)
|
||||||
|
|
||||||
|
# Verify the value of the parameter
|
||||||
|
self.assertEqual(param1_create_value,
|
||||||
|
self._stack_output(stack, 'param1_output'))
|
||||||
|
|
||||||
|
param1_update_value = 'value2'
|
||||||
|
update_parameters = {"param1": param1_update_value}
|
||||||
|
|
||||||
|
self.update_stack(
|
||||||
|
stack_identifier,
|
||||||
|
template=self.template_param_has_no_immutable_field,
|
||||||
|
parameters=update_parameters)
|
||||||
|
|
||||||
|
stack = self.client.stacks.get(stack_identifier)
|
||||||
|
|
||||||
|
# Verify the value of the updated parameter
|
||||||
|
self.assertEqual(param1_update_value,
|
||||||
|
self._stack_output(stack, 'param1_output'))
|
||||||
|
|
||||||
|
def test_immutable_param_field_allowed(self):
|
||||||
|
param1_create_value = 'value1'
|
||||||
|
create_parameters = {"param1": param1_create_value}
|
||||||
|
|
||||||
|
stack_identifier = self.stack_create(
|
||||||
|
template=self.template_param_has_immutable_field,
|
||||||
|
parameters=create_parameters
|
||||||
|
)
|
||||||
|
stack = self.client.stacks.get(stack_identifier)
|
||||||
|
|
||||||
|
# Verify the value of the parameter
|
||||||
|
self.assertEqual(param1_create_value,
|
||||||
|
self._stack_output(stack, 'param1_output'))
|
||||||
|
|
||||||
|
param1_update_value = 'value2'
|
||||||
|
update_parameters = {"param1": param1_update_value}
|
||||||
|
|
||||||
|
self.update_stack(
|
||||||
|
stack_identifier,
|
||||||
|
template=self.template_param_has_immutable_field,
|
||||||
|
parameters=update_parameters)
|
||||||
|
stack = self.client.stacks.get(stack_identifier)
|
||||||
|
|
||||||
|
# Verify the value of the updated parameter
|
||||||
|
self.assertEqual(param1_update_value,
|
||||||
|
self._stack_output(stack, 'param1_output'))
|
||||||
|
|
||||||
|
# Ensure stack is not in a failed state
|
||||||
|
self.assertEqual('UPDATE_COMPLETE', stack.stack_status)
|
||||||
|
|
||||||
|
def test_immutable_param_field_error(self):
|
||||||
|
param1_create_value = 'value1'
|
||||||
|
create_parameters = {"param1": param1_create_value}
|
||||||
|
|
||||||
|
# Toggle the immutable field to preclude updating
|
||||||
|
immutable_true = self.template_param_has_immutable_field.replace(
|
||||||
|
'immutable: false', 'immutable: true')
|
||||||
|
|
||||||
|
stack_identifier = self.stack_create(
|
||||||
|
template=immutable_true,
|
||||||
|
parameters=create_parameters
|
||||||
|
)
|
||||||
|
stack = self.client.stacks.get(stack_identifier)
|
||||||
|
|
||||||
|
param1_update_value = 'value2'
|
||||||
|
update_parameters = {"param1": param1_update_value}
|
||||||
|
|
||||||
|
# Verify the value of the parameter
|
||||||
|
self.assertEqual(param1_create_value,
|
||||||
|
self._stack_output(stack, 'param1_output'))
|
||||||
|
|
||||||
|
# Attempt to update the stack with a new parameter value
|
||||||
|
try:
|
||||||
|
self.update_stack(
|
||||||
|
stack_identifier,
|
||||||
|
template=immutable_true,
|
||||||
|
parameters=update_parameters)
|
||||||
|
except heat_exceptions.HTTPInternalServerError as exc:
|
||||||
|
exp = ('The following parameters are immutable and may not be '
|
||||||
|
'updated: param1')
|
||||||
|
self.assertIn(exp, str(exc))
|
||||||
|
|
||||||
|
stack = self.client.stacks.get(stack_identifier)
|
||||||
|
|
||||||
|
# Ensure stack is not in a failed state
|
||||||
|
self.assertEqual('CREATE_COMPLETE', stack.stack_status)
|
||||||
|
|
||||||
|
# Ensure immutable parameter has not changed
|
||||||
|
self.assertEqual(param1_create_value,
|
||||||
|
self._stack_output(stack, 'param1_output'))
|
Loading…
Reference in New Issue
Block a user