From mboxrd@z Thu Jan 1 00:00:00 1970 From: Michael Goldish Subject: Re: [PATCH] KVM test: Create a verify_kernel_crash() VM method Date: Wed, 02 Mar 2011 12:56:08 +0200 Message-ID: <4D6E2248.6070602@redhat.com> References: <1299037561-5613-1-git-send-email-lmr@redhat.com> <19821.54756.290526.871208@gargle.gargle.HOWL> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Cc: Lucas Meneghel Rodrigues , autotest@test.kernel.org, kvm@vger.kernel.org To: Jason Wang Return-path: Received: from mx1.redhat.com ([209.132.183.28]:18571 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757034Ab1CBKz5 (ORCPT ); Wed, 2 Mar 2011 05:55:57 -0500 In-Reply-To: <19821.54756.290526.871208@gargle.gargle.HOWL> Sender: kvm-owner@vger.kernel.org List-ID: On 03/02/2011 07:30 AM, Jason Wang wrote: > Lucas Meneghel Rodrigues writes: > > A method to verify guest kernel panics can be very > > useful for a number of tests. Adapted from a function > > present on virtio_console test, create VM.verify_kernel_crash() > > and use it on unattended_install. > > > > How about using a thread to monitor the serial console, so other test can also > benefit from this? If an exception is raised in a background thread, it won't kill the main thread, so it's not obvious how a background thread can help here. Or maybe I misunderstood your suggestion? > > Signed-off-by: Lucas Meneghel Rodrigues > > --- > > client/tests/kvm/kvm_vm.py | 32 ++++++++++++++++++++++++++ > > client/tests/kvm/tests/unattended_install.py | 1 + > > 2 files changed, 33 insertions(+), 0 deletions(-) > > > > diff --git a/client/tests/kvm/kvm_vm.py b/client/tests/kvm/kvm_vm.py > > index 41f7491..ab60f71 100755 > > --- a/client/tests/kvm/kvm_vm.py > > +++ b/client/tests/kvm/kvm_vm.py > > @@ -105,6 +105,15 @@ class VMDeadError(VMError): > > (self.status, self.output)) > > > > > > +class VMDeadKernelCrashError(VMError): > > + def __init__(self, kernel_crash): > > + VMError.__init__(self, kernel_crash) > > + self.kernel_crash = kernel_crash > > + > > + def __str__(self): > > + return ("VM is dead due to a kernel crash: %s" % self.kernel_crash) > > + > > + > > class VMAddressError(VMError): > > pass > > > > @@ -1471,6 +1480,29 @@ class VM: > > return self.serial_login(internal_timeout) > > > > > > + def verify_kernel_crash(self, timeout=2): > > + """ > > + Find kernel crash message on serial console. > > + > > + @param timeout: Timeout used to verify expected output. > > + > > + @raise: VMDeadKernelCrashError, in case a kernel crash message was > > + found. > > + """ > > + data = self.serial_console.read_nonblocking() > > + match = re.search("BUG:", data, re.MULTILINE) > > + if match is not None: > > + match = re.search(r"BUG:.*---\[ end trace .* \]---", > > + data, re.DOTALL |re.MULTILINE) > > + if match is None: > > + data += self.serial_console.read_until_last_line_matches( > > + ["---\[ end trace .* \]---"], > > + timeout) > > + match = re.search(r"(BUG:.*---\[ end trace .* \]---)", > > + data, re.DOTALL |re.MULTILINE) > > + raise VMDeadKernelCrashError(match.group(0)) > > + > > + > > @error.context_aware > > def migrate(self, timeout=3600, protocol="tcp", cancel_delay=None, > > offline=False, stable_check=False, clean=True, > > diff --git a/client/tests/kvm/tests/unattended_install.py b/client/tests/kvm/tests/unattended_install.py > > index 7c6d845..955f8d6 100644 > > --- a/client/tests/kvm/tests/unattended_install.py > > +++ b/client/tests/kvm/tests/unattended_install.py > > @@ -33,6 +33,7 @@ def run_unattended_install(test, params, env): > > start_time = time.time() > > while (time.time() - start_time) < install_timeout: > > vm.verify_alive() > > + vm.verify_kernel_crash() > > client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) > > try: > > client.connect((vm.get_address(), port)) > > -- > > 1.7.4 > > > > -- > > To unsubscribe from this list: send the line "unsubscribe kvm" in > > the body of a message to majordomo@vger.kernel.org > > More majordomo info at http://vger.kernel.org/majordomo-info.html > -- > To unsubscribe from this list: send the line "unsubscribe kvm" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html