Skip to content

Commit 84d5917

Browse files
fmeumckolli5
andauthored
Collect coverage from cc_binary data deps of py_test (bazelbuild#15298)
Before this commit, if a py_test executed a cc_binary from its data deps, coverage for this cc_binary would not be collected. This is fixed by adding the implicit `$collect_cc_coverage` attribute to BazelPyTestRule, similar to how this is already done for BazelShTestRule. Fixes bazelbuild#15098. Closes bazelbuild#15097. PiperOrigin-RevId: 442800790 Co-authored-by: Chenchu Kolli <[email protected]>
1 parent e133e66 commit 84d5917

File tree

4 files changed

+534
-0
lines changed

4 files changed

+534
-0
lines changed

src/main/java/com/google/devtools/build/lib/bazel/rules/python/BUILD

+1
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ java_library(
3030
"//src/main/java/com/google/devtools/build/lib/analysis:analysis_cluster",
3131
"//src/main/java/com/google/devtools/build/lib/analysis:config/build_options",
3232
"//src/main/java/com/google/devtools/build/lib/analysis:config/core_option_converters",
33+
"//src/main/java/com/google/devtools/build/lib/analysis:config/execution_transition_factory",
3334
"//src/main/java/com/google/devtools/build/lib/analysis:config/fragment",
3435
"//src/main/java/com/google/devtools/build/lib/analysis:config/fragment_options",
3536
"//src/main/java/com/google/devtools/build/lib/analysis:config/host_transition",

src/main/java/com/google/devtools/build/lib/bazel/rules/python/BazelPyTestRule.java

+8
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import com.google.devtools.build.lib.analysis.BaseRuleClasses;
2323
import com.google.devtools.build.lib.analysis.RuleDefinition;
2424
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
25+
import com.google.devtools.build.lib.analysis.config.ExecutionTransitionFactory;
2526
import com.google.devtools.build.lib.analysis.config.HostTransition;
2627
import com.google.devtools.build.lib.bazel.rules.python.BazelPyRuleClasses.PyBinaryBaseRule;
2728
import com.google.devtools.build.lib.packages.RuleClass;
@@ -58,6 +59,13 @@ public RuleClass build(RuleClass.Builder builder, RuleDefinitionEnvironment env)
5859
.cfg(HostTransition.createFactory())
5960
.value(env.getToolsLabel("//tools/launcher:launcher")))
6061
.add(attr(":lcov_merger", LABEL).value(BaseRuleClasses.getCoverageOutputGeneratorLabel()))
62+
// Add the script as an attribute in order for py_test to output code coverage results for
63+
// code covered by CC binaries invocations.
64+
.add(
65+
attr("$collect_cc_coverage", LABEL)
66+
.cfg(ExecutionTransitionFactory.create())
67+
.singleArtifact()
68+
.value(env.getToolsLabel("//tools/test:collect_cc_coverage")))
6169
.build();
6270
}
6371

src/test/shell/bazel/BUILD

+9
Original file line numberDiff line numberDiff line change
@@ -555,6 +555,15 @@ sh_test(
555555
for java_version in JAVA_VERSIONS_COVERAGE
556556
]
557557

558+
sh_test(
559+
name = "bazel_coverage_py_test",
560+
srcs = ["bazel_coverage_py_test.sh"],
561+
data = [":test-deps"],
562+
tags = [
563+
"no_windows",
564+
],
565+
)
566+
558567
sh_test(
559568
name = "bazel_coverage_sh_test",
560569
srcs = ["bazel_coverage_sh_test.sh"],

0 commit comments

Comments
 (0)