[Piglit] [PATCH] json_.py: Bump results version to 2
Dylan Baker
baker.dylan.c at gmail.com
Thu Oct 30 16:45:42 PDT 2014
This corrects in a permanent and automatic way the changes in the
results that were fixed in the previous patch.
v2: - add this patch
v3: - Only add each element if it exists
- Put the tests in their own module
v4: - actually check that test module into git...
Signed-off-by: Dylan Baker <dylanx.c.baker at intel.com>
---
framework/backends/json_.py | 2 +-
framework/results.py | 29 +++++++
framework/tests/results_v1_tests.py | 161 ++++++++++++++++++++++++++++++++++++
3 files changed, 191 insertions(+), 1 deletion(-)
create mode 100644 framework/tests/results_v1_tests.py
diff --git a/framework/backends/json_.py b/framework/backends/json_.py
index f4a740f..75d00cd 100644
--- a/framework/backends/json_.py
+++ b/framework/backends/json_.py
@@ -37,7 +37,7 @@ __all__ = [
# The current version of the JSON results
-CURRENT_JSON_VERSION = 1
+CURRENT_JSON_VERSION = 2
def piglit_encoder(obj):
diff --git a/framework/results.py b/framework/results.py
index 912e739..7d9d0bd 100644
--- a/framework/results.py
+++ b/framework/results.py
@@ -227,6 +227,7 @@ def update_results(results, filepath):
# dictionary
updates = {
0: _update_zero_to_one,
+ 1: _update_one_to_two,
}
while results.results_version < CURRENT_JSON_VERSION:
@@ -363,3 +364,31 @@ def _update_zero_to_one(results):
results.results_version = 1
return results
+
+
+def _update_one_to_two(results):
+ """Update version 1 results to version 2.
+
+ Version two results are actually identical to version one results, however,
+ there was an error in version 1 at the end causing metadata in the options
+ dictionary to be incorrect. Version 2 corrects that.
+
+ Namely uname, glxinfo, wglinfo, and lspci were put in the options['env']
+ instead of in the root.
+
+ """
+ if 'env' in results.options:
+ env = results.options['env']
+ if env.get('glxinfo'):
+ results.glxinfo = env['glxinfo']
+ if env.get('lspci'):
+ results.lspci = env['lspci']
+ if env.get('uname'):
+ results.uname = env['uname']
+ if env.get('wglinfo'):
+ results.wglinfo = env['wglinfo']
+ del results.options['env']
+
+ results.results_version = 2
+
+ return results
diff --git a/framework/tests/results_v1_tests.py b/framework/tests/results_v1_tests.py
new file mode 100644
index 0000000..bf14231
--- /dev/null
+++ b/framework/tests/results_v1_tests.py
@@ -0,0 +1,161 @@
+# Copyright (c) 2014 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
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+
+"""Tests for version 1 to version 2."""
+
+import json
+
+import nose.tools as nt
+
+import framework.results as results
+import framework.tests.utils as utils
+
+
+class TestV2Update(object):
+ """Test V1 to V2 of results."""
+ @classmethod
+ def setup_class(cls):
+ data = {
+ "results_version": 1,
+ "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": {
+ "test/is/a/test": {
+ "returncode": 0,
+ "err": None,
+ "environment": None,
+ "command": "foo",
+ "result": "skip",
+ "time": 0.123,
+ "out": None,
+ }
+ }
+ }
+
+ with utils.with_tempfile(json.dumps(data)) as t:
+ with open(t, 'r') as f:
+ cls.result = results._update_one_to_two(
+ results.TestrunResult.load(f))
+
+ def test_version_is_two(self):
+ """update_results (v2): The result version is updated to 2."""
+ nt.assert_equal(self.result.results_version, 2)
+
+ def test_no_env(self):
+ """update_results (v2): Removes options['env']."""
+ nt.ok_('env' not in self.result.options)
+
+ def test_glxinfo(self):
+ """update_results (v2): puts glxinfo in the root."""
+ nt.assert_equal(self.result.glxinfo, 'and stuff')
+
+ def test_lspci(self):
+ """update_results (v2): puts lspci in the root."""
+ nt.assert_equal(self.result.lspci, 'stuff')
+
+ def test_uname(self):
+ """update_results (v2): puts uname in the root."""
+ nt.assert_equal(self.result.uname, 'more stuff')
+
+ def test_wglinfo(self):
+ """update_results (v2): puts wglinfo in the root."""
+ nt.assert_equal(self.result.wglinfo, 'stuff')
+
+
+class TestV2NoUpdate(object):
+ """Test a version 1 to 2 update when version 1 was correct."""
+ @classmethod
+ def setup_class(cls):
+ data = {
+ "results_version": 1,
+ "name": "test",
+ "lspci": "stuff",
+ "uname": "more stuff",
+ "glxinfo": "and stuff",
+ "wglinfo": "stuff",
+ "options": {
+ "profile": ['quick'],
+ "dmesg": False,
+ "verbose": False,
+ "platform": "gbm",
+ "sync": False,
+ "valgrind": False,
+ "filter": [],
+ "concurrent": "all",
+ "test_count": 0,
+ "exclude_tests": [],
+ "exclude_filter": [],
+ },
+ "tests": {
+ "test/is/a/test": {
+ "returncode": 0,
+ "err": None,
+ "environment": None,
+ "command": "foo",
+ "result": "skip",
+ "time": 0.123,
+ "out": None,
+ }
+ }
+ }
+
+ with utils.with_tempfile(json.dumps(data)) as t:
+ with open(t, 'r') as f:
+ cls.result = results._update_one_to_two(
+ results.TestrunResult.load(f))
+
+ def test_version_is_two(self):
+ """update_results (v2) no change: The result version is updated to 2.
+ """
+ nt.assert_equal(self.result.results_version, 2)
+
+ def test_glxinfo(self):
+ """update_results (v2) no change: doesn't clobber glxinfo."""
+ nt.assert_equal(self.result.glxinfo, 'and stuff')
+
+ def test_lspci(self):
+ """update_results (v2) no change: doesn't clobber lspci."""
+ nt.assert_equal(self.result.lspci, 'stuff')
+
+ def test_uname(self):
+ """update_results (v2) no change: doesn't clobber uname."""
+ nt.assert_equal(self.result.uname, 'more stuff')
+
+ def test_wglinfo(self):
+ """update_results (v2) no change: doesn't clobber wglinfo."""
+ nt.assert_equal(self.result.wglinfo, 'stuff')
--
2.1.2
More information about the Piglit
mailing list