Skip to content

Commit f5c4b8f

Browse files
Fix TestNG retry listener ordering problem
1 parent 9ec150b commit f5c4b8f

File tree

16 files changed

+45
-22
lines changed

16 files changed

+45
-22
lines changed

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

+2-1
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,8 @@ public void onTestStart(
5858
@Nullable String testParameters,
5959
@Nullable Collection<String> categories,
6060
@Nonnull TestSourceData testSourceData,
61-
@Nullable Long startTime) {
61+
@Nullable Long startTime,
62+
@Nullable TestExecutionHistory testExecutionHistory) {
6263
// do nothing
6364
}
6465

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

+11-7
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,8 @@ public void onTestStart(
140140
final @Nullable String testParameters,
141141
final @Nullable Collection<String> categories,
142142
final @Nonnull TestSourceData testSourceData,
143-
final @Nullable Long startTime) {
143+
final @Nullable Long startTime,
144+
final @Nullable TestExecutionHistory testExecutionHistory) {
144145
if (skipTrace(testSourceData.getTestClass())) {
145146
return;
146147
}
@@ -170,6 +171,14 @@ public void onTestStart(
170171
test.setTag(Tags.TEST_MANAGEMENT_IS_QUARANTINED, true);
171172
}
172173

174+
if (testExecutionHistory != null) {
175+
RetryReason retryReason = testExecutionHistory.currentExecutionRetryReason();
176+
if (retryReason != null) {
177+
test.setTag(Tags.TEST_IS_RETRY, true);
178+
test.setTag(Tags.TEST_RETRY_REASON, retryReason);
179+
}
180+
}
181+
173182
if (testFramework != null) {
174183
test.setTag(Tags.TEST_FRAMEWORK, testFramework);
175184
if (testFrameworkVersion != null) {
@@ -237,12 +246,6 @@ public void onTestFinish(
237246
}
238247

239248
if (testExecutionHistory != null) {
240-
RetryReason retryReason = testExecutionHistory.currentExecutionRetryReason();
241-
if (retryReason != null) {
242-
test.setTag(Tags.TEST_IS_RETRY, true);
243-
test.setTag(Tags.TEST_RETRY_REASON, retryReason);
244-
}
245-
246249
if (test.hasFailed() && testExecutionHistory.hasFailedAllRetries()) {
247250
test.setTag(Tags.TEST_HAS_FAILED_ALL_RETRIES, true);
248251
}
@@ -271,6 +274,7 @@ public void onTestIgnore(
271274
testParameters,
272275
categories,
273276
testSourceData,
277+
null,
274278
null);
275279
onTestSkip(testDescriptor, reason);
276280
onTestFinish(testDescriptor, null, null);

dd-java-agent/instrumentation/junit-4.10/cucumber-junit-4/src/main/java/datadog/trace/instrumentation/junit4/CucumberTracingListener.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,8 @@ public void testStarted(final Description description) {
8080
null,
8181
categories,
8282
TestSourceData.UNKNOWN,
83-
null);
83+
null,
84+
executionHistories.get(description));
8485

8586
recordFeatureFileCodeCoverage(description);
8687
}

dd-java-agent/instrumentation/junit-4.10/munit-junit-4/src/main/java/datadog/trace/instrumentation/junit4/MUnitTracingListener.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,8 @@ public void testStarted(final Description description) {
8585
null,
8686
categories,
8787
JUnit4Utils.toTestSourceData(description),
88-
null);
88+
null,
89+
executionHistories.get(description));
8990
}
9091

9192
@Override
@@ -160,6 +161,7 @@ public void testIgnored(final Description description) {
160161
null,
161162
categories,
162163
JUnit4Utils.toTestSourceData(description),
164+
null,
163165
null);
164166
}
165167
TestEventsHandlerHolder.TEST_EVENTS_HANDLER.onTestSkip(testDescriptor, null);

dd-java-agent/instrumentation/junit-4.10/src/main/java/datadog/trace/instrumentation/junit4/JUnit4TracingListener.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,8 @@ public void testStarted(final Description description) {
8484
testParameters,
8585
categories,
8686
testSourceData,
87-
null);
87+
null,
88+
executionHistories.get(description));
8889
}
8990

9091
@Override

dd-java-agent/instrumentation/junit-5.3/cucumber-junit-5/src/main/java/datadog/trace/instrumentation/junit5/CucumberTracingListener.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,8 @@ private void testResourceExecutionStarted(
124124
null,
125125
tags,
126126
TestSourceData.UNKNOWN,
127-
null);
127+
null,
128+
TestEventsHandlerHolder.getExecutionHistory(testDescriptor));
128129

129130
CoveragePerTestBridge.recordCoverage(classpathResourceName);
130131
}

dd-java-agent/instrumentation/junit-5.3/spock-junit-5/src/main/java/datadog/trace/instrumentation/junit5/SpockTracingListener.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,8 @@ private void testMethodExecutionStarted(TestDescriptor testDescriptor, MethodSou
125125
testParameters,
126126
tags,
127127
testSourceData,
128-
null);
128+
null,
129+
TestEventsHandlerHolder.getExecutionHistory(testDescriptor));
129130
}
130131

131132
private void testCaseExecutionFinished(

dd-java-agent/instrumentation/junit-5.3/src/main/java/datadog/trace/instrumentation/junit5/TracingListener.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,8 @@ private void testMethodExecutionStarted(TestDescriptor testDescriptor, MethodSou
125125
testParameters,
126126
tags,
127127
testSourceData,
128-
null);
128+
null,
129+
TestEventsHandlerHolder.getExecutionHistory(testDescriptor));
129130
}
130131

131132
private void testCaseExecutionFinished(

dd-java-agent/instrumentation/karate/src/main/java/datadog/trace/instrumentation/karate/KarateExecutionInstrumentation.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ public static void afterExecute(@Advice.This ScenarioRuntime scenarioRuntime) {
104104
while (executionPolicy.retry(!context.getAndResetFailed(), duration)) {
105105
ScenarioRuntime retry =
106106
new ScenarioRuntime(scenarioRuntime.featureRuntime, scenarioRuntime.scenario);
107-
retry.magicVariables.put(KarateUtils.EXECUTION_HISTORY_MAGIC_VARIABLE, executionPolicy);
107+
retry.magicVariables.put(KarateUtils.EXECUTION_HISTORY_MAGICVARIABLE, executionPolicy);
108108
retry.run();
109109
retry.featureRuntime.result.addResult(retry.result);
110110
finalResult = retry.result;

dd-java-agent/instrumentation/karate/src/main/java/datadog/trace/instrumentation/karate/KarateTracingHook.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,8 @@ public boolean beforeScenario(ScenarioRuntime sr) {
144144
parameters,
145145
categories,
146146
TestSourceData.UNKNOWN,
147-
null);
147+
null,
148+
(TestExecutionHistory) sr.magicVariables.get(KarateUtils.EXECUTION_HISTORY_MAGICVARIABLE));
148149
return true;
149150
}
150151

@@ -163,7 +164,7 @@ public void afterScenario(ScenarioRuntime sr) {
163164
}
164165

165166
TestExecutionHistory executionHistory =
166-
(TestExecutionHistory) sr.magicVariables.get(KarateUtils.EXECUTION_HISTORY_MAGIC_VARIABLE);
167+
(TestExecutionHistory) sr.magicVariables.get(KarateUtils.EXECUTION_HISTORY_MAGICVARIABLE);
167168
TestEventsHandlerHolder.TEST_EVENTS_HANDLER.onTestFinish(
168169
testDescriptor, null, executionHistory);
169170

dd-java-agent/instrumentation/karate/src/main/java/datadog/trace/instrumentation/karate/KarateUtils.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121

2222
public abstract class KarateUtils {
2323

24-
public static final String EXECUTION_HISTORY_MAGIC_VARIABLE = "__datadog_execution_history";
24+
public static final String EXECUTION_HISTORY_MAGICVARIABLE = "__datadog_execution_history";
2525

2626
private KarateUtils() {}
2727

dd-java-agent/instrumentation/scalatest/src/main/java/datadog/trace/instrumentation/scalatest/DatadogReporter.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,8 @@ private static void onTestStart(TestStarting event) {
155155
testParameters,
156156
categories,
157157
new TestSourceData(testClass, null, null),
158-
null);
158+
null,
159+
context.popExecutionHistory(testIdentifier));
159160
}
160161

161162
private static void onTestSuccess(TestSucceeded event) {

dd-java-agent/instrumentation/scalatest/src/main/java/datadog/trace/instrumentation/scalatest/RunContext.java

+5
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,11 @@ public TestExecutionPolicy getOrCreateExecutionPolicy(
135135
testIdentifier, test -> eventHandler.executionPolicy(test, testSourceData));
136136
}
137137

138+
@Nullable
139+
public TestExecutionHistory getExecutionHistory(TestIdentifier testIdentifier) {
140+
return executionPolicies.get(testIdentifier);
141+
}
142+
138143
@Nullable
139144
public TestExecutionHistory popExecutionHistory(TestIdentifier testIdentifier) {
140145
TestExecutionPolicy[] holder = new TestExecutionPolicy[1];

dd-java-agent/instrumentation/testng/src/main/java/datadog/trace/instrumentation/testng/TracingListener.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,8 @@ public void onTestStart(final ITestResult result) {
9292
testParameters,
9393
groups,
9494
testSourceData,
95-
null);
95+
null,
96+
executionHistory(result));
9697
}
9798

9899
@Nullable

dd-java-agent/instrumentation/weaver/src/main/java/datadog/trace/instrumentation/weaver/DatadogWeaverReporter.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,8 @@ public static void onTestFinished(TestFinished event, TaskDef taskDef) {
106106
testParameters,
107107
categories,
108108
new TestSourceData(testClass, testMethod, testMethodName),
109-
startMicros);
109+
startMicros,
110+
executionHistory);
110111

111112
if (testOutcome.result() instanceof Result.Ignored) {
112113
Result.Ignored result = (Result.Ignored) testOutcome.result();

internal-api/src/main/java/datadog/trace/api/civisibility/events/TestEventsHandler.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ void onTestSuiteStart(
5353
* @param categories test categories (or test tags) if the test case is marked with any
5454
* @param testSourceData metadata for locating the source code for the test case
5555
* @param startTime the timestamp of the test execution start ({@code null} for current timestamp)
56+
* @param testExecutionHistory the history of executions of this test case
5657
*/
5758
void onTestStart(
5859
SuiteKey suiteDescriptor,
@@ -63,7 +64,8 @@ void onTestStart(
6364
@Nullable String testParameters,
6465
@Nullable Collection<String> categories,
6566
@Nonnull TestSourceData testSourceData,
66-
@Nullable Long startTime);
67+
@Nullable Long startTime,
68+
@Nullable TestExecutionHistory testExecutionHistory);
6769

6870
void onTestSkip(TestKey descriptor, @Nullable String reason);
6971

0 commit comments

Comments
 (0)