Previously, Piglit reported 'fail'.

Different sets of tests are built under different build configurations. If
a developer chooses to not build a test, Piglit shouldn't report failure.
Otherwise, it appears as a regression.

Now that 'returncode' may be None, any string formatting that references
it must be converted from Python2-style (%) to Python3-style (str.format).

Signed-off-by: Chad Versace <chad.vers...@linux.intel.com>
---
 framework/exectest.py | 45 +++++++++++++++++++++++++++++++--------------
 1 file changed, 31 insertions(+), 14 deletions(-)

diff --git a/framework/exectest.py b/framework/exectest.py
index d2173d4..86bc416 100644
--- a/framework/exectest.py
+++ b/framework/exectest.py
@@ -51,19 +51,35 @@ class ExecTest(Test):
 
                if self.command is not None:
                        command = self.command
+                       returncode = None
+
                        if valgrind:
                                command[:0] = ['valgrind', '--quiet', 
'--error-exitcode=1', '--tool=memcheck']
 
                        i = 0
                        while True:
-                               proc = subprocess.Popen(
-                                       command,
-                                       stdout=subprocess.PIPE,
-                                       stderr=subprocess.PIPE,
-                                       env=fullenv,
-                                       universal_newlines=True
-                                       )
-                               out, err = proc.communicate()
+                               try:
+                                       proc = subprocess.Popen(
+                                               command,
+                                               stdout=subprocess.PIPE,
+                                               stderr=subprocess.PIPE,
+                                               env=fullenv,
+                                               universal_newlines=True
+                                               )
+                                       out, err = proc.communicate()
+                                       returncode = proc.returncode
+                               except OSError as e:
+                                       # Different sets of tests get built 
under
+                                       # different build configurations.  If
+                                       # a developer chooses to not build a 
test,
+                                       # Piglit should not report that test as 
having
+                                       # failed.
+                                       if e.strerror == "No such file or 
directory":
+                                               out = "PIGLIT: {'result': 
'skip'}\n" \
+                                                   + "Test executable not 
found.\n"
+                                               err = ""
+                                        else:
+                                            raise e
 
                                # 
https://bugzilla.gnome.org/show_bug.cgi?id=680214 is
                                # affecting many developers.  If we catch it
@@ -111,17 +127,17 @@ class ExecTest(Test):
                                -1073741676
                        ]
 
-                       if proc.returncode in crash_codes:
+                       if returncode in crash_codes:
                                results['result'] = 'crash'
-                       elif proc.returncode != 0:
-                               results['note'] = 'Returncode was %d' % 
(proc.returncode)
+                       elif returncode != 0:
+                               results['note'] = 'Returncode was 
{0}'.format(returncode)
 
                        if valgrind:
                                # If the underlying test failed, simply report
                                # 'skip' for this valgrind test.
                                if results['result'] != 'pass':
                                        results['result'] = 'skip'
-                               elif proc.returncode == 0:
+                               elif returncode == 0:
                                        # Test passes and is valgrind clean.
                                        results['result'] = 'pass'
                                else:
@@ -133,8 +149,9 @@ class ExecTest(Test):
                                env = env + key + '="' + self.env[key] + '" '
                        if env:
                                results['environment'] = env
-                       results['info'] = "Returncode: 
%d\n\nErrors:\n%s\n\nOutput:\n%s" % (proc.returncode, err, out)
-                       results['returncode'] = proc.returncode
+
+                       results['info'] = "Returncode: 
{0}\n\nErrors:\n{1}\n\nOutput:\n{2}".format(returncode, err, out)
+                       results['returncode'] = returncode
                        results['command'] = ' '.join(self.command)
 
                        self.handleErr(results, err)
-- 
1.7.12.1

_______________________________________________
Piglit mailing list
Piglit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/piglit

Reply via email to