From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lucas Meneghel Rodrigues Subject: [PATCH 1/2] KVM test: Create a verify_kernel_crash() VM method v3 Date: Fri, 18 Mar 2011 17:58:27 -0300 Message-ID: <1300481908-4931-1-git-send-email-lmr@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Cc: kvm@vger.kernel.org To: autotest@test.kernel.org Return-path: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: autotest-bounces@test.kernel.org Errors-To: autotest-bounces@test.kernel.org List-Id: kvm.vger.kernel.org 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. Changes from v1: * According to mgoldish's comments, instead of using read_nonblocking() and read_until_last_line_matches(), use simply get_output(), and only throw an exception at the time we have a full trace. Changes from v3: * Reimplementing the method on a less moronic fashion. Signed-off-by: Lucas Meneghel Rodrigues --- client/tests/kvm/kvm_vm.py | 23 +++++++++++++++++++++++ 1 files changed, 23 insertions(+), 0 deletions(-) diff --git a/client/tests/kvm/kvm_vm.py b/client/tests/kvm/kvm_vm.py index 43ae79c..8114670 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:\n%s" % self.kernel_crash) + + class VMAddressError(VMError): pass @@ -1158,6 +1167,20 @@ class VM: return not self.process or not self.process.is_alive() + def verify_kernel_crash(self): + """ + Find kernel crash message on the VM serial console. + + @raise: VMDeadKernelCrashError, in case a kernel crash message was + found. + """ + data = self.serial_console.get_output() + match = re.search(r"BUG:.*---\[ end trace .* \]---", data, + re.DOTALL|re.MULTILINE) + if match is not None: + raise VMDeadKernelCrashError(match.group(0)) + + def get_params(self): """ Return the VM's params dict. Most modified params take effect only -- 1.7.4