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? > Signed-off-by: Lucas Meneghel Rodrigues <lmr@xxxxxxxxxx> > --- > 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@xxxxxxxxxxxxxxx > 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@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html