aboutsummaryrefslogtreecommitdiff
path: root/piglit-print-commands.py
diff options
context:
space:
mode:
authorKenneth Graunke <kenneth@whitecape.org>2012-04-17 18:28:24 -0700
committerKenneth Graunke <kenneth@whitecape.org>2012-05-10 10:47:19 -0700
commitbc2af99be63a52f7b02cc4653d58925c4cf5f77a (patch)
treeccf9ed2973e534159a5fc83f873a43d374de473b /piglit-print-commands.py
parentee21318c481d26351a284bd3227b99bf88abeece (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-xpiglit-print-commands.py124
1 files changed, 124 insertions, 0 deletions
diff --git a/piglit-print-commands.py b/piglit-print-commands.py
new file mode 100755
index 00000000..951206b8
--- /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()