~cloud-init-dev/cloud-init/trunk

« back to all changes in this revision

Viewing changes to tests/unittests/test_templating.py

  • Committer: Scott Moser
  • Date: 2016-08-10 15:06:15 UTC
  • Revision ID: smoser@ubuntu.com-20160810150615-ma2fv107w3suy1ma
README: Mention move of revision control to git.

cloud-init development has moved its revision control to git.
It is available at 
  https://code.launchpad.net/cloud-init

Clone with 
  git clone https://git.launchpad.net/cloud-init
or
  git clone git+ssh://git.launchpad.net/cloud-init

For more information see
  https://git.launchpad.net/cloud-init/tree/HACKING.rst

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# vi: ts=4 expandtab
2
 
#
3
 
#    Copyright (C) 2014 Yahoo! Inc.
4
 
#
5
 
#    Author: Joshua Harlow <harlowja@yahoo-inc.com>
6
 
#
7
 
#    This program is free software: you can redistribute it and/or modify
8
 
#    it under the terms of the GNU General Public License version 3, as
9
 
#    published by the Free Software Foundation.
10
 
#
11
 
#    This program is distributed in the hope that it will be useful,
12
 
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 
#    GNU General Public License for more details.
15
 
#
16
 
#    You should have received a copy of the GNU General Public License
17
 
#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
18
 
 
19
 
from __future__ import print_function
20
 
 
21
 
from . import helpers as test_helpers
22
 
import textwrap
23
 
 
24
 
from cloudinit import templater
25
 
 
26
 
try:
27
 
    import Cheetah
28
 
    HAS_CHEETAH = True
29
 
    Cheetah  # make pyflakes happy, as Cheetah is not used here
30
 
except ImportError:
31
 
    HAS_CHEETAH = False
32
 
 
33
 
 
34
 
class TestTemplates(test_helpers.TestCase):
35
 
    def test_render_basic(self):
36
 
        in_data = textwrap.dedent("""
37
 
            ${b}
38
 
 
39
 
            c = d
40
 
            """)
41
 
        in_data = in_data.strip()
42
 
        expected_data = textwrap.dedent("""
43
 
            2
44
 
 
45
 
            c = d
46
 
            """)
47
 
        out_data = templater.basic_render(in_data, {'b': 2})
48
 
        self.assertEqual(expected_data.strip(), out_data)
49
 
 
50
 
    @test_helpers.skipIf(not HAS_CHEETAH, 'cheetah renderer not available')
51
 
    def test_detection(self):
52
 
        blob = "## template:cheetah"
53
 
 
54
 
        (template_type, renderer, contents) = templater.detect_template(blob)
55
 
        self.assertIn("cheetah", template_type)
56
 
        self.assertEqual("", contents.strip())
57
 
 
58
 
        blob = "blahblah $blah"
59
 
        (template_type, renderer, contents) = templater.detect_template(blob)
60
 
        self.assertIn("cheetah", template_type)
61
 
        self.assertEqual(blob, contents)
62
 
 
63
 
        blob = '##template:something-new'
64
 
        self.assertRaises(ValueError, templater.detect_template, blob)
65
 
 
66
 
    def test_render_cheetah(self):
67
 
        blob = '''## template:cheetah
68
 
$a,$b'''
69
 
        c = templater.render_string(blob, {"a": 1, "b": 2})
70
 
        self.assertEqual("1,2", c)
71
 
 
72
 
    def test_render_jinja(self):
73
 
        blob = '''## template:jinja
74
 
{{a}},{{b}}'''
75
 
        c = templater.render_string(blob, {"a": 1, "b": 2})
76
 
        self.assertEqual("1,2", c)
77
 
 
78
 
    def test_render_default(self):
79
 
        blob = '''$a,$b'''
80
 
        c = templater.render_string(blob, {"a": 1, "b": 2})
81
 
        self.assertEqual("1,2", c)
82
 
 
83
 
    def test_render_basic_deeper(self):
84
 
        hn = 'myfoohost.yahoo.com'
85
 
        expected_data = "h=%s\nc=d\n" % hn
86
 
        in_data = "h=$hostname.canonical_name\nc=d\n"
87
 
        params = {
88
 
            "hostname": {
89
 
                "canonical_name": hn,
90
 
            },
91
 
        }
92
 
        out_data = templater.render_string(in_data, params)
93
 
        self.assertEqual(expected_data, out_data)
94
 
 
95
 
    def test_render_basic_no_parens(self):
96
 
        hn = "myfoohost"
97
 
        in_data = "h=$hostname\nc=d\n"
98
 
        expected_data = "h=%s\nc=d\n" % hn
99
 
        out_data = templater.basic_render(in_data, {'hostname': hn})
100
 
        self.assertEqual(expected_data, out_data)
101
 
 
102
 
    def test_render_basic_parens(self):
103
 
        hn = "myfoohost"
104
 
        in_data = "h = ${hostname}\nc=d\n"
105
 
        expected_data = "h = %s\nc=d\n" % hn
106
 
        out_data = templater.basic_render(in_data, {'hostname': hn})
107
 
        self.assertEqual(expected_data, out_data)
108
 
 
109
 
    def test_render_basic2(self):
110
 
        mirror = "mymirror"
111
 
        codename = "zany"
112
 
        in_data = "deb $mirror $codename-updates main contrib non-free"
113
 
        ex_data = "deb %s %s-updates main contrib non-free" % (mirror,
114
 
                                                               codename)
115
 
 
116
 
        out_data = templater.basic_render(in_data,
117
 
                                          {'mirror': mirror,
118
 
                                           'codename': codename})
119
 
        self.assertEqual(ex_data, out_data)