Skip to content

Commit

Permalink
Fix automatic coverage includes calculation for headless test sessions (
Browse files Browse the repository at this point in the history
  • Loading branch information
nikita-tkachenko-datadog authored Oct 18, 2024
1 parent 6514628 commit 52cdab0
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
import datadog.trace.civisibility.events.BuildEventsHandlerImpl;
import datadog.trace.civisibility.events.TestEventsHandlerImpl;
import datadog.trace.civisibility.ipc.SignalServer;
import datadog.trace.civisibility.source.index.RepoIndex;
import datadog.trace.civisibility.telemetry.CiVisibilityMetricCollectorImpl;
import datadog.trace.civisibility.test.ExecutionStrategy;
import datadog.trace.civisibility.utils.ConcurrentHashMapContextStore;
Expand Down Expand Up @@ -90,7 +91,8 @@ public static void start(Instrumentation inst, SharedCommunicationObjects sco) {
// so if lines are explicitly enabled,
// we rely on Jacoco instrumentation rather than on our own coverage mechanism
!config.isCiVisibilityCoverageLinesEnabled()) {
Predicate<String> instrumentationFilter = createCoverageInstrumentationFilter(config);
Predicate<String> instrumentationFilter =
createCoverageInstrumentationFilter(services, repoServices);
inst.addTransformer(new CoverageClassTransformer(instrumentationFilter));
}

Expand All @@ -112,9 +114,15 @@ private static Path getCurrentPath() {
}
}

private static Predicate<String> createCoverageInstrumentationFilter(Config config) {
String[] includedPackages = config.getCiVisibilityCodeCoverageIncludedPackages();
String[] excludedPackages = config.getCiVisibilityCodeCoverageExcludedPackages();
private static Predicate<String> createCoverageInstrumentationFilter(
CiVisibilityServices services, CiVisibilityRepoServices repoServices) {
String[] includedPackages = services.config.getCiVisibilityCodeCoverageIncludedPackages();
if (includedPackages.length == 0 && services.processHierarchy.isHeadless()) {
RepoIndex repoIndex = repoServices.repoIndexProvider.getIndex();
includedPackages =
Config.convertJacocoExclusionFormatToPackagePrefixes(repoIndex.getRootPackages());
}
String[] excludedPackages = services.config.getCiVisibilityCodeCoverageExcludedPackages();
return new CoverageInstrumentationFilter(includedPackages, excludedPackages);
}

Expand Down
2 changes: 1 addition & 1 deletion internal-api/src/main/java/datadog/trace/api/Config.java
Original file line number Diff line number Diff line change
Expand Up @@ -1773,7 +1773,7 @@ PROFILING_DATADOG_PROFILER_ENABLED, isDatadogProfilerSafeInCurrentEnvironment())
* my.package.*,my.other.package.*}) to list of package prefixes suitable for use with ASM ({@code
* my/package/,my/other/package/})
*/
private static String[] convertJacocoExclusionFormatToPackagePrefixes(List<String> packages) {
public static String[] convertJacocoExclusionFormatToPackagePrefixes(List<String> packages) {
return packages.stream()
.map(s -> (s.endsWith("*") ? s.substring(0, s.length() - 1) : s).replace('.', '/'))
.toArray(String[]::new);
Expand Down

0 comments on commit 52cdab0

Please sign in to comment.