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..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,6 +13,13 @@ muzzle { addTestSuiteForDir('latestDepTest', 'test') +def mavenRepositoryProxy = providers.gradleProperty('mavenRepositoryProxy') +tasks.withType(Test).configureEach { + if (mavenRepositoryProxy.isPresent()) { + environment 'MAVEN_REPOSITORY_PROXY', mavenRepositoryProxy.get() + } +} + 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} + + +