This requires some minor changes, since the dmesg class returns either None or [] (which are both falsy instances) instead of '' when not giving a dmesg warning.
The biggest change in this patch is that the --dmesg option is removed. This is possible since the dmesg module implements a dummy class for non-posix systems. Signed-off-by: Dylan Baker <[email protected]> --- framework/core.py | 3 +-- framework/exectest.py | 38 ++++---------------------------------- framework/gleantest.py | 4 ++-- piglit-run.py | 7 +------ tests/es3conform.tests | 4 ++-- tests/igt.tests | 4 ++-- tests/oglconform.tests | 4 ++-- 7 files changed, 14 insertions(+), 50 deletions(-) diff --git a/framework/core.py b/framework/core.py index 2d5d0dc..b856f6f 100644 --- a/framework/core.py +++ b/framework/core.py @@ -388,14 +388,13 @@ class TestrunResult: class Environment: def __init__(self, concurrent=True, execute=True, include_filter=[], - exclude_filter=[], valgrind=False, dmesg=False): + exclude_filter=[], valgrind=False): self.concurrent = concurrent self.execute = execute self.filter = [] self.exclude_filter = [] self.exclude_tests = set() self.valgrind = valgrind - self.dmesg = dmesg """ The filter lists that are read in should be a list of string objects, diff --git a/framework/exectest.py b/framework/exectest.py index bfb33da..a6c7719 100644 --- a/framework/exectest.py +++ b/framework/exectest.py @@ -28,6 +28,7 @@ import types import re from core import Test, testBinDir, TestResult +from dmesg import Dmesg # Platform global variables @@ -36,34 +37,7 @@ if 'PIGLIT_PLATFORM' in os.environ: else: PIGLIT_PLATFORM = '' - -def read_dmesg(): - proc = subprocess.Popen('dmesg', stdout=subprocess.PIPE) - return proc.communicate()[0].rstrip('\n') - -def get_dmesg_diff(old, new): - # Note that dmesg is a ring buffer, i.e. lines at the beginning may - # be removed when new lines are added. - - # Get the last dmesg timestamp from the old dmesg as string. - last = old.split('\n')[-1] - ts = last[:last.find(']')+1] - if ts == '': - return '' - - # Find the last occurence of the timestamp. - pos = new.find(ts) - if pos == -1: - return new # dmesg was completely overwritten by new messages - - while pos != -1: - start = pos - pos = new.find(ts, pos+len(ts)) - - # Find the next line and return the rest of the string. - nl = new.find('\n', start+len(ts)) - return new[nl+1:] if nl != -1 else '' - +dmesg = Dmesg() # ExecTest: A shared base class for tests that simply runs an executable. class ExecTest(Test): @@ -104,19 +78,15 @@ class ExecTest(Test): '--tool=memcheck'] i = 0 - dmesg_diff = '' while True: if self.skip_test: out = "PIGLIT: {'result': 'skip'}\n" err = "" returncode = None else: - if env.dmesg: - old_dmesg = read_dmesg() (out, err, returncode) = \ self.get_command_result(command, fullenv) - if env.dmesg: - dmesg_diff = get_dmesg_diff(old_dmesg, read_dmesg()) + dmesg_diff = dmesg.update_dmesg() # https://bugzilla.gnome.org/show_bug.cgi?id=680214 is # affecting many developers. If we catch it @@ -257,7 +227,7 @@ class PlainExecTest(ExecTest): outpiglit = map(lambda s: s[7:], filter(lambda s: s.startswith('PIGLIT:'), outlines)) - if dmesg != '': + if dmesg: outpiglit = map(lambda s: s.replace("'pass'", "'dmesg-warn'"), outpiglit) outpiglit = map(lambda s: s.replace("'warn'", "'dmesg-warn'"), outpiglit) outpiglit = map(lambda s: s.replace("'fail'", "'dmesg-fail'"), outpiglit) diff --git a/framework/gleantest.py b/framework/gleantest.py index 88432e0..56968f5 100644 --- a/framework/gleantest.py +++ b/framework/gleantest.py @@ -43,7 +43,7 @@ class GleanTest(ExecTest): if "{'result': 'skip'}" in out: results['result'] = 'skip' elif out.find('FAIL') >= 0: - results['result'] = 'dmesg-fail' if dmesg != '' else 'fail' + results['result'] = 'dmesg-fail' if dmesg else 'fail' else: - results['result'] = 'dmesg-warn' if dmesg != '' else 'pass' + results['result'] = 'dmesg-warn' if dmesg else 'pass' return out diff --git a/piglit-run.py b/piglit-run.py index 1d63cd4..0ba47ad 100755 --- a/piglit-run.py +++ b/piglit-run.py @@ -73,10 +73,6 @@ def main(): parser.add_argument("--valgrind", action="store_true", help="Run tests in valgrind's memcheck") - parser.add_argument("--dmesg", - action="store_true", - help="Capture a difference in dmesg before and " - "after each test") parser.add_argument("testProfile", metavar="<Path to test profile>", help="Path to testfile to run") @@ -113,8 +109,7 @@ def main(): exclude_filter=args.exclude_tests, include_filter=args.include_tests, execute=args.execute, - valgrind=args.valgrind, - dmesg=args.dmesg) + valgrind=args.valgrind) # Change working directory to the root of the piglit directory piglit_dir = path.dirname(path.realpath(sys.argv[0])) diff --git a/tests/es3conform.tests b/tests/es3conform.tests index b0e6ef0..65e48af 100644 --- a/tests/es3conform.tests +++ b/tests/es3conform.tests @@ -54,9 +54,9 @@ class GTFTest(ExecTest): def interpretResult(self, out, returncode, results, dmesg): mo = self.pass_re.search(out) if mo is not None and int(mo.group('passed')) > 0: - results['result'] = 'dmesg-warn' if dmesg != '' else 'pass' + results['result'] = 'dmesg-warn' if dmesg else 'pass' else: - results['result'] = 'dmesg-fail' if dmesg != '' else 'fail' + results['result'] = 'dmesg-fail' if dmesg else 'fail' return out def populateTests(runfile): diff --git a/tests/igt.tests b/tests/igt.tests index 0f19c82..fcfb1a3 100644 --- a/tests/igt.tests +++ b/tests/igt.tests @@ -54,11 +54,11 @@ class IGTTest(ExecTest): def interpretResult(self, out, returncode, results, dmesg): if returncode == 0: - results['result'] = 'dmesg-warn' if dmesg != '' else 'pass' + results['result'] = 'dmesg-warn' if dmesg else 'pass' elif returncode == 77: results['result'] = 'skip' else: - results['result'] = 'dmesg-fail' if dmesg != '' else 'fail' + results['result'] = 'dmesg-fail' if dmesg else 'fail' return out def listTests(listname): diff --git a/tests/oglconform.tests b/tests/oglconform.tests index ace2f9c..8ce42a0 100644 --- a/tests/oglconform.tests +++ b/tests/oglconform.tests @@ -53,9 +53,9 @@ class OGLCTest(ExecTest): if self.skip_re.search(out) is not None: results['result'] = 'skip' elif re.search('Total Passed : 1', out) is not None: - results['result'] = 'dmesg-warn' if dmesg != '' else 'pass' + results['result'] = 'dmesg-warn' if dmesg else 'pass' else: - results['result'] = 'dmesg-fail' if dmesg != '' else 'fail' + results['result'] = 'dmesg-fail' if dmesg else 'fail' return out # Create a new top-level 'oglconform' category -- 1.8.1.5 _______________________________________________ Piglit mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/piglit
