Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit e26f1a4

Browse files
Ensure module name is consistent between test.module, test.suite and test spans when build system is instrumented (DataDog#6354)
1 parent 4db8ea3 commit e26f1a4

File tree

27 files changed

+151
-52
lines changed

27 files changed

+151
-52
lines changed

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

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -241,19 +241,35 @@ private static TestEventsHandler.Factory testEventsHandlerFactory(
241241
CIProviderInfoFactory ciProviderInfoFactory = new CIProviderInfoFactory(config);
242242
CIProviderInfo ciProviderInfo = ciProviderInfoFactory.createCIProviderInfo(path);
243243
CIInfo ciInfo = ciProviderInfo.buildCIInfo();
244-
String repoRoot = ciInfo.getCiWorkspace();
245-
String moduleName =
246-
repoRoot != null && path.startsWith(repoRoot)
247-
? Paths.get(repoRoot).relativize(path).toString()
248-
: config.getServiceName();
249244

245+
String moduleName = getModuleName(config, path, ciInfo);
250246
DDTestFrameworkSession testSession =
251247
sessionFactory.startSession(moduleName, path, component, null);
252248
DDTestFrameworkModule testModule = testSession.testModuleStart(moduleName, null);
253249
return new TestEventsHandlerImpl(testSession, testModule);
254250
};
255251
}
256252

253+
private static String getModuleName(Config config, Path path, CIInfo ciInfo) {
254+
// if parent process is instrumented, it will provide build system's module name
255+
String parentModuleName =
256+
System.getProperty(
257+
Strings.propertyNameToSystemPropertyName(CiVisibilityConfig.CIVISIBILITY_MODULE_NAME));
258+
if (parentModuleName != null) {
259+
return parentModuleName;
260+
}
261+
262+
String repoRoot = ciInfo.getCiWorkspace();
263+
if (repoRoot != null
264+
&& path.startsWith(repoRoot)
265+
// module name cannot be empty
266+
&& !path.toString().equals(repoRoot)) {
267+
return Paths.get(repoRoot).relativize(path).toString();
268+
}
269+
270+
return config.getServiceName();
271+
}
272+
257273
private static DDTestFrameworkSession.Factory testFrameworkSessionFactory(
258274
Config config,
259275
SharedCommunicationObjects sco,

‎dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/source/index/RepoIndexBuilder.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,8 @@ private RepoIndex doGetIndex() {
6666
scanRoot,
6767
repoRoot);
6868

69-
Path repoRootPath = fileSystem.getPath(repoRoot);
70-
Path scanRootPath = fileSystem.getPath(scanRoot);
69+
Path repoRootPath = toRealPath(fileSystem.getPath(repoRoot));
70+
Path scanRootPath = toRealPath(fileSystem.getPath(scanRoot));
7171
RepoIndexingFileVisitor repoIndexingFileVisitor =
7272
new RepoIndexingFileVisitor(config, packageResolver, resourceResolver, repoRootPath);
7373

@@ -96,6 +96,15 @@ private RepoIndex doGetIndex() {
9696
return index;
9797
}
9898

99+
private Path toRealPath(Path path) {
100+
try {
101+
return path.toRealPath();
102+
} catch (Exception e) {
103+
log.error("Could not determine real path for {}", path, e);
104+
return path;
105+
}
106+
}
107+
99108
private static final class RepoIndexingFileVisitor implements FileVisitor<Path> {
100109

101110
private static final Logger log = LoggerFactory.getLogger(RepoIndexingFileVisitor.class);

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

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,11 +65,24 @@ abstract class CiVisibilitySmokeTest extends Specification {
6565
' "id": "d230520a0561ee2f",' +
6666
' "type": "test",' +
6767
' "attributes": {' +
68-
' "configurations": {},' +
68+
' "configurations": {' +
69+
' "test.bundle": "Maven Smoke Tests Project maven-surefire-plugin default-test"' +
70+
' },' +
6971
' "name": "test_to_skip_with_itr",' +
7072
' "suite": "datadog.smoke.TestSucceed"' +
7173
' }' +
72-
'}] }')
74+
'}, {' +
75+
' "id": "d230520a0561ee2g",' +
76+
' "type": "test",' +
77+
' "attributes": {' +
78+
' "configurations": {' +
79+
' "test.bundle": ":test"' +
80+
' },' +
81+
' "name": "test_to_skip_with_itr",' +
82+
' "suite": "datadog.smoke.TestSucceed"' +
83+
' }' +
84+
'}] ' +
85+
'}')
7386
}
7487
}
7588
}
@@ -81,8 +94,8 @@ abstract class CiVisibilitySmokeTest extends Specification {
8194
def additionalReplacements = ["content.meta.['test.toolchain']": "$toolchain:$toolchainVersion"]
8295

8396
// uncomment to generate expected data templates
84-
// def baseTemplatesPath = AbstractCiVisibilitySmokeTest.classLoader.getResource(projectName).toURI().schemeSpecificPart.replace('build/resources/test', 'src/test/resources')
85-
// CiVisibilityTestUtils.generateTemplates(baseTemplatesPath, events, coverages, additionalReplacements)
97+
// def baseTemplatesPath = CiVisibilitySmokeTest.classLoader.getResource(projectName).toURI().schemeSpecificPart.replace('build/resources/test', 'src/test/resources')
98+
// CiVisibilityTestUtils.generateTemplates(baseTemplatesPath, events, coverages, additionalReplacements)
8699

87100
CiVisibilityTestUtils.assertData(projectName, events, coverages, additionalReplacements)
88101
return true

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,15 +84,15 @@ abstract class CiVisibilityTestUtils {
8484
try {
8585
JSONAssert.assertEquals(expectedEvents, actualEvents, JSONCompareMode.LENIENT)
8686
} catch (AssertionError e) {
87-
throw new AssertionError("Error while comparing expected events $expectedEvents to actual events $actualEvents", e)
87+
throw new org.opentest4j.AssertionFailedError("Events mismatch", expectedEvents, actualEvents, e)
8888
}
8989

9090
def expectedCoverages = getFreemarkerTemplate(baseTemplatesPath + "/coverages.ftl", replacementMap)
9191
def actualCoverages = JSON_MAPPER.writeValueAsString(coverages)
9292
try {
9393
JSONAssert.assertEquals(expectedCoverages, actualCoverages, JSONCompareMode.LENIENT)
9494
} catch (AssertionError e) {
95-
throw new AssertionError("Error while comparing expected coverages $expectedCoverages to actual coverages $actualCoverages", e)
95+
throw new org.opentest4j.AssertionFailedError("Coverages mismatch", expectedCoverages, actualCoverages, e)
9696
}
9797
}
9898

‎dd-java-agent/instrumentation/gradle/src/main/groovy/datadog/trace/instrumentation/gradle/CiVisibilityService.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,8 @@ public Collection<String> getTracerJvmArgs(String taskPath, Path jvmExecutable)
8888
jvmArgs.addAll(splitArgs);
8989
}
9090

