Skip to content

Commit b34cd6d

Browse files
Add capabilities tagging (#8499)
1 parent d19cd67 commit b34cd6d

File tree

87 files changed

+1619
-109
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

87 files changed

+1619
-109
lines changed

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

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import datadog.trace.api.civisibility.DDTest;
88
import datadog.trace.api.civisibility.DDTestSuite;
99
import datadog.trace.api.civisibility.InstrumentationBridge;
10+
import datadog.trace.api.civisibility.config.LibraryCapability;
1011
import datadog.trace.api.civisibility.coverage.CoveragePerTestBridge;
1112
import datadog.trace.api.civisibility.events.BuildEventsHandler;
1213
import datadog.trace.api.civisibility.events.TestEventsHandler;
@@ -39,6 +40,7 @@
3940
import java.lang.instrument.Instrumentation;
4041
import java.nio.file.Path;
4142
import java.nio.file.Paths;
43+
import java.util.Collection;
4244
import java.util.function.Predicate;
4345
import javax.annotation.Nullable;
4446
import org.slf4j.Logger;
@@ -167,9 +169,10 @@ private TestEventsHandlerFactory(
167169
public <SuiteKey, TestKey> TestEventsHandler<SuiteKey, TestKey> create(
168170
String component,
169171
@Nullable ContextStore<SuiteKey, DDTestSuite> suiteStore,
170-
@Nullable ContextStore<TestKey, DDTest> testStore) {
172+
@Nullable ContextStore<TestKey, DDTest> testStore,
173+
Collection<LibraryCapability> capabilities) {
171174
TestFrameworkSession testSession =
172-
sessionFactory.startSession(repoServices.moduleName, component, null);
175+
sessionFactory.startSession(repoServices.moduleName, component, null, capabilities);
173176
TestFrameworkModule testModule = testSession.testModuleStart(repoServices.moduleName, null);
174177
return new TestEventsHandlerImpl<>(
175178
services.metricCollector,
@@ -231,7 +234,10 @@ private static TestFrameworkSession.Factory childTestFrameworkSessionFactory(
231234
CiVisibilityRepoServices repoServices,
232235
CiVisibilityCoverageServices.Child coverageServices,
233236
ExecutionSettings executionSettings) {
234-
return (String projectName, String component, Long startTime) -> {
237+
return (String projectName,
238+
String component,
239+
Long startTime,
240+
Collection<LibraryCapability> capabilities) -> {
235241
String sessionName = services.config.getCiVisibilitySessionName();
236242
String testCommand = services.config.getCiVisibilityTestCommand();
237243
TestDecorator testDecorator =
@@ -255,7 +261,8 @@ private static TestFrameworkSession.Factory childTestFrameworkSessionFactory(
255261
coverageServices.coverageStoreFactory,
256262
coverageServices.coverageReporter,
257263
services.signalClientFactory,
258-
executionStrategy);
264+
executionStrategy,
265+
capabilities);
259266
};
260267
}
261268

@@ -264,7 +271,10 @@ private static TestFrameworkSession.Factory headlessTestFrameworkSessionFactory(
264271
CiVisibilityRepoServices repoServices,
265272
CiVisibilityCoverageServices.Child coverageServices,
266273
ExecutionSettings executionSettings) {
267-
return (String projectName, String component, Long startTime) -> {
274+
return (String projectName,
275+
String component,
276+
Long startTime,
277+
Collection<LibraryCapability> capabilities) -> {
268278
repoServices.gitDataUploader.startOrObserveGitDataUpload();
269279

270280
String sessionName = services.config.getCiVisibilitySessionName();
@@ -288,7 +298,8 @@ private static TestFrameworkSession.Factory headlessTestFrameworkSessionFactory(
288298
repoServices.codeowners,
289299
services.linesResolver,
290300
coverageServices.coverageStoreFactory,
291-
executionStrategy);
301+
executionStrategy,
302+
capabilities);
292303
};
293304
}
294305

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

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package datadog.trace.civisibility.config;
22

3+
import datadog.trace.api.Config;
4+
import datadog.trace.api.civisibility.CIConstants;
5+
import datadog.trace.api.civisibility.config.LibraryCapability;
36
import datadog.trace.api.civisibility.config.TestFQN;
47
import datadog.trace.api.civisibility.config.TestIdentifier;
58
import datadog.trace.api.civisibility.config.TestMetadata;
@@ -229,6 +232,44 @@ public Diff getPullRequestDiff() {
229232
return pullRequestDiff;
230233
}
231234

235+
@Nonnull
236+
public Map<LibraryCapability, Boolean> getCapabilitiesStatus(
237+
Collection<LibraryCapability> capabilities) {
238+
Map<LibraryCapability, Boolean> status = new EnumMap<>(LibraryCapability.class);
239+
240+
for (LibraryCapability c : capabilities) {
241+
switch (c) {
242+
case TIA:
243+
status.put(c, isTestSkippingEnabled());
244+
break;
245+
case EFD:
246+
EarlyFlakeDetectionSettings efdSettings = getEarlyFlakeDetectionSettings();
247+
status.put(c, efdSettings.isEnabled());
248+
break;
249+
case ATR:
250+
status.put(c, isFlakyTestRetriesEnabled());
251+
break;
252+
case IMPACTED:
253+
status.put(c, isImpactedTestsDetectionEnabled());
254+
break;
255+
case FAIL_FAST:
256+
String testOrder = Config.get().getCiVisibilityTestOrder();
257+
status.put(c, CIConstants.FAIL_FAST_TEST_ORDER.equalsIgnoreCase(testOrder));
258+
break;
259+
case QUARANTINE:
260+
case DISABLED:
261+
case ATTEMPT_TO_FIX:
262+
TestManagementSettings testManagementSettings = getTestManagementSettings();
263+
status.put(c, testManagementSettings.isEnabled());
264+
break;
265+
default:
266+
break;
267+
}
268+
}
269+
270+
return status;
271+
}
272+
232273
@Override
233274
public boolean equals(Object o) {
234275
if (this == o) {

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

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package datadog.trace.civisibility.domain;
22

3+
import datadog.trace.api.civisibility.config.LibraryCapability;
4+
import java.util.Collection;
35
import javax.annotation.Nullable;
46

57
/** Test session abstraction that is used by test framework instrumentations (e.g. JUnit, TestNG) */
@@ -9,6 +11,10 @@ public interface TestFrameworkSession {
911
TestFrameworkModule testModuleStart(String moduleName, @Nullable Long startTime);
1012

1113
interface Factory {
12-
TestFrameworkSession startSession(String projectName, String component, Long startTime);
14+
TestFrameworkSession startSession(
15+
String projectName,
16+
String component,
17+
Long startTime,
18+
Collection<LibraryCapability> capabilities);
1319
}
1420
}

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import datadog.trace.api.civisibility.CIConstants;
1010
import datadog.trace.api.civisibility.DDTest;
1111
import datadog.trace.api.civisibility.InstrumentationTestBridge;
12+
import datadog.trace.api.civisibility.config.LibraryCapability;
1213
import datadog.trace.api.civisibility.config.TestIdentifier;
1314
import datadog.trace.api.civisibility.coverage.CoveragePerTestBridge;
1415
import datadog.trace.api.civisibility.coverage.CoverageStore;
@@ -44,6 +45,7 @@
4445
import java.lang.reflect.Method;
4546
import java.util.Collection;
4647
import java.util.Collections;
48+
import java.util.Map;
4749
import java.util.function.Consumer;
4850
import javax.annotation.Nonnull;
4951
import javax.annotation.Nullable;
@@ -85,6 +87,7 @@ public TestImpl(
8587
Codeowners codeowners,
8688
CoverageStore.Factory coverageStoreFactory,
8789
ExecutionResults executionResults,
90+
@Nonnull Map<LibraryCapability, Boolean> libraryCapabilities,
8891
Consumer<AgentSpan> onSpanFinish) {
8992
this.instrumentation = instrumentation;
9093
this.metricCollector = metricCollector;
@@ -143,6 +146,10 @@ public TestImpl(
143146
span.setTag(Tags.ITR_CORRELATION_ID, itrCorrelationId);
144147
}
145148

149+
for (Map.Entry<LibraryCapability, Boolean> entry : libraryCapabilities.entrySet()) {
150+
span.setTag(entry.getKey().asTag(), entry.getValue());
151+
}
152+
146153
testDecorator.afterStart(span);
147154

148155
metricCollector.add(CiVisibilityCountMetric.EVENT_CREATED, 1, instrumentation, EventType.TEST);

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
import datadog.trace.api.Config;
88
import datadog.trace.api.civisibility.DDTestSuite;
9+
import datadog.trace.api.civisibility.config.LibraryCapability;
910
import datadog.trace.api.civisibility.coverage.CoverageStore;
1011
import datadog.trace.api.civisibility.telemetry.CiVisibilityCountMetric;
1112
import datadog.trace.api.civisibility.telemetry.CiVisibilityMetricCollector;
@@ -25,7 +26,9 @@
2526
import datadog.trace.civisibility.utils.SpanUtils;
2627
import java.lang.reflect.Method;
2728
import java.util.Collection;
29+
import java.util.Map;
2830
import java.util.function.Consumer;
31+
import javax.annotation.Nonnull;
2932
import javax.annotation.Nullable;
3033
import org.slf4j.Logger;
3134
import org.slf4j.LoggerFactory;
@@ -51,6 +54,7 @@ public class TestSuiteImpl implements DDTestSuite {
5154
private final CoverageStore.Factory coverageStoreFactory;
5255
private final ExecutionResults executionResults;
5356
private final boolean parallelized;
57+
private final Map<LibraryCapability, Boolean> libraryCapabilities;
5458
private final Consumer<AgentSpan> onSpanFinish;
5559

5660
public TestSuiteImpl(
@@ -71,6 +75,7 @@ public TestSuiteImpl(
7175
LinesResolver linesResolver,
7276
CoverageStore.Factory coverageStoreFactory,
7377
ExecutionResults executionResults,
78+
@Nonnull Map<LibraryCapability, Boolean> libraryCapabilities,
7479
Consumer<AgentSpan> onSpanFinish) {
7580
this.moduleSpanContext = moduleSpanContext;
7681
this.moduleName = moduleName;
@@ -87,6 +92,7 @@ public TestSuiteImpl(
8792
this.linesResolver = linesResolver;
8893
this.coverageStoreFactory = coverageStoreFactory;
8994
this.executionResults = executionResults;
95+
this.libraryCapabilities = libraryCapabilities;
9096
this.onSpanFinish = onSpanFinish;
9197

9298
AgentTracer.SpanBuilder spanBuilder =
@@ -257,6 +263,7 @@ public TestImpl testStart(
257263
codeowners,
258264
coverageStoreFactory,
259265
executionResults,
266+
libraryCapabilities,
260267
SpanUtils.propagateCiVisibilityTagsTo(span));
261268
}
262269
}

dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/buildsystem/ProxyTestModule.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import datadog.trace.api.Config;
44
import datadog.trace.api.DDTraceId;
5+
import datadog.trace.api.civisibility.config.LibraryCapability;
56
import datadog.trace.api.civisibility.config.TestIdentifier;
67
import datadog.trace.api.civisibility.config.TestSourceData;
78
import datadog.trace.api.civisibility.coverage.CoverageStore;
@@ -30,6 +31,7 @@
3031
import datadog.trace.civisibility.test.ExecutionResults;
3132
import datadog.trace.civisibility.test.ExecutionStrategy;
3233
import java.util.Collection;
34+
import java.util.Map;
3335
import java.util.TreeSet;
3436
import java.util.concurrent.ConcurrentHashMap;
3537
import javax.annotation.Nonnull;
@@ -60,6 +62,7 @@ public class ProxyTestModule implements TestFrameworkModule {
6062
private final LinesResolver linesResolver;
6163
private final CoverageStore.Factory coverageStoreFactory;
6264
private final Collection<TestFramework> testFrameworks = ConcurrentHashMap.newKeySet();
65+
private final Map<LibraryCapability, Boolean> libraryCapabilities;
6366

6467
public ProxyTestModule(
6568
AgentSpanContext parentProcessModuleContext,
@@ -73,7 +76,8 @@ public ProxyTestModule(
7376
LinesResolver linesResolver,
7477
CoverageStore.Factory coverageStoreFactory,
7578
ChildProcessCoverageReporter childProcessCoverageReporter,
76-
SignalClient.Factory signalClientFactory) {
79+
SignalClient.Factory signalClientFactory,
80+
Map<LibraryCapability, Boolean> libraryCapabilities) {
7781
this.parentProcessModuleContext = parentProcessModuleContext;
7882
this.moduleName = moduleName;
7983
this.executionStrategy = executionStrategy;
@@ -87,6 +91,7 @@ public ProxyTestModule(
8791
this.codeowners = codeowners;
8892
this.linesResolver = linesResolver;
8993
this.coverageStoreFactory = coverageStoreFactory;
94+
this.libraryCapabilities = libraryCapabilities;
9095
}
9196

9297
@Override
@@ -211,6 +216,7 @@ public TestSuiteImpl testSuiteStart(
211216
linesResolver,
212217
coverageStoreFactory,
213218
executionResults,
219+
libraryCapabilities,
214220
this::propagateTestFrameworkData);
215221
}
216222

dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/buildsystem/ProxyTestSession.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package datadog.trace.civisibility.domain.buildsystem;
22

33
import datadog.trace.api.Config;
4+
import datadog.trace.api.civisibility.config.LibraryCapability;
45
import datadog.trace.api.civisibility.coverage.CoverageStore;
56
import datadog.trace.api.civisibility.telemetry.CiVisibilityMetricCollector;
67
import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext;
@@ -14,6 +15,9 @@
1415
import datadog.trace.civisibility.source.LinesResolver;
1516
import datadog.trace.civisibility.source.SourcePathResolver;
1617
import datadog.trace.civisibility.test.ExecutionStrategy;
18+
import java.util.Collection;
19+
import java.util.Map;
20+
import javax.annotation.Nonnull;
1721
import javax.annotation.Nullable;
1822

1923
/**
@@ -34,6 +38,7 @@ public class ProxyTestSession implements TestFrameworkSession {
3438
private final ChildProcessCoverageReporter childProcessCoverageReporter;
3539
private final SignalClient.Factory signalClientFactory;
3640
private final ExecutionStrategy executionStrategy;
41+
private final Map<LibraryCapability, Boolean> libraryCapabilities;
3742

3843
public ProxyTestSession(
3944
AgentSpanContext parentProcessModuleContext,
@@ -46,7 +51,8 @@ public ProxyTestSession(
4651
CoverageStore.Factory coverageStoreFactory,
4752
ChildProcessCoverageReporter childProcessCoverageReporter,
4853
SignalClient.Factory signalClientFactory,
49-
ExecutionStrategy executionStrategy) {
54+
ExecutionStrategy executionStrategy,
55+
@Nonnull Collection<LibraryCapability> capabilities) {
5056
this.parentProcessModuleContext = parentProcessModuleContext;
5157
this.config = config;
5258
this.metricCollector = metricCollector;
@@ -58,6 +64,8 @@ public ProxyTestSession(
5864
this.childProcessCoverageReporter = childProcessCoverageReporter;
5965
this.signalClientFactory = signalClientFactory;
6066
this.executionStrategy = executionStrategy;
67+
this.libraryCapabilities =
68+
executionStrategy.getExecutionSettings().getCapabilitiesStatus(capabilities);
6169
}
6270

6371
@Override
@@ -82,6 +90,7 @@ public TestFrameworkModule testModuleStart(String moduleName, @Nullable Long sta
8290
linesResolver,
8391
coverageStoreFactory,
8492
childProcessCoverageReporter,
85-
signalClientFactory);
93+
signalClientFactory,
94+
libraryCapabilities);
8695
}
8796
}

dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/headless/HeadlessTestModule.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import datadog.trace.api.Config;
44
import datadog.trace.api.DDTags;
55
import datadog.trace.api.civisibility.CIConstants;
6+
import datadog.trace.api.civisibility.config.LibraryCapability;
67
import datadog.trace.api.civisibility.config.TestIdentifier;
78
import datadog.trace.api.civisibility.config.TestSourceData;
89
import datadog.trace.api.civisibility.coverage.CoverageStore;
@@ -28,6 +29,7 @@
2829
import datadog.trace.civisibility.test.ExecutionStrategy;
2930
import datadog.trace.civisibility.utils.SpanUtils;
3031
import java.util.Collection;
32+
import java.util.Map;
3133
import java.util.function.Consumer;
3234
import javax.annotation.Nonnull;
3335
import javax.annotation.Nullable;
@@ -44,6 +46,7 @@ public class HeadlessTestModule extends AbstractTestModule implements TestFramew
4446
private final CoverageStore.Factory coverageStoreFactory;
4547
private final ExecutionStrategy executionStrategy;
4648
private final ExecutionResults executionResults;
49+
private final Map<LibraryCapability, Boolean> libraryCapabilities;
4750

4851
public HeadlessTestModule(
4952
AgentSpanContext sessionSpanContext,
@@ -57,6 +60,7 @@ public HeadlessTestModule(
5760
LinesResolver linesResolver,
5861
CoverageStore.Factory coverageStoreFactory,
5962
ExecutionStrategy executionStrategy,
63+
Map<LibraryCapability, Boolean> libraryCapabilities,
6064
Consumer<AgentSpan> onSpanFinish) {
6165
super(
6266
sessionSpanContext,
@@ -73,6 +77,7 @@ public HeadlessTestModule(
7377
this.coverageStoreFactory = coverageStoreFactory;
7478
this.executionStrategy = executionStrategy;
7579
this.executionResults = new ExecutionResults();
80+
this.libraryCapabilities = libraryCapabilities;
7681
}
7782

7883
@Override
@@ -183,6 +188,7 @@ public TestSuiteImpl testSuiteStart(
183188
linesResolver,
184189
coverageStoreFactory,
185190
executionResults,
191+
libraryCapabilities,
186192
SpanUtils.propagateCiVisibilityTagsTo(span));
187193
}
188194
}

0 commit comments

Comments
 (0)