Because compression is so awesome even a full run of quick.py is only ~50kb with all of this extra data. This isn't a big drain, and saves us a lot of time calculating this data over and over.
Signed-off-by: Dylan Baker <[email protected]> --- framework/backends/json.py | 18 +++++++++- framework/tests/json_results_update_tests.py | 51 ++++++++++++++++++++++++++-- 2 files changed, 66 insertions(+), 3 deletions(-) diff --git a/framework/backends/json.py b/framework/backends/json.py index b5a38d0..5eeab44 100644 --- a/framework/backends/json.py +++ b/framework/backends/json.py @@ -42,7 +42,7 @@ __all__ = [ ] # The current version of the JSON results -CURRENT_JSON_VERSION = 6 +CURRENT_JSON_VERSION = 7 # The level to indent a final file INDENT = 4 @@ -274,6 +274,8 @@ def _resume(results_dir): except ValueError: continue + testrun.calculate_group_totals() + return testrun @@ -301,6 +303,7 @@ def _update_results(results, filepath): 3: _update_three_to_four, 4: _update_four_to_five, 5: _update_five_to_six, + 6: _update_six_to_seven, } while results.results_version < CURRENT_JSON_VERSION: @@ -565,6 +568,19 @@ def _update_five_to_six(result): return result +def _update_six_to_seven(result): + """Update json results from version 6 to 7. + + Version 7 results always contain the totals member. + + """ + if not result.totals: + result.calculate_group_totals() + result.results_version = 7 + + return result + + REGISTRY = Registry( extensions=['', '.json'], backend=JSONBackend, diff --git a/framework/tests/json_results_update_tests.py b/framework/tests/json_results_update_tests.py index 3552506..9ae1102 100644 --- a/framework/tests/json_results_update_tests.py +++ b/framework/tests/json_results_update_tests.py @@ -693,12 +693,59 @@ class TestV5toV6(object): """backends.json.update_results (5 -> 6): A test result is converted to a TestResult instance""" nt.ok_(isinstance(self.result.tests['a@test'], results.TestResult)) + +class TestV6toV7(object): + DATA = { + "results_version": 6, + "name": "test", + "options": { + "profile": ['quick'], + "dmesg": False, + "verbose": False, + "platform": "gbm", + "sync": False, + "valgrind": False, + "filter": [], + "concurrent": "all", + "test_count": 0, + "exclude_tests": [], + "exclude_filter": [], + "env": { + "lspci": "stuff", + "uname": "more stuff", + "glxinfo": "and stuff", + "wglinfo": "stuff" + } + }, + "tests": { + 'a@test': results.TestResult('pass'), + 'a@nother@test': results.TestResult('fail'), + 'a@nother@thing': results.TestResult('crash'), + } + } + + @classmethod + def setup_class(cls): + """Class setup. Create a TestrunResult with v4 data.""" + with utils.tempfile( + json.dumps(cls.DATA, default=backends.json.piglit_encoder)) as t: + with open(t, 'r') as f: + cls.result = backends.json._update_six_to_seven(backends.json._load(f)) + + def test_is_TestrunResult(self): + """backends.json.update_results (6 -> 7): makes TestrunResult""" + nt.ok_(isinstance(self.result, results.TestrunResult)) + + def test_totals(self): + """backends.json.update_results (6 -> 7): Totals are populated""" + nt.ok_(self.result.totals != {}) + def test_load_results(self): - """backends.json.update_results (5 -> 6): load_results properly updates.""" + """backends.json.update_results (6 -> 7): load_results properly updates.""" with utils.tempdir() as d: tempfile = os.path.join(d, 'results.json') with open(tempfile, 'w') as f: json.dump(self.DATA, f, default=backends.json.piglit_encoder) with open(tempfile, 'r') as f: result = backends.json.load_results(tempfile, 'none') - nt.assert_equal(result.results_version, 6) + nt.eq_(result.results_version, 7) -- 2.5.1 _______________________________________________ Piglit mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/piglit
