[Piglit] [PATCH] results.py: Do not allow path separators in test names

Dylan Baker baker.dylan.c at gmail.com
Sat Aug 30 16:20:41 PDT 2014


This causes problems in the html summary generator, since os.mkdir
doesn't understand that it's a string not a full path (and the
underlying file system probably can't understand that either). Instead
of raising an error we silently replace any illegal characters with an
underscore.

Signed-off-by: Dylan Baker <dylanx.c.baker at intel.com>
---
 framework/results.py             | 21 ++++++++++++++++++++-
 framework/tests/results_tests.py | 16 ++++++++++++++++
 2 files changed, 36 insertions(+), 1 deletion(-)

diff --git a/framework/results.py b/framework/results.py
index efc7029..c89b39c 100644
--- a/framework/results.py
+++ b/framework/results.py
@@ -305,7 +305,7 @@ class TestrunResult(object):
                                 'lspci',
                                 'results_version',
                                 'time_elapsed']
-        self.name = None
+        self.__name = None
         self.uname = None
         self.options = None
         self.glxinfo = None
@@ -406,6 +406,25 @@ class TestrunResult(object):
                            if k in self.serialized_keys),
                       f, default=_piglit_encoder, indent=JSONWriter.INDENT)
 
+    @property
+    def name(self):
+        return self.__name
+
+    @name.setter
+    def name(self, name):
+        """ Set the name of the test run
+
+        We don't allow path seperators in the name, they are silently replaced
+        with underscores.
+
+        """
+        replace = ['/', '\\']
+
+        for r in replace:
+            name = name.replace(r, '_')
+
+        self.__name = name
+
 
 def load_results(filename):
     """ Loader function for TestrunResult class
diff --git a/framework/tests/results_tests.py b/framework/tests/results_tests.py
index 54661cc..02438cf 100644
--- a/framework/tests/results_tests.py
+++ b/framework/tests/results_tests.py
@@ -159,3 +159,19 @@ def test_update_results_old():
         res = results.update_results(base, f.name)
 
     nt.assert_equal(res.results_version, results.CURRENT_JSON_VERSION)
+
+
+ at utils.nose_generator
+def test_testrunresult_set_name():
+    """ Generate tests for the name setter """
+    emsg = '"{}" should have been replaced but was not'
+
+    def test(value, expected, message):
+        """ The actual test """
+        t = results.TestrunResult()
+        t.name = value
+        nt.assert_equal(t.name, expected, msg=message)
+
+    for x in ['/', '\\']:
+        test.description = 'TestrunResult.name replaces "{}" with "_"'.format(x)
+        yield test, 'a{}name'.format(x), 'a_name', emsg.format(x)
-- 
2.1.0



More information about the Piglit mailing list