[Piglit] [RESEND PATCH 1/4] framework: Add a TimeAttribute class

Mark Janes mark.a.janes at intel.com
Thu Oct 8 12:29:51 PDT 2015


Series is

Reviewed-by: Mark Janes <mark.a.janes at intel.com>

dylanx.c.baker at intel.com writes:

> From: Dylan Baker <baker.dylan.c at gmail.com>
>
> This class will provide a new interface for time, one that stores the
> start and stop times, rather than the total time. It then provides
> methods for getting the total and the delta (as used in the summary).
>
> This commit adds the new class and tests for the class, but doesn't
> start plugging it in yet.
>
> The goal of this change is to allow post-processing to determine which
> tests were running in parallel.
>
> Signed-off-by: Dylan Baker <dylanx.c.baker at intel.com>
> ---
>  framework/backends/json.py       |  1 +
>  framework/results.py             | 38 ++++++++++++++++++++++++++++++++++++++
>  framework/tests/results_tests.py | 34 ++++++++++++++++++++++++++++++++--
>  3 files changed, 71 insertions(+), 2 deletions(-)
>
> diff --git a/framework/backends/json.py b/framework/backends/json.py
> index 935480b..4cc7957 100644
> --- a/framework/backends/json.py
> +++ b/framework/backends/json.py
> @@ -51,6 +51,7 @@ _DECODER_TABLE = {
>      'Subtests': results.Subtests,
>      'TestResult': results.TestResult,
>      'TestrunResult': results.TestrunResult,
> +    'TimeAttribute': results.TimeAttribute,
>      'Totals': results.Totals,
>  }
>  
> diff --git a/framework/results.py b/framework/results.py
> index 26f4380..7eca5bd 100644
> --- a/framework/results.py
> +++ b/framework/results.py
> @@ -25,6 +25,7 @@ from __future__ import print_function, absolute_import
>  
>  import collections
>  import copy
> +import datetime
>  
>  from framework import status, exceptions, grouptools
>  
> @@ -103,6 +104,43 @@ class StringDescriptor(object):  # pylint: disable=too-few-public-methods
>          raise NotImplementedError
>  
>  
> +class TimeAttribute(object):
> +    """Attribute of TestResult for time.
> +
> +    This attribute provides a couple of nice helpers. It stores the start and
> +    end time and provides methods for getting the total and delta of the times.
> +
> +    """
> +    __slots__ = ['start', 'end']
> +
> +    def __init__(self, start=0.0, end=0.0):
> +        self.start = start
> +        self.end = end
> +
> +    @property
> +    def total(self):
> +        return self.end - self.start
> +
> +    @property
> +    def delta(self):
> +        return str(datetime.timedelta(seconds=self.total))
> +
> +    def to_json(self):
> +        return {
> +            'start': self.start,
> +            'end': self.end,
> +            '__type__': 'TimeAttribute',
> +        }
> +
> +    @classmethod
> +    def from_dict(cls, dict_):
> +        dict_ = copy.copy(dict_)
> +
> +        if '__type__' in dict_:
> +            del dict_['__type__']
> +        return cls(**dict_)
> +
> +
>  class TestResult(object):
>      """An object represting the result of a single test."""
>      __slots__ = ['returncode', '_err', '_out', 'time', 'command', 'traceback',
> diff --git a/framework/tests/results_tests.py b/framework/tests/results_tests.py
> index 1b11df0..57ca646 100644
> --- a/framework/tests/results_tests.py
> +++ b/framework/tests/results_tests.py
> @@ -1,4 +1,4 @@
> -# Copyright (c) 2014 Intel Corporation
> +# Copyright (c) 2014, 2015 Intel Corporation
>  
>  # Permission is hereby granted, free of charge, to any person obtaining a copy
>  # of this software and associated documentation files (the "Software"), to deal
> @@ -213,7 +213,7 @@ class TestTestResult_to_json(object):
>          """results.TestResult.to_json: sets the out correctly"""
>          nt.eq_(self.dict['out'], self.json['out'])
>  
> -    def test_out(self):
> +    def test_exception(self):
>          """results.TestResult.to_json: sets the exception correctly"""
>          nt.eq_(self.dict['exception'], self.json['exception'])
>  
> @@ -581,3 +581,33 @@ class TestTestrunResultFromDict(object):
>                            status.Status),
>                 msg='Subtests should be type Status, but was "{}"'.format(
>                     type(self.test.tests['subtest'].subtests['foo'])))
> +
> +
> +def test_TimeAttribute_to_json():
> +    """results.TimeAttribute.to_json(): returns expected dictionary"""
> +    baseline = {'start': 0.1, 'end': 1.0}
> +    test = results.TimeAttribute(**baseline)
> +    baseline['__type__'] = 'TimeAttribute'
> +
> +    nt.assert_dict_equal(baseline, test.to_json())
> +
> +
> +def test_TimeAttribute_from_dict():
> +    """results.TimeAttribute.from_dict: returns expected value"""
> +    # Type is included because to_json() adds it.
> +    baseline = {'start': 0.1, 'end': 1.0, '__type__': 'TimeAttribute'}
> +    test = results.TimeAttribute.from_dict(baseline).to_json()
> +
> +    nt.assert_dict_equal(baseline, test)
> +
> +
> +def test_TimeAttribute_total():
> +    """results.TimeAttribute.total: returns the difference between end and start"""
> +    test = results.TimeAttribute(1.0, 5.0)
> +    nt.eq_(test.total, 4.0)
> +
> +
> +def test_TimeAttribute_delta():
> +    """results.TimeAttribute.delta: returns the delta of the values"""
> +    test = results.TimeAttribute(1.0, 5.0)
> +    nt.eq_(test.delta, '0:00:04')
> -- 
> 2.6.1
>
> _______________________________________________
> Piglit mailing list
> Piglit at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/piglit


More information about the Piglit mailing list