Skip to content

Commit

Permalink
[lit] Don't include tests skipped due to sharding in reports
Browse files Browse the repository at this point in the history
When running multiple shards, don't include skipped tests in the xunit
output since merging the files will result in duplicates.
In our CHERI Jenkins CI, I configured the libc++ tests to run using sharding
(since we are testing using a single-CPU QEMU). We then merge the generated
XUnit xml files to produce a final result, but if the individual XMLs
report tests excluded due to sharding each test is included N times in the
final result. This also makes it difficult to find the tests that were
skipped due to missing REQUIRES: etc.

Reviewed By: yln

Differential Revision: https://reviews.llvm.org/D84235
  • Loading branch information
arichardson committed Jul 26, 2020
1 parent 98b6111 commit 18df607
Show file tree
Hide file tree
Showing 3 changed files with 7 additions and 3 deletions.
6 changes: 5 additions & 1 deletion llvm/utils/lit/lit/main.py
Expand Up @@ -80,9 +80,13 @@ def main(builtin_params={}):
'error.\n')
sys.exit(2)

# When running multiple shards, don't include skipped tests in the xunit
# output since merging the files will result in duplicates.
tests_for_report = discovered_tests
if opts.shard:
(run, shards) = opts.shard
selected_tests = filter_by_shard(selected_tests, run, shards, lit_config)
tests_for_report = selected_tests
if not selected_tests:
sys.stderr.write('warning: shard does not contain any tests. '
'Consider decreasing the number of shards.\n')
Expand All @@ -102,7 +106,7 @@ def main(builtin_params={}):
print_results(discovered_tests, elapsed, opts)

for report in opts.reports:
report.write_results(discovered_tests, elapsed)
report.write_results(tests_for_report, elapsed)

if lit_config.numErrors:
sys.stderr.write('\n%d error(s) in tests\n' % lit_config.numErrors)
Expand Down
2 changes: 1 addition & 1 deletion llvm/utils/lit/lit/reports.py
Expand Up @@ -127,7 +127,7 @@ def _write_test(self, file, test, suite_name):
def _get_skip_reason(self, test):
code = test.result.code
if code == lit.Test.EXCLUDED:
return 'Test not selected (--filter, --max-tests, --run-shard)'
return 'Test not selected (--filter, --max-tests)'
if code == lit.Test.SKIPPED:
return 'User interrupt'

Expand Down
2 changes: 1 addition & 1 deletion llvm/utils/lit/tests/xunit-output.py
Expand Up @@ -14,7 +14,7 @@
# CHECK-NEXT: <failure><![CDATA[& < > ]]]]><![CDATA[> &"]]></failure>
# CHECK-NEXT: </testcase>
# CHECK-NEXT: <testcase classname="test-data.test-data" name="excluded.ini" time="{{[0-1]\.[0-9]+}}">
# CHECK-NEXT: <skipped message="Test not selected (--filter, --max-tests, --run-shard)"/>
# CHECK-NEXT: <skipped message="Test not selected (--filter, --max-tests)"/>
# CHECK-NEXT: </testcase>
# CHECK-NEXT: <testcase classname="test-data.test-data" name="missing_feature.ini" time="{{[0-1]\.[0-9]+}}">
# CHECK-NEXT: <skipped message="Missing required feature(s): dummy_feature"/>
Expand Down

0 comments on commit 18df607

Please sign in to comment.