Skip to content
Snippets Groups Projects
Commit 0c6189b5 authored by Stephen Warren's avatar Stephen Warren Committed by Simon Glass
Browse files

test/py: check for bad patterns everywhere we wait


Currently, bad patterns are only honored when executing a shell command.
Other cases, such as the initial boot-up of U-Boot or when interacting
with command output rather than gathering all output prior to the shell
prompt, do not currently look for bad patterns in console output. This
patch makes sure that bad patterns are honored everywhere.

One benefit of this change is that if U-Boot sandbox fails to start up,
the error message it emits can be caught immediately, rather than relying
on a (long) timeout when waiting for the expected signon message and/or
command prompt.

Signed-off-by: default avatarStephen Warren <swarren@nvidia.com>
Acked-by: default avatarSimon Glass <sjg@chromium.org>
parent e4119ebb
No related branches found
No related tags found
No related merge requests found
...@@ -231,7 +231,10 @@ class ConsoleBase(object): ...@@ -231,7 +231,10 @@ class ConsoleBase(object):
if type(text) == type(''): if type(text) == type(''):
text = re.escape(text) text = re.escape(text)
self.p.expect([text]) m = self.p.expect([text] + self.bad_patterns)
if m != 0:
raise Exception('Bad pattern found on console: ' +
self.bad_pattern_ids[m - 1])
def drain_console(self): def drain_console(self):
"""Read from and log the U-Boot console for a short time. """Read from and log the U-Boot console for a short time.
...@@ -298,8 +301,14 @@ class ConsoleBase(object): ...@@ -298,8 +301,14 @@ class ConsoleBase(object):
self.p.timeout = 30000 self.p.timeout = 30000
self.p.logfile_read = self.logstream self.p.logfile_read = self.logstream
if self.config.buildconfig.get('CONFIG_SPL', False) == 'y': if self.config.buildconfig.get('CONFIG_SPL', False) == 'y':
self.p.expect([pattern_u_boot_spl_signon]) m = self.p.expect([pattern_u_boot_spl_signon] + self.bad_patterns)
self.p.expect([pattern_u_boot_main_signon]) if m != 0:
raise Exception('Bad pattern found on console: ' +
self.bad_pattern_ids[m - 1])
m = self.p.expect([pattern_u_boot_main_signon] + self.bad_patterns)
if m != 0:
raise Exception('Bad pattern found on console: ' +
self.bad_pattern_ids[m - 1])
signon = self.p.after signon = self.p.after
build_idx = signon.find(', Build:') build_idx = signon.find(', Build:')
if build_idx == -1: if build_idx == -1:
...@@ -307,12 +316,15 @@ class ConsoleBase(object): ...@@ -307,12 +316,15 @@ class ConsoleBase(object):
else: else:
self.u_boot_version_string = signon[:build_idx] self.u_boot_version_string = signon[:build_idx]
while True: while True:
match = self.p.expect([self.prompt_escaped, m = self.p.expect([self.prompt_escaped,
pattern_stop_autoboot_prompt]) pattern_stop_autoboot_prompt] + self.bad_patterns)
if match == 1: if m == 0:
break
if m == 1:
self.p.send(chr(3)) # CTRL-C self.p.send(chr(3)) # CTRL-C
continue continue
break raise Exception('Bad pattern found on console: ' +
self.bad_pattern_ids[m - 2])
self.at_prompt = True self.at_prompt = True
self.at_prompt_logevt = self.logstream.logfile.cur_evt self.at_prompt_logevt = self.logstream.logfile.cur_evt
except Exception as ex: except Exception as ex:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment