summaryrefslogtreecommitdiff
path: root/tests/unittests/test_templating.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/unittests/test_templating.py')
-rw-r--r--tests/unittests/test_templating.py103
1 files changed, 61 insertions, 42 deletions
diff --git a/tests/unittests/test_templating.py b/tests/unittests/test_templating.py
index cba09830..c1fec27c 100644
--- a/tests/unittests/test_templating.py
+++ b/tests/unittests/test_templating.py
@@ -4,14 +4,15 @@
#
# This file is part of cloud-init. See LICENSE file for license information.
-from cloudinit.tests import helpers as test_helpers
import textwrap
from cloudinit import templater
from cloudinit.util import load_file, write_file
+from tests.unittests import helpers as test_helpers
try:
import Cheetah
+
HAS_CHEETAH = True
c = Cheetah # make pyflakes and pylint happy, as Cheetah is not used here
except ImportError:
@@ -22,32 +23,36 @@ class TestTemplates(test_helpers.CiTestCase):
with_logs = True
- jinja_utf8 = b'It\xe2\x80\x99s not ascii, {{name}}\n'
- jinja_utf8_rbob = b'It\xe2\x80\x99s not ascii, bob\n'.decode('utf-8')
+ jinja_utf8 = b"It\xe2\x80\x99s not ascii, {{name}}\n"
+ jinja_utf8_rbob = b"It\xe2\x80\x99s not ascii, bob\n".decode("utf-8")
@staticmethod
def add_header(renderer, data):
"""Return text (py2 unicode/py3 str) with template header."""
if isinstance(data, bytes):
- data = data.decode('utf-8')
+ data = data.decode("utf-8")
return "## template: %s\n" % renderer + data
def test_render_basic(self):
- in_data = textwrap.dedent("""
+ in_data = textwrap.dedent(
+ """
${b}
c = d
- """)
+ """
+ )
in_data = in_data.strip()
- expected_data = textwrap.dedent("""
+ expected_data = textwrap.dedent(
+ """
2
c = d
- """)
- out_data = templater.basic_render(in_data, {'b': 2})
+ """
+ )
+ out_data = templater.basic_render(in_data, {"b": 2})
self.assertEqual(expected_data.strip(), out_data)
- @test_helpers.skipIf(not HAS_CHEETAH, 'cheetah renderer not available')
+ @test_helpers.skipIf(not HAS_CHEETAH, "cheetah renderer not available")
def test_detection(self):
blob = "## template:cheetah"
@@ -60,28 +65,28 @@ class TestTemplates(test_helpers.CiTestCase):
self.assertIn("cheetah", template_type)
self.assertEqual(blob, contents)
- blob = '##template:something-new'
+ blob = "##template:something-new"
self.assertRaises(ValueError, templater.detect_template, blob)
def test_render_cheetah(self):
- blob = '''## template:cheetah
-$a,$b'''
+ blob = """## template:cheetah
+$a,$b"""
c = templater.render_string(blob, {"a": 1, "b": 2})
self.assertEqual("1,2", c)
def test_render_jinja(self):
- blob = '''## template:jinja
-{{a}},{{b}}'''
+ blob = """## template:jinja
+{{a}},{{b}}"""
c = templater.render_string(blob, {"a": 1, "b": 2})
self.assertEqual("1,2", c)
def test_render_default(self):
- blob = '''$a,$b'''
+ blob = """$a,$b"""
c = templater.render_string(blob, {"a": 1, "b": 2})
self.assertEqual("1,2", c)
def test_render_basic_deeper(self):
- hn = 'myfoohost.yahoo.com'
+ hn = "myfoohost.yahoo.com"
expected_data = "h=%s\nc=d\n" % hn
in_data = "h=$hostname.canonical_name\nc=d\n"
params = {
@@ -96,59 +101,69 @@ $a,$b'''
hn = "myfoohost"
in_data = "h=$hostname\nc=d\n"
expected_data = "h=%s\nc=d\n" % hn
- out_data = templater.basic_render(in_data, {'hostname': hn})
+ out_data = templater.basic_render(in_data, {"hostname": hn})
self.assertEqual(expected_data, out_data)
def test_render_basic_parens(self):
hn = "myfoohost"
in_data = "h = ${hostname}\nc=d\n"
expected_data = "h = %s\nc=d\n" % hn
- out_data = templater.basic_render(in_data, {'hostname': hn})
+ out_data = templater.basic_render(in_data, {"hostname": hn})
self.assertEqual(expected_data, out_data)
def test_render_basic2(self):
mirror = "mymirror"
codename = "zany"
in_data = "deb $mirror $codename-updates main contrib non-free"
- ex_data = "deb %s %s-updates main contrib non-free" % (mirror,
- codename)
-
- out_data = templater.basic_render(in_data,
- {'mirror': mirror,
- 'codename': codename})
+ ex_data = "deb %s %s-updates main contrib non-free" % (
+ mirror,
+ codename,
+ )
+
+ out_data = templater.basic_render(
+ in_data, {"mirror": mirror, "codename": codename}
+ )
self.assertEqual(ex_data, out_data)
def test_jinja_nonascii_render_to_string(self):
"""Test jinja render_to_string with non-ascii content."""
self.assertEqual(
templater.render_string(
- self.add_header("jinja", self.jinja_utf8), {"name": "bob"}),
- self.jinja_utf8_rbob)
+ self.add_header("jinja", self.jinja_utf8), {"name": "bob"}
+ ),
+ self.jinja_utf8_rbob,
+ )
def test_jinja_nonascii_render_undefined_variables_to_default_py3(self):
"""Test py3 jinja render_to_string with undefined variable default."""
self.assertEqual(
templater.render_string(
- self.add_header("jinja", self.jinja_utf8), {}),
- self.jinja_utf8_rbob.replace('bob', 'CI_MISSING_JINJA_VAR/name'))
+ self.add_header("jinja", self.jinja_utf8), {}
+ ),
+ self.jinja_utf8_rbob.replace("bob", "CI_MISSING_JINJA_VAR/name"),
+ )
def test_jinja_nonascii_render_to_file(self):
"""Test jinja render_to_file of a filename with non-ascii content."""
tmpl_fn = self.tmp_path("j-render-to-file.template")
out_fn = self.tmp_path("j-render-to-file.out")
- write_file(filename=tmpl_fn, omode="wb",
- content=self.add_header(
- "jinja", self.jinja_utf8).encode('utf-8'))
+ write_file(
+ filename=tmpl_fn,
+ omode="wb",
+ content=self.add_header("jinja", self.jinja_utf8).encode("utf-8"),
+ )
templater.render_to_file(tmpl_fn, out_fn, {"name": "bob"})
- result = load_file(out_fn, decode=False).decode('utf-8')
+ result = load_file(out_fn, decode=False).decode("utf-8")
self.assertEqual(result, self.jinja_utf8_rbob)
def test_jinja_nonascii_render_from_file(self):
"""Test jinja render_from_file with non-ascii content."""
tmpl_fn = self.tmp_path("j-render-from-file.template")
- write_file(tmpl_fn, omode="wb",
- content=self.add_header(
- "jinja", self.jinja_utf8).encode('utf-8'))
+ write_file(
+ tmpl_fn,
+ omode="wb",
+ content=self.add_header("jinja", self.jinja_utf8).encode("utf-8"),
+ )
result = templater.render_from_file(tmpl_fn, {"name": "bob"})
self.assertEqual(result, self.jinja_utf8_rbob)
@@ -156,14 +171,18 @@ $a,$b'''
def test_jinja_warns_on_missing_dep_and_uses_basic_renderer(self):
"""Test jinja render_from_file will fallback to basic renderer."""
tmpl_fn = self.tmp_path("j-render-from-file.template")
- write_file(tmpl_fn, omode="wb",
- content=self.add_header(
- "jinja", self.jinja_utf8).encode('utf-8'))
+ write_file(
+ tmpl_fn,
+ omode="wb",
+ content=self.add_header("jinja", self.jinja_utf8).encode("utf-8"),
+ )
result = templater.render_from_file(tmpl_fn, {"name": "bob"})
self.assertEqual(result, self.jinja_utf8.decode())
self.assertIn(
- 'WARNING: Jinja not available as the selected renderer for desired'
- ' template, reverting to the basic renderer.',
- self.logs.getvalue())
+ "WARNING: Jinja not available as the selected renderer for desired"
+ " template, reverting to the basic renderer.",
+ self.logs.getvalue(),
+ )
+
# vi: ts=4 expandtab