debian-forge/test/mod/test_util_lorax.py
2022-09-12 13:32:51 +02:00

101 lines
3 KiB
Python

#
# Basic checks for the lorax utility
#
import os
import subprocess
import tempfile
import osbuild.util.lorax as lorax
from .. import test
BASIC_TEMPLATE = """
# This is a comment
<%page args="tree, name"/>
mkdir dir-{a,b,c}
append test/check success
append a.txt "This is a text"
move a.txt dir-a
install /hello.txt dir-b
symlink dir-b/hello.txt hello-world.txt
runcmd touch ${tree}/foo.txt
append a.txt "@NAME@"
append b.txt "@NAME@"
replace @NAME@ ${name} *.txt
"""
class TestUtilLorax(test.TestBase):
def assertExists(self, root, *paths):
for path in paths:
target = os.path.join(root, path.lstrip("/"))
if not os.path.exists(target):
self.fail(f"Path {target} does not exists")
def test_script(self):
with tempfile.TemporaryDirectory(dir="/var/tmp") as tmp:
root = os.path.join(tmp, "root")
tree = os.path.join(tmp, "tree")
os.makedirs(root)
os.makedirs(tree)
with open(os.path.join(root, "hello.txt"), "w", encoding="utf8") as f:
f.write("Hello World\n")
self.assertExists(root, "hello.txt")
template = os.path.join(tmp, "template.tmpl")
with open(os.path.join(tmp, template), "w", encoding="utf8") as f:
f.write(BASIC_TEMPLATE)
# parse the template and render it
args = {
"tree": tree,
"name": "osbuild-42"
}
tmpl = lorax.render_template(template, args)
self.assertIsNotNone(tmpl)
# run the script
script = lorax.Script(tmpl, root, tree)
script()
# for debugging purposes
subprocess.run(["ls", "-la", tree], check=True)
# check the outcome
self.assertExists(tree, "dir-a", "dir-b", "dir-c")
self.assertExists(tree, "test/check")
self.assertExists(tree, "dir-a/a.txt")
self.assertExists(tree, "dir-b/hello.txt")
self.assertExists(tree, "hello-world.txt")
self.assertExists(tree, "foo.txt")
for fn in ["a.txt", "b.txt"]:
with open(os.path.join(tree, fn), "r", encoding="utf8") as f:
data = f.read().strip()
self.assertEqual(data, "osbuild-42")
def test_script_errors(self):
with tempfile.TemporaryDirectory(dir="/var/tmp") as tmp:
root = os.path.join(tmp, "root")
tree = os.path.join(tmp, "tree")
os.makedirs(root)
os.makedirs(tree)
# file not found during `replace`
tmpl = [["replace", "a", "b", "nonexist-file"]]
script = lorax.Script(tmpl, root, tree)
with self.assertRaises(AssertionError):
script()
# file not found during `install`
tmpl = [["install", "nonexist-file", "foo"]]
script = lorax.Script(tmpl, root, tree)
with self.assertRaises(IOError):
script()