Skip to content

Commit

Permalink
Make dosep correctly invoke the top-level script when forking out
Browse files Browse the repository at this point in the history
packages/Python/lldbsuite is now a Python package, and it relies
on its __init__.py being called to do package-level initialization.
If you exec packages/Python/lldbsuite/dotest.py directly, you won't
get this package level initialization, and things will fail.  But
without this patch, this is exactly what dosep itself does.  To
launch the multi-processing fork, it was hardcoding a path to
dotest.py and exec'ing it from inside the package.

The fix here is to get the path of the top-level script, and
then exec'ing that instead.  A more robust solution would involve
refactoring the code so that dosep execs some internal script that
imports lldbsuite, but that's a bit more involved.

Differential Revision: http://reviews.llvm.org/D14157
Reviewed by: Todd Fiala

llvm-svn: 251819
  • Loading branch information
Zachary Turner committed Nov 2, 2015
1 parent dcbac62 commit 7d56454
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 6 deletions.
7 changes: 4 additions & 3 deletions lldb/packages/Python/lldbsuite/test/dosep.py
Expand Up @@ -279,11 +279,12 @@ def call_with_timeout(command, timeout, name, inferior_pid_events):
return process_driver.results


def process_dir(root, files, test_root, dotest_argv, inferior_pid_events):
def process_dir(root, files, dotest_argv, inferior_pid_events):
"""Examine a directory for tests, and invoke any found within it."""
results = []
for name in files:
script_file = os.path.join(test_root, "dotest.py")
import __main__ as main
script_file = main.__file__
command = ([sys.executable, script_file] +
dotest_argv +
["--inferior", "-p", name, root])
Expand Down Expand Up @@ -966,7 +967,7 @@ def walk_and_invoke(test_directory, test_subdir, dotest_argv,
test_work_items = []
find_test_files_in_dir_tree(
test_subdir, lambda testdir, test_files: test_work_items.append([
test_subdir, test_files, test_directory, dotest_argv, None]))
test_subdir, test_files, dotest_argv, None]))

# Convert test work items into test results using whatever
# was provided as the test run function.
Expand Down
5 changes: 2 additions & 3 deletions lldb/packages/Python/lldbsuite/test/dotest.py
@@ -1,5 +1,3 @@
#!/usr/bin/env python

"""
A simple testing framework for lldb using python's unit testing framework.
Expand Down Expand Up @@ -2039,4 +2037,5 @@ def addUnexpectedSuccess(self, test, bugnumber):
exitTestSuite(failed)

if __name__ == "__main__":
run_suite()
print(__file__ + " is for use as a module only. It should not be run as a standalone script.")
sys.exit(-1)

0 comments on commit 7d56454

Please sign in to comment.