# # 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()