test: Decode exceptions only with sandbox

When a real board fails we don't want to decode the exception. Reserve
that behaviour for sandbox. Also avoid raising a new exception on
failure - just re-raise the existing one.

Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Simon Glass 2024-06-23 14:30:30 -06:00 committed by Tom Rini
parent ceffbfb629
commit 190933fbb5
2 changed files with 7 additions and 5 deletions

View file

@ -58,7 +58,7 @@ class ConsoleSandbox(ConsoleBase):
if self.use_dtb: if self.use_dtb:
cmd += ['-d', self.config.dtb] cmd += ['-d', self.config.dtb]
cmd += self.sandbox_flags cmd += self.sandbox_flags
return Spawn(cmd, cwd=self.config.source_dir) return Spawn(cmd, cwd=self.config.source_dir, decode_signal=True)
def restart_uboot_with_flags(self, flags, expect_reset=False, use_dtb=True): def restart_uboot_with_flags(self, flags, expect_reset=False, use_dtb=True):
"""Run U-Boot with the given command-line flags """Run U-Boot with the given command-line flags

View file

@ -24,18 +24,20 @@ class Spawn:
output: accumulated output from expect() output: accumulated output from expect()
""" """
def __init__(self, args, cwd=None): def __init__(self, args, cwd=None, decode_signal=False):
"""Spawn (fork/exec) the sub-process. """Spawn (fork/exec) the sub-process.
Args: Args:
args: array of processs arguments. argv[0] is the command to args: array of processs arguments. argv[0] is the command to
execute. execute.
cwd: the directory to run the process in, or None for no change. cwd: the directory to run the process in, or None for no change.
decode_signal (bool): True to indicate the exception number when
something goes wrong
Returns: Returns:
Nothing. Nothing.
""" """
self.decode_signal = decode_signal
self.waited = False self.waited = False
self.exit_code = 0 self.exit_code = 0
self.exit_info = '' self.exit_info = ''
@ -197,12 +199,12 @@ class Spawn:
# With sandbox, try to detect when U-Boot exits when it # With sandbox, try to detect when U-Boot exits when it
# shouldn't and explain why. This is much more friendly than # shouldn't and explain why. This is much more friendly than
# just dying with an I/O error # just dying with an I/O error
if err.errno == 5: # Input/output error if self.decode_signal and err.errno == 5: # I/O error
alive, _, info = self.checkalive() alive, _, info = self.checkalive()
if alive: if alive:
raise err raise err
raise ValueError('U-Boot exited with %s' % info) raise ValueError('U-Boot exited with %s' % info)
raise err raise
if self.logfile_read: if self.logfile_read:
self.logfile_read.write(c) self.logfile_read.write(c)
self.buf += c self.buf += c