mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-19 03:15:00 +00:00
test: Separate out the exception handling
The tests currently catch a very broad Exception in each case. This is thrown even in the event of a coding error. We want to handle exceptions differently depending on their severity, so that we can avoid hour-long delays waiting for a board that is clearly broken. As a first step, create some new exception types, separating out those which are simply an unexpected result from executed a command, from those which indicate some kind of hardware failure. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
e4ad90149c
commit
681b8f86e4
2 changed files with 25 additions and 12 deletions
|
@ -14,6 +14,7 @@ import pytest
|
|||
import re
|
||||
import sys
|
||||
import u_boot_spawn
|
||||
from u_boot_spawn import BootFail, Timeout, Unexpected
|
||||
|
||||
# Regexes for text we expect U-Boot to send to the console.
|
||||
pattern_u_boot_spl_signon = re.compile('(U-Boot SPL \\d{4}\\.\\d{2}[^\r\n]*\\))')
|
||||
|
@ -189,13 +190,13 @@ class ConsoleBase(object):
|
|||
m = self.p.expect([pattern_u_boot_spl_signon] +
|
||||
self.bad_patterns)
|
||||
if m != 0:
|
||||
raise Exception('Bad pattern found on SPL console: ' +
|
||||
raise BootFail('Bad pattern found on SPL console: ' +
|
||||
self.bad_pattern_ids[m - 1])
|
||||
env_spl_banner_times -= 1
|
||||
|
||||
m = self.p.expect([pattern_u_boot_main_signon] + self.bad_patterns)
|
||||
if m != 0:
|
||||
raise Exception('Bad pattern found on console: ' +
|
||||
raise BootFail('Bad pattern found on console: ' +
|
||||
self.bad_pattern_ids[m - 1])
|
||||
self.u_boot_version_string = self.p.after
|
||||
while True:
|
||||
|
@ -206,13 +207,9 @@ class ConsoleBase(object):
|
|||
if m == 1:
|
||||
self.p.send(' ')
|
||||
continue
|
||||
raise Exception('Bad pattern found on console: ' +
|
||||
raise BootFail('Bad pattern found on console: ' +
|
||||
self.bad_pattern_ids[m - 2])
|
||||
|
||||
except Exception as ex:
|
||||
self.log.error(str(ex))
|
||||
self.cleanup_spawn()
|
||||
raise
|
||||
finally:
|
||||
self.log.timestamp()
|
||||
|
||||
|
@ -278,7 +275,7 @@ class ConsoleBase(object):
|
|||
m = self.p.expect([chunk] + self.bad_patterns)
|
||||
if m != 0:
|
||||
self.at_prompt = False
|
||||
raise Exception('Bad pattern found on console: ' +
|
||||
raise BootFail('Bad pattern found on console: ' +
|
||||
self.bad_pattern_ids[m - 1])
|
||||
if not wait_for_prompt:
|
||||
return
|
||||
|
@ -288,14 +285,18 @@ class ConsoleBase(object):
|
|||
m = self.p.expect([self.prompt_compiled] + self.bad_patterns)
|
||||
if m != 0:
|
||||
self.at_prompt = False
|
||||
raise Exception('Bad pattern found on console: ' +
|
||||
raise BootFail('Missing prompt on console: ' +
|
||||
self.bad_pattern_ids[m - 1])
|
||||
self.at_prompt = True
|
||||
self.at_prompt_logevt = self.logstream.logfile.cur_evt
|
||||
# Only strip \r\n; space/TAB might be significant if testing
|
||||
# indentation.
|
||||
return self.p.before.strip('\r\n')
|
||||
except Exception as ex:
|
||||
except Timeout as exc:
|
||||
self.log.error(str(exc))
|
||||
self.cleanup_spawn()
|
||||
raise
|
||||
except BootFail as ex:
|
||||
self.log.error(str(ex))
|
||||
self.cleanup_spawn()
|
||||
raise
|
||||
|
@ -354,7 +355,8 @@ class ConsoleBase(object):
|
|||
text = re.escape(text)
|
||||
m = self.p.expect([text] + self.bad_patterns)
|
||||
if m != 0:
|
||||
raise Exception('Bad pattern found on console: ' +
|
||||
raise Unexpected(
|
||||
"Unexpected pattern found on console (exp '{text}': " +
|
||||
self.bad_pattern_ids[m - 1])
|
||||
|
||||
def drain_console(self):
|
||||
|
|
|
@ -16,6 +16,17 @@ import traceback
|
|||
class Timeout(Exception):
|
||||
"""An exception sub-class that indicates that a timeout occurred."""
|
||||
|
||||
class BootFail(Exception):
|
||||
"""An exception sub-class that indicates that a boot failure occurred.
|
||||
|
||||
This is used when a bad pattern is seen when waiting for the boot prompt.
|
||||
It is regarded as fatal, to avoid trying to boot the again and again to no
|
||||
avail.
|
||||
"""
|
||||
|
||||
class Unexpected(Exception):
|
||||
"""An exception sub-class that indicates that unexpected test was seen."""
|
||||
|
||||
class Spawn:
|
||||
"""Represents the stdio of a freshly created sub-process. Commands may be
|
||||
sent to the process, and responses waited for.
|
||||
|
|
Loading…
Add table
Reference in a new issue