diff options
author | Joshua Harlow <harlowja@yahoo-inc.com> | 2014-03-07 19:33:41 -0800 |
---|---|---|
committer | Joshua Harlow <harlowja@yahoo-inc.com> | 2014-03-07 19:33:41 -0800 |
commit | b740568ddfe6194af7c2c5d7123b3cc2a07fa7f7 (patch) | |
tree | f3f271cb36e109b51b3105e287e3148f3aff51aa | |
parent | cc79c859115ceb520877c0afaece4c28d6031499 (diff) | |
download | vyos-cloud-init-b740568ddfe6194af7c2c5d7123b3cc2a07fa7f7.tar.gz vyos-cloud-init-b740568ddfe6194af7c2c5d7123b3cc2a07fa7f7.zip |
Add some basic template tests
-rw-r--r-- | cloudinit/templater.py | 27 | ||||
-rw-r--r-- | tests/unittests/test_templating.py | 56 |
2 files changed, 70 insertions, 13 deletions
diff --git a/cloudinit/templater.py b/cloudinit/templater.py index 915b188e..9922c633 100644 --- a/cloudinit/templater.py +++ b/cloudinit/templater.py @@ -44,21 +44,21 @@ TYPE_MATCHER = re.compile(r"##\s*template:(.*)", re.I) def detect_template(text): - try: + if text.find("\n") != -1: ident, rest = text.split("\n", 1) - except ValueError: + else: + ident = text + rest = '' + type_match = TYPE_MATCHER.match(ident) + if not type_match: return (DEF_RENDERER, text) + template_type = type_match.group(1).lower().strip() + if template_type not in RENDERERS: + raise ValueError("Unknown template type '%s' requested" + % template_type) else: - type_match = TYPE_MATCHER.match(ident) - if not type_match: - return (DEF_RENDERER, text) - template_type = type_match.group(1).lower().strip() - if template_type not in RENDERERS: - raise ValueError("Unknown template type '%s' requested" - % template_type) - else: - return (template_type, rest) - + return (template_type, rest) + def render_from_file(fn, params): return render_string(util.load_file(fn), params) @@ -74,7 +74,8 @@ def render_string(content, params): params = {} try: renderer, content = detect_template(content) - except ValueError: + except ValueError as e: renderer = DEF_RENDERER + LOG.warn("%s, using renderer %s", e, renderer) LOG.debug("Rendering %s using renderer '%s'", content, renderer) return RENDERERS[renderer](content, params) diff --git a/tests/unittests/test_templating.py b/tests/unittests/test_templating.py new file mode 100644 index 00000000..b4f425a8 --- /dev/null +++ b/tests/unittests/test_templating.py @@ -0,0 +1,56 @@ +# vi: ts=4 expandtab +# +# Copyright (C) 2014 Yahoo! Inc. +# +# Author: Joshua Harlow <harlowja@yahoo-inc.com> +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 3, as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +from tests.unittests import helpers as test_helpers + + +from cloudinit import templater + + +class TestTemplates(test_helpers.TestCase): + def test_detection(self): + blob = "## template:cheetah" + + (template_type, contents) = templater.detect_template(blob) + self.assertEqual("cheetah", template_type) + self.assertEqual("", contents.strip()) + + blob = "blahblah $blah" + (template_type, contents) = templater.detect_template(blob) + self.assertEqual("cheetah", template_type) + self.assertEquals(blob, contents) + + blob = '##template:something-new' + self.assertRaises(ValueError, templater.detect_template, blob) + + def test_render_cheetah(self): + blob = '''## template:cheetah +$a,$b''' + c = templater.render_string(blob, {"a": 1, "b": 2}) + self.assertEquals("1,2", c) + + def test_render_jinja(self): + blob = '''## template:jinja +{{a}},{{b}}''' + c = templater.render_string(blob, {"a": 1, "b": 2}) + self.assertEquals("1,2", c) + + def test_render_default(self): + blob = '''$a,$b''' + c = templater.render_string(blob, {"a": 1, "b": 2}) + self.assertEquals("1,2", c) |