[Lldb-commits] [lldb] fcb0d81 - [lldb/test] Use realpath consistently for test root file paths.

Jordan Rupprecht via lldb-commits lldb-commits at lists.llvm.org
Wed Aug 5 11:36:03 PDT 2020


Author: Jordan Rupprecht
Date: 2020-08-05T11:35:37-07:00
New Revision: fcb0d8163a4f3090cb85d77b459887cf1f84cc7e

URL: https://github.com/llvm/llvm-project/commit/fcb0d8163a4f3090cb85d77b459887cf1f84cc7e
DIFF: https://github.com/llvm/llvm-project/commit/fcb0d8163a4f3090cb85d77b459887cf1f84cc7e.diff

LOG: [lldb/test] Use realpath consistently for test root file paths.

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.

Reviewed By: JDevlieghere

Differential Revision: https://reviews.llvm.org/D85258

Added: 
    

Modified: 
    lldb/packages/Python/lldbsuite/__init__.py
    lldb/packages/Python/lldbsuite/test/lldbtest.py
    lldb/test/API/use_lldb_suite.py

Removed: 
    


################################################################################
diff  --git a/lldb/packages/Python/lldbsuite/__init__.py b/lldb/packages/Python/lldbsuite/__init__.py
index 62f6aee71f30..dfe2eec8eac5 100644
--- a/lldb/packages/Python/lldbsuite/__init__.py
+++ b/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('/') == '/'

diff  --git a/lldb/packages/Python/lldbsuite/test/lldbtest.py b/lldb/packages/Python/lldbsuite/test/lldbtest.py
index fe501f6ac6a2..8823112a6e20 100644
--- a/lldb/packages/Python/lldbsuite/test/lldbtest.py
+++ b/lldb/packages/Python/lldbsuite/test/lldbtest.py
@@ -496,8 +496,12 @@ def compute_mydir(test_file):
             mydir = TestBase.compute_mydir(__file__)
         '''
         # /abs/path/to/packages/group/subdir/mytest.py -> group/subdir
-        rel_prefix = test_file[len(configuration.test_src_root) + 1:]
-        return os.path.dirname(rel_prefix)
+        lldb_test_src = configuration.test_src_root
+        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)."""

diff  --git a/lldb/test/API/use_lldb_suite.py b/lldb/test/API/use_lldb_suite.py
index f1edf1d7304f..613fac40aeb7 100644
--- a/lldb/test/API/use_lldb_suite.py
+++ b/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('/') == '/'


        


More information about the lldb-commits mailing list