Skip to content

Commit 1878db6

Browse files
Fix Maven 4.0.0 smoke test (DataDog#6351)
1 parent 1992baf commit 1878db6

9 files changed

Lines changed: 350 additions & 4 deletions

File tree

dd-java-agent/instrumentation/maven-3.2.1/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ dependencies {
2323
testImplementation group: 'org.apache.maven.resolver', name: 'maven-resolver-transport-http', version: '1.0.3'
2424

2525
latestDepTestImplementation group: 'org.apache.maven', name: 'maven-embedder', version: '+'
26-
latestDepTestImplementation group: 'org.apache.maven.resolver', name: 'maven-resolver-connector-basic', version: '1.+'
27-
latestDepTestImplementation group: 'org.apache.maven.resolver', name: 'maven-resolver-transport-http', version: '1.+'
26+
latestDepTestImplementation group: 'org.apache.maven.resolver', name: 'maven-resolver-connector-basic', version: '+'
27+
latestDepTestImplementation group: 'org.apache.maven.resolver', name: 'maven-resolver-transport-http', version: '+'
2828
latestDepTestImplementation group: 'org.fusesource.jansi', name: 'jansi', version: '+'
2929
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ private Collection<MavenTestExecution> getTestExecutionsByJvmPath(
166166
MavenSession session, MavenProject project) {
167167
List<MavenTestExecution> testExecutions = new ArrayList<>();
168168
try {
169-
PlexusContainer container = session.getContainer();
169+
PlexusContainer container = MavenUtils.getContainer(session);
170170

171171
MavenPluginManager mavenPluginManager = container.lookup(MavenPluginManager.class);
172172
BuildPluginManager buildPluginManager = container.lookup(BuildPluginManager.class);

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

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package datadog.trace.instrumentation.maven3;
22

3+
import datadog.trace.util.MethodHandles;
4+
import java.lang.invoke.MethodHandle;
35
import java.util.Iterator;
46
import java.util.List;
57
import java.util.Map;
@@ -13,6 +15,7 @@
1315
import org.apache.maven.model.Plugin;
1416
import org.apache.maven.plugin.MojoExecution;
1517
import org.apache.maven.project.MavenProject;
18+
import org.codehaus.plexus.PlexusContainer;
1619
import org.codehaus.plexus.logging.Logger;
1720
import org.codehaus.plexus.util.xml.Xpp3Dom;
1821

@@ -273,4 +276,22 @@ private static Xpp3Dom getChild(Xpp3Dom parent, String[] path, boolean createIfN
273276
}
274277
return current;
275278
}
279+
280+
private static final MethodHandles METHOD_HANDLES =
281+
new MethodHandles(PlexusContainer.class.getClassLoader());
282+
private static final MethodHandle SESSION_FIELD =
283+
METHOD_HANDLES.privateFieldGetter(MavenSession.class, "session");
284+
private static final MethodHandle CONTAINER_FIELD =
285+
METHOD_HANDLES.privateFieldGetter(
286+
"org.apache.maven.internal.impl.DefaultSession", "container");
287+
288+
public static PlexusContainer getContainer(MavenSession mavenSession) {
289+
PlexusContainer container = mavenSession.getContainer();
290+
if (container != null) {
291+
return container;
292+
}
293+
Object /* org.apache.maven.internal.impl.DefaultSession */ session =
294+
METHOD_HANDLES.invoke(SESSION_FIELD, mavenSession);
295+
return METHOD_HANDLES.invoke(CONTAINER_FIELD, session);
296+
}
276297
}

dd-smoke-tests/maven/src/test/groovy/datadog/smoketest/MavenSmokeTest.groovy

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,8 @@ class MavenSmokeTest extends CiVisibilitySmokeTest {
6767
"test_successful_maven_run" | "3.6.3" | 5 | 1
6868
"test_successful_maven_run" | "3.8.8" | 5 | 1
6969
"test_successful_maven_run" | "3.9.5" | 5 | 1
70-
"test_successful_maven_run" | LATEST_MAVEN_VERSION | 5 | 1
70+
"test_successful_maven_run_surefire_3_0_0" | "3.9.5" | 5 | 1
71+
"test_successful_maven_run_surefire_3_0_0" | LATEST_MAVEN_VERSION | 5 | 1
7172
"test_successful_maven_run_with_jacoco_and_argline" | "3.9.5" | 5 | 1
7273
"test_successful_maven_run_with_cucumber" | "3.9.5" | 7 | 1
7374
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
[ {
2+
"test_session_id" : ${content_test_session_id},
3+
"test_suite_id" : ${content_test_suite_id},
4+
"span_id" : ${content_span_id},
5+
"files" : [ {
6+
"filename" : "src/test/java/datadog/smoke/TestSucceed.java",
7+
"segments" : [ [ 7, -1, 7, -1, -1 ], [ 11, -1, 12, -1, -1 ] ]
8+
}, {
9+
"filename" : "src/main/java/datadog/smoke/Calculator.java",
10+
"segments" : [ [ 5, -1, 5, -1, -1 ] ]
11+
} ]
12+
} ]
Lines changed: 225 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,225 @@
1+
[ {
2+
"type" : "test_session_end",
3+
"version" : 1,
4+
"content" : {
5+
"test_session_id" : ${content_test_session_id},
6+
"service" : "test-maven-service",
7+
"name" : "maven.test_session",
8+
"resource" : "Maven Smoke Tests Project",
9+
"start" : ${content_start},
10+
"duration" : ${content_duration},
11+
"error" : 0,
12+
"metrics" : {
13+
"process_id" : ${content_metrics_process_id},
14+
"test.itr.tests_skipping.count" : 1,
15+
"_dd.profiling.enabled" : 0,
16+
"_dd.trace_span_attribute_schema" : 0,
17+
"test.code_coverage.lines_pct" : 57
18+
},
19+
"meta" : {
20+
"_dd.p.tid" : ${content_meta__dd_p_tid},
21+
"os.architecture" : ${content_meta_os_architecture},
22+
"test.status" : "pass",
23+
"_dd.ci.itr.tests_skipped" : "true",
24+
"ci.workspace_path" : ${content_meta_ci_workspace_path},
25+
"language" : "jvm",
26+
"runtime.name" : ${content_meta_runtime_name},
27+
"os.platform" : ${content_meta_os_platform},
28+
"os.version" : ${content_meta_os_version},
29+
"library_version" : ${content_meta_library_version},
30+
"span.kind" : "test_session_end",
31+
"runtime.version" : ${content_meta_runtime_version},
32+
"runtime-id" : ${content_meta_runtime_id},
33+
"test.itr.tests_skipping.enabled" : "true",
34+
"test.type" : "test",
35+
"env" : "integration-test",
36+
"runtime.vendor" : ${content_meta_runtime_vendor},
37+
"component" : "maven",
38+
"test.code_coverage.enabled" : "true",
39+
"test.toolchain" : ${content_meta_test_toolchain},
40+
"test.itr.tests_skipping.type" : "test",
41+
"test.command" : "mvn -B test",
42+
"test.framework_version" : "4.13.2",
43+
"test.framework" : "junit4"
44+
}
45+
}
46+
}, {
47+
"type" : "test_module_end",
48+
"version" : 1,
49+
"content" : {
50+
"test_session_id" : ${content_test_session_id},
51+
"test_module_id" : ${content_test_module_id},
52+
"service" : "test-maven-service",
53+
"name" : "maven.test_module",
54+
"resource" : "Maven Smoke Tests Project maven-surefire-plugin default-test",
55+
"start" : ${content_start_2},
56+
"duration" : ${content_duration_2},
57+
"error" : 0,
58+
"metrics" : {
59+
"test.itr.tests_skipping.count" : 1,
60+
"test.code_coverage.lines_pct" : 57
61+
},
62+
"meta" : {
63+
"_dd.p.tid" : ${content_meta__dd_p_tid_2},
64+
"os.architecture" : ${content_meta_os_architecture},
65+
"test.module" : "Maven Smoke Tests Project maven-surefire-plugin default-test",
66+
"test.status" : "pass",
67+
"_dd.ci.itr.tests_skipped" : "true",
68+
"ci.workspace_path" : ${content_meta_ci_workspace_path},
69+
"runtime.name" : ${content_meta_runtime_name},
70+
"os.platform" : ${content_meta_os_platform},
71+
"os.version" : ${content_meta_os_version},
72+
"library_version" : ${content_meta_library_version},
73+
"span.kind" : "test_module_end",
74+
"runtime.version" : ${content_meta_runtime_version},
75+
"test.itr.tests_skipping.enabled" : "true",
76+
"test.type" : "test",
77+
"env" : "integration-test",
78+
"runtime.vendor" : ${content_meta_runtime_vendor},
79+
"component" : "maven",
80+
"test.code_coverage.enabled" : "true",
81+
"test.execution" : "maven-surefire-plugin:test:default-test",
82+
"test.itr.tests_skipping.type" : "test",
83+
"test.command" : "mvn -B test",
84+
"test.framework_version" : "4.13.2",
85+
"test.framework" : "junit4"
86+
}
87+
}
88+
}, {
89+
"type" : "test_suite_end",
90+
"version" : 1,
91+
"content" : {
92+
"test_session_id" : ${content_test_session_id},
93+
"test_module_id" : ${content_test_module_id},
94+
"test_suite_id" : ${content_test_suite_id},
95+
"service" : "test-maven-service",
96+
"name" : "junit.test_suite",
97+
"resource" : "datadog.smoke.TestSucceed",
98+
"start" : ${content_start_3},
99+
"duration" : ${content_duration_3},
100+
"error" : 0,
101+
"metrics" : {
102+
"process_id" : ${content_metrics_process_id_2},
103+
"_dd.profiling.enabled" : 0,
104+
"_dd.trace_span_attribute_schema" : 0
105+
},
106+
"meta" : {
107+
"_dd.p.tid" : ${content_meta__dd_p_tid_3},
108+
"os.architecture" : ${content_meta_os_architecture},
109+
"test.source.file" : "src/test/java/datadog/smoke/TestSucceed.java",
110+
"test.status" : "pass",
111+
"ci.workspace_path" : ${content_meta_ci_workspace_path},
112+
"language" : "jvm",
113+
"runtime.name" : ${content_meta_runtime_name},
114+
"os.platform" : ${content_meta_os_platform},
115+
"os.version" : ${content_meta_os_version},
116+
"library_version" : ${content_meta_library_version},
117+
"span.kind" : "test_suite_end",
118+
"test.suite" : "datadog.smoke.TestSucceed",
119+
"runtime.version" : ${content_meta_runtime_version},
120+
"runtime-id" : ${content_meta_runtime_id_2},
121+
"test.type" : "test",
122+
"env" : "integration-test",
123+
"runtime.vendor" : ${content_meta_runtime_vendor},
124+
"component" : "junit",
125+
"test.framework_version" : "4.13.2",
126+
"test.framework" : "junit4"
127+
}
128+
}
129+
}, {
130+
"type" : "test",
131+
"version" : 2,
132+
"content" : {
133+
"trace_id" : ${content_trace_id},
134+
"span_id" : ${content_span_id},
135+
"parent_id" : ${content_parent_id},
136+
"test_session_id" : ${content_test_session_id},
137+
"test_module_id" : ${content_test_module_id},
138+
"test_suite_id" : ${content_test_suite_id},
139+
"service" : "test-maven-service",
140+
"name" : "junit.test",
141+
"resource" : "datadog.smoke.TestSucceed.test_succeed",
142+
"start" : ${content_start_4},
143+
"duration" : ${content_duration_4},
144+
"error" : 0,
145+
"metrics" : {
146+
"process_id" : ${content_metrics_process_id_2},
147+
"_dd.profiling.enabled" : 0,
148+
"_dd.trace_span_attribute_schema" : 0,
149+
"test.source.end" : 12
150+
},
151+
"meta" : {
152+
"_dd.p.tid" : ${content_meta__dd_p_tid_4},
153+
"os.architecture" : ${content_meta_os_architecture},
154+
"test.source.file" : "src/test/java/datadog/smoke/TestSucceed.java",
155+
"test.source.method" : "test_succeed()V",
156+
"test.status" : "pass",
157+
"ci.workspace_path" : ${content_meta_ci_workspace_path},
158+
"language" : "jvm",
159+
"runtime.name" : ${content_meta_runtime_name},
160+
"os.platform" : ${content_meta_os_platform},
161+
"os.version" : ${content_meta_os_version},
162+
"library_version" : ${content_meta_library_version},
163+
"test.name" : "test_succeed",
164+
"span.kind" : "test",
165+
"test.suite" : "datadog.smoke.TestSucceed",
166+
"runtime.version" : ${content_meta_runtime_version},
167+
"runtime-id" : ${content_meta_runtime_id_2},
168+
"test.type" : "test",
169+
"env" : "integration-test",
170+
"runtime.vendor" : ${content_meta_runtime_vendor},
171+
"component" : "junit",
172+
"test.framework_version" : "4.13.2",
173+
"test.framework" : "junit4"
174+
}
175+
}
176+
}, {
177+
"type" : "test",
178+
"version" : 2,
179+
"content" : {
180+
"trace_id" : ${content_trace_id_2},
181+
"span_id" : ${content_span_id_2},
182+
"parent_id" : ${content_parent_id},
183+
"test_session_id" : ${content_test_session_id},
184+
"test_module_id" : ${content_test_module_id},
185+
"test_suite_id" : ${content_test_suite_id},
186+
"service" : "test-maven-service",
187+
"name" : "junit.test",
188+
"resource" : "datadog.smoke.TestSucceed.test_to_skip_with_itr",
189+
"start" : ${content_start_5},
190+
"duration" : ${content_duration_5},
191+
"error" : 0,
192+
"metrics" : {
193+
"process_id" : ${content_metrics_process_id_2},
194+
"_dd.profiling.enabled" : 0,
195+
"_dd.trace_span_attribute_schema" : 0,
196+
"test.source.end" : 17
197+
},
198+
"meta" : {
199+
"_dd.p.tid" : ${content_meta__dd_p_tid_5},
200+
"os.architecture" : ${content_meta_os_architecture},
201+
"test.source.file" : "src/test/java/datadog/smoke/TestSucceed.java",
202+
"test.source.method" : "test_to_skip_with_itr()V",
203+
"test.status" : "skip",
204+
"ci.workspace_path" : ${content_meta_ci_workspace_path},
205+
"language" : "jvm",
206+
"runtime.name" : ${content_meta_runtime_name},
207+
"os.platform" : ${content_meta_os_platform},
208+
"os.version" : ${content_meta_os_version},
209+
"library_version" : ${content_meta_library_version},
210+
"test.name" : "test_to_skip_with_itr",
211+
"span.kind" : "test",
212+
"test.suite" : "datadog.smoke.TestSucceed",
213+
"runtime.version" : ${content_meta_runtime_version},
214+
"runtime-id" : ${content_meta_runtime_id_2},
215+
"test.type" : "test",
216+
"test.skip_reason" : "Skipped by Datadog Intelligent Test Runner",
217+
"env" : "integration-test",
218+
"runtime.vendor" : ${content_meta_runtime_vendor},
219+
"component" : "junit",
220+
"test.skipped_by_itr" : "true",
221+
"test.framework_version" : "4.13.2",
222+
"test.framework" : "junit4"
223+
}
224+
}
225+
} ]
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
4+
5+
<modelVersion>4.0.0</modelVersion>
6+
<groupId>com.datadog.ci.test</groupId>
7+
<artifactId>maven-smoke-test</artifactId>
8+
<version>1.0-SNAPSHOT</version>
9+
<name>Maven Smoke Tests Project</name>
10+
11+
<properties>
12+
<maven.compiler.source>8</maven.compiler.source>
13+
<maven.compiler.target>8</maven.compiler.target>
14+
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
15+
</properties>
16+
17+
<!-- Older Maven versions (e.g. 3.2.1) use http protocol instead of https for repositories by default.
18+
Nowadays Maven Central does not work over unencrypted http -->
19+
<repositories>
20+
<repository>
21+
<snapshots>
22+
<enabled>false</enabled>
23+
</snapshots>
24+
<id>central</id>
25+
<name>Central Repository</name>
26+
<url>https://repo.maven.apache.org/maven2</url>
27+
</repository>
28+
</repositories>
29+
<pluginRepositories>
30+
<pluginRepository>
31+
<releases>
32+
<updatePolicy>never</updatePolicy>
33+
</releases>
34+
<snapshots>
35+
<enabled>false</enabled>
36+
</snapshots>
37+
<id>central</id>
38+
<name>Central Repository</name>
39+
<url>https://repo.maven.apache.org/maven2</url>
40+
</pluginRepository>
41+
</pluginRepositories>
42+
43+
<dependencies>
44+
<dependency>
45+
<groupId>junit</groupId>
46+
<artifactId>junit</artifactId>
47+
<version>4.13.2</version>
48+
<scope>test</scope>
49+
</dependency>
50+
</dependencies>
51+
52+
<build>
53+
<plugins>
54+
<plugin>
55+
<groupId>org.apache.maven.plugins</groupId>
56+
<artifactId>maven-surefire-plugin</artifactId>
57+
<version>3.0.0</version>
58+
</plugin>
59+
</plugins>
60+
</build>
61+
62+
</project>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package datadog.smoke;
2+
3+
public class Calculator {
4+
public static int add(int a, int b) {
5+
return a + b;
6+
}
7+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package datadog.smoke;
2+
3+
import static org.junit.Assert.assertTrue;
4+
5+
import org.junit.Test;
6+
7+
public class TestSucceed {
8+
9+
@Test
10+
public void test_succeed() {
11+
assertTrue(Calculator.add(2, 2) == 4);
12+
}
13+
14+
@Test
15+
public void test_to_skip_with_itr() {
16+
assertTrue(true);
17+
}
18+
}

0 commit comments

Comments
 (0)