[U-Boot] [PATCH 06/14] test/py: Provide output from exceptions with RunAndLog()

Teddy Reed teddy.reed at gmail.com
Sun Jul 3 22:49:50 CEST 2016


Hi Simon,

On Sun, Jul 3, 2016 at 8:40 AM, Simon Glass <sjg at chromium.org> wrote:
> Tests may want to look at the output from running a command, even if it
> fails (e.g. with a non-zero return code). Provide a means to obtain this.
>
> Another approach would be to return a class object containing both the
> output and the exception, but I'm not sure if that would result in a lot
> of refactoring.

In my experience with Pytest/Gtest _not_ using a class to represent
output/exception is the way to go!

Then a test author can write test cases with a flow like:
ASSERT_NOEXCEPT(output = doAction())
EXPECT_EQUAL(2, output)

The test harness can provide much more succinct errors when these cases fail. :)

>
> Signed-off-by: Simon Glass <sjg at chromium.org>

Reviewed-by: Teddy Reed <teddy.reed at gmail.com>

> ---
>
>  test/py/multiplexed_log.py | 7 +++++++
>  1 file changed, 7 insertions(+)
>
> diff --git a/test/py/multiplexed_log.py b/test/py/multiplexed_log.py
> index 02c44df..35a32fb 100644
> --- a/test/py/multiplexed_log.py
> +++ b/test/py/multiplexed_log.py
> @@ -101,6 +101,7 @@ class RunAndLog(object):
>          self.logfile = logfile
>          self.name = name
>          self.chained_file = chained_file
> +        self.output = None
>
>      def close(self):
>          """Clean up any resources managed by this object."""
> @@ -109,6 +110,9 @@ class RunAndLog(object):
>      def run(self, cmd, cwd=None, ignore_errors=False):
>          """Run a command as a sub-process, and log the results.
>
> +        The output is available at self.output which can be useful if there is
> +        an exception.
> +
>          Args:
>              cmd: The command to execute.
>              cwd: The directory to run the command in. Can be None to use the
> @@ -159,6 +163,9 @@ class RunAndLog(object):
>          self.logfile.write(self, output)
>          if self.chained_file:
>              self.chained_file.write(output)
> +
> +        # Store the output so it can be accessed if we raise an exception.
> +        self.output = output
>          if exception:
>              raise exception
>          return output
> --
> 2.8.0.rc3.226.g39d4020
>
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot

-- 
Teddy Reed V


More information about the U-Boot mailing list