public inbox for kvm@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/2] KVM test: Create a verify_kernel_crash() VM method v3
@ 2011-03-18 20:58 Lucas Meneghel Rodrigues
  2011-03-18 20:58 ` [PATCH 2/2] KVM test: Use verify_kernel_crash() on unattended install Lucas Meneghel Rodrigues
  0 siblings, 1 reply; 2+ messages in thread
From: Lucas Meneghel Rodrigues @ 2011-03-18 20:58 UTC (permalink / raw)
  To: autotest; +Cc: kvm

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 <lmr@redhat.com>
---
 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

^ permalink raw reply related	[flat|nested] 2+ messages in thread

* [PATCH 2/2] KVM test: Use verify_kernel_crash() on unattended install
  2011-03-18 20:58 [PATCH 1/2] KVM test: Create a verify_kernel_crash() VM method v3 Lucas Meneghel Rodrigues
@ 2011-03-18 20:58 ` Lucas Meneghel Rodrigues
  0 siblings, 0 replies; 2+ messages in thread
From: Lucas Meneghel Rodrigues @ 2011-03-18 20:58 UTC (permalink / raw)
  To: autotest; +Cc: kvm

With this we can fail the test much earlier if a guest
kernel panic happens, instead of waiting for the full
timeout to complete.

Signed-off-by: Lucas Meneghel Rodrigues <lmr@redhat.com>
---
 client/tests/kvm/tests/unattended_install.py |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/client/tests/kvm/tests/unattended_install.py b/client/tests/kvm/tests/unattended_install.py
index 7c6d845..4868053 100644
--- a/client/tests/kvm/tests/unattended_install.py
+++ b/client/tests/kvm/tests/unattended_install.py
@@ -16,6 +16,7 @@ def run_unattended_install(test, params, env):
     """
     vm = env.get_vm(params["main_vm"])
     vm.verify_alive()
+    vm.verify_kernel_crash()
 
     install_timeout = int(params.get("timeout", 3000))
     post_install_delay = int(params.get("post_install_delay", 0))
-- 
1.7.4

^ permalink raw reply related	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2011-03-18 20:58 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-03-18 20:58 [PATCH 1/2] KVM test: Create a verify_kernel_crash() VM method v3 Lucas Meneghel Rodrigues
2011-03-18 20:58 ` [PATCH 2/2] KVM test: Use verify_kernel_crash() on unattended install Lucas Meneghel Rodrigues

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox