diff options
author | Kenneth Graunke <kenneth@whitecape.org> | 2012-04-17 18:28:24 -0700 |
---|---|---|
committer | Kenneth Graunke <kenneth@whitecape.org> | 2012-05-10 10:47:19 -0700 |
commit | bc2af99be63a52f7b02cc4653d58925c4cf5f77a (patch) | |
tree | ccf9ed2973e534159a5fc83f873a43d374de473b /piglit-print-commands.py | |
parent | ee21318c481d26351a284bd3227b99bf88abeece (diff) |
Add a new "piglit-print-commands.py" command.
This prints a list of all the tests and how to run them:
piglit test name ::: /path/to/piglit/bin/program <args>
glean test name ::: PIGLIT_TEST='...' /path/to/piglit/bin/glean -v -v -v ...
This may be of use to our QA team, who currently use their own
infrastructure for running test suites. Having their runner launch
piglit-run.py, which parses all.tests, for every test case, is
incredibly expensive.
This is not meant to be a long term solution.
Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Acked-by: Jose Fonseca <jfonseca@vmware.com>
Diffstat (limited to 'piglit-print-commands.py')
-rwxr-xr-x | piglit-print-commands.py | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/piglit-print-commands.py b/piglit-print-commands.py new file mode 100755 index 000000000..951206b8d --- /dev/null +++ b/piglit-print-commands.py @@ -0,0 +1,124 @@ +#!/usr/bin/env python +# +# Permission is hereby granted, free of charge, to any person +# obtaining a copy of this software and associated documentation +# files (the "Software"), to deal in the Software without +# restriction, including without limitation the rights to use, +# copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following +# conditions: +# +# This permission notice shall be included in all copies or +# substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +# PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHOR(S) BE +# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF +# OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. + + +from getopt import getopt, GetoptError +import os.path as path +import re +import sys, os +import time +import traceback +import json + +sys.path.append(path.dirname(path.realpath(sys.argv[0]))) +import framework.core as core +from framework.exectest import ExecTest +from framework.gleantest import GleanTest + +############################################################################# +##### Main program +############################################################################# +def usage(): + USAGE = """\ +Usage: %(progName)s [options] [profile.tests] + +Options: + -h, --help Show this message + -t regexp, --tests=regexp Run only matching tests (can be used more + than once) + -x regexp, --exclude-tests=regexp Exclude matching tests (can be used + more than once) +Example: + %(progName)s tests/all.tests + %(progName)s -t basic tests/all.tests results/all + Run all tests whose path contains the word 'basic' + + %(progName)s -t ^glean/ -t tex tests/all.tests results/all + Run all tests that are in the 'glean' group or whose path contains + the substring 'tex' +""" + print USAGE % {'progName': sys.argv[0]} + sys.exit(1) + +def main(): + env = core.Environment() + + try: + option_list = [ + "help", + "tests=", + "exclude-tests=", + ] + options, args = getopt(sys.argv[1:], "ht:x:", option_list) + except GetoptError: + usage() + + OptionName = '' + OptionResume = False + test_filter = [] + exclude_filter = [] + + for name, value in options: + if name in ('-h', '--help'): + usage() + elif name in ('-t', '--tests'): + test_filter.append(value) + env.filter.append(re.compile(value)) + elif name in ('-x', '--exclude-tests'): + exclude_filter.append(value) + env.exclude_filter.append(re.compile(value)) + + if len(args) != 1: + usage() + + profileFilename = args[0] + + # Change to the piglit's path + piglit_dir = path.dirname(path.realpath(sys.argv[0])) + os.chdir(piglit_dir) + + profile = core.loadTestProfile(profileFilename, "$GLEAN_RESULT_DIR") + + # If resuming an interrupted test run, re-write all of the existing + # results since we clobbered the results file. Also, exclude them + # from being run again. + if OptionResume: + for (key, value) in old_results.tests.items(): + json_writer.write_dict_item(key, value) + env.exclude_tests.add(key) + + def getCommand(test): + command = '' + if isinstance(test, GleanTest): + for var, val in test.env.items(): + command += var + "='" + val + "' " + command += ' '.join(test.command) + return command + + profile.prepare_test_list(env) + for name, test in profile.test_list.items(): + assert(isinstance(test, ExecTest)) + print name, ':::', getCommand(test) + +if __name__ == "__main__": + main() |