Stages/tuned: add unit tests for the stage.
Fix #1941 Signed-off-by: Tomáš Hozza <thozza@redhat.com>
This commit is contained in:
parent
f173efea56
commit
d7d41b477b
1 changed files with 151 additions and 0 deletions
151
stages/test/test_tuned.py
Normal file
151
stages/test/test_tuned.py
Normal file
|
|
@ -0,0 +1,151 @@
|
||||||
|
#!/usr/bin/python3
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
from osbuild.testutil import (
|
||||||
|
assert_jsonschema_error_contains,
|
||||||
|
make_fake_tree,
|
||||||
|
)
|
||||||
|
|
||||||
|
STAGE_NAME = "org.osbuild.tuned"
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize("test_data,expected_err", [
|
||||||
|
# bad
|
||||||
|
({"profiles": {}}, "{} is not of type 'array'"),
|
||||||
|
({"profiles": ""}, "'' is not of type 'array'"),
|
||||||
|
({"profiles": []}, "[] is too short"),
|
||||||
|
({"profiles": [0]}, "0 is not of type 'string'"),
|
||||||
|
({"profiles": [""]}, "'' is too short"),
|
||||||
|
({}, "'profiles' is a required property"),
|
||||||
|
# good
|
||||||
|
({"profiles": ["balanced"]}, ""),
|
||||||
|
({"profiles": ["balanced", "sap-hana"]}, ""),
|
||||||
|
])
|
||||||
|
def test_schema_validation(stage_schema, test_data, expected_err):
|
||||||
|
test_input = {
|
||||||
|
"type": STAGE_NAME,
|
||||||
|
"options": {},
|
||||||
|
}
|
||||||
|
test_input["options"].update(test_data)
|
||||||
|
res = stage_schema.validate(test_input)
|
||||||
|
|
||||||
|
if expected_err == "":
|
||||||
|
assert res.valid is True, f"err: {[e.as_dict() for e in res.errors]}"
|
||||||
|
else:
|
||||||
|
assert res.valid is False
|
||||||
|
assert_jsonschema_error_contains(res, expected_err, expected_num_errs=1)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize("fake_tree,available_profiles", (
|
||||||
|
({}, []),
|
||||||
|
# simple case with just installed profiles
|
||||||
|
(
|
||||||
|
{
|
||||||
|
"/usr/lib/tuned/balanced/tuned.conf": "",
|
||||||
|
"/usr/lib/tuned/sap/tuned.conf": ""
|
||||||
|
},
|
||||||
|
["balanced", "sap"]
|
||||||
|
),
|
||||||
|
# simple case with installed and custom profiles
|
||||||
|
(
|
||||||
|
{
|
||||||
|
"/usr/lib/tuned/balanced/tuned.conf": "",
|
||||||
|
"/usr/lib/tuned/sap/tuned.conf": "",
|
||||||
|
"/etc/tuned/custom/tuned.conf": ""
|
||||||
|
},
|
||||||
|
["balanced", "sap", "custom"]
|
||||||
|
),
|
||||||
|
# Tuned 2.23.0+ with profiles under profiles/ directory
|
||||||
|
# in which case we ignore profiles not under profiles/
|
||||||
|
(
|
||||||
|
{
|
||||||
|
"/usr/lib/tuned/profiles/balanced/tuned.conf": "",
|
||||||
|
"/usr/lib/tuned/sap/tuned.conf": ""
|
||||||
|
},
|
||||||
|
["balanced"]
|
||||||
|
),
|
||||||
|
(
|
||||||
|
{
|
||||||
|
"/usr/lib/tuned/profiles/balanced/tuned.conf": "",
|
||||||
|
"/etc/tuned/sap/tuned.conf": ""
|
||||||
|
},
|
||||||
|
["balanced", "sap"]
|
||||||
|
),
|
||||||
|
(
|
||||||
|
{
|
||||||
|
"/usr/lib/tuned/profiles/balanced/tuned.conf": "",
|
||||||
|
"/etc/tuned/profiles/sap/tuned.conf": ""
|
||||||
|
},
|
||||||
|
["balanced", "sap"]
|
||||||
|
),
|
||||||
|
(
|
||||||
|
{
|
||||||
|
"/etc/tuned/profiles/balanced/tuned.conf": "",
|
||||||
|
"/etc/tuned/sap/tuned.conf": ""
|
||||||
|
},
|
||||||
|
["balanced"]
|
||||||
|
),
|
||||||
|
(
|
||||||
|
{
|
||||||
|
"/usr/lib/tuned/profiles/profile1/tuned.conf": "",
|
||||||
|
"/usr/lib/tuned/profiles/profile2/tuned.conf": "",
|
||||||
|
"/usr/lib/tuned/profile3/tuned.conf": "",
|
||||||
|
"/etc/tuned/profiles/profile11/tuned.conf": "",
|
||||||
|
"/etc/tuned/profiles/profile12/tuned.conf": "",
|
||||||
|
"/etc/tuned/profile13/tuned.conf": "",
|
||||||
|
},
|
||||||
|
["profile1", "profile2", "profile11", "profile12"]
|
||||||
|
),
|
||||||
|
))
|
||||||
|
def test_tunedprofilesdb__load_available_profiles(tmp_path, stage_module, fake_tree, available_profiles):
|
||||||
|
make_fake_tree(tmp_path, fake_tree)
|
||||||
|
# pylint: disable=protected-access
|
||||||
|
assert sorted(stage_module.TunedProfilesDB._load_available_profiles(tmp_path)) == sorted(available_profiles)
|
||||||
|
|
||||||
|
|
||||||
|
def test_tuned_happy(tmp_path, stage_module):
|
||||||
|
make_fake_tree(tmp_path, {
|
||||||
|
"/usr/lib/tuned/balanced/tuned.conf": "",
|
||||||
|
"/usr/lib/tuned/sap/tuned.conf": "",
|
||||||
|
"/etc/tuned/custom/tuned.conf": "",
|
||||||
|
})
|
||||||
|
|
||||||
|
options = {
|
||||||
|
"profiles": ["balanced", "sap", "custom"]
|
||||||
|
}
|
||||||
|
|
||||||
|
assert stage_module.main(tmp_path.as_posix(), options) == 0
|
||||||
|
|
||||||
|
active_profile_file = tmp_path / "etc/tuned/active_profile"
|
||||||
|
assert active_profile_file.is_file()
|
||||||
|
assert active_profile_file.read_text() == "balanced sap custom\n"
|
||||||
|
|
||||||
|
profile_mode_file = tmp_path / "etc/tuned/profile_mode"
|
||||||
|
assert profile_mode_file.is_file()
|
||||||
|
assert profile_mode_file.read_text() == "manual\n"
|
||||||
|
|
||||||
|
|
||||||
|
def test_tuned_unhappy(tmp_path, stage_module):
|
||||||
|
make_fake_tree(tmp_path, {
|
||||||
|
"/usr/lib/tuned/balanced/tuned.conf": "",
|
||||||
|
"/usr/lib/tuned/sap/tuned.conf": "",
|
||||||
|
"/etc/tuned/custom/tuned.conf": "",
|
||||||
|
})
|
||||||
|
|
||||||
|
options = {
|
||||||
|
"profiles": ["balanced", "non-existing"]
|
||||||
|
}
|
||||||
|
|
||||||
|
try:
|
||||||
|
stage_module.main(tmp_path.as_posix(), options)
|
||||||
|
except ValueError as e:
|
||||||
|
assert "non-existing" in str(e)
|
||||||
|
else:
|
||||||
|
assert False, "Exception not raised"
|
||||||
|
|
||||||
|
active_profile_file = tmp_path / "etc/tuned/active_profile"
|
||||||
|
assert not active_profile_file.exists()
|
||||||
|
|
||||||
|
profile_mode_file = tmp_path / "etc/tuned/profile_mode"
|
||||||
|
assert not profile_mode_file.exists()
|
||||||
Loading…
Add table
Add a link
Reference in a new issue