Skip to content

Commit 7dfe567

Browse files
Implement quarantined tests tagging
1 parent 8d0bb34 commit 7dfe567

File tree

104 files changed

+4683
-125
lines changed

Some content is hidden

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

104 files changed

+4683
-125
lines changed

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ TestSuiteImpl testSuiteStart(
3131

3232
boolean isModified(TestSourceData testSourceData);
3333

34+
boolean isQuarantined(TestIdentifier test);
35+
3436
/**
3537
* Returns the reason for skipping a test, IF it can be skipped.
3638
*

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,10 @@
1818
import datadog.trace.api.civisibility.telemetry.TagValue;
1919
import datadog.trace.api.civisibility.telemetry.tag.BrowserDriver;
2020
import datadog.trace.api.civisibility.telemetry.tag.EventType;
21+
import datadog.trace.api.civisibility.telemetry.tag.HasFailedAllRetries;
2122
import datadog.trace.api.civisibility.telemetry.tag.IsModified;
2223
import datadog.trace.api.civisibility.telemetry.tag.IsNew;
24+
import datadog.trace.api.civisibility.telemetry.tag.IsQuarantined;
2325
import datadog.trace.api.civisibility.telemetry.tag.IsRetry;
2426
import datadog.trace.api.civisibility.telemetry.tag.IsRum;
2527
import datadog.trace.api.civisibility.telemetry.tag.SkipReason;
@@ -265,13 +267,15 @@ public void end(@Nullable Long endTime) {
265267

266268
Object retryReason = span.getTag(Tags.TEST_RETRY_REASON);
267269
metricCollector.add(
268-
CiVisibilityCountMetric.EVENT_FINISHED,
270+
CiVisibilityCountMetric.TEST_EVENT_FINISHED,
269271
1,
270272
instrumentation,
271273
EventType.TEST,
272274
span.getTag(Tags.TEST_IS_NEW) != null ? IsNew.TRUE : null,
273275
span.getTag(Tags.TEST_IS_MODIFIED) != null ? IsModified.TRUE : null,
276+
span.getTag(Tags.TEST_MANAGEMENT_IS_QUARANTINED) != null ? IsQuarantined.TRUE : null,
274277
span.getTag(Tags.TEST_IS_RETRY) != null ? IsRetry.TRUE : null,
278+
span.getTag(Tags.TEST_HAS_FAILED_ALL_RETRIES) != null ? HasFailedAllRetries.TRUE : null,
275279
retryReason instanceof TagValue ? (TagValue) retryReason : null,
276280
span.getTag(Tags.TEST_IS_RUM_ACTIVE) != null ? IsRum.TRUE : null,
277281
CIConstants.SELENIUM_BROWSER_DRIVER.equals(span.getTag(Tags.TEST_BROWSER_DRIVER))

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,11 @@ public boolean isModified(TestSourceData testSourceData) {
103103
return executionStrategy.isModified(testSourceData);
104104
}
105105

106+
@Override
107+
public boolean isQuarantined(TestIdentifier test) {
108+
return executionStrategy.isQuarantined(test);
109+
}
110+
106111
@Nullable
107112
@Override
108113
public SkipReason skipReason(TestIdentifier test) {

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,11 @@ public boolean isModified(TestSourceData testSourceData) {
8888
return executionStrategy.isModified(testSourceData);
8989
}
9090

91+
@Override
92+
public boolean isQuarantined(TestIdentifier test) {
93+
return executionStrategy.isQuarantined(test);
94+
}
95+
9196
@Nullable
9297
@Override
9398
public SkipReason skipReason(TestIdentifier test) {

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ public void onTestStart(
5959
@Nullable Collection<String> categories,
6060
@Nonnull TestSourceData testSourceData,
6161
RetryReason retryReason,
62+
boolean hasFailedAllRetries,
6263
@Nullable Long startTime) {
6364
// do nothing
6465
}

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,7 @@ public void onTestStart(
140140
final @Nullable Collection<String> categories,
141141
final @Nonnull TestSourceData testSourceData,
142142
final @Nullable RetryReason retryReason,
143+
final boolean hasFailedAllRetries,
143144
final @Nullable Long startTime) {
144145
if (skipTrace(testSourceData.getTestClass())) {
145146
return;
@@ -166,6 +167,14 @@ public void onTestStart(
166167
test.setTag(Tags.TEST_IS_MODIFIED, true);
167168
}
168169

170+
if (testModule.isQuarantined(thisTest)) {
171+
test.setTag(Tags.TEST_MANAGEMENT_IS_QUARANTINED, true);
172+
}
173+
174+
if (hasFailedAllRetries) {
175+
test.setTag(Tags.TEST_HAS_FAILED_ALL_RETRIES, true);
176+
}
177+
169178
if (testFramework != null) {
170179
test.setTag(Tags.TEST_FRAMEWORK, testFramework);
171180
if (testFrameworkVersion != null) {
@@ -257,6 +266,7 @@ public void onTestIgnore(
257266
categories,
258267
testSourceData,
259268
null,
269+
false,
260270
null);
261271
onTestSkip(testDescriptor, reason);
262272
onTestFinish(testDescriptor, null);

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,9 @@ public boolean retry(boolean successful, long durationMillis) {
3131
public RetryReason currentExecutionRetryReason() {
3232
return null;
3333
}
34+
35+
@Override
36+
public boolean hasFailedAllRetries() {
37+
return false;
38+
}
3439
}

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ public class RetryUntilSuccessful implements TestExecutionPolicy {
1111
private final int maxExecutions;
1212
private final boolean suppressFailures;
1313
private int executions;
14+
private boolean successfulExecutionSeen;
1415

1516
/** Total execution counter that is shared by all retry policies */
1617
private final AtomicInteger totalExecutions;
@@ -41,6 +42,7 @@ private boolean currentExecutionIsNotLast() {
4142

4243
@Override
4344
public boolean retry(boolean successful, long durationMillis) {
45+
successfulExecutionSeen |= successful;
4446
if (!successful && ++executions < maxExecutions) {
4547
totalExecutions.incrementAndGet();
4648
return true;
@@ -58,4 +60,9 @@ public RetryReason currentExecutionRetryReason() {
5860
private boolean currentExecutionIsRetry() {
5961
return executions > 0;
6062
}
63+
64+
@Override
65+
public boolean hasFailedAllRetries() {
66+
return executions == maxExecutions && !successfulExecutionSeen;
67+
}
6168
}

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ public class RunNTimes implements TestExecutionPolicy {
1212
private final boolean suppressFailures;
1313
private int executions;
1414
private int maxExecutions;
15+
private boolean successfulExecutionSeen;
1516

1617
public RunNTimes(
1718
EarlyFlakeDetectionSettings earlyFlakeDetectionSettings, boolean suppressFailures) {
@@ -37,6 +38,7 @@ public boolean suppressFailures() {
3738

3839
@Override
3940
public boolean retry(boolean successful, long durationMillis) {
41+
successfulExecutionSeen |= successful;
4042
// adjust maximum retries based on the now known test duration
4143
int maxExecutionsForGivenDuration = earlyFlakeDetectionSettings.getExecutions(durationMillis);
4244
maxExecutions = Math.min(maxExecutions, maxExecutionsForGivenDuration);
@@ -52,4 +54,9 @@ public RetryReason currentExecutionRetryReason() {
5254
private boolean currentExecutionIsRetry() {
5355
return executions > 0;
5456
}
57+
58+
@Override
59+
public boolean hasFailedAllRetries() {
60+
return executions == maxExecutions && !successfulExecutionSeen;
61+
}
5562
}

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,4 +33,9 @@ public boolean retry(boolean successful, long durationMillis) {
3333
public RetryReason currentExecutionRetryReason() {
3434
return null;
3535
}
36+
37+
@Override
38+
public boolean hasFailedAllRetries() {
39+
return false;
40+
}
3641
}

0 commit comments

Comments
 (0)