[Piglit] [PATCH 2/3] framework: Write exceptions and traceback to /dev/stderr and json results.

Dylan Baker baker.dylan.c at gmail.com
Tue Dec 8 07:42:03 PST 2015


On Tue, Dec 08, 2015 at 01:23:29PM +0000, Jose Fonseca wrote:
> Exceptions were not reaching neither.
> 
> Junit is probably still busted.  But the right fix is to not catch
> generic Python exceptions, at all.
> ---
>  framework/results.py       | 3 ++-
>  framework/test/base.py     | 7 ++++---
>  templates/test_result.mako | 8 ++++++++
>  3 files changed, 14 insertions(+), 4 deletions(-)
> 
> diff --git a/framework/results.py b/framework/results.py
> index eeffcb7..ef19fd4 100644
> --- a/framework/results.py
> +++ b/framework/results.py
> @@ -196,6 +196,7 @@ class TestResult(object):
>              'subtests': self.subtests,
>              'time': self.time,
>              'exception': self.exception,
> +            'traceback': self.traceback,
>              'dmesg': self.dmesg,
>          }
>          return obj
> @@ -215,7 +216,7 @@ class TestResult(object):
>          # pylint: disable=assigning-non-slot
>          inst = cls()
>  
> -        for each in ['returncode', 'command', 'exception', 'environment',
> +        for each in ['returncode', 'command', 'exception', 'traceback', 'environment',
>                       'time', 'result', 'dmesg']:
>              if each in dict_:
>                  setattr(inst, each, dict_[each])
> diff --git a/framework/test/base.py b/framework/test/base.py
> index bf998d8..ecd8bd9 100644
> --- a/framework/test/base.py
> +++ b/framework/test/base.py
> @@ -184,11 +184,12 @@ class Test(object):
>              # This is a rare case where a bare exception is okay, since we're
>              # using it to log exceptions
>              except:
> -                exception = sys.exc_info()
> +                exc_type, exc_value, exc_traceback = sys.exc_info()
> +                traceback.print_exc(file=sysstderr)

typo: sys.stderr

>                  self.result.result = 'fail'
> -                self.result.exception = "{}{}".format(*exception[:2])
> +                self.result.exception = "{}{}".format(exc_type, exc_value)
>                  self.result.traceback = "".join(
> -                    traceback.format_tb(exception[2]))
> +                    traceback.format_tb(exc_traceback))
>  
>              log.log(self.result.result)
>          else:
> diff --git a/templates/test_result.mako b/templates/test_result.mako
> index 229a5a7..ff08797 100644
> --- a/templates/test_result.mako
> +++ b/templates/test_result.mako
> @@ -75,6 +75,14 @@
>            </pre>${value.command}</pre>
>          </td>
>        </tr>
> +    % if value.exception:
> +      <tr>
> +        <td>Exception</td>
> +        <td>
> +          <pre>${value.exception | h}</pre>
> +        </td>
> +      </tr>
> +    % endif
>      % if value.traceback:
>        <tr>
>          <td>Traceback</td>
> -- 
> 2.5.0
> 
This patch conflates two different issues. one is that you want the
error printed, one is that it needs to be stored in the json and
presented in the html summary. I'd prefer to see that as two separate
changes.

You said in a previous version that you wanted the suite to stop if you
hit this issue, I sent a patch to do that.

Dylan
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 473 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/piglit/attachments/20151208/bac724c4/attachment-0001.sig>


More information about the Piglit mailing list