]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
datamodel: lua: minor modifications, tests
authorAleš <ales.mrazek@nic.cz>
Wed, 8 Sep 2021 13:31:12 +0000 (15:31 +0200)
committerAleš Mrázek <ales.mrazek@nic.cz>
Fri, 8 Apr 2022 14:17:52 +0000 (16:17 +0200)
manager/knot_resolver_manager/datamodel/config.py
manager/knot_resolver_manager/datamodel/lua_config.py
manager/knot_resolver_manager/datamodel/lua_template.j2
manager/tests/datamodel/test_lua_config.py [new file with mode: 0644]

index fc8e9d3bd0aa41bb22714b580be1b457911aecd8..77215e16472be243dd71deb073d6fdf970d52a84 100644 (file)
@@ -1,5 +1,5 @@
 import pkgutil
-from typing import Optional, Text, Union
+from typing import Text, Union
 
 from jinja2 import Environment, Template
 
@@ -25,14 +25,14 @@ class KresConfig(DataParser):
     server: Server = Server()
     network: Network = Network()
     dns64: Union[bool, Dns64] = False
-    lua: Optional[Lua] = None
+    lua: Lua = Lua()
 
 
 class KresConfigStrict(DataValidator):
     server: ServerStrict
     network: NetworkStrict
-    dns64: Union[bool, Dns64Strict] = False
-    lua: Optional[LuaStrict]
+    dns64: Union[bool, Dns64Strict]
+    lua: LuaStrict
 
     def _dns64(self, obj: KresConfig) -> Union[bool, Dns64]:
         if obj.dns64 is True:
index 0eeaeb3424b2689ed30d82b474d63dd26ab62829..dce1b204fbfeedf075f093097664fc2001df6d2a 100644 (file)
@@ -1,21 +1,20 @@
-from typing import List, Optional, Union
+from typing import Optional
 
 from knot_resolver_manager.utils import DataParser, DataValidator
+from knot_resolver_manager.utils.exceptions import DataValidationException
 
 
 class Lua(DataParser):
-    script: Optional[Union[List[str], str]] = None
+    script_only: bool = False
+    script: Optional[str] = None
     script_file: Optional[str] = None
 
 
 class LuaStrict(DataValidator):
+    script_only: bool
     script: Optional[str]
     script_file: Optional[str]
 
-    def _script(self, lua: Lua) -> Optional[str]:
-        if isinstance(lua.script, List):
-            return "\n".join(lua.script)
-        return lua.script
-
     def _validate(self) -> None:
-        pass
+        if self.script and self.script_file:
+            raise DataValidationException("'lua.script' and 'lua.script-file' are both defined, only one can be used")
index 4c24fde45d535a168895f02b3be2fa2408eb8997..f5610a632f6145185aa0a26468cafc2f4db4a709 100644 (file)
@@ -1,3 +1,5 @@
+{% if not cfg.lua.script_only %}
+
 -- SERVER section
 -- server.hostname
 hostname('{{ cfg.server.hostname }}')
@@ -19,12 +21,10 @@ net.listen('{{ item.address }}', {{ item.port }}, {
 
 -- MODULES
 modules = {
-{% if cfg.dns64 %}
-    dns64 = '{{ cfg.dns64.prefix }}', -- DNS64
-{% endif %}
+    {{ "dns64 = '"+cfg.dns64.prefix+"'," if cfg.dns64 }}
 }
 
-{% if cfg.lua %}
+{% endif %}
 -- LUA section
 {% if cfg.lua.script_file %}
 {% import cfg.lua.script_file as script_file %}
@@ -36,4 +36,3 @@ modules = {
 -- lua.script
 {{ cfg.lua.script }}
 {% endif %}
-{% endif %}
\ No newline at end of file
diff --git a/manager/tests/datamodel/test_lua_config.py b/manager/tests/datamodel/test_lua_config.py
new file mode 100644 (file)
index 0000000..75129bb
--- /dev/null
@@ -0,0 +1,32 @@
+from pytest import raises
+
+from knot_resolver_manager.datamodel.lua_config import Lua, LuaStrict
+from knot_resolver_manager.utils.exceptions import DataValidationException
+
+yaml = """
+script-only: true
+script: |
+    -- lua script"""
+
+config = Lua.from_yaml(yaml)
+strict = LuaStrict(config)
+
+
+def test_parsing():
+    assert config.script_only == True
+    assert config.script == "-- lua script"
+
+
+def test_validating():
+    assert strict.script_only == True
+    assert strict.script == "-- lua script"
+
+
+def test_exception_raises():
+    yaml2 = """
+script: -- lua script
+script-file: path/to/file
+"""
+
+    with raises(DataValidationException):
+        LuaStrict(Lua.from_yaml(yaml2))