[Lldb-commits] [PATCH] D85258: [test] Use realpath consistently for test root file paths.
Jordan Rupprecht via Phabricator via lldb-commits
lldb-commits at lists.llvm.org
Tue Aug 4 16:43:26 PDT 2020
rupprecht created this revision.
Herald added a project: LLDB.
Herald added a subscriber: lldb-commits.
rupprecht requested review of this revision.
Herald added a subscriber: JDevlieghere.
LLDB tests assume that tests are in the test tree (the `LLDB_TEST_SRC` env variable, configured by `dotest.py`).
If this assertion doesn't hold, tests fail in strange ways. An early place this goes wrong is in `compute_mydir` which does a simple length-based substring to get the relative path. Later, we use that path to chdir to. If the test file and test tree don't agree in realpath-ness (and therefore length), this will be a cryptic error of chdir-ing to a directory that does not exist.
The actual discrepency is that the places we look for `use_lldb_suite.py` don't use a realpath, but `dotest.py` does (see initialization of `configuration.testdirs`).
It doesn't particularly matter whether we use realpath or abspath to canonicalize things, but many places end up with implicit dependencies on the canonicalized pwd being a realpath, so make them realpath consistently. Also, in the `compute_mydir` method mentioned, raise an error if the path types don't agree.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D85258
Files:
lldb/packages/Python/lldbsuite/__init__.py
lldb/packages/Python/lldbsuite/test/lldbtest.py
lldb/test/API/use_lldb_suite.py
Index: lldb/test/API/use_lldb_suite.py
===================================================================
--- lldb/test/API/use_lldb_suite.py
+++ lldb/test/API/use_lldb_suite.py
@@ -4,9 +4,8 @@
def find_lldb_root():
- lldb_root = os.path.dirname(
- os.path.abspath(inspect.getfile(inspect.currentframe()))
- )
+ lldb_root = os.path.realpath(
+ os.path.dirname(inspect.getfile(inspect.currentframe())))
while True:
parent = os.path.dirname(lldb_root)
if parent == lldb_root: # dirname('/') == '/'
Index: lldb/packages/Python/lldbsuite/test/lldbtest.py
===================================================================
--- lldb/packages/Python/lldbsuite/test/lldbtest.py
+++ lldb/packages/Python/lldbsuite/test/lldbtest.py
@@ -496,8 +496,12 @@
mydir = TestBase.compute_mydir(__file__)
'''
# /abs/path/to/packages/group/subdir/mytest.py -> group/subdir
- rel_prefix = test_file[len(os.environ["LLDB_TEST_SRC"]) + 1:]
- return os.path.dirname(rel_prefix)
+ lldb_test_src = os.environ["LLDB_TEST_SRC"]
+ if not test_file.startswith(lldb_test_src):
+ raise Exception(
+ "Test file '%s' must reside within LLDB_TEST_SRC "
+ "(which is '%s')." % (test_file, lldb_test_src))
+ return os.path.dirname(os.path.relpath(test_file, start=lldb_test_src))
def TraceOn(self):
"""Returns True if we are in trace mode (tracing detailed test execution)."""
Index: lldb/packages/Python/lldbsuite/__init__.py
===================================================================
--- lldb/packages/Python/lldbsuite/__init__.py
+++ lldb/packages/Python/lldbsuite/__init__.py
@@ -6,7 +6,8 @@
def find_lldb_root():
- lldb_root = os.path.dirname(inspect.getfile(inspect.currentframe()))
+ lldb_root = os.path.realpath(
+ os.path.dirname(inspect.getfile(inspect.currentframe())))
while True:
parent = os.path.dirname(lldb_root)
if parent == lldb_root: # dirname('/') == '/'
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D85258.283060.patch
Type: text/x-patch
Size: 2056 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20200804/6de254ce/attachment.bin>
More information about the lldb-commits
mailing list