Skip to content

Commit d0ae08a

Browse files
Fix automatic coverage includes calculation for headless test sessions (#7809)
1 parent 84d0670 commit d0ae08a

File tree

2 files changed

+13
-5
lines changed

2 files changed

+13
-5
lines changed

dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/CiVisibilitySystem.java

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import datadog.trace.civisibility.events.BuildEventsHandlerImpl;
3131
import datadog.trace.civisibility.events.TestEventsHandlerImpl;
3232
import datadog.trace.civisibility.ipc.SignalServer;
33+
import datadog.trace.civisibility.source.index.RepoIndex;
3334
import datadog.trace.civisibility.telemetry.CiVisibilityMetricCollectorImpl;
3435
import datadog.trace.civisibility.test.ExecutionStrategy;
3536
import datadog.trace.civisibility.utils.ConcurrentHashMapContextStore;
@@ -90,7 +91,8 @@ public static void start(Instrumentation inst, SharedCommunicationObjects sco) {
9091
// so if lines are explicitly enabled,
9192
// we rely on Jacoco instrumentation rather than on our own coverage mechanism
9293
!config.isCiVisibilityCoverageLinesEnabled()) {
93-
Predicate<String> instrumentationFilter = createCoverageInstrumentationFilter(config);
94+
Predicate<String> instrumentationFilter =
95+
createCoverageInstrumentationFilter(services, repoServices);
9496
inst.addTransformer(new CoverageClassTransformer(instrumentationFilter));
9597
}
9698

@@ -112,9 +114,15 @@ private static Path getCurrentPath() {
112114
}
113115
}
114116

115-
private static Predicate<String> createCoverageInstrumentationFilter(Config config) {
116-
String[] includedPackages = config.getCiVisibilityCodeCoverageIncludedPackages();
117-
String[] excludedPackages = config.getCiVisibilityCodeCoverageExcludedPackages();
117+
private static Predicate<String> createCoverageInstrumentationFilter(
118+
CiVisibilityServices services, CiVisibilityRepoServices repoServices) {
119+
String[] includedPackages = services.config.getCiVisibilityCodeCoverageIncludedPackages();
120+
if (includedPackages.length == 0 && services.processHierarchy.isHeadless()) {
121+
RepoIndex repoIndex = repoServices.repoIndexProvider.getIndex();
122+
includedPackages =
123+
Config.convertJacocoExclusionFormatToPackagePrefixes(repoIndex.getRootPackages());
124+
}
125+
String[] excludedPackages = services.config.getCiVisibilityCodeCoverageExcludedPackages();
118126
return new CoverageInstrumentationFilter(includedPackages, excludedPackages);
119127
}
120128

internal-api/src/main/java/datadog/trace/api/Config.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1773,7 +1773,7 @@ PROFILING_DATADOG_PROFILER_ENABLED, isDatadogProfilerSafeInCurrentEnvironment())
17731773
* my.package.*,my.other.package.*}) to list of package prefixes suitable for use with ASM ({@code
17741774
* my/package/,my/other/package/})
17751775
*/
1776-
private static String[] convertJacocoExclusionFormatToPackagePrefixes(List<String> packages) {
1776+
public static String[] convertJacocoExclusionFormatToPackagePrefixes(List<String> packages) {
17771777
return packages.stream()
17781778
.map(s -> (s.endsWith("*") ? s.substring(0, s.length() - 1) : s).replace('.', '/'))
17791779
.toArray(String[]::new);

0 commit comments

Comments
 (0)