| Index: client/tests/kvm/tests/kdump.py
|
| diff --git a/client/tests/kvm/tests/kdump.py b/client/tests/kvm/tests/kdump.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..c847131b29a0f23afd43447c50dc1707ebf4e1c4
|
| --- /dev/null
|
| +++ b/client/tests/kvm/tests/kdump.py
|
| @@ -0,0 +1,75 @@
|
| +import logging
|
| +from autotest_lib.client.common_lib import error
|
| +import kvm_utils
|
| +
|
| +
|
| +def run_kdump(test, params, env):
|
| + """
|
| + KVM reboot test:
|
| + 1) Log into a guest
|
| + 2) Check and enable the kdump
|
| + 3) For each vcpu, trigger a crash and check the vmcore
|
| +
|
| + @param test: kvm test object
|
| + @param params: Dictionary with the test parameters
|
| + @param env: Dictionary with test environment.
|
| + """
|
| + vm = env.get_vm(params["main_vm"])
|
| + vm.verify_alive()
|
| + timeout = float(params.get("login_timeout", 240))
|
| + crash_timeout = float(params.get("crash_timeout", 360))
|
| + session = vm.wait_for_login(timeout=timeout)
|
| + def_kernel_param_cmd = ("grubby --update-kernel=`grubby --default-kernel`"
|
| + " --args=crashkernel=128M")
|
| + kernel_param_cmd = params.get("kernel_param_cmd", def_kernel_param_cmd)
|
| + def_kdump_enable_cmd = "chkconfig kdump on && service kdump start"
|
| + kdump_enable_cmd = params.get("kdump_enable_cmd", def_kdump_enable_cmd)
|
| + def_crash_kernel_prob_cmd = "grep -q 1 /sys/kernel/kexec_crash_loaded"
|
| + crash_kernel_prob_cmd = params.get("crash_kernel_prob_cmd",
|
| + def_crash_kernel_prob_cmd)
|
| +
|
| + def crash_test(vcpu):
|
| + """
|
| + Trigger a crash dump through sysrq-trigger
|
| +
|
| + @param vcpu: vcpu which is used to trigger a crash
|
| + """
|
| + session = vm.wait_for_login(timeout=timeout)
|
| + session.cmd_output("rm -rf /var/crash/*")
|
| +
|
| + logging.info("Triggering crash on vcpu %d ...", vcpu)
|
| + crash_cmd = "taskset -c %d echo c > /proc/sysrq-trigger" % vcpu
|
| + session.sendline(crash_cmd)
|
| +
|
| + if not kvm_utils.wait_for(lambda: not session.is_responsive(), 240, 0,
|
| + 1):
|
| + raise error.TestFail("Could not trigger crash on vcpu %d" % vcpu)
|
| +
|
| + logging.info("Waiting for kernel crash dump to complete")
|
| + session = vm.wait_for_login(timeout=crash_timeout)
|
| +
|
| + logging.info("Probing vmcore file...")
|
| + session.cmd("ls -R /var/crash | grep vmcore")
|
| + logging.info("Found vmcore.")
|
| +
|
| + session.cmd_output("rm -rf /var/crash/*")
|
| +
|
| + try:
|
| + logging.info("Checking the existence of crash kernel...")
|
| + try:
|
| + session.cmd(crash_kernel_prob_cmd)
|
| + except:
|
| + logging.info("Crash kernel is not loaded. Trying to load it")
|
| + session.cmd(kernel_param_cmd)
|
| + session = vm.reboot(session, timeout=timeout)
|
| +
|
| + logging.info("Enabling kdump service...")
|
| + # the initrd may be rebuilt here so we need to wait a little more
|
| + session.cmd(kdump_enable_cmd, timeout=120)
|
| +
|
| + nvcpu = int(params.get("smp", 1))
|
| + for i in range (nvcpu):
|
| + crash_test(i)
|
| +
|
| + finally:
|
| + session.close()
|
|
|