Changeset 9947:ec7a8e9df082 in orange


Ignore:
Timestamp:
02/07/12 14:04:34 (2 years ago)
Author:
Miha Stajdohar <miha.stajdohar@…>
Branch:
default
rebase_source:
3033b87f1b0ba0fbe5fdfe4a43ca6b473a545455
Message:

Timeout feature.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • Orange/testing/regression/xtest.py

    r9873 r9947  
    1212platform = sys.platform 
    1313pyversion = sys.version[:3] 
    14 states = ["OK", "changed", "random", "error", "crash"] 
     14states = ["OK", "timedout", "changed", "random", "error", "crash"] 
    1515 
    1616def file_name_match(name, patterns): 
     
    2222 
    2323def test_scripts(complete, just_print, module="orange", root_directory=".", 
    24                 test_files=None, directories=None): 
     24                test_files=None, directories=None, timeout=5): 
    2525    """Test the scripts in the given directory.""" 
    2626    global error_status 
     
    123123                sys.stdout.flush() 
    124124 
    125                 for state in ["crash", "error", "new", "changed", "random1", "random2"]: 
     125                for state in states: 
    126126                    remname = "%s/%s.%s.%s.%s.txt" % \ 
    127127                              (outputsdir, name, platform, pyversion, state) 
     
    130130 
    131131                titerations = re_israndom.search(open(name, "rt").read()) and 1 or iterations 
    132                 os.spawnl(os.P_WAIT, sys.executable, "-c", regtestdir + "/xtest_one.py", name, str(titerations), outputsdir) 
    133  
    134                 result = open("xtest1_report", "rt").readline().rstrip() or "crash" 
     132                #os.spawnl(os.P_WAIT, sys.executable, "-c", regtestdir + "/xtest_one.py", name, str(titerations), outputsdir) 
     133                p = subprocess.Popen([sys.executable, regtestdir + "/xtest_one.py", name, str(titerations), outputsdir]) 
     134 
     135                passed_time = 0 
     136                while passed_time < timeout: 
     137                    time.sleep(0.01) 
     138                    passed_time += 0.01 
     139 
     140                    if p.poll() is not None: 
     141                        break 
     142 
     143                if p.poll() is None: 
     144                    p.kill() 
     145                    result2 = "timedout" 
     146                    print "timedout" 
     147                    # remove output file and change it for *.timedout.* 
     148                    for state in states: 
     149                        remname = "%s/%s.%s.%s.%s.txt" % \ 
     150                                  (outputsdir, name, platform, pyversion, state) 
     151                        if os.path.exists(remname): 
     152                            os.remove(remname) 
     153 
     154                    timeoutname = "%s/%s.%s.%s.%s.txt" % (outputsdir, name, sys.platform, sys.version[:3], "timedout") 
     155                    open(timeoutname, "wt").close() 
     156                else: 
     157                    stdout, stderr = p.communicate() 
     158                    result = open("xtest1_report", "rt").readline().rstrip() or "crash" 
     159 
    135160                error_status = max(error_status, states.index(result)) 
    136161                os.remove("xtest1_report") 
     
    139164 
    140165    os.chdir(caller_directory) 
    141  
    142166 
    143167iterations = 1 
     
    147171def usage(): 
    148172    """Print out help.""" 
    149     print "%s [update|test|report|report-html|errors] -[h|s] [--single|--module=[orange|obi|text]|--dir=<dir>|] <files>" % sys.argv[0] 
    150     print "  test:   regression tests on all scripts" 
    151     print "  update: regression tests on all previously failed scripts (default)" 
     173    print "%s [test|update|report|report-html|errors] -[h|s] [--single|--module=[orange|docs]|--timeout=<#>|--dir=<dir>|] <files>" % sys.argv[0] 
     174    print "  test:   regression tests on all scripts (default)" 
     175    print "  update: regression tests on all previously failed scripts" 
    152176    print "  report: report on testing results" 
    153177    print "  errors: report on errors from regression tests" 
     
    155179    print "-s, --single: runs a single test on each script" 
    156180    print "--module=<module>: defines a module to test" 
     181    print "--timeout=<#seconds>: defines max. execution time" 
    157182    print "--dir=<dir>: a comma-separated list of names where any should match the directory to be tested" 
    158183    print "<files>: space separated list of string matching the file names to be tested" 
     
    163188    global iterations 
    164189 
    165     command = "update" 
     190    command = "test" 
    166191    if argv: 
    167192        if argv[0] in ["update", "test", "report", "report-html", "errors", "help"]: 
     
    170195 
    171196    try: 
    172         opts, test_files = getopt.getopt(argv, "hs", ["single", "module=", "help", "files=", "verbose="]) 
     197        opts, test_files = getopt.getopt(argv, "hs", ["single", "module=", "timeout=", "help", "files=", "verbose="]) 
    173198    except getopt.GetoptError: 
    174199        print "Warning: Wrong argument" 
     
    192217    elif module in ["orange"]: 
    193218        root = "%s/.." % environ.install_dir 
    194         module = "orange" 
     219        module = "docs" 
    195220        dirs = [("modules", "Orange/doc/modules"), 
    196221                ("reference", "Orange/doc/reference"), 
    197222                ("ofb", "docs/tutorial/rst/code")] 
    198     elif module in ["ofb-rst"]: 
    199         root = "%s/.." % environ.install_dir 
    200         module = "orange" 
    201         dirs = [("ofb", "docs/tutorial/rst/code")] 
    202     elif module in ["orange25"]: 
    203         root = "%s/.." % environ.install_dir 
    204         module = "orange" 
    205         dirs = [("orange25", "docs/reference/rst/code")] 
    206     elif module == "obi": 
    207         root = environ.add_ons_dir + "/Bioinformatics/doc" 
    208         dirs = [("modules", "modules")] 
    209     elif module == "text": 
    210         root = environ.add_ons_dir + "/Text/doc" 
    211         dirs = [("modules", "modules")] 
     223    elif module in ["orange20"]: 
     224        pass 
    212225    else: 
    213         print "Error: %s is wrong name of the module, should be in [orange|obi|text]" % module 
     226        print "Error: %s is wrong name of the module, should be in [orange|docs]" % module 
     227        sys.exit(1) 
     228 
     229    timeout = 5 
     230    try: 
     231        _t = opts.get("--timeout", "5") 
     232        timeout = int(_t) 
     233        if timeout <= 0 or timeout >= 120: 
     234            raise AttributeError() 
     235    except AttributeError: 
     236        print "Error: timeout out of range (0 < # < 120)" 
     237        sys.exit(1) 
     238    except: 
     239        print "Error: %s wrong timeout" % opts.get("--timeout", "5") 
    214240        sys.exit(1) 
    215241 
    216242    test_scripts(command == "test", command == "report" or (command == "report-html" and command or False), 
    217243                 module=module, root_directory=root, 
    218                  test_files=test_files, directories=dirs) 
     244                 test_files=test_files, directories=dirs, timeout=timeout) 
    219245    # sys.exit(error_status) 
    220246 
Note: See TracChangeset for help on using the changeset viewer.