summaryrefslogtreecommitdiff
path: root/heat/tests/test_template.py
diff options
context:
space:
mode:
authorhuangtianhua <huangtianhua@huawei.com>2016-07-27 13:02:39 +0800
committerhuangtianhua <huangtianhua@huawei.com>2016-08-25 01:14:34 +0000
commitaeb15bf818cecf6a1a8a2719ea869b67ec8a93ce (patch)
tree886665492ed83972f7fbac96c916acd7d3a3fc18 /heat/tests/test_template.py
parent4c4d790c62f0517cda70aa2ab82fdd257de3ef43 (diff)
downloadheat-aeb15bf818cecf6a1a8a2719ea869b67ec8a93ce.tar.gz
Provides 'not' condition function
Support 'not' and 'Fn::Not' for templates: AWSTemplateFormatVersion.2010-09-09 heat_template_version.2016-10-14 Change-Id: I6a9c89a23160a2cf06c37677871bcfbfab9599be Blueprint: support-conditions-function
Diffstat (limited to 'heat/tests/test_template.py')
-rw-r--r--heat/tests/test_template.py49
1 files changed, 49 insertions, 0 deletions
diff --git a/heat/tests/test_template.py b/heat/tests/test_template.py
index c3af2076e..c2ab40038 100644
--- a/heat/tests/test_template.py
+++ b/heat/tests/test_template.py
@@ -950,6 +950,55 @@ class TemplateTest(common.HeatTestCase):
self.resolve_condition, snippet, tmpl)
self.assertIn(error_msg, six.text_type(exc))
+ def test_not(self):
+ tpl = template_format.parse('''
+ AWSTemplateFormatVersion: 2010-09-09
+ Parameters:
+ env_type:
+ Type: String
+ Default: 'test'
+ ''')
+ snippet = {'Fn::Not': [{'Fn::Equals': [{'Ref': 'env_type'}, 'prod']}]}
+ # when param 'env_type' is 'test', not function resolve to true
+ tmpl = template.Template(tpl)
+ stk = stack.Stack(utils.dummy_context(),
+ 'test_not_true', tmpl)
+ resolved = self.resolve_condition(snippet, tmpl, stk)
+ self.assertTrue(resolved)
+ # when param 'env_type' is 'prod', not function resolve to false
+ tmpl = template.Template(tpl,
+ env=environment.Environment(
+ {'env_type': 'prod'}))
+ stk = stack.Stack(utils.dummy_context(),
+ 'test_not_false', tmpl)
+ resolved = self.resolve_condition(snippet, tmpl, stk)
+ self.assertFalse(resolved)
+
+ def test_not_invalid_args(self):
+ tmpl = template.Template(aws_empty_template)
+
+ snippet = {'Fn::Not': ['invalid_arg']}
+ exc = self.assertRaises(ValueError,
+ self.resolve_condition, snippet, tmpl)
+
+ error_msg = ('The condition value should be boolean, '
+ 'after resolved the value is: invalid_arg')
+ self.assertIn(error_msg, six.text_type(exc))
+ # test invalid type
+ snippet = {'Fn::Not': 'invalid'}
+ exc = self.assertRaises(exception.StackValidationFailed,
+ self.resolve_condition, snippet, tmpl)
+ error_msg = ('.Fn::Not: Arguments to "Fn::Not" must be '
+ 'of the form: [condition]')
+ self.assertIn(error_msg, six.text_type(exc))
+
+ snippet = {'Fn::Not': ['cd1', 'cd2']}
+ exc = self.assertRaises(exception.StackValidationFailed,
+ self.resolve_condition, snippet, tmpl)
+ error_msg = ('.Fn::Not: Arguments to "Fn::Not" must be '
+ 'of the form: [condition]')
+ self.assertIn(error_msg, six.text_type(exc))
+
def test_join(self):
tmpl = template.Template(empty_template)
join = {"Fn::Join": [" ", ["foo", "bar"]]}