From e2904f3297b6bb779dc2d6687e6d1d16128ed495 Mon Sep 17 00:00:00 2001 From: Alexey Kuznetsov Date: Fri, 18 Sep 2026 15:20:19 -0400 Subject: [PATCH 1/2] Use configured repository proxy in embedded Maven tests --- .../maven/maven-3.2.1/build.gradle | 6 +++++ .../groovy/MavenInstrumentationTest.groovy | 17 ++++++++----- .../maven3/AbstractMavenTest.java | 24 +++++++++++++------ .../src/test/resources/settings.mirror.xml | 9 +++++++ 4 files changed, 43 insertions(+), 13 deletions(-) create mode 100644 dd-java-agent/instrumentation/maven/maven-3.2.1/src/test/resources/settings.mirror.xml diff --git a/dd-java-agent/instrumentation/maven/maven-3.2.1/build.gradle b/dd-java-agent/instrumentation/maven/maven-3.2.1/build.gradle index 2023f3de408..205307d2c23 100644 --- a/dd-java-agent/instrumentation/maven/maven-3.2.1/build.gradle +++ b/dd-java-agent/instrumentation/maven/maven-3.2.1/build.gradle @@ -13,6 +13,12 @@ muzzle { addTestSuiteForDir('latestDepTest', 'test') +tasks.withType(Test).configureEach { + if (project.hasProperty('mavenRepositoryProxy')) { + environment 'MAVEN_REPOSITORY_PROXY', project.property('mavenRepositoryProxy') + } +} + dependencies { compileOnly 'org.apache.maven:maven-embedder:3.2.1' diff --git a/dd-java-agent/instrumentation/maven/maven-3.2.1/src/test/groovy/MavenInstrumentationTest.groovy b/dd-java-agent/instrumentation/maven/maven-3.2.1/src/test/groovy/MavenInstrumentationTest.groovy index ad5f991cb41..960d2926937 100644 --- a/dd-java-agent/instrumentation/maven/maven-3.2.1/src/test/groovy/MavenInstrumentationTest.groovy +++ b/dd-java-agent/instrumentation/maven/maven-3.2.1/src/test/groovy/MavenInstrumentationTest.groovy @@ -40,9 +40,7 @@ class MavenInstrumentationTest extends CiVisibilityInstrumentationTest { } def "test #testcaseName"() { - String workingDirectory = projectFolder.toString() - - def exitCode = new MavenCli().doMain(args.toArray(new String[0]), workingDirectory, null, null) + def exitCode = executeMaven(args) assertEquals(expectedExitCode, exitCode) assertSpansData(testcaseName) @@ -71,10 +69,8 @@ class MavenInstrumentationTest extends CiVisibilityInstrumentationTest { * before proceeding with running the build */ void givenMavenDependenciesAreLoaded() { - String[] args = ["org.apache.maven.plugins:maven-dependency-plugin:go-offline"] - String workingDirectory = projectFolder.toString() for (int attempt = 0; attempt < DEPENDENCIES_DOWNLOAD_RETRIES; attempt++) { - def exitCode = new MavenCli().doMain(args, workingDirectory, null, null) + def exitCode = executeMaven(["org.apache.maven.plugins:maven-dependency-plugin:go-offline"]) if (exitCode == 0) { return } @@ -82,6 +78,15 @@ class MavenInstrumentationTest extends CiVisibilityInstrumentationTest { throw new AssertionError((Object) "Tried to download dependencies $DEPENDENCIES_DOWNLOAD_RETRIES times and failed") } + private int executeMaven(List args) { + def arguments = new ArrayList<>(args) + if (System.getenv("MAVEN_REPOSITORY_PROXY") != null) { + def settingsFile = new File(getClass().getResource("/settings.mirror.xml").toURI()) + arguments.addAll(["-s", settingsFile.absolutePath]) + } + return new MavenCli().doMain(arguments.toArray(new String[0]), projectFolder.toString(), null, null) + } + @Override String instrumentedLibraryName() { return "maven" diff --git a/dd-java-agent/instrumentation/maven/maven-3.2.1/src/test/java/datadog/trace/instrumentation/maven3/AbstractMavenTest.java b/dd-java-agent/instrumentation/maven/maven-3.2.1/src/test/java/datadog/trace/instrumentation/maven3/AbstractMavenTest.java index 7b06be2d330..5c61e3ea06f 100644 --- a/dd-java-agent/instrumentation/maven/maven-3.2.1/src/test/java/datadog/trace/instrumentation/maven3/AbstractMavenTest.java +++ b/dd-java-agent/instrumentation/maven/maven-3.2.1/src/test/java/datadog/trace/instrumentation/maven3/AbstractMavenTest.java @@ -1,10 +1,13 @@ package datadog.trace.instrumentation.maven3; +import static java.util.Collections.addAll; import static org.junit.jupiter.api.Assertions.assertTrue; import java.io.File; import java.io.PrintStream; import java.nio.file.Path; +import java.util.ArrayList; +import java.util.List; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicReference; import java.util.function.Function; @@ -51,17 +54,24 @@ protected void customizeContainer(PlexusContainer container) { File pomFile = new File(AbstractMavenTest.class.getResource(pomPath).toURI()); - String[] arguments = new String[additionalArgs.length + 4]; - arguments[0] = "-f"; - arguments[1] = pomFile.getAbsolutePath(); - arguments[2] = goal; + List arguments = new ArrayList<>(); + addAll(arguments, "-f", pomFile.getAbsolutePath(), goal); // Cap Aether's HTTP read timeout so a stalled Maven Central fetch fails fast. // Default is 30 min, which exceeds the 20-min Gradle test task timeout and turns // a network stall into an opaque "Timeout has been exceeded" task abort. - arguments[3] = "-Daether.connector.requestTimeout=60000"; - System.arraycopy(additionalArgs, 0, arguments, 4, additionalArgs.length); + arguments.add("-Daether.connector.requestTimeout=60000"); + if (System.getenv("MAVEN_REPOSITORY_PROXY") != null) { + File settingsFile = + new File(AbstractMavenTest.class.getResource("/settings.mirror.xml").toURI()); + addAll(arguments, "-s", settingsFile.getAbsolutePath()); + } + addAll(arguments, additionalArgs); - mavenCli.doMain(arguments, WORKING_DIRECTORY.toAbsolutePath().toString(), stdOut, stderr); + mavenCli.doMain( + arguments.toArray(new String[0]), + WORKING_DIRECTORY.toAbsolutePath().toString(), + stdOut, + stderr); Exception error = spy.handlerError.get(); if (error != null) { diff --git a/dd-java-agent/instrumentation/maven/maven-3.2.1/src/test/resources/settings.mirror.xml b/dd-java-agent/instrumentation/maven/maven-3.2.1/src/test/resources/settings.mirror.xml new file mode 100644 index 00000000000..7b663052386 --- /dev/null +++ b/dd-java-agent/instrumentation/maven/maven-3.2.1/src/test/resources/settings.mirror.xml @@ -0,0 +1,9 @@ + + + + env-proxy + * + ${env.MAVEN_REPOSITORY_PROXY} + + + From 5014a72bebbdd66579c943acb25b08b065070f55 Mon Sep 17 00:00:00 2001 From: Alexey Kuznetsov Date: Mon, 21 Sep 2026 10:21:51 -0400 Subject: [PATCH 2/2] Fixed review comments. --- dd-java-agent/instrumentation/maven/maven-3.2.1/build.gradle | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/dd-java-agent/instrumentation/maven/maven-3.2.1/build.gradle b/dd-java-agent/instrumentation/maven/maven-3.2.1/build.gradle index 205307d2c23..8e7cf5c6fed 100644 --- a/dd-java-agent/instrumentation/maven/maven-3.2.1/build.gradle +++ b/dd-java-agent/instrumentation/maven/maven-3.2.1/build.gradle @@ -13,9 +13,10 @@ muzzle { addTestSuiteForDir('latestDepTest', 'test') +def mavenRepositoryProxy = providers.gradleProperty('mavenRepositoryProxy') tasks.withType(Test).configureEach { - if (project.hasProperty('mavenRepositoryProxy')) { - environment 'MAVEN_REPOSITORY_PROXY', project.property('mavenRepositoryProxy') + if (mavenRepositoryProxy.isPresent()) { + environment 'MAVEN_REPOSITORY_PROXY', mavenRepositoryProxy.get() } }