Skip to content

Commit

Permalink
stages: add new unit test for kickstart stage
Browse files Browse the repository at this point in the history
This commit adds a simple and lightweight unit test for the new
kickstart options. It's pretty simple but also cheap and runs
fast.
  • Loading branch information
mvo5 committed Nov 6, 2023
1 parent e9d5b01 commit 1ccf7e5
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 1 deletion.
55 changes: 55 additions & 0 deletions stages/test/test_kickstart.py
Original file line number Diff line number Diff line change
@@ -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"
2 changes: 1 addition & 1 deletion tox.ini
Original file line number Diff line number Diff line change
Expand Up @@ -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 =
Expand Down

0 comments on commit 1ccf7e5

Please sign in to comment.