[Lldb-commits] [lldb] r223423 - Kill any python test script that takes more than 5 minutes

Vince Harron vharron at google.com
Thu Dec 4 16:41:02 PST 2014


This submit was authored by Chaoren Lin, BTW.



On Thu, Dec 4, 2014 at 4:23 PM, Vince Harron <vharron at google.com> wrote:

> Author: vharron
> Date: Thu Dec  4 18:23:03 2014
> New Revision: 223423
>
> URL: http://llvm.org/viewvc/llvm-project?rev=223423&view=rev
> Log:
> Kill any python test script that takes more than 5 minutes
>
> There is at least one test that hangs on the Linux debian buildbot.
>
> When that test hangs, the buildbot kills dosep which loses all test
> results.  This change kills just the hung test and should let us see
> which test is hanging.  This is useful for that test and any others
> in the future which start hanging.
>
>
> Modified:
>     lldb/trunk/test/dosep.py
>
> Modified: lldb/trunk/test/dosep.py
> URL:
> http://llvm.org/viewvc/llvm-project/lldb/trunk/test/dosep.py?rev=223423&r1=223422&r2=223423&view=diff
>
> ==============================================================================
> --- lldb/trunk/test/dosep.py (original)
> +++ lldb/trunk/test/dosep.py Thu Dec  4 18:23:03 2014
> @@ -7,15 +7,29 @@ Run the test suite using a separate proc
>  import multiprocessing
>  import os
>  import platform
> +import shlex
> +import subprocess
>  import sys
>
>  from optparse import OptionParser
>
> -# Command template of the invocation of the test driver.
> -template = '%s %s/dotest.py %s -p %s %s'
> +def try_timeout(command):
> +    if not sys.platform.startswith("win32"):
> +        try:
> +            return {0: "passed", 124: "timed out"}.get(
> +                subprocess.call(["timeout", "5m"] + command), "failed")
> +        except OSError:
> +            pass
> +        try:
> +            return {0: "passed", 124: "timed out"}.get(
> +                subprocess.call(["gtimeout", "5m"] + command), "failed")
> +        except OSError:
> +            pass
> +    return "passed" if subprocess.call(command) == 0 else "failed"
>
>  def process_dir(root, files, test_root, dotest_options):
>      """Examine a directory for tests, and invoke any found within it."""
> +    timed_out = []
>      failed = []
>      passed = []
>      for name in files:
> @@ -29,12 +43,17 @@ def process_dir(root, files, test_root,
>          if os.path.islink(path):
>              continue
>
> -        command = template % (sys.executable, test_root, dotest_options
> if dotest_options else "", name, root)
> -        if 0 != os.system(command):
> +        command = ([sys.executable, "%s/dotest.py" % test_root] +
> +                   (shlex.split(dotest_options) if dotest_options else
> []) +
> +                   ["-p", name, root])
> +        exit_status = try_timeout(command)
> +        if "passed" != exit_status:
> +            if "timed out" == exit_status:
> +                timed_out.append(name)
>              failed.append(name)
>          else:
>              passed.append(name)
> -    return (failed, passed)
> +    return (timed_out, failed, passed)
>
>  in_q = None
>  out_q = None
> @@ -66,15 +85,17 @@ def walk_and_invoke(test_root, dotest_op
>          for work_item in test_work_items:
>              test_results.append(process_dir_worker(work_item))
>
> +    timed_out = []
>      failed = []
>      passed = []
>
>      for test_result in test_results:
> -        (dir_failed, dir_passed) = test_result
> +        (dir_timed_out, dir_failed, dir_passed) = test_result
> +        timed_out += dir_timed_out
>          failed += dir_failed
>          passed += dir_passed
>
> -    return (failed, passed)
> +    return (timed_out, failed, passed)
>
>  def main():
>      test_root = sys.path[0]
> @@ -107,7 +128,8 @@ Run lldb test suite using a separate pro
>          num_threads = 1
>
>      system_info = " ".join(platform.uname())
> -    (failed, passed) = walk_and_invoke(test_root, dotest_options,
> num_threads)
> +    (timed_out, failed, passed) = walk_and_invoke(test_root,
> dotest_options,
> +                                                  num_threads)
>      num_tests = len(failed) + len(passed)
>
>      print "Ran %d tests." % num_tests
> @@ -115,7 +137,9 @@ Run lldb test suite using a separate pro
>          failed.sort()
>          print "Failing Tests (%d)" % len(failed)
>          for f in failed:
> -          print "FAIL: LLDB (suite) :: %s (%s)" % (f, system_info)
> +            print "%s: LLDB (suite) :: %s (%s)" % (
> +                "TIMEOUT" if f in timed_out else "FAIL", f, system_info
> +            )
>          sys.exit(1)
>      sys.exit(0)
>
>
>
> _______________________________________________
> lldb-commits mailing list
> lldb-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits
>



-- 

Vince Harron | Technical Lead Manager | vharron at google.com | 858-442-0868
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20141204/05895cc8/attachment.html>


More information about the lldb-commits mailing list