From e50ce00bb7469e0333a5d9280d3a73dece648e01 Mon Sep 17 00:00:00 2001 From: Daniel Mohedano Date: Fri, 16 Oct 2026 10:23:26 +0200 Subject: [PATCH 1/2] test(maven): retry embedded Maven builds that fail to transfer artifacts --- .../maven3/AbstractMavenTest.java | 52 ++++++++++++++----- 1 file changed, 38 insertions(+), 14 deletions(-) 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 5c61e3ea06f..e682dcfac5f 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 @@ -15,10 +15,14 @@ import org.apache.maven.eventspy.AbstractEventSpy; import org.apache.maven.eventspy.EventSpy; import org.apache.maven.execution.ExecutionEvent; +import org.apache.maven.execution.MavenExecutionResult; import org.codehaus.plexus.PlexusContainer; +import org.eclipse.aether.transfer.ArtifactTransferException; import org.junit.jupiter.api.io.TempDir; public abstract class AbstractMavenTest { + private static final int MAVEN_BUILD_ATTEMPTS = 3; + @TempDir static Path WORKING_DIRECTORY; protected AbstractMavenTest() { @@ -43,15 +47,6 @@ protected void executeMaven( PrintStream stderr, String... additionalArgs) throws Exception { - MojoStartedSpy spy = new MojoStartedSpy(mojoStartedHandler); - MavenCli mavenCli = - new MavenCli() { - @Override - protected void customizeContainer(PlexusContainer container) { - container.addComponent(spy, EventSpy.class, null); - } - }; - File pomFile = new File(AbstractMavenTest.class.getResource(pomPath).toURI()); List arguments = new ArrayList<>(); @@ -67,11 +62,24 @@ protected void customizeContainer(PlexusContainer container) { } addAll(arguments, additionalArgs); - mavenCli.doMain( - arguments.toArray(new String[0]), - WORKING_DIRECTORY.toAbsolutePath().toString(), - stdOut, - stderr); + MojoStartedSpy spy; + int attempt = 0; + do { + spy = new MojoStartedSpy(mojoStartedHandler); + MojoStartedSpy attemptSpy = spy; + MavenCli mavenCli = + new MavenCli() { + @Override + protected void customizeContainer(PlexusContainer container) { + container.addComponent(attemptSpy, EventSpy.class, null); + } + }; + mavenCli.doMain( + arguments.toArray(new String[0]), + WORKING_DIRECTORY.toAbsolutePath().toString(), + stdOut, + stderr); + } while (spy.artifactTransferFailed && ++attempt < MAVEN_BUILD_ATTEMPTS); Exception error = spy.handlerError.get(); if (error != null) { @@ -80,10 +88,22 @@ protected void customizeContainer(PlexusContainer container) { assertTrue(spy.handlerRan.get()); } + private static boolean hasArtifactTransferFailure(MavenExecutionResult result) { + for (Throwable exception : result.getExceptions()) { + for (Throwable cause = exception; cause != null; cause = cause.getCause()) { + if (cause instanceof ArtifactTransferException) { + return true; + } + } + } + return false; + } + private static final class MojoStartedSpy extends AbstractEventSpy { private final Function mojoStartedHandler; private final AtomicBoolean handlerRan = new AtomicBoolean(false); private final AtomicReference handlerError = new AtomicReference<>(null); + private boolean artifactTransferFailed; private MojoStartedSpy(Function mojoStartedHandler) { this.mojoStartedHandler = mojoStartedHandler; @@ -91,6 +111,10 @@ private MojoStartedSpy(Function mojoStartedHandler) { @Override public void onEvent(Object o) { + if (o instanceof MavenExecutionResult) { + artifactTransferFailed = hasArtifactTransferFailure((MavenExecutionResult) o); + return; + } if (!(o instanceof ExecutionEvent)) { return; } From 8f1be3b78202c88c535b507d90345d4489c25087 Mon Sep 17 00:00:00 2001 From: Daniel Mohedano Date: Fri, 16 Oct 2026 10:23:27 +0200 Subject: [PATCH 2/2] test(gradle): pre-download Gradle distributions where TestKit looks for them --- .../test/java/datadog/smoketest/GradleDaemonSmokeTest.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/dd-smoke-tests/gradle/src/test/java/datadog/smoketest/GradleDaemonSmokeTest.java b/dd-smoke-tests/gradle/src/test/java/datadog/smoketest/GradleDaemonSmokeTest.java index 22dc76ce8a6..3dbf626f560 100644 --- a/dd-smoke-tests/gradle/src/test/java/datadog/smoketest/GradleDaemonSmokeTest.java +++ b/dd-smoke-tests/gradle/src/test/java/datadog/smoketest/GradleDaemonSmokeTest.java @@ -36,6 +36,7 @@ import org.gradle.tooling.internal.consumer.DefaultGradleConnector; import org.gradle.util.GradleVersion; import org.gradle.wrapper.Download; +import org.gradle.wrapper.GradleUserHomeLookup; import org.gradle.wrapper.Install; import org.gradle.wrapper.PathAssembler; import org.gradle.wrapper.WrapperConfiguration; @@ -514,7 +515,8 @@ private void ensureDependenciesDownloaded(String gradleVersion) { GradleVersion.current().getVersion(), GRADLE_DISTRIBUTION_NETWORK_TIMEOUT); - java.io.File userHomeDir = testKitFolder.toFile(); + // Gradle TestKit installs distributions in the Gradle user home of the current JVM + java.io.File userHomeDir = GradleUserHomeLookup.gradleUserHome(); java.io.File projectDir = projectFolder.toFile(); Install install = new Install(logger, download, new PathAssembler(userHomeDir, projectDir));