91+
jvmArgs.add(arg(CiVisibilityConfig.CIVISIBILITY_MODULE_NAME, taskPath));
92+
9193
jvmArgs.add("-javaagent:" + config.getCiVisibilityAgentJarFile().toPath());
9294

9395
BuildEventsHandler.ModuleInfo moduleInfo =

‎dd-java-agent/instrumentation/gradle/src/main/groovy/datadog/trace/instrumentation/gradle/legacy/GradleProjectConfigurator.groovy

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package datadog.trace.instrumentation.gradle.legacy
22

33
import datadog.trace.api.Config
44
import datadog.trace.api.civisibility.config.ModuleExecutionSettings
5+
import datadog.trace.api.config.CiVisibilityConfig
56
import datadog.trace.bootstrap.DatadogClassLoader
67
import datadog.trace.util.Strings
78
import org.gradle.api.Project
@@ -73,6 +74,9 @@ class GradleProjectConfigurator {
7374
jvmArgs.addAll(splitArgs)
7475
}
7576

77+
String taskPath = task.getPath()
78+
jvmArgs.add("-D" + Strings.propertyNameToSystemPropertyName(CiVisibilityConfig.CIVISIBILITY_MODULE_NAME) + '=' + taskPath)
79+
7680
jvmArgs.add("-javaagent:" + config.ciVisibilityAgentJarFile.toPath())
7781

7882
// be sure to use setJvmArgs() and not jvmArgs()

