diff options
author | Angus Salkeld <asalkeld@mirantis.com> | 2014-11-24 12:38:30 +1000 |
---|---|---|
committer | Angus Salkeld <asalkeld@mirantis.com> | 2014-12-15 09:44:11 +1000 |
commit | 08431c7c0601f64e6f0477dd502bf912eba8529b (patch) | |
tree | 311f789278066da27db8b568898dc32f6153ce33 /heat/tests | |
parent | e1540f834c7b12cfad67931b2dac3eef4ed4ea54 (diff) | |
download | heat-08431c7c0601f64e6f0477dd502bf912eba8529b.tar.gz |
Add "parameter_defaults" to the environment
This give the user a way to set defaults recursively down nested stacks
without having to create the parameter in every template (it's ignored
if the template does not have the parameter).
blueprint env-nested-usability
Change-Id: Ie6b4481417204a527d322fd532c341b9acbce473
Diffstat (limited to 'heat/tests')
-rw-r--r-- | heat/tests/test_api_openstack_v1.py | 22 | ||||
-rw-r--r-- | heat/tests/test_engine_service.py | 3 | ||||
-rw-r--r-- | heat/tests/test_environment.py | 6 | ||||
-rw-r--r-- | heat/tests/test_environment_format.py | 1 | ||||
-rw-r--r-- | heat/tests/test_parameters.py | 20 | ||||
-rw-r--r-- | heat/tests/test_remote_stack.py | 8 | ||||
-rw-r--r-- | heat/tests/test_stack_resource.py | 14 |
7 files changed, 59 insertions, 15 deletions
diff --git a/heat/tests/test_api_openstack_v1.py b/heat/tests/test_api_openstack_v1.py index 7fb99ea73..151339324 100644 --- a/heat/tests/test_api_openstack_v1.py +++ b/heat/tests/test_api_openstack_v1.py @@ -163,6 +163,7 @@ blarg: wibble def test_parameters(self): params = {'foo': 'bar', 'blarg': 'wibble'} body = {'parameters': params, + 'parameter_defaults': {}, 'resource_registry': {}} data = stacks.InstantiationData(body) self.assertEqual(body, data.environment()) @@ -178,6 +179,7 @@ blarg: wibble 'environment': {'parameters': {'blarg': 'wibble'}}} expect = {'parameters': {'blarg': 'wibble', 'foo': 'bar'}, + 'parameter_defaults': {}, 'resource_registry': {}} data = stacks.InstantiationData(body) self.assertEqual(expect, data.environment()) @@ -192,6 +194,7 @@ blarg: wibble expect = {'parameters': {'blarg': 'wibble', 'foo': 'bar', 'tester': 'Yes'}, + 'parameter_defaults': {}, 'resource_registry': {}} data = stacks.InstantiationData(body) self.assertEqual(expect, data.environment()) @@ -206,7 +209,8 @@ blarg: wibble env = {'foo': 'bar', 'blarg': 'wibble'} body = {'not the environment': env} data = stacks.InstantiationData(body) - self.assertEqual({'parameters': {}, 'resource_registry': {}}, + self.assertEqual({'parameters': {}, 'parameter_defaults': {}, + 'resource_registry': {}}, data.environment()) def test_args(self): @@ -710,6 +714,7 @@ class StackControllerTest(ControllerTest, common.HeatTestCase): {'stack_name': identity.stack_name, 'template': template, 'params': {'parameters': parameters, + 'parameter_defaults': {}, 'resource_registry': {}}, 'files': {}, 'args': {'timeout_mins': 30}, @@ -770,6 +775,7 @@ class StackControllerTest(ControllerTest, common.HeatTestCase): {'stack_name': identity.stack_name, 'template': template, 'params': {'parameters': parameters, + 'parameter_defaults': {}, 'resource_registry': {}}, 'files': {}, 'args': {'timeout_mins': 30, @@ -835,6 +841,7 @@ class StackControllerTest(ControllerTest, common.HeatTestCase): {'stack_name': identity.stack_name, 'template': template, 'params': {'parameters': parameters, + 'parameter_defaults': {}, 'resource_registry': {}}, 'files': {'my.yaml': 'This is the file contents.'}, 'args': {'timeout_mins': 30}, @@ -877,6 +884,7 @@ class StackControllerTest(ControllerTest, common.HeatTestCase): {'stack_name': stack_name, 'template': template, 'params': {'parameters': parameters, + 'parameter_defaults': {}, 'resource_registry': {}}, 'files': {}, 'args': {'timeout_mins': 30}, @@ -892,6 +900,7 @@ class StackControllerTest(ControllerTest, common.HeatTestCase): {'stack_name': stack_name, 'template': template, 'params': {'parameters': parameters, + 'parameter_defaults': {}, 'resource_registry': {}}, 'files': {}, 'args': {'timeout_mins': 30}, @@ -907,6 +916,7 @@ class StackControllerTest(ControllerTest, common.HeatTestCase): {'stack_name': stack_name, 'template': template, 'params': {'parameters': parameters, + 'parameter_defaults': {}, 'resource_registry': {}}, 'files': {}, 'args': {'timeout_mins': 30}, @@ -959,6 +969,7 @@ class StackControllerTest(ControllerTest, common.HeatTestCase): {'stack_name': stack_name, 'template': template, 'params': {'parameters': parameters, + 'parameter_defaults': {}, 'resource_registry': {}}, 'files': {}, 'args': {'timeout_mins': 30}, @@ -1017,6 +1028,7 @@ class StackControllerTest(ControllerTest, common.HeatTestCase): {'stack_name': stack_name, 'template': template, 'params': {'parameters': parameters, + 'parameter_defaults': {}, 'resource_registry': {}}, 'files': {}, 'args': {'timeout_mins': 30}, @@ -1415,6 +1427,7 @@ class StackControllerTest(ControllerTest, common.HeatTestCase): {'stack_identity': dict(identity), 'template': template, 'params': {'parameters': parameters, + 'parameter_defaults': {}, 'resource_registry': {}}, 'files': {}, 'args': {'timeout_mins': 30}}) @@ -1450,6 +1463,7 @@ class StackControllerTest(ControllerTest, common.HeatTestCase): {'stack_identity': dict(identity), 'template': template, 'params': {u'parameters': parameters, + u'parameter_defaults': {}, u'resource_registry': {}}, 'files': {}, 'args': {'timeout_mins': 30}}) @@ -1509,6 +1523,7 @@ class StackControllerTest(ControllerTest, common.HeatTestCase): {'stack_identity': dict(identity), 'template': template, 'params': {'parameters': {}, + 'parameter_defaults': {}, 'resource_registry': {}}, 'files': {}, 'args': {rpc_api.PARAM_EXISTING: True, @@ -1544,6 +1559,7 @@ class StackControllerTest(ControllerTest, common.HeatTestCase): {'stack_identity': dict(identity), 'template': template, 'params': {'parameters': parameters, + 'parameter_defaults': {}, 'resource_registry': {}}, 'files': {}, 'args': {rpc_api.PARAM_EXISTING: True, @@ -1581,6 +1597,7 @@ class StackControllerTest(ControllerTest, common.HeatTestCase): {'stack_identity': dict(identity), 'template': template, 'params': {'parameters': {}, + 'parameter_defaults': {}, 'resource_registry': {}}, 'files': {}, 'args': {rpc_api.PARAM_EXISTING: True, @@ -1620,6 +1637,7 @@ class StackControllerTest(ControllerTest, common.HeatTestCase): {'stack_identity': dict(identity), 'template': template, 'params': {'parameters': parameters, + 'parameter_defaults': {}, 'resource_registry': {}}, 'files': {}, 'args': {rpc_api.PARAM_EXISTING: True, @@ -1757,6 +1775,7 @@ class StackControllerTest(ControllerTest, common.HeatTestCase): ('validate_template', {'template': template, 'params': {'parameters': {}, + 'parameter_defaults': {}, 'resource_registry': {}}}) ).AndReturn(engine_response) self.m.ReplayAll() @@ -1780,6 +1799,7 @@ class StackControllerTest(ControllerTest, common.HeatTestCase): ('validate_template', {'template': template, 'params': {'parameters': {}, + 'parameter_defaults': {}, 'resource_registry': {}}}) ).AndReturn({'Error': 'fubar'}) self.m.ReplayAll() diff --git a/heat/tests/test_engine_service.py b/heat/tests/test_engine_service.py index 431655c36..bd9b5d9ee 100644 --- a/heat/tests/test_engine_service.py +++ b/heat/tests/test_engine_service.py @@ -2286,7 +2286,8 @@ class StackServiceTest(common.HeatTestCase): self.assertEqual(expected, schema) def _no_template_file(self, function): - info = environment.ResourceInfo(environment.ResourceRegistry, + env = environment.Environment() + info = environment.ResourceInfo(env.registry, ['ResourceWithWrongRefOnFile'], 'not_existing.yaml') mock_iterable = mock.MagicMock(return_value=iter([info])) diff --git a/heat/tests/test_environment.py b/heat/tests/test_environment.py index edd5b6d60..29037d0da 100644 --- a/heat/tests/test_environment.py +++ b/heat/tests/test_environment.py @@ -36,12 +36,14 @@ class EnvironmentTest(common.HeatTestCase): def test_load_old_parameters(self): old = {u'a': u'ff', u'b': u'ss'} expected = {u'parameters': old, + u'parameter_defaults': {}, u'resource_registry': {u'resources': {}}} env = environment.Environment(old) self.assertEqual(expected, env.user_env_as_dict()) def test_load_new_env(self): new_env = {u'parameters': {u'a': u'ff', u'b': u'ss'}, + u'parameter_defaults': {u'ff': 'new_def'}, u'resource_registry': {u'OS::Food': u'fruity.yaml', u'resources': {}}} env = environment.Environment(new_env) @@ -52,6 +54,7 @@ class EnvironmentTest(common.HeatTestCase): prev_params = {'foo': 'bar', 'tester': 'Yes'} params = {} expected = {'parameters': prev_params, + 'parameter_defaults': {}, 'resource_registry': {'resources': {}}} prev_env = environment.Environment( {'parameters': prev_params, @@ -65,6 +68,7 @@ class EnvironmentTest(common.HeatTestCase): prev_params = {'foo': 'bar', 'tester': 'Yes'} params = {'tester': 'patched'} expected = {'parameters': {'foo': 'bar', 'tester': 'patched'}, + 'parameter_defaults': {}, 'resource_registry': {'resources': {}}} prev_env = environment.Environment( {'parameters': prev_params, @@ -79,6 +83,7 @@ class EnvironmentTest(common.HeatTestCase): 'another_tester': 'Yes'} params = {'tester': 'patched'} expected = {'parameters': {'foo': 'bar', 'tester': 'patched'}, + 'parameter_defaults': {}, 'resource_registry': {'resources': {}}} prev_env = environment.Environment( {'parameters': prev_params, @@ -92,6 +97,7 @@ class EnvironmentTest(common.HeatTestCase): prev_params = {'foo': 'bar', 'tester': 'Yes'} params = {} expected = {'parameters': {'foo': 'bar'}, + 'parameter_defaults': {}, 'resource_registry': {'resources': {}}} prev_env = environment.Environment( {'parameters': prev_params, diff --git a/heat/tests/test_environment_format.py b/heat/tests/test_environment_format.py index 75d975d93..25f636b61 100644 --- a/heat/tests/test_environment_format.py +++ b/heat/tests/test_environment_format.py @@ -24,6 +24,7 @@ class YamlEnvironmentTest(common.HeatTestCase): yaml1 = '' yaml2 = ''' parameters: {} +parameter_defaults: {} resource_registry: {} ''' tpl1 = environment_format.parse(yaml1) diff --git a/heat/tests/test_parameters.py b/heat/tests/test_parameters.py index ae90dd9f7..79dbd2df7 100644 --- a/heat/tests/test_parameters.py +++ b/heat/tests/test_parameters.py @@ -392,13 +392,14 @@ params_schema = json.loads('''{ class ParametersTest(testtools.TestCase): def new_parameters(self, stack_name, tmpl, user_params=None, - stack_id=None, validate_value=True): + stack_id=None, validate_value=True, + param_defaults=None): user_params = user_params or {} tmpl.update({'HeatTemplateFormatVersion': '2012-12-12'}) tmpl = template.Template(tmpl) params = tmpl.parameters( identifier.HeatIdentifier('', stack_name, stack_id), - user_params) + user_params, param_defaults=param_defaults) params.validate(validate_value) return params @@ -505,6 +506,21 @@ class ParametersTest(testtools.TestCase): 'test', params) + def test_use_user_default(self): + template = {'Parameters': {'a': {'Type': 'Number', 'Default': '42'}}} + params = self.new_parameters('test_params', template, + param_defaults={'a': '77'}) + + self.assertEqual(77, params['a']) + + def test_dont_use_user_default(self): + template = {'Parameters': {'a': {'Type': 'Number', 'Default': '42'}}} + params = self.new_parameters('test_params', template, + {'a': '111'}, + param_defaults={'a': '77'}) + + self.assertEqual(111, params['a']) + class ParameterSchemaTest(testtools.TestCase): diff --git a/heat/tests/test_remote_stack.py b/heat/tests/test_remote_stack.py index 892295cfa..67411c467 100644 --- a/heat/tests/test_remote_stack.py +++ b/heat/tests/test_remote_stack.py @@ -285,8 +285,8 @@ class RemoteStackTest(tests_common.HeatTestCase): self.assertEqual((rsrc.CREATE, rsrc.COMPLETE), rsrc.state) self.assertEqual('c8a19429-7fde-47ea-a42f-40045488226c', rsrc.resource_id) - registry = rsrc.stack.env.registry - env = environment.get_custom_environment(registry, {'name': 'foo'}) + env = environment.get_child_environment(rsrc.stack.env, + {'name': 'foo'}) args = { 'stack_name': rsrc.physical_resource_name(), 'template': template_format.parse(remote_template), @@ -520,8 +520,8 @@ class RemoteStackTest(tests_common.HeatTestCase): self.assertEqual((rsrc.UPDATE, rsrc.COMPLETE), rsrc.state) self.assertEqual('bar', rsrc.properties.get('parameters')['name']) - registry = rsrc.stack.env.registry - env = environment.get_custom_environment(registry, {'name': 'bar'}) + env = environment.get_child_environment(rsrc.stack.env, + {'name': 'bar'}) fields = { 'stack_id': rsrc.resource_id, 'template': template_format.parse(remote_template), diff --git a/heat/tests/test_stack_resource.py b/heat/tests/test_stack_resource.py index 2ec79c304..13423c151 100644 --- a/heat/tests/test_stack_resource.py +++ b/heat/tests/test_stack_resource.py @@ -210,7 +210,7 @@ class StackResourceTest(common.HeatTestCase): self.stack = self.parent_resource.nested() self.assertEqual({"foo": "bar"}, self.stack.t.files) - @mock.patch('heat.engine.environment.get_custom_environment') + @mock.patch('heat.engine.environment.get_child_environment') @mock.patch.object(stack_resource.parser, 'Stack') def test_preview_with_implemented_child_resource(self, mock_stack_class, mock_env_class): @@ -231,14 +231,14 @@ class StackResourceTest(common.HeatTestCase): parent_resource._validate_nested_resources = validation_mock result = parent_resource.preview() - mock_env_class.assert_called_once_with(self.parent_stack.env.registry, + mock_env_class.assert_called_once_with(self.parent_stack.env, params) self.assertEqual('preview_nested_stack', result) mock_stack_class.assert_called_once_with( mock.ANY, 'test_stack-test', mock.ANY, - 'environment', + env='environment', timeout_mins=None, disable_rollback=True, parent_resource=parent_resource, @@ -249,7 +249,7 @@ class StackResourceTest(common.HeatTestCase): nested_depth=1 ) - @mock.patch('heat.engine.environment.get_custom_environment') + @mock.patch('heat.engine.environment.get_child_environment') @mock.patch.object(stack_resource.parser, 'Stack') def test_preview_with_implemented_dict_child_resource(self, mock_stack_class, @@ -271,14 +271,14 @@ class StackResourceTest(common.HeatTestCase): parent_resource._validate_nested_resources = validation_mock result = parent_resource.preview() - mock_env_class.assert_called_once_with(self.parent_stack.env.registry, + mock_env_class.assert_called_once_with(self.parent_stack.env, params) self.assertEqual('preview_nested_stack', result) mock_stack_class.assert_called_once_with( mock.ANY, 'test_stack-test', mock.ANY, - 'environment', + env='environment', timeout_mins=None, disable_rollback=True, parent_resource=parent_resource, @@ -810,7 +810,7 @@ class StackResourceTest(common.HeatTestCase): environment.Environment().AndReturn(env) self.m.StubOutWithMock(parser, 'Stack') - parser.Stack(ctx, phy_id, templ, env, timeout_mins=None, + parser.Stack(ctx, phy_id, templ, env=env, timeout_mins=None, disable_rollback=True, parent_resource=self.parent_resource, owner_id=self.parent_stack.id, |