From 1ccf7e5ea4946b534b64481fb6e8a03979dc487c Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Thu, 2 Nov 2023 16:28:18 +0100 Subject: [PATCH] stages: add new unit test for kickstart stage This commit adds a simple and lightweight unit test for the new kickstart options. It's pretty simple but also cheap and runs fast. --- stages/test/test_kickstart.py | 55 +++++++++++++++++++++++++++++++++++ tox.ini | 2 +- 2 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 stages/test/test_kickstart.py diff --git a/stages/test/test_kickstart.py b/stages/test/test_kickstart.py new file mode 100644 index 0000000000..52385e3724 --- /dev/null +++ b/stages/test/test_kickstart.py @@ -0,0 +1,55 @@ +#!/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(tmp_path, 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" + for tc in ks_test_cases: + options = {"path": ks_path} + options.update(tc.options) + ks_stage.main(tmp_path, options) + + with open(os.path.join(tmp_path, 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 =