Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(47)

Unified Diff: client/tests/kvm/tests/kdump.py

Issue 6246035: Merge remote branch 'cros/upstream' into master (Closed) Base URL: ssh://git@gitrw.chromium.org:9222/autotest.git@master
Patch Set: patch Created 9 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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()

Powered by Google App Engine
This is Rietveld 408576698