From patchwork Thu Nov 11 14:44:19 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lucas Meneghel Rodrigues X-Patchwork-Id: 317432 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter1.kernel.org (8.14.4/8.14.3) with ESMTP id oABEiTot014321 for ; Thu, 11 Nov 2010 14:44:30 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756173Ab0KKOo0 (ORCPT ); Thu, 11 Nov 2010 09:44:26 -0500 Received: from mx1.redhat.com ([209.132.183.28]:26927 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755973Ab0KKOoZ (ORCPT ); Thu, 11 Nov 2010 09:44:25 -0500 Received: from int-mx02.intmail.prod.int.phx2.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id oABEiNWT018885 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 11 Nov 2010 09:44:23 -0500 Received: from freedom.redhat.com (vpn-10-156.rdu.redhat.com [10.11.10.156]) by int-mx02.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id oABEiKCb023487; Thu, 11 Nov 2010 09:44:21 -0500 From: Lucas Meneghel Rodrigues To: autotest@test.kernel.org Cc: kvm@vger.kernel.org, Jason Wang Subject: [PATCH] KVM test: Add a subtest kdump Date: Thu, 11 Nov 2010 12:44:19 -0200 Message-Id: <1289486659-6565-1-git-send-email-lmr@redhat.com> X-Scanned-By: MIMEDefang 2.67 on 10.5.11.12 Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.3 (demeter1.kernel.org [140.211.167.41]); Thu, 11 Nov 2010 14:44:30 +0000 (UTC) diff --git a/client/tests/kvm/tests/kdump.py b/client/tests/kvm/tests/kdump.py new file mode 100644 index 0000000..a5843c7 --- /dev/null +++ b/client/tests/kvm/tests/kdump.py @@ -0,0 +1,80 @@ +import logging, time +from autotest_lib.client.common_lib import error +import kvm_subprocess, kvm_test_utils, 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 = kvm_test_utils.get_living_vm(env, params.get("main_vm")) + timeout = float(params.get("login_timeout", 240)) + crash_timeout = float(params.get("crash_timeout", 360)) + session = kvm_test_utils.wait_for_login(vm, 0, timeout, 0, 2) + def_kernel_param_cmd = ("grubby --update-kernel=`grubby --default-kernel`" + " --args=crashkernel=128M@64M") + 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_test(vcpu): + """ + Trigger a crash dump through sysrq-trigger + + @param vcpu: vcpu which is used to trigger a crash + """ + session = kvm_test_utils.wait_for_login(vm, 0, timeout, 0, 2) + session.get_command_status("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 = kvm_test_utils.wait_for_login(vm, 0, crash_timeout, 0, 2) + + logging.info("Probing vmcore file...") + s = session.get_command_status("ls -R /var/crash | grep vmcore") + if s != 0: + raise error.TestFail("Could not find the generated vmcore file") + else: + logging.info("Found vmcore.") + + session.get_command_status("rm -rf /var/crash/*") + + try: + logging.info("Checking the existence of crash kernel...") + prob_cmd = "grep -q 1 /sys/kernel/kexec_crash_loaded" + s = session.get_command_status(prob_cmd) + if s != 0: + logging.info("Crash kernel is not loaded. Trying to load it") + # We need to setup the kernel params + s, o = session.get_command_status_output(kernel_param_cmd) + if s != 0: + raise error.TestFail("Could not add crashkernel params to" + "kernel") + session = kvm_test_utils.reboot(vm, session, timeout=timeout); + + logging.info("Enabling kdump service...") + # the initrd may be rebuilt here so we need to wait a little more + s, o = session.get_command_status_output(kdump_enable_cmd, timeout=120) + if s != 0: + raise error.TestFail("Could not enable kdump service: %s" % o) + + nvcpu = int(params.get("smp", 1)) + for i in range (nvcpu): + crash_test(i) + + finally: + session.close() diff --git a/client/tests/kvm/tests_base.cfg.sample b/client/tests/kvm/tests_base.cfg.sample index 8fab6e2..00bd3bc 100644 --- a/client/tests/kvm/tests_base.cfg.sample +++ b/client/tests/kvm/tests_base.cfg.sample @@ -664,6 +664,15 @@ variants: image_name_snapshot1 = sn1 image_name_snapshot2 = sn2 + - kdump: + type = kdump + # time waited for the completion of crash dump + # crash_timeout = 360 + # command to add the crashkernel=X@Y to kernel cmd line + # kernel_param_cmd = "grubby --update-kernel=`grubby --default-kernel` --args=crashkernel=128M@64M" + # command to enable kdump service + # kdump_enable_cmd = chkconfig kdump on && service kdump start + # system_powerdown, system_reset and shutdown *must* be the last ones # defined (in this order), since the effect of such tests can leave # the VM on a bad state. @@ -1924,6 +1933,8 @@ virtio_net|virtio_blk|e1000|balloon_check: only Fedora.11 Fedora.12 Fedora.13 RHEL.5 OpenSUSE.11 SLES.11 Ubuntu-8.10-server # only WinXP Win2003 Win2008 WinVista Win7 Fedora.11 Fedora.12 Fedora.13 RHEL.5 OpenSUSE.11 SLES.11 Ubuntu-8.10-server +kdump: + only RHEL.5 RHEL.6 variants: - @qcow2: diff --git a/client/tests/kvm/unattended/RHEL-5-series.ks b/client/tests/kvm/unattended/RHEL-5-series.ks index 92ff727..3ee84f1 100644 --- a/client/tests/kvm/unattended/RHEL-5-series.ks +++ b/client/tests/kvm/unattended/RHEL-5-series.ks @@ -21,6 +21,7 @@ reboot @base @development-libs @development-tools +kexec-tools %post --interpreter /usr/bin/python import socket, os