[Piglit] [PATCH 09/13] framework/exectest.py: Replace toplevel if in Test.run() with assertion

Dylan Baker baker.dylan.c at gmail.com
Tue Apr 15 16:12:42 PDT 2014


This if couldn't actually be triggered since Test.command became a
property. This assertion is a little different, it is triggered if there
is nothing in command (so an empty list or dictionary would fail this
assertion). This also means that a test would except rather than skip;
since this is probably a python problem not a test problem it makes more
sense to assert and draw attention to a python bug.

Signed-off-by: Dylan Baker <baker.dylan.c at gmail.com>
---
 framework/exectest.py | 119 ++++++++++++++++++++++++--------------------------
 1 file changed, 57 insertions(+), 62 deletions(-)

diff --git a/framework/exectest.py b/framework/exectest.py
index 8d1dbbf..3c62c0a 100644
--- a/framework/exectest.py
+++ b/framework/exectest.py
@@ -141,71 +141,66 @@ class Test(object):
         * For 'returncode', the value will be the numeric exit code/value.
         * For 'command', the value will be command line program and arguments.
         """
-        if self.command is not None:
-            results = TestResult()
-            results['command'] = ' '.join(self.command)
-            results['environment'] = " ".join(
-                '{0}="{1}"'.format(k, v) for k, v in self.env.iteritems())
+        assert self.command
+
+        results = TestResult()
+        results['command'] = ' '.join(self.command)
+        results['environment'] = " ".join(
+            '{0}="{1}"'.format(k, v) for k, v in  self.env.iteritems())
+
+        if self.check_for_skip_scenario():
+            results['result'] = 'skip'
+            results['out'] = "PIGLIT: {'result': 'skip'}\n"
+            results['err'] = ""
+            results['returncode'] = None
+            return results
+
+        for _ in xrange(5):
+            out, err, returncode = self.get_command_result()
+
+            # https://bugzilla.gnome.org/show_bug.cgi?id=680214 is
+            # affecting many developers.  If we catch it
+            # happening, try just re-running the test.
+            if out.find("Got spurious window resize") == -1:
+                break
+
+        results['result'] = 'fail'
+        out = self.interpret_result(out, returncode, results)
+
+        crash_codes = [
+            # Unix: terminated by a signal
+            -5,   # SIGTRAP
+            -6,   # SIGABRT
+            -8,   # SIGFPE  (Floating point exception)
+            -10,  # SIGUSR1
+            -11,  # SIGSEGV (Segmentation fault)
+            # Windows:
+            # EXCEPTION_ACCESS_VIOLATION (0xc0000005):
+            -1073741819,
+            # EXCEPTION_INT_DIVIDE_BY_ZERO (0xc0000094):
+            -1073741676
+        ]
+
+        if returncode in crash_codes:
+            results['result'] = 'crash'
+        elif returncode != 0 and results['result'] == 'pass':
+            results['result'] = 'warn'
 
-            if self.check_for_skip_scenario():
-                results['result'] = 'skip'
-                results['out'] = "PIGLIT: {'result': 'skip'}\n"
-                results['err'] = ""
-                results['returncode'] = None
-                return results
-
-            for _ in xrange(5):
-                out, err, returncode = self.get_command_result()
-
-                # https://bugzilla.gnome.org/show_bug.cgi?id=680214 is
-                # affecting many developers.  If we catch it
-                # happening, try just re-running the test.
-                if out.find("Got spurious window resize") == -1:
-                    break
-
-            results['result'] = 'fail'
-            out = self.interpret_result(out, returncode, results)
-
-            crash_codes = [
-                # Unix: terminated by a signal
-                -5,   # SIGTRAP
-                -6,   # SIGABRT
-                -8,   # SIGFPE  (Floating point exception)
-                -10,  # SIGUSR1
-                -11,  # SIGSEGV (Segmentation fault)
-                # Windows:
-                # EXCEPTION_ACCESS_VIOLATION (0xc0000005):
-                -1073741819,
-                # EXCEPTION_INT_DIVIDE_BY_ZERO (0xc0000094):
-                -1073741676
-            ]
-
-            if returncode in crash_codes:
-                results['result'] = 'crash'
-            elif returncode != 0 and results['result'] == 'pass':
-                results['result'] = 'warn'
-
-            if self.ENV.valgrind:
-                # If the underlying test failed, simply report
-                # 'skip' for this valgrind test.
-                if results['result'] != 'pass':
-                    results['result'] = 'skip'
-                elif returncode == 0:
-                    # Test passes and is valgrind clean.
-                    results['result'] = 'pass'
-                else:
-                    # Test passed but has valgrind errors.
-                    results['result'] = 'fail'
-
-            results['returncode'] = returncode
-            results['info'] = unicode("Returncode: {0}\n\nErrors:\n{1}\n\n"
-                                      "Output:\n{2}").format(returncode,
-                                                             err, out)
-        else:
-            results = TestResult()
-            if 'result' not in results:
+        if self.ENV.valgrind:
+            # If the underlying test failed, simply report
+            # 'skip' for this valgrind test.
+            if results['result'] != 'pass':
                 results['result'] = 'skip'
+            elif returncode == 0:
+                # Test passes and is valgrind clean.
+                results['result'] = 'pass'
+            else:
+                # Test passed but has valgrind errors.
+                results['result'] = 'fail'
 
+        results['returncode'] = returncode
+        results['info'] = unicode("Returncode: {0}\n\nErrors:\n{1}\n\n"
+                                  "Output:\n{2}").format(returncode, err, out)
         return results
 
     def check_for_skip_scenario(self):
-- 
1.9.2



More information about the Piglit mailing list