Skip to content

Commit 55d9235

Browse files
Use component as framework tag in manual API (#10374)
(cherry picked from commit 478272c)
1 parent 9f3b8f4 commit 55d9235

File tree

3 files changed

+145
-21
lines changed

3 files changed

+145
-21
lines changed

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

Lines changed: 28 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import datadog.trace.api.civisibility.telemetry.tag.TestFrameworkInstrumentation;
88
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
99
import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext;
10+
import datadog.trace.bootstrap.instrumentation.api.Tags;
1011
import datadog.trace.civisibility.codeowners.Codeowners;
1112
import datadog.trace.civisibility.decorator.TestDecorator;
1213
import datadog.trace.civisibility.domain.AbstractTestModule;
@@ -56,30 +57,36 @@ public ManualApiTestModule(
5657
}
5758

5859
@Override
59-
public TestSuiteImpl testSuiteStart(
60+
public ManualApiTestSuite testSuiteStart(
6061
String testSuiteName,
6162
@Nullable Class<?> testClass,
6263
@Nullable Long startTime,
6364
boolean parallelized) {
64-
return new TestSuiteImpl(
65-
span.context(),
66-
moduleName,
67-
testSuiteName,
68-
null,
69-
testClass,
70-
startTime,
71-
parallelized,
72-
InstrumentationType.MANUAL_API,
73-
TestFrameworkInstrumentation.OTHER,
74-
config,
75-
metricCollector,
76-
testDecorator,
77-
sourcePathResolver,
78-
codeowners,
79-
linesResolver,
80-
coverageStoreFactory,
81-
executionResults,
82-
Collections.emptyList(),
83-
tagsPropagator::propagateCiVisibilityTags);
65+
TestSuiteImpl suite =
66+
new TestSuiteImpl(
67+
span.context(),
68+
moduleName,
69+
testSuiteName,
70+
null,
71+
testClass,
72+
startTime,
73+
parallelized,
74+
InstrumentationType.MANUAL_API,
75+
TestFrameworkInstrumentation.OTHER, // for metric purposes, framework is OTHER
76+
config,
77+
metricCollector,
78+
testDecorator,
79+
sourcePathResolver,
80+
codeowners,
81+
linesResolver,
82+
coverageStoreFactory,
83+
executionResults,
84+
Collections.emptyList(),
85+
tagsPropagator::propagateCiVisibilityTags);
86+
87+
String frameworkName = testDecorator.component().toString();
88+
suite.setTag(Tags.TEST_FRAMEWORK, frameworkName);
89+
90+
return new ManualApiTestSuite(suite, frameworkName);
8491
}
8592
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package datadog.trace.civisibility.domain.manualapi;
2+
3+
import datadog.trace.api.civisibility.DDTest;
4+
import datadog.trace.api.civisibility.DDTestSuite;
5+
import datadog.trace.bootstrap.instrumentation.api.Tags;
6+
import datadog.trace.civisibility.domain.TestImpl;
7+
import datadog.trace.civisibility.domain.TestSuiteImpl;
8+
import java.lang.reflect.Method;
9+
import javax.annotation.Nullable;
10+
11+
/**
12+
* Test suite that was created using manual API ({@link
13+
* datadog.trace.api.civisibility.CIVisibility}).
14+
*/
15+
public class ManualApiTestSuite implements DDTestSuite {
16+
17+
private final TestSuiteImpl delegate;
18+
private final String frameworkName;
19+
20+
public ManualApiTestSuite(TestSuiteImpl delegate, String frameworkName) {
21+
this.delegate = delegate;
22+
this.frameworkName = frameworkName;
23+
}
24+
25+
@Override
26+
public void setTag(String key, Object value) {
27+
delegate.setTag(key, value);
28+
}
29+
30+
@Override
31+
public void setErrorInfo(Throwable error) {
32+
delegate.setErrorInfo(error);
33+
}
34+
35+
@Override
36+
public void setSkipReason(String skipReason) {
37+
delegate.setSkipReason(skipReason);
38+
}
39+
40+
@Override
41+
public void end(@Nullable Long endTime) {
42+
delegate.end(endTime);
43+
}
44+
45+
@Override
46+
public DDTest testStart(String testName, @Nullable Method testMethod, @Nullable Long startTime) {
47+
TestImpl test = delegate.testStart(testName, testMethod, startTime);
48+
test.setTag(Tags.TEST_FRAMEWORK, frameworkName);
49+
return test;
50+
}
51+
}
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package datadog.trace.civisibility.domain.manualapi
2+
3+
import datadog.trace.api.Config
4+
import datadog.trace.api.DDSpanTypes
5+
import datadog.trace.api.civisibility.coverage.CoverageStore
6+
import datadog.trace.api.civisibility.telemetry.CiVisibilityMetricCollector
7+
import datadog.trace.api.civisibility.telemetry.tag.Provider
8+
import datadog.trace.bootstrap.instrumentation.api.Tags
9+
import datadog.trace.civisibility.codeowners.Codeowners
10+
import datadog.trace.civisibility.decorator.TestDecoratorImpl
11+
import datadog.trace.civisibility.domain.SpanWriterTest
12+
import datadog.trace.civisibility.source.LinesResolver
13+
import datadog.trace.civisibility.source.SourcePathResolver
14+
15+
class ManualApiTest extends SpanWriterTest {
16+
17+
def "test framework tag is set on suite, test, module and session with component info"() {
18+
setup:
19+
def component = "my-custom-framework"
20+
def session = givenAManualApiSession(component)
21+
def module = session.testModuleStart("module-name", null)
22+
def suite = module.testSuiteStart("suite-name", null, null, false)
23+
def test = suite.testStart("test-name", null, null)
24+
25+
when:
26+
test.end(null)
27+
suite.end(null)
28+
module.end(null)
29+
session.end(null)
30+
31+
then:
32+
def traces = TEST_WRITER.toList()
33+
traces.size() == 2
34+
35+
def allSpans = traces.flatten()
36+
def sessionSpan = allSpans.find { it.spanType == DDSpanTypes.TEST_SESSION_END }
37+
def moduleSpan = allSpans.find { it.spanType == DDSpanTypes.TEST_MODULE_END }
38+
def suiteSpan = allSpans.find { it.spanType == DDSpanTypes.TEST_SUITE_END }
39+
def testSpan = allSpans.find { it.spanType == DDSpanTypes.TEST }
40+
41+
sessionSpan != null
42+
moduleSpan != null
43+
suiteSpan != null
44+
testSpan != null
45+
46+
sessionSpan.tags[Tags.TEST_FRAMEWORK] == component
47+
moduleSpan.tags[Tags.TEST_FRAMEWORK] == component
48+
suiteSpan.tags[Tags.TEST_FRAMEWORK] == component
49+
testSpan.tags[Tags.TEST_FRAMEWORK] == component
50+
}
51+
52+
private ManualApiTestSession givenAManualApiSession(String component) {
53+
new ManualApiTestSession(
54+
"project-name",
55+
null,
56+
Provider.UNSUPPORTED,
57+
Stub(Config),
58+
Stub(CiVisibilityMetricCollector),
59+
new TestDecoratorImpl(component, "session-name", "test-command", [:]),
60+
Stub(SourcePathResolver),
61+
Stub(Codeowners),
62+
Stub(LinesResolver),
63+
Stub(CoverageStore.Factory)
64+
)
65+
}
66+
}

0 commit comments

Comments
 (0)