101 lines
3 KiB
Python
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()
|