| # Gaudi Framework, version v21r9 |

Home |  | Generated: 3 May 2010

# run_qmtest.py

Go to the documentation of this file.

    00001 #!/usr/bin/env python
    00002 #
    00003 # Small wrapper script to simplify the execution of QMTest tests.
    00004 #
    00005 # @author: Marco Clemencic <marco.clemencic@cern.ch>
    00006 # @date: 22/10/2007
    00007 #
    00008 import os, sys
    00009
    00010 class Options(object):
    00011     pass
    00012
    00013 def parseOptions(argv = None):
    00014     if argv is None:
    00015         argv = sys.argv[1:]
    00016     # Defaults
    00017     opts = Options()
    00018     opts.package = "Unknown"
    00019     opts.qmtest_args = []
    00020     opts.have_user_options = False
    00021     opts.output = os.path.normpath(os.path.expandvars(os.environ["QMTESTRESULTS"]))
    00022     opts.qmtest_dir = os.path.normpath(os.path.expandvars(os.environ["QMTESTLOCALDIR"]))
    00023     opts.dry_run = False
    00024     if "GAUDI_QMTEST_HTML_OUTPUT" in os.environ:
    00025         opts.html_output = os.path.normpath(os.path.expandvars(os.environ.get("GAUDI_QMTEST_HTML_OUTPUT")))
    00026     else:
    00027         opts.html_output = None
    00028
    00029     # First argument is the package name:
    00030     if argv:
    00031         opts.package = argv.pop(0)
    00032
    00033     # If the use specifies a directory where to collect all the results
    00034     # (e.g. because running from a read-only location) we must use it
    00035     if "QMTESTRESULTSDIR" in os.environ:
    00036         opts.output = os.path.normpath(os.path.expandvars(os.environ["QMTESTRESULTSDIR"]))
    00037         opts.output = os.path.join(opts.output,
    00038                                    "%s.%s.qmr" % (opts.package, os.environ.get("CMTCONFIG", "noConfig")))
    00039
    00040     # Do we have user options?
    00041     opts.have_user_options = len(argv)
    00042     # Scan the user options (if any) to look for options we must intercept
    00043     while argv:
    00044         o = argv.pop(0)
    00045         if o in ['-o','--output']:
    00046             # make the path absolute
    00047             opts.output = os.path.realpath(argv.pop(0))
    00048             opts.have_user_options -= 2
    00049         elif o in ["--no-output"]:
    00050             opts.output = None
    00051             opts.have_user_options -= 1
    00052         elif o in ["--dry-run"]:
    00053             opts.dry_run = True
    00054             opts.have_user_options -= 1
    00055         elif o in ["--html-output"]:
    00056             opts.html_output = os.path.realpath(argv.pop(0))
    00057             opts.have_user_options -= 2
    00058         else:
    00059             opts.qmtest_args.append(o)
    00060     # Add the option for the output to the qmtest_args
    00061     if opts.output:
    00062         opts.qmtest_args = ["-o", opts.output] + opts.qmtest_args
    00063     else:
    00064         opts.qmtest_args.insert(0, "--no-output")
    00065     return opts
    00066
    00067 def main(argv = None):
    00068     opts = parseOptions(argv)
    00069
    00070     print "==========> Running tests for package %s" % opts.package
    00071
    00072     # create the destination directory if necessary
    00073     if opts.output:
    00074         results_dest_dir = os.path.realpath(os.path.join(opts.qmtest_dir, os.path.dirname(opts.output)))
    00075         if not os.path.exists(results_dest_dir):
    00076             print "==========> Creating '%s'" % results_dest_dir
    00077             os.makedirs(results_dest_dir, 0755)
    00078
    00079     print "==========> Entering '%s'" % opts.qmtest_dir
    00080     os.chdir(opts.qmtest_dir)
    00081
    00082     if not os.path.isdir("QMTest"):
    00083         # The QMTest database is not initialized
    00084         print "==========> Initializing QMTest database"
    00085         os.system("qmtest create-tdb")
    00086
    00087     if opts.html_output:
    00088         opts.qmtest_args.insert(0, """--result-stream 'GaudiTest.HTMLResultStream(dir="%s")'""" % opts.html_output)
    00089
    00090     # prepare the qmtest command
    00091     cmd = "qmtest run %s" % (" ".join(opts.qmtest_args))
    00092
    00093     if not opts.have_user_options:
    00094         # If there are no user options, we should check for a default test suite
    00095         # to run.
    00096         # The suite to run is the first one available in the list passed via
    00097         # the environment variable GAUDI_QMTEST_DEFAULT_SUITE (comma-separated list)
    00098         # or the suite with the same name as the package.
    00099         # If none of them is present, no argument is passed to qmtest, so all the tests
    00100         # are run.
    00101         suites = []
    00102         if "GAUDI_QMTEST_DEFAULT_SUITE" in os.environ:
    00103             suites.extend([s.strip().lower()
    00104                            for s in os.environ["GAUDI_QMTEST_DEFAULT_SUITE"].split(",")])
    00105         suites.append(opts.package.lower())
    00106         for s in suites:
    00107             if os.path.exists("%s.qms" % s):
    00108                 cmd += " %s" % s
    00109                 break
    00110
    00111     if opts.dry_run:
    00112         print "==========> Would run '%s'"%cmd
    00113     else:
    00114         print "==========> Running '%s'"%cmd
    00115         os.system(cmd)
    00116
    00117 # Note: the return code of qmtest is not propagated to avoid that
    00118 #       CMT stops if we have a non-PASS tests (e.g. UNTESTED).
    00119 if __name__ == '__main__':
    00120     main()