Skip to content

Commit

Permalink
rh_kselftests_vm: kernel selftests execution in guest
Browse files Browse the repository at this point in the history
Creates a new test case that executes the kernel selftests
inside the VM through the RPM that has been previously downloaded
and installed. Could be expanded with more tests in the future.

Signed-off-by: mcasquer <[email protected]>
  • Loading branch information
mcasquer committed Sep 20, 2024
1 parent 8edbb35 commit 5aee4f9
Show file tree
Hide file tree
Showing 2 changed files with 89 additions and 0 deletions.
10 changes: 10 additions & 0 deletions qemu/tests/cfg/rh_kselftests_vm.cfg
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
- rh_kselftests_vm:
only RHEL
type = rh_kselftests_vm
virt_test_type = qemu
kernel_path = "/tmp/kernel"
kselftests_path = "/usr/libexec/kselftests"
variants:
- mm:
no s390x
selftests_type = mm
79 changes: 79 additions & 0 deletions qemu/tests/rh_kselftests_vm.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
from virttest import error_context


class KernelSelftests(object):
"""
Class for kernel selftests
"""

def __init__(self, test, params, env):
"""
Init the default values of KernelSelftests object.
:param test: QEMU test object
:param params: A dict containing VM preprocessing parameters.
:param env: The environment (a dict-like object).
"""
self.session = None
self.test = test
self.params = params
self.env = env

def run_test(self, test, params, env):
selftests_type = params["selftests_type"]
mm_test_type = "%s_test" % selftests_type
if hasattr(self, mm_test_type):
func = getattr(self, mm_test_type)
func(params)
else:
test.error("Could not find matching test, check the config file")

def mm_test(self, params):
kselftests_path = params.get("kselftests_path")
params["tests_execution_cmd"] = (
"cd %s/mm && sh run_vmtests.sh -t hugetlb" % kselftests_path
)
params["setup_hugepages"] = "yes"


@error_context.context_aware
def run(test, params, env):
"""
rh_kselftests_vm test
1) Download the current kernel selftests RPM
2) Install the RPM
3) Execute the kernel selftests
:param test: QEMU test object
:param params: Dictionary with the test parameters
:param env: Dictionary with test environment
"""
kself_test = KernelSelftests(test, params, env)
kself_test.run_test(test, params, env)
vm = env.get_vm(params["main_vm"])
vm.verify_alive()
session = vm.wait_for_login()
kernel_path = params.get("kernel_path", "/tmp/kernel")
tests_execution_cmd = params.get("tests_execution_cmd")

session.cmd("mkdir -p %s" % kernel_path)
kernel_version = session.cmd_output("uname -r").strip().split("+")[0]
error_context.base_context("The kernel version: %s" % kernel_version, test.log.info)

error_context.context("Download the kernel selftests RPM", test.log.debug)
session.cmd("cd %s" % kernel_path)
session.cmd(
"brew download-build --rpm kernel-selftests-internal-%s.rpm" % kernel_version,
180,
)

error_context.context("Install the RPM", test.log.debug)
session.cmd("dnf install -y ./kernel-*")

error_context.base_context("Execute the selftests", test.log.info)
s, o = session.cmd_status_output(tests_execution_cmd, 180)
if s != 0:
test.fail("Error during selftests execution: %s" % o)

test.log.info("The selftests results: %s" % o)
error_context.context("Cleaning kernel files", test.log.debug)
session.cmd("rm -rf %s" % kernel_path)

0 comments on commit 5aee4f9

Please sign in to comment.