From: Lukáš Doktor <ldok...@redhat.com> The get_console (and _handle_prompt) uses the last non-empty line to check what is going on, but when debug is enabled, kernel produces lots of lines spoiling the output. Let's also ignore the messages that looks like kernel debugs ([ $float] $msg).
This significantly improves the results on my machine with JeOS and enabled debug. Signed-off-by: Lukáš Doktor <ldok...@redhat.com> Signed-off-by: Eduardo Habkost <ehabk...@redhat.com> --- tests/avocado/avocado_qemu/test.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/tests/avocado/avocado_qemu/test.py b/tests/avocado/avocado_qemu/test.py index 9dc6c1ef91..966936a52f 100644 --- a/tests/avocado/avocado_qemu/test.py +++ b/tests/avocado/avocado_qemu/test.py @@ -26,6 +26,7 @@ extra features intended for Qemu testing. import logging import os +import re import sys import time import uuid @@ -120,6 +121,17 @@ def _handle_prompts(session, username, password, prompt, timeout=60, :return: If connect succeed return the output text to script for further debug. """ + re_kernel_message = re.compile(r"^\[\s*\d+.\d+\] ") + + def get_last_nonempty_line(cont): + """Return last non-empty non-kernel line""" + nonempty_lines = [_ for _ in cont.splitlines() + if _.strip() and not re_kernel_message.match(_)] + if nonempty_lines: + return nonempty_lines[-1] + else: + return "" + password_prompt_count = 0 login_prompt_count = 0 last_chance = False @@ -128,7 +140,7 @@ def _handle_prompts(session, username, password, prompt, timeout=60, output = "" while True: try: - match, text = session.read_until_last_line_matches( + match, text = session.read_until_output_matches( [r"[Aa]re you sure", r"[Pp]assword:\s*", # Prompt of rescue mode for Red Hat. r"\(or (press|type) Control-D to continue\):\s*", @@ -137,7 +149,7 @@ def _handle_prompts(session, username, password, prompt, timeout=60, r"[Cc]onnection.*closed", r"[Cc]onnection.*refused", r"[Pp]lease wait", r"[Ww]arning", r"[Ee]nter.*username", r"[Ee]nter.*password", r"[Cc]onnection timed out", prompt, - r"Escape character is.*"], + r"Escape character is.*"], get_last_nonempty_line, timeout=timeout, internal_timeout=0.5) output += text if match == 0: # "Are you sure you want to continue connecting" -- 2.14.3