[Piglit] [PATCH] exectest.py: Return early if _run_command() hits the except block

Dylan Baker baker.dylan.c at gmail.com
Wed Jun 11 03:31:26 PDT 2014


If the except block is hit in Test._run_command(), the test has a status
of skip, but the test continues to run anyway. This is not consistent
with the way Test.check_for_skip_scenario() works, and means more time
is spent in python than needs to be.

This patch adds a small check after _run_command returns, if
self.results['result'] has been set to skip then Test.run() returns
immediately.

Signed-off-by: Dylan Baker <baker.dylan.c at gmail.com>

Jose, here's a different aproach to the problem, and I think this one is
better because it is more consistent with the way the python framework
handles skips, and it saves time on what would be wasted processing.
---
 framework/exectest.py            |  7 +++++++
 framework/tests/exectest_test.py | 27 +++++++++++++++++++++++++++
 2 files changed, 34 insertions(+)

diff --git a/framework/exectest.py b/framework/exectest.py
index a833066..e55274e 100644
--- a/framework/exectest.py
+++ b/framework/exectest.py
@@ -152,6 +152,12 @@ class Test(object):
             if "Got spurious window resize" not in self.result['out']:
                 break
 
+        # If the result is skip then the test wasn't run, return early
+        # This usually is triggered when a test is not built for a specific
+        # platform
+        if self.result['result'] == 'skip':
+            return
+
         self.result['result'] = 'fail'
         self.interpret_result()
 
@@ -202,6 +208,7 @@ class Test(object):
             # Piglit should not report that test as having
             # failed.
             if e.errno == errno.ENOENT:
+                self.result['result'] = 'skip'
                 out = ("PIGLIT: {'result': 'skip'}\n"
                        "Test executable not found.\n")
                 err = ""
diff --git a/framework/tests/exectest_test.py b/framework/tests/exectest_test.py
index 2f0569f..5a81ec0 100644
--- a/framework/tests/exectest_test.py
+++ b/framework/tests/exectest_test.py
@@ -23,6 +23,21 @@
 from framework.exectest import PiglitTest, Test
 
 
+# Helpers
+class TestTest(Test):
+    """ A class for testing that implements a dummy interpret_result
+
+    interpret_result() can ve overwritten by setting the
+    self.test_interpret_result name
+
+    """
+    test_interpret_result = lambda: None
+
+    def interpret_result(self):
+        self.test_interpret_result()
+
+
+# Tests
 def test_initialize_test():
     """ Test initializes """
     Test('/bin/true')
@@ -31,3 +46,15 @@ def test_initialize_test():
 def test_initialize_piglittest():
     """ Test that PiglitTest initializes correctly """
     PiglitTest('/bin/true')
+
+
+def test_run_return_early():
+    """ Test.run() exits early when Test._run_command() has exception """
+    def helper():
+        raise AssertionError("The test didn't return early")
+
+    # Of course, this won't work if you actually have a foobarcommand in your
+    # path...
+    test = TestTest(['foobarcommand'])
+    test.test_interpret_result = helper
+    test.run()
-- 
2.0.0



More information about the Piglit mailing list