Skip to content

Commit c4bc3cc

Browse files
Add source line tags to test suites (#7964)
1 parent 8990f3f commit c4bc3cc

33 files changed

+445
-305
lines changed

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

+7-8
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,10 @@
2323
import datadog.trace.civisibility.git.GitClientGitInfoBuilder;
2424
import datadog.trace.civisibility.git.tree.GitClient;
2525
import datadog.trace.civisibility.ipc.SignalClient;
26-
import datadog.trace.civisibility.source.BestEffortMethodLinesResolver;
27-
import datadog.trace.civisibility.source.ByteCodeMethodLinesResolver;
28-
import datadog.trace.civisibility.source.CompilerAidedMethodLinesResolver;
29-
import datadog.trace.civisibility.source.MethodLinesResolver;
26+
import datadog.trace.civisibility.source.BestEffortLinesResolver;
27+
import datadog.trace.civisibility.source.ByteCodeLinesResolver;
28+
import datadog.trace.civisibility.source.CompilerAidedLinesResolver;
29+
import datadog.trace.civisibility.source.LinesResolver;
3030
import datadog.trace.civisibility.source.index.*;
3131
import java.lang.reflect.Type;
3232
import java.net.InetSocketAddress;
@@ -63,7 +63,7 @@ public class CiVisibilityServices {
6363
final CIProviderInfoFactory ciProviderInfoFactory;
6464
final GitClient.Factory gitClientFactory;
6565
final GitInfoProvider gitInfoProvider;
66-
final MethodLinesResolver methodLinesResolver;
66+
final LinesResolver linesResolver;
6767
final RepoIndexProvider.Factory repoIndexProviderFactory;
6868
@Nullable final SignalClient.Factory signalClientFactory;
6969

@@ -82,9 +82,8 @@ public class CiVisibilityServices {
8282

8383
CiEnvironment environment = buildCiEnvironment(config, sco);
8484
this.ciProviderInfoFactory = new CIProviderInfoFactory(config, environment);
85-
this.methodLinesResolver =
86-
new BestEffortMethodLinesResolver(
87-
new CompilerAidedMethodLinesResolver(), new ByteCodeMethodLinesResolver());
85+
this.linesResolver =
86+
new BestEffortLinesResolver(new CompilerAidedLinesResolver(), new ByteCodeLinesResolver());
8887

8988
this.gitInfoProvider = gitInfoProvider;
9089
gitInfoProvider.registerGitInfoBuilder(new CIProviderGitInfoBuilder(config, environment));

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

+4-4
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,7 @@ private static BuildSystemSession.Factory buildSystemSessionFactory(
215215
testDecorator,
216216
repoServices.sourcePathResolver,
217217
repoServices.codeowners,
218-
services.methodLinesResolver,
218+
services.linesResolver,
219219
repoServices.executionSettingsFactory,
220220
signalServer,
221221
repoServices.repoIndexProvider,
@@ -244,7 +244,7 @@ private static TestFrameworkSession.Factory childTestFrameworkSessionFactory(
244244
testDecorator,
245245
repoServices.sourcePathResolver,
246246
repoServices.codeowners,
247-
services.methodLinesResolver,
247+
services.linesResolver,
248248
coverageServices.coverageStoreFactory,
249249
coverageServices.coverageReporter,
250250
services.signalClientFactory,
@@ -275,7 +275,7 @@ private static TestFrameworkSession.Factory headlessTestFrameworkEssionFactory(
275275
testDecorator,
276276
repoServices.sourcePathResolver,
277277
repoServices.codeowners,
278-
services.methodLinesResolver,
278+
services.linesResolver,
279279
coverageServices.coverageStoreFactory,
280280
executionStrategy);
281281
};
@@ -303,7 +303,7 @@ private static CIVisibility.SessionFactory manualApiSessionFactory(
303303
testDecorator,
304304
repoServices.sourcePathResolver,
305305
repoServices.codeowners,
306-
services.methodLinesResolver,
306+
services.linesResolver,
307307
coverageServices.coverageStoreFactory);
308308
};
309309
}

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

+4-4
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
import datadog.trace.bootstrap.instrumentation.api.Tags;
1313
import datadog.trace.civisibility.codeowners.Codeowners;
1414
import datadog.trace.civisibility.decorator.TestDecorator;
15-
import datadog.trace.civisibility.source.MethodLinesResolver;
15+
import datadog.trace.civisibility.source.LinesResolver;
1616
import datadog.trace.civisibility.source.SourcePathResolver;
1717
import java.util.function.Consumer;
1818
import javax.annotation.Nullable;
@@ -26,7 +26,7 @@ public abstract class AbstractTestModule {
2626
protected final TestDecorator testDecorator;
2727
protected final SourcePathResolver sourcePathResolver;
2828
protected final Codeowners codeowners;
29-
protected final MethodLinesResolver methodLinesResolver;
29+
protected final LinesResolver linesResolver;
3030
private final Consumer<AgentSpan> onSpanFinish;
3131

3232
public AbstractTestModule(
@@ -39,15 +39,15 @@ public AbstractTestModule(
3939
TestDecorator testDecorator,
4040
SourcePathResolver sourcePathResolver,
4141
Codeowners codeowners,
42-
MethodLinesResolver methodLinesResolver,
42+
LinesResolver linesResolver,
4343
Consumer<AgentSpan> onSpanFinish) {
4444
this.moduleName = moduleName;
4545
this.config = config;
4646
this.metricCollector = metricCollector;
4747
this.testDecorator = testDecorator;
4848
this.sourcePathResolver = sourcePathResolver;
4949
this.codeowners = codeowners;
50-
this.methodLinesResolver = methodLinesResolver;
50+
this.linesResolver = linesResolver;
5151
this.onSpanFinish = onSpanFinish;
5252

5353
AgentTracer.SpanBuilder spanBuilder =

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

+4-4
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
import datadog.trace.bootstrap.instrumentation.api.Tags;
2121
import datadog.trace.civisibility.codeowners.Codeowners;
2222
import datadog.trace.civisibility.decorator.TestDecorator;
23-
import datadog.trace.civisibility.source.MethodLinesResolver;
23+
import datadog.trace.civisibility.source.LinesResolver;
2424
import datadog.trace.civisibility.source.SourcePathResolver;
2525
import java.util.ArrayList;
2626
import java.util.Collection;
@@ -37,7 +37,7 @@ public abstract class AbstractTestSession {
3737
protected final TestDecorator testDecorator;
3838
protected final SourcePathResolver sourcePathResolver;
3939
protected final Codeowners codeowners;
40-
protected final MethodLinesResolver methodLinesResolver;
40+
protected final LinesResolver linesResolver;
4141

4242
public AbstractTestSession(
4343
String projectName,
@@ -49,15 +49,15 @@ public AbstractTestSession(
4949
TestDecorator testDecorator,
5050
SourcePathResolver sourcePathResolver,
5151
Codeowners codeowners,
52-
MethodLinesResolver methodLinesResolver) {
52+
LinesResolver linesResolver) {
5353
this.ciProvider = ciProvider;
5454
this.instrumentationType = instrumentationType;
5555
this.config = config;
5656
this.metricCollector = metricCollector;
5757
this.testDecorator = testDecorator;
5858
this.sourcePathResolver = sourcePathResolver;
5959
this.codeowners = codeowners;
60-
this.methodLinesResolver = methodLinesResolver;
60+
this.linesResolver = linesResolver;
6161

6262
// CI Test Cycle protocol requires session's trace ID and span ID to be the same
6363
IdGenerationStrategy idGenerationStrategy = config.getIdGenerationStrategy();

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

+6-6
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
import datadog.trace.bootstrap.instrumentation.api.Tags;
3131
import datadog.trace.civisibility.codeowners.Codeowners;
3232
import datadog.trace.civisibility.decorator.TestDecorator;
33-
import datadog.trace.civisibility.source.MethodLinesResolver;
33+
import datadog.trace.civisibility.source.LinesResolver;
3434
import datadog.trace.civisibility.source.SourcePathResolver;
3535
import datadog.trace.civisibility.source.SourceResolutionException;
3636
import java.lang.reflect.Method;
@@ -69,7 +69,7 @@ public TestImpl(
6969
CiVisibilityMetricCollector metricCollector,
7070
TestDecorator testDecorator,
7171
SourcePathResolver sourcePathResolver,
72-
MethodLinesResolver methodLinesResolver,
72+
LinesResolver linesResolver,
7373
Codeowners codeowners,
7474
CoverageStore.Factory coverageStoreFactory,
7575
Consumer<AgentSpan> onSpanFinish) {
@@ -121,7 +121,7 @@ public TestImpl(
121121

122122
if (config.isCiVisibilitySourceDataEnabled()) {
123123
populateSourceDataTags(
124-
span, testClass, testMethod, sourcePathResolver, methodLinesResolver, codeowners);
124+
span, testClass, testMethod, sourcePathResolver, linesResolver, codeowners);
125125
}
126126

127127
if (itrCorrelationId != null) {
@@ -142,7 +142,7 @@ private void populateSourceDataTags(
142142
Class<?> testClass,
143143
Method testMethod,
144144
SourcePathResolver sourcePathResolver,
145-
MethodLinesResolver methodLinesResolver,
145+
LinesResolver linesResolver,
146146
Codeowners codeowners) {
147147
if (testClass == null) {
148148
return;
@@ -162,10 +162,10 @@ private void populateSourceDataTags(
162162
span.setTag(Tags.TEST_SOURCE_FILE, sourcePath);
163163

164164
if (testMethod != null) {
165-
MethodLinesResolver.MethodLines testMethodLines = methodLinesResolver.getLines(testMethod);
165+
LinesResolver.Lines testMethodLines = linesResolver.getMethodLines(testMethod);
166166
if (testMethodLines.isValid()) {
167167
span.setTag(Tags.TEST_SOURCE_START, testMethodLines.getStartLineNumber());
168-
span.setTag(Tags.TEST_SOURCE_END, testMethodLines.getFinishLineNumber());
168+
span.setTag(Tags.TEST_SOURCE_END, testMethodLines.getEndLineNumber());
169169
}
170170
}
171171

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

+11-5
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
import datadog.trace.bootstrap.instrumentation.api.Tags;
1919
import datadog.trace.civisibility.codeowners.Codeowners;
2020
import datadog.trace.civisibility.decorator.TestDecorator;
21-
import datadog.trace.civisibility.source.MethodLinesResolver;
21+
import datadog.trace.civisibility.source.LinesResolver;
2222
import datadog.trace.civisibility.source.SourcePathResolver;
2323
import datadog.trace.civisibility.source.SourceResolutionException;
2424
import datadog.trace.civisibility.utils.SpanUtils;
@@ -46,7 +46,7 @@ public class TestSuiteImpl implements DDTestSuite {
4646
private final TestDecorator testDecorator;
4747
private final SourcePathResolver sourcePathResolver;
4848
private final Codeowners codeowners;
49-
private final MethodLinesResolver methodLinesResolver;
49+
private final LinesResolver linesResolver;
5050
private final CoverageStore.Factory coverageStoreFactory;
5151
private final boolean parallelized;
5252
private final Consumer<AgentSpan> onSpanFinish;
@@ -66,7 +66,7 @@ public TestSuiteImpl(
6666
TestDecorator testDecorator,
6767
SourcePathResolver sourcePathResolver,
6868
Codeowners codeowners,
69-
MethodLinesResolver methodLinesResolver,
69+
LinesResolver linesResolver,
7070
CoverageStore.Factory coverageStoreFactory,
7171
Consumer<AgentSpan> onSpanFinish) {
7272
this.moduleSpanContext = moduleSpanContext;
@@ -81,7 +81,7 @@ public TestSuiteImpl(
8181
this.testDecorator = testDecorator;
8282
this.sourcePathResolver = sourcePathResolver;
8383
this.codeowners = codeowners;
84-
this.methodLinesResolver = methodLinesResolver;
84+
this.linesResolver = linesResolver;
8585
this.coverageStoreFactory = coverageStoreFactory;
8686
this.onSpanFinish = onSpanFinish;
8787

@@ -154,6 +154,12 @@ private void populateSourceDataTags(
154154

155155
span.setTag(Tags.TEST_SOURCE_FILE, sourcePath);
156156

157+
LinesResolver.Lines testClassLines = linesResolver.getClassLines(testClass);
158+
if (testClassLines.isValid()) {
159+
span.setTag(Tags.TEST_SOURCE_START, testClassLines.getStartLineNumber());
160+
span.setTag(Tags.TEST_SOURCE_END, testClassLines.getEndLineNumber());
161+
}
162+
157163
Collection<String> testCodeOwners = codeowners.getOwners(sourcePath);
158164
if (testCodeOwners != null) {
159165
span.setTag(Tags.TEST_CODEOWNERS, toJson(testCodeOwners));
@@ -245,7 +251,7 @@ public TestImpl testStart(
245251
metricCollector,
246252
testDecorator,
247253
sourcePathResolver,
248-
methodLinesResolver,
254+
linesResolver,
249255
codeowners,
250256
coverageStoreFactory,
251257
SpanUtils.propagateCiVisibilityTagsTo(span));

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

+3-3
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
import datadog.trace.civisibility.ipc.ModuleExecutionResult;
2727
import datadog.trace.civisibility.ipc.SignalResponse;
2828
import datadog.trace.civisibility.ipc.SignalType;
29-
import datadog.trace.civisibility.source.MethodLinesResolver;
29+
import datadog.trace.civisibility.source.LinesResolver;
3030
import datadog.trace.civisibility.source.SourcePathResolver;
3131
import datadog.trace.civisibility.utils.SpanUtils;
3232
import datadog.trace.util.Strings;
@@ -62,7 +62,7 @@ public <T extends CoverageCalculator> BuildSystemModuleImpl(
6262
TestDecorator testDecorator,
6363
SourcePathResolver sourcePathResolver,
6464
Codeowners codeowners,
65-
MethodLinesResolver methodLinesResolver,
65+
LinesResolver linesResolver,
6666
ModuleSignalRouter moduleSignalRouter,
6767
CoverageCalculator.Factory<T> coverageCalculatorFactory,
6868
T sessionCoverageCalculator,
@@ -79,7 +79,7 @@ public <T extends CoverageCalculator> BuildSystemModuleImpl(
7979
testDecorator,
8080
sourcePathResolver,
8181
codeowners,
82-
methodLinesResolver,
82+
linesResolver,
8383
onSpanFinish);
8484
this.coverageCalculator =
8585
coverageCalculatorFactory.moduleCoverage(

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

+4-4
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
import datadog.trace.civisibility.ipc.SignalResponse;
3232
import datadog.trace.civisibility.ipc.SignalServer;
3333
import datadog.trace.civisibility.ipc.SignalType;
34-
import datadog.trace.civisibility.source.MethodLinesResolver;
34+
import datadog.trace.civisibility.source.LinesResolver;
3535
import datadog.trace.civisibility.source.SourcePathResolver;
3636
import datadog.trace.civisibility.source.index.RepoIndex;
3737
import datadog.trace.civisibility.source.index.RepoIndexProvider;
@@ -67,7 +67,7 @@ public BuildSystemSessionImpl(
6767
TestDecorator testDecorator,
6868
SourcePathResolver sourcePathResolver,
6969
Codeowners codeowners,
70-
MethodLinesResolver methodLinesResolver,
70+
LinesResolver linesResolver,
7171
ExecutionSettingsFactory executionSettingsFactory,
7272
SignalServer signalServer,
7373
RepoIndexProvider repoIndexProvider,
@@ -82,7 +82,7 @@ public BuildSystemSessionImpl(
8282
testDecorator,
8383
sourcePathResolver,
8484
codeowners,
85-
methodLinesResolver);
85+
linesResolver);
8686
this.startCommand = startCommand;
8787
this.moduleSignalRouter = moduleSignalRouter;
8888
this.executionSettingsFactory = executionSettingsFactory;
@@ -167,7 +167,7 @@ public BuildSystemModuleImpl testModuleStart(
167167
testDecorator,
168168
sourcePathResolver,
169169
codeowners,
170-
methodLinesResolver,
170+
linesResolver,
171171
moduleSignalRouter,
172172
coverageCalculatorFactory,
173173
coverageCalculator,

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

+5-5
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
import datadog.trace.civisibility.ipc.ModuleSignal;
2222
import datadog.trace.civisibility.ipc.SignalClient;
2323
import datadog.trace.civisibility.ipc.TestFramework;
24-
import datadog.trace.civisibility.source.MethodLinesResolver;
24+
import datadog.trace.civisibility.source.LinesResolver;
2525
import datadog.trace.civisibility.source.SourcePathResolver;
2626
import datadog.trace.civisibility.test.ExecutionStrategy;
2727
import java.util.Collection;
@@ -51,7 +51,7 @@ public class ProxyTestModule implements TestFrameworkModule {
5151
private final TestDecorator testDecorator;
5252
private final SourcePathResolver sourcePathResolver;
5353
private final Codeowners codeowners;
54-
private final MethodLinesResolver methodLinesResolver;
54+
private final LinesResolver linesResolver;
5555
private final CoverageStore.Factory coverageStoreFactory;
5656
private final Collection<TestFramework> testFrameworks = ConcurrentHashMap.newKeySet();
5757

@@ -64,7 +64,7 @@ public ProxyTestModule(
6464
TestDecorator testDecorator,
6565
SourcePathResolver sourcePathResolver,
6666
Codeowners codeowners,
67-
MethodLinesResolver methodLinesResolver,
67+
LinesResolver linesResolver,
6868
CoverageStore.Factory coverageStoreFactory,
6969
ChildProcessCoverageReporter childProcessCoverageReporter,
7070
SignalClient.Factory signalClientFactory) {
@@ -78,7 +78,7 @@ public ProxyTestModule(
7878
this.testDecorator = testDecorator;
7979
this.sourcePathResolver = sourcePathResolver;
8080
this.codeowners = codeowners;
81-
this.methodLinesResolver = methodLinesResolver;
81+
this.linesResolver = linesResolver;
8282
this.coverageStoreFactory = coverageStoreFactory;
8383
}
8484

@@ -171,7 +171,7 @@ public TestSuiteImpl testSuiteStart(
171171
testDecorator,
172172
sourcePathResolver,
173173
codeowners,
174-
methodLinesResolver,
174+
linesResolver,
175175
coverageStoreFactory,
176176
this::propagateTestFrameworkData);
177177
}

0 commit comments

Comments
 (0)