diff --git a/stages/test/test_kickstart.py b/stages/test/test_kickstart.py new file mode 100644 index 0000000000..f04c59defd --- /dev/null +++ b/stages/test/test_kickstart.py @@ -0,0 +1,56 @@ +#!/usr/bin/python3 + +import os.path +import tempfile +from dataclasses import dataclass + +import pytest + +from osbuild.testutil.imports import import_module_from_path + + +@dataclass +class KsTestCase: + """KsTestCase is a single test case for the kickstart stage + + options: a dict with the options passed to the kickstart stage + expected: the expected string in the generated kickstart file + """ + options: str + expected: str + + +@pytest.fixture(name="ks_test_cases") +def ks_test_cases_fixtures(): + return [ + KsTestCase( + options={"lang": "en_US.UTF-8"}, expected="lang en_US.UTF-8"), + KsTestCase( + options={"keyboard": "us"}, expected="keyboard us"), + KsTestCase( + options={"timezone": "UTC"}, expected="timezone UTC"), + KsTestCase( + options={ + "lang": "en_US.UTF-8", + "keyboard": "us", + "timezone": "UTC", + }, + expected="lang en_US.UTF-8\nkeyboard us\ntimezone UTC", + ), + ] + + +def test_kickstart(ks_test_cases): + ks_stage_path = os.path.join(os.path.dirname(__file__), "../org.osbuild.kickstart") + ks_stage = import_module_from_path("ks_stage", ks_stage_path) + + ks_path = "kickstart/kfs.cfg" + with tempfile.TemporaryDirectory("kickstart-test-") as tmpdir: + for tc in ks_test_cases: + options = {"path": ks_path} + options.update(tc.options) + ks_stage.main(tmpdir, options) + + with open(os.path.join(tmpdir, ks_path), encoding="utf-8") as fp: + ks_content = fp.read() + assert ks_content == tc.expected + "\n" diff --git a/tox.ini b/tox.ini index 30b1b3b726..031a4d90f6 100644 --- a/tox.ini +++ b/tox.ini @@ -19,7 +19,7 @@ deps = pyyaml setenv = - LINTABLES = osbuild/ assemblers/* devices/* inputs/* mounts/* runners/* sources/* stages/* + LINTABLES = osbuild/ assemblers/* devices/* inputs/* mounts/* runners/* sources/* stages/*.* stages/test/*.py TYPEABLES = osbuild passenv =