‎dd-java-agent/instrumentation/maven-3.2.1/src/main/java/datadog/trace/instrumentation/maven3/MavenExecutionListener.java

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ public void mojoSkipped(ExecutionEvent event) {
5151
MavenSession session = event.getSession();
5252
MavenExecutionRequest request = session.getRequest();
5353
MavenProject project = event.getProject();
54-
String moduleName = getUniqueModuleName(project, mojoExecution);
54+
String moduleName = MavenUtils.getUniqueModuleName(project, mojoExecution);
5555

5656
mojoStarted(event);
5757
buildEventsHandler.onTestModuleSkip(request, moduleName, null);
@@ -66,7 +66,7 @@ public void mojoStarted(ExecutionEvent event) {
6666
MavenSession session = event.getSession();
6767
MavenExecutionRequest request = session.getRequest();
6868
MavenProject project = event.getProject();
69-
String moduleName = getUniqueModuleName(project, mojoExecution);
69+
String moduleName = MavenUtils.getUniqueModuleName(project, mojoExecution);
7070

7171
String outputClassesDir = project.getBuild().getOutputDirectory();
7272
Collection<File> outputClassesDirs =
@@ -150,7 +150,7 @@ public void mojoSucceeded(ExecutionEvent event) {
150150
MavenSession session = event.getSession();
151151
MavenExecutionRequest request = session.getRequest();
152152
MavenProject project = event.getProject();
153-
String moduleName = getUniqueModuleName(project, mojoExecution);
153+
String moduleName = MavenUtils.getUniqueModuleName(project, mojoExecution);
154154
buildEventsHandler.onTestModuleFinish(request, moduleName);
155155

156156
System.clearProperty(
@@ -167,7 +167,7 @@ public void mojoFailed(ExecutionEvent event) {
167167
MavenSession session = event.getSession();
168168
MavenExecutionRequest request = session.getRequest();
169169
MavenProject project = event.getProject();
170-
String moduleName = getUniqueModuleName(project, mojoExecution);
170+
String moduleName = MavenUtils.getUniqueModuleName(project, mojoExecution);
171171
Exception exception = event.getException();
172172
buildEventsHandler.onTestModuleFail(request, moduleName, exception);
173173
buildEventsHandler.onTestModuleFinish(request, moduleName);
@@ -178,12 +178,4 @@ public void mojoFailed(ExecutionEvent event) {
178178
Strings.propertyNameToSystemPropertyName(CiVisibilityConfig.CIVISIBILITY_MODULE_ID));
179179
}
180180
}
181-
182-
private static String getUniqueModuleName(MavenProject project, MojoExecution mojoExecution) {
183-
return project.getName()
184-
+ " "
185-
+ mojoExecution.getArtifactId()
186-
+ " "
187-
+ mojoExecution.getExecutionId();
188-
}
189181
}

‎dd-java-agent/instrumentation/maven-3.2.1/src/main/java/datadog/trace/instrumentation/maven3/MavenLifecycleParticipant.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -292,7 +292,9 @@ private Void configureTestExecutions(
292292

293293
for (MavenTestExecution testExecution : testExecutions) {
294294
MavenProjectConfigurator.INSTANCE.configureTracer(
295-
testExecution.getExecution(), moduleExecutionSettings.getSystemProperties());
295+
testExecution.getProject(),
296+
testExecution.getExecution(),
297+
moduleExecutionSettings.getSystemProperties());
296298
MavenProjectConfigurator.INSTANCE.configureJacoco(testExecution, moduleExecutionSettings);
297299
}
298300
return null;

‎dd-java-agent/instrumentation/maven-3.2.1/src/main/java/datadog/trace/instrumentation/maven3/MavenProjectConfigurator.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import datadog.trace.api.Config;
44
import datadog.trace.api.civisibility.config.ModuleExecutionSettings;
5+
import datadog.trace.api.config.CiVisibilityConfig;
56
import datadog.trace.bootstrap.DatadogClassLoader;
67
import datadog.trace.util.Strings;
78
import java.io.File;
@@ -37,7 +38,9 @@ class MavenProjectConfigurator {
3738
private static final String JACOCO_EXCL_CLASS_LOADERS_PROPERTY = "jacoco.exclClassLoaders";
3839

3940
public void configureTracer(
40-
MojoExecution mojoExecution, Map<String, String> propagatedSystemProperties) {
41+
MavenProject project,
42+
MojoExecution mojoExecution,
43+
Map<String, String> propagatedSystemProperties) {
4144
Xpp3Dom configuration = mojoExecution.getConfiguration();
4245

4346
Xpp3Dom forkCount = configuration.getChild("forkCount");
@@ -66,6 +69,15 @@ public void configureTracer(
6669
modifiedArgLine.append(additionalArgs).append(" ");
6770
}
6871

72+
String moduleName = MavenUtils.getUniqueModuleName(project, mojoExecution);
73+
modifiedArgLine
74+
.append("-D")
75+
.append(
76+
Strings.propertyNameToSystemPropertyName(CiVisibilityConfig.CIVISIBILITY_MODULE_NAME))
77+
.append("='")
78+
.append(moduleName)
79+
.append("' ");
80+
6981
File agentJar = config.getCiVisibilityAgentJarFile();
7082
modifiedArgLine.append("-javaagent:").append(agentJar.toPath());
7183

‎dd-java-agent/instrumentation/maven-3.2.1/src/main/java/datadog/trace/instrumentation/maven3/MavenUtils.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,14 @@ private static Xpp3Dom getChild(Xpp3Dom parent, String[] path, boolean createIfN
277277
return current;
278278
}
279279

280+
public static String getUniqueModuleName(MavenProject project, MojoExecution mojoExecution) {
281+
return project.getName()
282+
+ " "
283+
+ mojoExecution.getArtifactId()
284+
+ " "
285+
+ mojoExecution.getExecutionId();
286+
}
287+
280288
private static final MethodHandles METHOD_HANDLES =
281289
new MethodHandles(PlexusContainer.class.getClassLoader());
282290
private static final MethodHandle SESSION_FIELD =

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /