Skip to content

Commit 19d8832

Browse files
Use separate TestEventHandlers per framework in CI Vis instrumentations (#8451)
1 parent 93bbda1 commit 19d8832

File tree

317 files changed

+4057
-3842
lines changed

Some content is hidden

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

317 files changed

+4057
-3842
lines changed

dd-java-agent/agent-ci-visibility/src/testFixtures/groovy/datadog/trace/civisibility/CiVisibilityInstrumentationTest.groovy

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -358,8 +358,10 @@ abstract class CiVisibilityInstrumentationTest extends AgentTestRunner {
358358
// def clazz = this.getClass()
359359
// def resourceName = "/" + clazz.name.replace('.', '/') + ".class"
360360
// def classfilePath = clazz.getResource(resourceName).toURI().schemeSpecificPart
361-
// def modulePath = classfilePath.substring(0, classfilePath.indexOf("/build/classes"))
362-
// def baseTemplatesPath = modulePath + "/src/test/resources/" + testcaseName
361+
// def searchIndex = classfilePath.indexOf("/build/classes/groovy")
362+
// def modulePath = classfilePath.substring(0, searchIndex)
363+
// def submoduleName = classfilePath.substring(searchIndex + "/build/classes/groovy".length()).split("/")[1]
364+
// def baseTemplatesPath = modulePath + "/src/" + submoduleName + "/resources/" + testcaseName
363365
// CiVisibilityTestUtils.generateTemplates(baseTemplatesPath, events, coverages, additionalReplacements)
364366
// return [:]
365367

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

Lines changed: 73 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -44,24 +44,28 @@ public void testSuiteStarted(final Description description) {
4444
if (isFeature(description)) {
4545
TestSuiteDescriptor suiteDescriptor = CucumberUtils.toSuiteDescriptor(description);
4646
String testSuiteName = CucumberUtils.getTestSuiteNameForFeature(description);
47-
TestEventsHandlerHolder.TEST_EVENTS_HANDLER.onTestSuiteStart(
48-
suiteDescriptor,
49-
testSuiteName,
50-
FRAMEWORK_NAME,
51-
FRAMEWORK_VERSION,
52-
null,
53-
Collections.emptyList(),
54-
false,
55-
TestFrameworkInstrumentation.CUCUMBER,
56-
null);
47+
TestEventsHandlerHolder.HANDLERS
48+
.get(TestFrameworkInstrumentation.CUCUMBER)
49+
.onTestSuiteStart(
50+
suiteDescriptor,
51+
testSuiteName,
52+
FRAMEWORK_NAME,
53+
FRAMEWORK_VERSION,
54+
null,
55+
Collections.emptyList(),
56+
false,
57+
TestFrameworkInstrumentation.CUCUMBER,
58+
null);
5759
}
5860
}
5961

6062
@Override
6163
public void testSuiteFinished(final Description description) {
6264
if (isFeature(description)) {
6365
TestSuiteDescriptor suiteDescriptor = CucumberUtils.toSuiteDescriptor(description);
64-
TestEventsHandlerHolder.TEST_EVENTS_HANDLER.onTestSuiteFinish(suiteDescriptor, null);
66+
TestEventsHandlerHolder.HANDLERS
67+
.get(TestFrameworkInstrumentation.CUCUMBER)
68+
.onTestSuiteFinish(suiteDescriptor, null);
6569
}
6670
}
6771

@@ -71,17 +75,19 @@ public void testStarted(final Description description) {
7175
String testName = CucumberUtils.getTestNameForScenario(description);
7276
List<String> categories = getCategories(description);
7377

74-
TestEventsHandlerHolder.TEST_EVENTS_HANDLER.onTestStart(
75-
new TestSuiteDescriptor(testSuiteName, null),
76-
CucumberUtils.toTestDescriptor(description),
77-
testName,
78-
FRAMEWORK_NAME,
79-
FRAMEWORK_VERSION,
80-
null,
81-
categories,
82-
TestSourceData.UNKNOWN,
83-
null,
84-
executionHistories.get(description));
78+
TestEventsHandlerHolder.HANDLERS
79+
.get(TestFrameworkInstrumentation.CUCUMBER)
80+
.onTestStart(
81+
new TestSuiteDescriptor(testSuiteName, null),
82+
CucumberUtils.toTestDescriptor(description),
83+
testName,
84+
FRAMEWORK_NAME,
85+
FRAMEWORK_VERSION,
86+
null,
87+
categories,
88+
TestSourceData.UNKNOWN,
89+
null,
90+
executionHistories.get(description));
8591

8692
recordFeatureFileCodeCoverage(description);
8793
}
@@ -100,8 +106,9 @@ private static void recordFeatureFileCodeCoverage(Description scenarioDescriptio
100106
public void testFinished(final Description description) {
101107
TestDescriptor testDescriptor = CucumberUtils.toTestDescriptor(description);
102108
TestExecutionHistory executionHistory = executionHistories.get(description);
103-
TestEventsHandlerHolder.TEST_EVENTS_HANDLER.onTestFinish(
104-
testDescriptor, null, executionHistory);
109+
TestEventsHandlerHolder.HANDLERS
110+
.get(TestFrameworkInstrumentation.CUCUMBER)
111+
.onTestFinish(testDescriptor, null, executionHistory);
105112
}
106113

107114
// same callback is executed both for test cases and test suites (for setup/teardown errors)
@@ -111,11 +118,15 @@ public void testFailure(final Failure failure) {
111118
if (isFeature(description)) {
112119
TestSuiteDescriptor suiteDescriptor = CucumberUtils.toSuiteDescriptor(description);
113120
Throwable throwable = failure.getException();
114-
TestEventsHandlerHolder.TEST_EVENTS_HANDLER.onTestSuiteFailure(suiteDescriptor, throwable);
121+
TestEventsHandlerHolder.HANDLERS
122+
.get(TestFrameworkInstrumentation.CUCUMBER)
123+
.onTestSuiteFailure(suiteDescriptor, throwable);
115124
} else {
116125
TestDescriptor testDescriptor = CucumberUtils.toTestDescriptor(description);
117126
Throwable throwable = failure.getException();
118-
TestEventsHandlerHolder.TEST_EVENTS_HANDLER.onTestFailure(testDescriptor, throwable);
127+
TestEventsHandlerHolder.HANDLERS
128+
.get(TestFrameworkInstrumentation.CUCUMBER)
129+
.onTestFailure(testDescriptor, throwable);
119130
}
120131
}
121132

@@ -132,10 +143,14 @@ public void testAssumptionFailure(final Failure failure) {
132143
Description description = failure.getDescription();
133144
if (isFeature(description)) {
134145
TestSuiteDescriptor suiteDescriptor = CucumberUtils.toSuiteDescriptor(description);
135-
TestEventsHandlerHolder.TEST_EVENTS_HANDLER.onTestSuiteSkip(suiteDescriptor, reason);
146+
TestEventsHandlerHolder.HANDLERS
147+
.get(TestFrameworkInstrumentation.CUCUMBER)
148+
.onTestSuiteSkip(suiteDescriptor, reason);
136149
} else {
137150
TestDescriptor testDescriptor = CucumberUtils.toTestDescriptor(description);
138-
TestEventsHandlerHolder.TEST_EVENTS_HANDLER.onTestSkip(testDescriptor, reason);
151+
TestEventsHandlerHolder.HANDLERS
152+
.get(TestFrameworkInstrumentation.CUCUMBER)
153+
.onTestSkip(testDescriptor, reason);
139154
}
140155
}
141156

@@ -147,32 +162,40 @@ public void testIgnored(final Description description) {
147162
if (isFeature(description)) {
148163
TestSuiteDescriptor suiteDescriptor = CucumberUtils.toSuiteDescriptor(description);
149164
String testSuiteName = CucumberUtils.getTestSuiteNameForFeature(description);
150-
TestEventsHandlerHolder.TEST_EVENTS_HANDLER.onTestSuiteStart(
151-
suiteDescriptor,
152-
testSuiteName,
153-
FRAMEWORK_NAME,
154-
FRAMEWORK_VERSION,
155-
null,
156-
Collections.emptyList(),
157-
false,
158-
TestFrameworkInstrumentation.CUCUMBER,
159-
null);
160-
TestEventsHandlerHolder.TEST_EVENTS_HANDLER.onTestSuiteSkip(suiteDescriptor, reason);
161-
TestEventsHandlerHolder.TEST_EVENTS_HANDLER.onTestSuiteFinish(suiteDescriptor, null);
165+
TestEventsHandlerHolder.HANDLERS
166+
.get(TestFrameworkInstrumentation.CUCUMBER)
167+
.onTestSuiteStart(
168+
suiteDescriptor,
169+
testSuiteName,
170+
FRAMEWORK_NAME,
171+
FRAMEWORK_VERSION,
172+
null,
173+
Collections.emptyList(),
174+
false,
175+
TestFrameworkInstrumentation.CUCUMBER,
176+
null);
177+
TestEventsHandlerHolder.HANDLERS
178+
.get(TestFrameworkInstrumentation.CUCUMBER)
179+
.onTestSuiteSkip(suiteDescriptor, reason);
180+
TestEventsHandlerHolder.HANDLERS
181+
.get(TestFrameworkInstrumentation.CUCUMBER)
182+
.onTestSuiteFinish(suiteDescriptor, null);
162183
} else {
163184
String testSuiteName = CucumberUtils.getTestSuiteNameForScenario(description);
164185
String testName = CucumberUtils.getTestNameForScenario(description);
165186
List<String> categories = getCategories(description);
166-
TestEventsHandlerHolder.TEST_EVENTS_HANDLER.onTestIgnore(
167-
new TestSuiteDescriptor(testSuiteName, null),
168-
CucumberUtils.toTestDescriptor(description),
169-
testName,
170-
FRAMEWORK_NAME,
171-
FRAMEWORK_VERSION,
172-
null,
173-
categories,
174-
TestSourceData.UNKNOWN,
175-
reason);
187+
TestEventsHandlerHolder.HANDLERS
188+
.get(TestFrameworkInstrumentation.CUCUMBER)
189+
.onTestIgnore(
190+
new TestSuiteDescriptor(testSuiteName, null),
191+
CucumberUtils.toTestDescriptor(description),
192+
testName,
193+
FRAMEWORK_NAME,
194+
FRAMEWORK_VERSION,
195+
null,
196+
categories,
197+
TestSourceData.UNKNOWN,
198+
reason);
176199
}
177200
}
178201

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import datadog.trace.agent.tooling.InstrumenterModule;
99
import datadog.trace.agent.tooling.muzzle.Reference;
1010
import datadog.trace.api.civisibility.execution.TestExecutionHistory;
11+
import datadog.trace.api.civisibility.telemetry.tag.TestFrameworkInstrumentation;
1112
import datadog.trace.bootstrap.InstrumentationContext;
1213
import java.util.Collections;
1314
import java.util.List;
@@ -82,6 +83,8 @@ public static void addTracingListener(
8283
}
8384
}
8485

86+
TestEventsHandlerHolder.start(TestFrameworkInstrumentation.CUCUMBER);
87+
8588
replacedNotifier.addListener(
8689
new CucumberTracingListener(
8790
InstrumentationContext.get(Description.class, TestExecutionHistory.class), children));

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import datadog.trace.api.civisibility.InstrumentationBridge;
1313
import datadog.trace.api.civisibility.config.TestIdentifier;
1414
import datadog.trace.api.civisibility.telemetry.tag.SkipReason;
15+
import datadog.trace.api.civisibility.telemetry.tag.TestFrameworkInstrumentation;
1516
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
1617
import io.cucumber.core.gherkin.Pickle;
1718
import java.util.List;
@@ -83,7 +84,10 @@ public static Boolean run(
8384
@Advice.Argument(0) RunNotifier notifier) {
8485

8586
TestIdentifier test = CucumberUtils.toTestIdentifier(description);
86-
SkipReason skipReason = TestEventsHandlerHolder.TEST_EVENTS_HANDLER.skipReason(test);
87+
SkipReason skipReason =
88+
TestEventsHandlerHolder.HANDLERS
89+
.get(TestFrameworkInstrumentation.CUCUMBER)
90+
.skipReason(test);
8791
if (skipReason == null) {
8892
return null;
8993
}

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import datadog.trace.api.civisibility.config.TestSourceData;
1313
import datadog.trace.api.civisibility.execution.TestExecutionHistory;
1414
import datadog.trace.api.civisibility.execution.TestExecutionPolicy;
15+
import datadog.trace.api.civisibility.telemetry.tag.TestFrameworkInstrumentation;
1516
import datadog.trace.bootstrap.InstrumentationContext;
1617
import datadog.trace.instrumentation.junit4.CucumberUtils;
1718
import datadog.trace.instrumentation.junit4.JUnit4Utils;
@@ -97,8 +98,9 @@ public static Boolean execute(
9798
Description description = CucumberUtils.getPickleRunnerDescription(pickleRunner);
9899
TestIdentifier testIdentifier = CucumberUtils.toTestIdentifier(description);
99100
TestExecutionPolicy executionPolicy =
100-
TestEventsHandlerHolder.TEST_EVENTS_HANDLER.executionPolicy(
101-
testIdentifier, TestSourceData.UNKNOWN);
101+
TestEventsHandlerHolder.HANDLERS
102+
.get(TestFrameworkInstrumentation.CUCUMBER)
103+
.executionPolicy(testIdentifier, TestSourceData.UNKNOWN);
102104
if (!executionPolicy.applicable()) {
103105
// retries not applicable, run original method
104106
return null;

dd-java-agent/instrumentation/junit-4.10/cucumber-junit-4/src/test/groovy/CucumberTest.groovy

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import datadog.trace.api.DisableTestTrace
22
import datadog.trace.api.civisibility.config.TestFQN
33
import datadog.trace.api.civisibility.config.TestIdentifier
4+
import datadog.trace.api.civisibility.telemetry.tag.TestFrameworkInstrumentation
45
import datadog.trace.civisibility.CiVisibilityInstrumentationTest
56
import datadog.trace.instrumentation.junit4.CucumberTracingListener
67
import datadog.trace.instrumentation.junit4.TestEventsHandlerHolder
@@ -211,7 +212,7 @@ class CucumberTest extends CiVisibilityInstrumentationTest {
211212
.map(f -> "classpath:" + f).
212213
collect(Collectors.joining(",")))
213214

214-
TestEventsHandlerHolder.start()
215+
TestEventsHandlerHolder.start(TestFrameworkInstrumentation.CUCUMBER)
215216
try {
216217
def result = runner.run(TestSucceedCucumber)
217218
if (expectSuccess) {
@@ -224,7 +225,7 @@ class CucumberTest extends CiVisibilityInstrumentationTest {
224225
}
225226
}
226227
} finally {
227-
TestEventsHandlerHolder.stop()
228+
TestEventsHandlerHolder.stop(TestFrameworkInstrumentation.CUCUMBER)
228229
}
229230
}
230231

0 commit comments

Comments
 (0)