]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
tests: datamodel: attempt to test jinja2 macros
authorAleš <ales.mrazek@nic.cz>
Tue, 21 Dec 2021 10:11:31 +0000 (11:11 +0100)
committerAleš Mrázek <ales.mrazek@nic.cz>
Fri, 8 Apr 2022 14:17:53 +0000 (16:17 +0200)
- common_macros tests
- related to #35

manager/knot_resolver_manager/datamodel/config_schema.py
manager/knot_resolver_manager/datamodel/templates/macros/common_macros.lua.j2
manager/tests/unit/datamodel/templates/test_common_macros.py [new file with mode: 0644]

index 5488c0cf2204ee80f6223adb0307197d9e70607a..aff5e9f5e5a258b3a36babcde195220d63977fe4 100644 (file)
@@ -33,13 +33,17 @@ def _get_templates_dir() -> str:
 _TEMPLATES_DIR = _get_templates_dir()
 
 
-def _import_lua_template() -> Template:
+def template_from_str(template: str) -> Template:
     ldr = FileSystemLoader(_TEMPLATES_DIR)
     env = Environment(trim_blocks=True, lstrip_blocks=True, loader=ldr)
+    return env.from_string(template)
+
+
+def _import_lua_template() -> Template:
     path = os.path.join(_TEMPLATES_DIR, "config.lua.j2")
     with open(path, "r", encoding="UTF-8") as file:
         template = file.read()
-    return env.from_string(template)
+    return template_from_str(template)
 
 
 _MAIN_TEMPLATE = _import_lua_template()
@@ -90,4 +94,6 @@ class KresConfig(SchemaNode):
         return obj.dns64
 
     def render_lua(self) -> Text:
-        return _MAIN_TEMPLATE.render(cfg=self)
+        lua = _MAIN_TEMPLATE.render(cfg=self)
+        print(lua)
+        return lua
index af8a5d76f0fef823d6dabf6dd35dd97edc363f6b..1084a9b74dd83eba544a16848ca4283816e2c2b8 100644 (file)
@@ -56,19 +56,15 @@ kres.type.{{ item|string }},
 
 {# Return server address or table of server addresses #}
 {% macro tls_servers_table(servers) -%}
-{%- if servers is string -%}
-'{{ servers|string }}', {{ tls_server_auth(servers) }}
-{%- else-%}
 {
 {%- for item in servers -%}
 {%- if item.address -%}
-{'{{ item.address|string }}', {{ tls_server_auth(item) }} },
+{'{{ item.address|string }}',{{ tls_server_auth(item) }}},
 {%- else -%}
 '{{ item|string }}',
 {%- endif -%}
 {%- endfor -%}
 }
-{%- endif -%}
 {%- endmacro %}
 
 {% macro tls_server_auth(server) -%}
@@ -87,7 +83,7 @@ pin_sha256=
 {%- for pin in server.pin_sha256 -%}
 '{{ pin|string }}',
 {%- endfor -%}
-},
+}
 {%- endif -%}
 {%- endif -%}
 {%- endmacro %}
diff --git a/manager/tests/unit/datamodel/templates/test_common_macros.py b/manager/tests/unit/datamodel/templates/test_common_macros.py
new file mode 100644 (file)
index 0000000..d6c75cc
--- /dev/null
@@ -0,0 +1,63 @@
+from knot_resolver_manager.datamodel.config_schema import template_from_str
+from knot_resolver_manager.datamodel.forward_zone import ForwardServerSchema
+
+
+def test_string_table():
+    s = "any string"
+    t = [s, "other string"]
+    tmpl_str = """{% from 'macros/common_macros.lua.j2' import string_table %}
+{{ string_table(x) }}"""
+
+    tmpl = template_from_str(tmpl_str)
+    assert tmpl.render(x=s) == f"'{s}'"
+    assert tmpl.render(x=t) == f"{{'{s}','{t[1]}',}}"
+
+
+def test_str2ip_table():
+    s = "2001:DB8::d0c"
+    t = [s, "192.0.2.1"]
+    tmpl_str = """{% from 'macros/common_macros.lua.j2' import str2ip_table %}
+{{ str2ip_table(x) }}"""
+
+    tmpl = template_from_str(tmpl_str)
+    assert tmpl.render(x=s) == f"kres.str2ip('{s}')"
+    assert tmpl.render(x=t) == f"{{kres.str2ip('{s}'),kres.str2ip('{t[1]}'),}}"
+
+
+def test_qtype_table():
+    s = "AAAA"
+    t = [s, "TXT"]
+    tmpl_str = """{% from 'macros/common_macros.lua.j2' import qtype_table %}
+{{ qtype_table(x) }}"""
+
+    tmpl = template_from_str(tmpl_str)
+    assert tmpl.render(x=s) == f"kres.type.{s}"
+    assert tmpl.render(x=t) == f"{{kres.type.{s},kres.type.{t[1]},}}"
+
+
+def test_servers_table():
+    s = "2001:DB8::d0c"
+    t = [s, "192.0.2.1"]
+    tmpl_str = """{% from 'macros/common_macros.lua.j2' import servers_table %}
+{{ servers_table(x) }}"""
+
+    tmpl = template_from_str(tmpl_str)
+    assert tmpl.render(x=s) == f"'{s}'"
+    assert tmpl.render(x=t) == f"{{'{s}','{t[1]}',}}"
+    assert tmpl.render(x=[{"address": s}, {"address": t[1]}]) == f"{{'{s}','{t[1]}',}}"
+
+
+def test_tls_servers_table():
+    d = ForwardServerSchema(
+        {"address": "2001:DB8::d0c", "hostname": "res.example.com", "ca-file": "/etc/knot-resolver/tlsca.crt"}
+    )
+    t = [d, ForwardServerSchema({"address": "192.0.2.1", "pin-sha256": "YQ=="})]
+    tmpl_str = """{% from 'macros/common_macros.lua.j2' import tls_servers_table %}
+{{ tls_servers_table(x) }}"""
+
+    tmpl = template_from_str(tmpl_str)
+    assert tmpl.render(x=[d.address, t[1].address]) == f"{{'{d.address}','{t[1].address}',}}"
+    assert (
+        tmpl.render(x=t)
+        == f"{{{{'{d.address}',hostname='{d.hostname}',ca_file='{d.ca_file}',}},{{'{t[1].address}',pin_sha256='{t[1].pin_sha256}',}},}}"
+    )