[llvm] 2380c1b - [lit][unit] avoid adding gtest binary more than once

Yuanfang Chen via llvm-commits llvm-commits at lists.llvm.org
Thu Sep 22 16:15:02 PDT 2022


Author: Yuanfang Chen
Date: 2022-09-22T16:14:50-07:00
New Revision: 2380c1b609631c049e196d0efb37b1316b4091b4

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

LOG: [lit][unit] avoid adding gtest binary more than once

Due to CMake mis-configurations, some gtest binaries may be added to the test
list more than once. This patch makes lit avoid such cases and issues a
warning when it happens.

Added: 
    llvm/utils/lit/tests/Inputs/googletest-detect-duplicate/DummySubDir/OneTest.py
    llvm/utils/lit/tests/Inputs/googletest-detect-duplicate/lit.cfg
    llvm/utils/lit/tests/googletest-detect-duplicate.py

Modified: 
    llvm/utils/lit/lit/formats/googletest.py

Removed: 
    


################################################################################
diff  --git a/llvm/utils/lit/lit/formats/googletest.py b/llvm/utils/lit/lit/formats/googletest.py
index a6774652896e..8209f503a1b3 100644
--- a/llvm/utils/lit/lit/formats/googletest.py
+++ b/llvm/utils/lit/lit/formats/googletest.py
@@ -15,6 +15,7 @@
 
 class GoogleTest(TestFormat):
     def __init__(self, test_sub_dirs, test_suffix, run_under = []):
+        self.seen_executables = set()
         self.test_sub_dirs = str(test_sub_dirs).split(';')
 
         # On Windows, assume tests will also end in '.exe'.
@@ -54,6 +55,12 @@ def getTestsInDirectory(self, testSuite, path_in_suite, litConfig,
                                              suffixes=self.test_suffixes):
                 # Discover the tests in this executable.
                 execpath = os.path.join(source_path, subdir, fn)
+                if execpath in self.seen_executables:
+                    litConfig.warning(
+                        "Skip adding %r since it has been added to the test pool" % execpath)
+                    continue
+                else:
+                    self.seen_executables.add(execpath)
                 num_tests = self.get_num_tests(execpath, litConfig,
                                                localConfig)
                 if num_tests is not None:

diff  --git a/llvm/utils/lit/tests/Inputs/googletest-detect-duplicate/DummySubDir/OneTest.py b/llvm/utils/lit/tests/Inputs/googletest-detect-duplicate/DummySubDir/OneTest.py
new file mode 100644
index 000000000000..e9ce90e0a886
--- /dev/null
+++ b/llvm/utils/lit/tests/Inputs/googletest-detect-duplicate/DummySubDir/OneTest.py
@@ -0,0 +1,55 @@
+#!/usr/bin/env python
+
+import os
+import sys
+
+if len(sys.argv) == 3 and sys.argv[1] == "--gtest_list_tests":
+    if sys.argv[2] != '--gtest_filter=-*DISABLED_*':
+        raise ValueError("unexpected argument: %s" % (sys.argv[2]))
+    print("""\
+FirstTest.
+  subTestA""")
+    sys.exit(0)
+elif len(sys.argv) != 1:
+    # sharding and json output are specified using environment variables
+    raise ValueError("unexpected argument: %r" % (' '.join(sys.argv[1:])))
+
+for e in ['GTEST_TOTAL_SHARDS', 'GTEST_SHARD_INDEX', 'GTEST_OUTPUT']:
+    if e not in os.environ:
+        raise ValueError("missing environment variables: " + e)
+
+if not os.environ['GTEST_OUTPUT'].startswith('json:'):
+    raise ValueError("must emit json output: " + os.environ['GTEST_OUTPUT'])
+
+output = """\
+{
+"random_seed": 123,
+"testsuites": [
+    {
+        "name": "FirstTest",
+        "testsuite": [
+            {
+                "name": "subTestA",
+                "result": "COMPLETED",
+                "time": "0.001s"
+            }
+        ]
+    }
+]
+}"""
+
+dummy_output = """\
+{
+"testsuites": [
+]
+}"""
+
+json_filename = os.environ['GTEST_OUTPUT'].split(':', 1)[1]
+with open(json_filename, 'w', encoding='utf-8') as f:
+    if os.environ['GTEST_SHARD_INDEX'] == '0':
+        f.write(output)
+    else:
+        f.write(dummy_output)
+    exit_code = 0
+
+sys.exit(exit_code)

diff  --git a/llvm/utils/lit/tests/Inputs/googletest-detect-duplicate/lit.cfg b/llvm/utils/lit/tests/Inputs/googletest-detect-duplicate/lit.cfg
new file mode 100644
index 000000000000..20b6db9b4134
--- /dev/null
+++ b/llvm/utils/lit/tests/Inputs/googletest-detect-duplicate/lit.cfg
@@ -0,0 +1,3 @@
+import lit.formats
+config.name = 'googletest-detect-duplicate'
+config.test_format = lit.formats.GoogleTest('DummySubDir', 'Test')

diff  --git a/llvm/utils/lit/tests/googletest-detect-duplicate.py b/llvm/utils/lit/tests/googletest-detect-duplicate.py
new file mode 100644
index 000000000000..b104b77f4023
--- /dev/null
+++ b/llvm/utils/lit/tests/googletest-detect-duplicate.py
@@ -0,0 +1,10 @@
+# Check we don't add a GoogleTest binary more than once and issue a warning
+# when it happens.
+
+# RUN: %{lit} -v --order=random %{inputs}/googletest-detect-duplicate \
+# RUN:                          %{inputs}/googletest-detect-duplicate 2>&1 | FileCheck %s
+
+# CHECK: warning: Skip adding
+# CHECK: -- Testing:
+# CHECK: PASS: googletest-detect-duplicate :: [[PATH:[Dd]ummy[Ss]ub[Dd]ir/]][[FILE:OneTest\.py]]/0
+# CHECK: Passed{{ *}}: 1


        


More information about the llvm-commits mailing list