This is an automated email from the ASF dual-hosted git repository.

cstamas pushed a commit to branch maven-4.0.x
in repository https://gitbox.apache.org/repos/asf/maven.git


The following commit(s) were added to refs/heads/maven-4.0.x by this push:
     new adf51981e9 Tidy up executor UTs (#11249) (#11262)
adf51981e9 is described below

commit adf51981e9921ea2feb372daf5afe1e01ef7bdb3
Author: Tamas Cservenak <[email protected]>
AuthorDate: Tue Oct 14 12:07:07 2025 +0200

    Tidy up executor UTs (#11249) (#11262)
    
    Tidy up executor UTs as they are problematic. Output as much as possible as 
Maven in this case is used in quiet mode.
    
    Also update Toolbox version and centralize it (one exception: tool 
deprecated and unused ctor).
    
    Backport of 059731ab302e858e506b30dc2fe3d439a4a33944
---
 .../maven/cling/invoker/mvn/MavenInvokerTest.java  |   5 +-
 impl/maven-executor/pom.xml                        |  22 ++-
 .../maven/cling/executor/internal/ToolboxTool.java |   4 +-
 .../cling/executor/MavenExecutorTestSupport.java   | 212 +++++++++++----------
 .../embedded/EmbeddedMavenExecutorTest.java        |   2 +-
 .../executor/forked/ForkedMavenExecutorTest.java   |   2 +-
 .../maven/cling/executor/impl/ToolboxToolTest.java | 160 +++++++---------
 impl/maven-impl/pom.xml                            |   4 +-
 its/core-it-suite/pom.xml                          |   2 -
 .../it/MavenITmng8400CanonicalMavenHomeTest.java   |   2 +-
 .../main/java/org/apache/maven/it/Verifier.java    |   9 +-
 pom.xml                                            |  17 ++
 12 files changed, 233 insertions(+), 208 deletions(-)

diff --git 
a/impl/maven-cli/src/test/java/org/apache/maven/cling/invoker/mvn/MavenInvokerTest.java
 
b/impl/maven-cli/src/test/java/org/apache/maven/cling/invoker/mvn/MavenInvokerTest.java
index eae08feb2d..2a1d8ab343 100644
--- 
a/impl/maven-cli/src/test/java/org/apache/maven/cling/invoker/mvn/MavenInvokerTest.java
+++ 
b/impl/maven-cli/src/test/java/org/apache/maven/cling/invoker/mvn/MavenInvokerTest.java
@@ -218,10 +218,11 @@ void conflictingSettings(
         Map<String, String> logs = invoke(
                 cwd,
                 userHome,
-                List.of("eu.maveniverse.maven.plugins:toolbox:0.7.4:help"),
+                List.of("eu.maveniverse.maven.plugins:toolbox:" + 
System.getProperty("version.toolbox") + ":help"),
                 List.of("--force-interactive"));
 
-        String log = 
logs.get("eu.maveniverse.maven.plugins:toolbox:0.7.4:help");
+        String log =
+                logs.get("eu.maveniverse.maven.plugins:toolbox:" + 
System.getProperty("version.toolbox") + ":help");
         assertTrue(log.contains("https://repo1.maven.org/maven2";), log);
         assertFalse(log.contains("https://repo.maven.apache.org/maven2";), log);
     }
diff --git a/impl/maven-executor/pom.xml b/impl/maven-executor/pom.xml
index ef87e64255..c83722f63b 100644
--- a/impl/maven-executor/pom.xml
+++ b/impl/maven-executor/pom.xml
@@ -32,8 +32,9 @@ under the License.
   <description>Maven 4 Executor, for executing Maven 3/4.</description>
 
   <properties>
-    <maven3version>3.9.9</maven3version>
+    <maven3version>3.9.11</maven3version>
     <maven4version>${project.version}</maven4version>
+    <testTmpDir>${project.build.directory}/tmp</testTmpDir>
   </properties>
 
   <dependencies>
@@ -110,6 +111,24 @@ under the License.
           </execution>
         </executions>
       </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-antrun-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>create-tmp-dir</id>
+            <goals>
+              <goal>run</goal>
+            </goals>
+            <phase>process-test-resources</phase>
+            <configuration>
+              <target>
+                <mkdir dir="${testTmpDir}" />
+              </target>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-surefire-plugin</artifactId>
@@ -122,6 +141,7 @@ under the License.
             
<maven4home>${project.build.directory}/dependency/apache-maven-${maven4version}</maven4home>
             <localRepository>${settings.localRepository}</localRepository>
           </systemPropertyVariables>
+          <argLine>-Xmx256m @{jacocoArgLine} 
-Djava.io.tmpdir=${testTmpDir}</argLine>
         </configuration>
       </plugin>
     </plugins>
diff --git 
a/impl/maven-executor/src/main/java/org/apache/maven/cling/executor/internal/ToolboxTool.java
 
b/impl/maven-executor/src/main/java/org/apache/maven/cling/executor/internal/ToolboxTool.java
index 5d856655bf..ebdd3ac2a5 100644
--- 
a/impl/maven-executor/src/main/java/org/apache/maven/cling/executor/internal/ToolboxTool.java
+++ 
b/impl/maven-executor/src/main/java/org/apache/maven/cling/executor/internal/ToolboxTool.java
@@ -47,11 +47,11 @@ public class ToolboxTool implements ExecutorTool {
     private final ExecutorHelper.Mode forceMode;
 
     /**
-     * @deprecated Better specify required version yourself. This one is 
"cemented" to 0.7.4
+     * @deprecated Better specify required version yourself. This one is 
"cemented" to 0.13.7
      */
     @Deprecated
     public ToolboxTool(ExecutorHelper helper) {
-        this(helper, "0.7.4");
+        this(helper, "0.13.7");
     }
 
     public ToolboxTool(ExecutorHelper helper, String toolboxVersion) {
diff --git 
a/impl/maven-executor/src/test/java/org/apache/maven/cling/executor/MavenExecutorTestSupport.java
 
b/impl/maven-executor/src/test/java/org/apache/maven/cling/executor/MavenExecutorTestSupport.java
index afa33b904a..ae8099cdd1 100644
--- 
a/impl/maven-executor/src/test/java/org/apache/maven/cling/executor/MavenExecutorTestSupport.java
+++ 
b/impl/maven-executor/src/test/java/org/apache/maven/cling/executor/MavenExecutorTestSupport.java
@@ -30,10 +30,11 @@
 import org.apache.maven.api.annotations.Nullable;
 import org.apache.maven.api.cli.Executor;
 import org.apache.maven.api.cli.ExecutorRequest;
-import org.apache.maven.cling.executor.embedded.EmbeddedMavenExecutor;
-import org.apache.maven.cling.executor.forked.ForkedMavenExecutor;
+import org.apache.maven.cling.executor.impl.ToolboxToolTest;
 import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInfo;
 import org.junit.jupiter.api.Timeout;
 import org.junit.jupiter.api.condition.DisabledOnOs;
 import org.junit.jupiter.api.io.CleanupMode;
@@ -44,13 +45,48 @@
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.junit.jupiter.api.condition.OS.WINDOWS;
 
+@Timeout(15)
 public abstract class MavenExecutorTestSupport {
-    @Timeout(15)
+    @TempDir(cleanup = CleanupMode.NEVER)
+    private static Path tempDir;
+
+    private Path cwd;
+
+    private Path userHome;
+
+    @BeforeEach
+    void beforeEach(TestInfo testInfo) throws Exception {
+        cwd = 
tempDir.resolve(testInfo.getTestMethod().orElseThrow().getName()).resolve("cwd");
+        Files.createDirectories(cwd);
+        userHome = 
tempDir.resolve(testInfo.getTestMethod().orElseThrow().getName())
+                .resolve("home");
+        Files.createDirectories(userHome);
+        MimirInfuser.infuseUW(userHome);
+
+        System.out.println("=== " + 
testInfo.getTestMethod().orElseThrow().getName());
+    }
+
+    private static Executor executor;
+
+    protected final Executor createAndMemoizeExecutor() {
+        if (executor == null) {
+            executor = doSelectExecutor();
+        }
+        return executor;
+    }
+
+    @AfterAll
+    static void afterAll() {
+        if (executor != null) {
+            executor.close();
+            executor = null;
+        }
+    }
+
+    protected abstract Executor doSelectExecutor();
+
     @Test
-    void mvnenc(
-            @TempDir(cleanup = CleanupMode.ON_SUCCESS) Path cwd,
-            @TempDir(cleanup = CleanupMode.ON_SUCCESS) Path userHome)
-            throws Exception {
+    void mvnenc4() throws Exception {
         String logfile = "m4.log";
         execute(
                 cwd.resolve(logfile),
@@ -68,202 +104,190 @@ void mvnenc(
     @DisabledOnOs(
             value = WINDOWS,
             disabledReason = "JUnit on Windows fails to clean up as mvn3 does 
not close log file properly")
-    @Timeout(15)
     @Test
-    void dump3(
-            @TempDir(cleanup = CleanupMode.ON_SUCCESS) Path cwd,
-            @TempDir(cleanup = CleanupMode.ON_SUCCESS) Path userHome)
-            throws Exception {
+    void dump3() throws Exception {
         String logfile = "m3.log";
         execute(
                 cwd.resolve(logfile),
                 List.of(mvn3ExecutorRequestBuilder()
                         .cwd(cwd)
                         .userHomeDirectory(userHome)
-                        
.argument("eu.maveniverse.maven.plugins:toolbox:0.7.4:gav-dump")
+                        .argument(
+                                "eu.maveniverse.maven.plugins:toolbox:" + 
ToolboxToolTest.TOOLBOX_VERSION + ":gav-dump")
                         .argument("-l")
                         .argument(logfile)
                         .build()));
         System.out.println(Files.readString(cwd.resolve(logfile)));
     }
 
-    @Timeout(15)
     @Test
-    void dump4(
-            @TempDir(cleanup = CleanupMode.ON_SUCCESS) Path cwd,
-            @TempDir(cleanup = CleanupMode.ON_SUCCESS) Path userHome)
-            throws Exception {
+    void dump4() throws Exception {
         String logfile = "m4.log";
         execute(
                 cwd.resolve(logfile),
                 List.of(mvn4ExecutorRequestBuilder()
                         .cwd(cwd)
                         .userHomeDirectory(userHome)
-                        
.argument("eu.maveniverse.maven.plugins:toolbox:0.7.4:gav-dump")
+                        .argument(
+                                "eu.maveniverse.maven.plugins:toolbox:" + 
ToolboxToolTest.TOOLBOX_VERSION + ":gav-dump")
                         .argument("-l")
                         .argument(logfile)
                         .build()));
         System.out.println(Files.readString(cwd.resolve(logfile)));
     }
 
-    @Timeout(15)
+    @DisabledOnOs(
+            value = WINDOWS,
+            disabledReason = "JUnit on Windows fails to clean up as mvn3 does 
not close log file properly")
     @Test
-    void defaultFs(@TempDir(cleanup = CleanupMode.ON_SUCCESS) Path tempDir) 
throws Exception {
-        layDownFiles(tempDir);
-        String logfile = "m4.log";
+    void defaultFs3() throws Exception {
+        layDownFiles(cwd);
+        String logfile = "m3.log";
         execute(
-                tempDir.resolve(logfile),
-                List.of(mvn4ExecutorRequestBuilder()
-                        .cwd(tempDir)
+                cwd.resolve(logfile),
+                List.of(mvn3ExecutorRequestBuilder()
+                        .cwd(cwd)
                         .argument("-V")
                         .argument("verify")
                         .argument("-l")
                         .argument(logfile)
                         .build()));
+        System.out.println(Files.readString(cwd.resolve(logfile)));
     }
 
-    @Timeout(15)
-    @Test
-    void version() throws Exception {
-        assertEquals(
-                System.getProperty("maven4version"),
-                mavenVersion(mvn4ExecutorRequestBuilder().build()));
-    }
-
-    @DisabledOnOs(
-            value = WINDOWS,
-            disabledReason = "JUnit on Windows fails to clean up as mvn3 does 
not close log file properly")
-    @Timeout(15)
     @Test
-    void defaultFs3x(@TempDir(cleanup = CleanupMode.ON_SUCCESS) Path tempDir) 
throws Exception {
-        layDownFiles(tempDir);
-        String logfile = "m3.log";
+    void defaultFs4() throws Exception {
+        layDownFiles(cwd);
+        String logfile = "m4.log";
         execute(
-                tempDir.resolve(logfile),
-                List.of(mvn3ExecutorRequestBuilder()
-                        .cwd(tempDir)
+                cwd.resolve(logfile),
+                List.of(mvn4ExecutorRequestBuilder()
+                        .cwd(cwd)
                         .argument("-V")
                         .argument("verify")
                         .argument("-l")
                         .argument(logfile)
                         .build()));
+        System.out.println(Files.readString(cwd.resolve(logfile)));
     }
 
-    @Timeout(15)
     @Test
-    void version3x() throws Exception {
+    void version3() throws Exception {
         assertEquals(
                 System.getProperty("maven3version"),
                 mavenVersion(mvn3ExecutorRequestBuilder().build()));
     }
 
-    @Timeout(15)
     @Test
-    void defaultFsCaptureOutput(@TempDir(cleanup = CleanupMode.ON_SUCCESS) 
Path tempDir) throws Exception {
-        layDownFiles(tempDir);
+    void version4() throws Exception {
+        assertEquals(
+                System.getProperty("maven4version"),
+                mavenVersion(mvn4ExecutorRequestBuilder().build()));
+    }
+
+    @Test
+    void defaultFs4CaptureOutput() throws Exception {
+        layDownFiles(cwd);
         ByteArrayOutputStream stdout = new ByteArrayOutputStream();
         execute(
                 null,
                 List.of(mvn4ExecutorRequestBuilder()
-                        .cwd(tempDir)
+                        .cwd(cwd)
                         .argument("-V")
                         .argument("verify")
                         .stdOut(stdout)
                         .build()));
+        System.out.println(stdout);
         assertFalse(stdout.toString().contains("[\u001B["), "By default no 
ANSI color codes");
         assertTrue(stdout.toString().contains("INFO"), "No INFO found");
     }
 
-    @Timeout(15)
     @Test
-    void defaultFsCaptureOutputWithForcedColor(@TempDir(cleanup = 
CleanupMode.ON_SUCCESS) Path tempDir)
-            throws Exception {
-        layDownFiles(tempDir);
+    void defaultFs4CaptureOutputWithForcedColor() throws Exception {
+        layDownFiles(cwd);
         ByteArrayOutputStream stdout = new ByteArrayOutputStream();
         execute(
                 null,
                 List.of(mvn4ExecutorRequestBuilder()
-                        .cwd(tempDir)
+                        .cwd(cwd)
                         .argument("-V")
                         .argument("verify")
                         .argument("--color=yes")
                         .stdOut(stdout)
                         .build()));
+        System.out.println(stdout);
         assertTrue(stdout.toString().contains("[\u001B["), "No ANSI codes 
present");
         assertTrue(stdout.toString().contains("INFO"), "No INFO found");
     }
 
-    @Timeout(15)
     @Test
-    void defaultFsCaptureOutputWithForcedOffColor(@TempDir(cleanup = 
CleanupMode.ON_SUCCESS) Path tempDir)
-            throws Exception {
-        layDownFiles(tempDir);
+    void defaultFs4CaptureOutputWithForcedOffColor() throws Exception {
+        layDownFiles(cwd);
         ByteArrayOutputStream stdout = new ByteArrayOutputStream();
         execute(
                 null,
                 List.of(mvn4ExecutorRequestBuilder()
-                        .cwd(tempDir)
+                        .cwd(cwd)
                         .argument("-V")
                         .argument("verify")
                         .argument("--color=no")
                         .stdOut(stdout)
                         .build()));
+        System.out.println(stdout);
         assertFalse(stdout.toString().contains("[\u001B["), "No ANSI codes 
present");
         assertTrue(stdout.toString().contains("INFO"), "No INFO found");
     }
 
-    @Timeout(15)
     @Test
-    void defaultFs3xCaptureOutput(@TempDir(cleanup = CleanupMode.ON_SUCCESS) 
Path tempDir) throws Exception {
-        layDownFiles(tempDir);
+    void defaultFs3CaptureOutput() throws Exception {
+        layDownFiles(cwd);
         ByteArrayOutputStream stdout = new ByteArrayOutputStream();
         execute(
                 null,
                 List.of(mvn3ExecutorRequestBuilder()
-                        .cwd(tempDir)
+                        .cwd(cwd)
                         .argument("-V")
                         .argument("verify")
                         .stdOut(stdout)
                         .build()));
+        System.out.println(stdout);
         // Note: we do not validate ANSI as Maven3 is weird in this respect 
(thinks is color but is not)
         // assertTrue(stdout.toString().contains("[\u001B["), "No ANSI codes 
present");
         assertTrue(stdout.toString().contains("INFO"), "No INFO found");
     }
 
-    @Timeout(15)
     @Test
-    void defaultFs3xCaptureOutputWithForcedColor(@TempDir(cleanup = 
CleanupMode.ON_SUCCESS) Path tempDir)
-            throws Exception {
-        layDownFiles(tempDir);
+    void defaultFs3CaptureOutputWithForcedColor() throws Exception {
+        layDownFiles(cwd);
         ByteArrayOutputStream stdout = new ByteArrayOutputStream();
         execute(
                 null,
                 List.of(mvn3ExecutorRequestBuilder()
-                        .cwd(tempDir)
+                        .cwd(cwd)
                         .argument("-V")
                         .argument("verify")
                         .argument("--color=yes")
                         .stdOut(stdout)
                         .build()));
+        System.out.println(stdout);
         assertTrue(stdout.toString().contains("[\u001B["), "No ANSI codes 
present");
         assertTrue(stdout.toString().contains("INFO"), "No INFO found");
     }
 
-    @Timeout(15)
     @Test
-    void defaultFs3xCaptureOutputWithForcedOffColor(@TempDir(cleanup = 
CleanupMode.ON_SUCCESS) Path tempDir)
-            throws Exception {
-        layDownFiles(tempDir);
+    void defaultFs3CaptureOutputWithForcedOffColor() throws Exception {
+        layDownFiles(cwd);
         ByteArrayOutputStream stdout = new ByteArrayOutputStream();
         execute(
                 null,
                 List.of(mvn3ExecutorRequestBuilder()
-                        .cwd(tempDir)
+                        .cwd(cwd)
                         .argument("-V")
                         .argument("verify")
                         .argument("--color=no")
                         .stdOut(stdout)
                         .build()));
+        System.out.println(stdout);
         assertFalse(stdout.toString().contains("[\u001B["), "No ANSI codes 
present");
         assertTrue(stdout.toString().contains("INFO"), "No INFO found");
     }
@@ -316,8 +340,11 @@ public static void main(String... args) {
 
     protected void execute(@Nullable Path logFile, Collection<ExecutorRequest> 
requests) throws Exception {
         Executor invoker = createAndMemoizeExecutor();
+        String mavenVersion = invoker.mavenVersion(requests.iterator().next());
         for (ExecutorRequest request : requests) {
-            MimirInfuser.infuseUW(request.userHomeDirectory());
+            if (mavenVersion.startsWith("4.")) {
+                MimirInfuser.infuseUW(request.userHomeDirectory());
+            }
             int exitCode = invoker.execute(request);
             if (exitCode != 0) {
                 throw new FailedExecution(request, exitCode, logFile == null ? 
"" : Files.readString(logFile));
@@ -329,15 +356,16 @@ protected String mavenVersion(ExecutorRequest request) 
throws Exception {
         return createAndMemoizeExecutor().mavenVersion(request);
     }
 
-    public static ExecutorRequest.Builder mvn3ExecutorRequestBuilder() {
-        return 
addTailRepo(ExecutorRequest.mavenBuilder(Paths.get(System.getProperty("maven3home"))));
+    public ExecutorRequest.Builder mvn3ExecutorRequestBuilder() {
+        return 
customize(ExecutorRequest.mavenBuilder(Paths.get(System.getProperty("maven3home"))));
     }
 
-    public static ExecutorRequest.Builder mvn4ExecutorRequestBuilder() {
-        return 
addTailRepo(ExecutorRequest.mavenBuilder(Paths.get(System.getProperty("maven4home"))));
+    public ExecutorRequest.Builder mvn4ExecutorRequestBuilder() {
+        return 
customize(ExecutorRequest.mavenBuilder(Paths.get(System.getProperty("maven4home"))));
     }
 
-    private static ExecutorRequest.Builder addTailRepo(ExecutorRequest.Builder 
builder) {
+    private ExecutorRequest.Builder customize(ExecutorRequest.Builder builder) 
{
+        builder = builder.cwd(cwd).userHomeDirectory(userHome);
         if (System.getProperty("localRepository") != null) {
             builder.argument("-Dmaven.repo.local.tail=" + 
System.getProperty("localRepository"));
         }
@@ -377,28 +405,4 @@ public String getLog() {
             return log;
         }
     }
-
-    private static Executor executor;
-
-    protected final Executor createAndMemoizeExecutor() {
-        if (executor == null) {
-            executor = doSelectExecutor();
-        }
-        return executor;
-    }
-
-    @AfterAll
-    static void afterAll() {
-        if (executor != null) {
-            executor = null;
-        }
-    }
-
-    // NOTE: we keep these instances alive to make sure JVM (running tests) 
loads JAnsi/JLine native library ONLY once
-    // in real life you'd anyway keep these alive as long needed, but here, we 
repeat a series of tests against same
-    // instance, to prevent them attempting native load more than once.
-    public static final EmbeddedMavenExecutor EMBEDDED_MAVEN_EXECUTOR = new 
EmbeddedMavenExecutor();
-    public static final ForkedMavenExecutor FORKED_MAVEN_EXECUTOR = new 
ForkedMavenExecutor();
-
-    protected abstract Executor doSelectExecutor();
 }
diff --git 
a/impl/maven-executor/src/test/java/org/apache/maven/cling/executor/embedded/EmbeddedMavenExecutorTest.java
 
b/impl/maven-executor/src/test/java/org/apache/maven/cling/executor/embedded/EmbeddedMavenExecutorTest.java
index 1dd04929db..c214fc6ffe 100644
--- 
a/impl/maven-executor/src/test/java/org/apache/maven/cling/executor/embedded/EmbeddedMavenExecutorTest.java
+++ 
b/impl/maven-executor/src/test/java/org/apache/maven/cling/executor/embedded/EmbeddedMavenExecutorTest.java
@@ -28,6 +28,6 @@ public class EmbeddedMavenExecutorTest extends 
MavenExecutorTestSupport {
 
     @Override
     protected Executor doSelectExecutor() {
-        return EMBEDDED_MAVEN_EXECUTOR;
+        return new EmbeddedMavenExecutor();
     }
 }
diff --git 
a/impl/maven-executor/src/test/java/org/apache/maven/cling/executor/forked/ForkedMavenExecutorTest.java
 
b/impl/maven-executor/src/test/java/org/apache/maven/cling/executor/forked/ForkedMavenExecutorTest.java
index 1261b0d267..5555e0ba34 100644
--- 
a/impl/maven-executor/src/test/java/org/apache/maven/cling/executor/forked/ForkedMavenExecutorTest.java
+++ 
b/impl/maven-executor/src/test/java/org/apache/maven/cling/executor/forked/ForkedMavenExecutorTest.java
@@ -28,6 +28,6 @@ public class ForkedMavenExecutorTest extends 
MavenExecutorTestSupport {
 
     @Override
     protected Executor doSelectExecutor() {
-        return FORKED_MAVEN_EXECUTOR;
+        return new ForkedMavenExecutor();
     }
 }
diff --git 
a/impl/maven-executor/src/test/java/org/apache/maven/cling/executor/impl/ToolboxToolTest.java
 
b/impl/maven-executor/src/test/java/org/apache/maven/cling/executor/impl/ToolboxToolTest.java
index 14ca0c0f5b..52afecb5f8 100644
--- 
a/impl/maven-executor/src/test/java/org/apache/maven/cling/executor/impl/ToolboxToolTest.java
+++ 
b/impl/maven-executor/src/test/java/org/apache/maven/cling/executor/impl/ToolboxToolTest.java
@@ -25,32 +25,43 @@
 import java.util.Map;
 
 import eu.maveniverse.maven.mimir.testing.MimirInfuser;
+import org.apache.maven.api.cli.Executor;
 import org.apache.maven.api.cli.ExecutorRequest;
 import org.apache.maven.cling.executor.ExecutorHelper;
-import org.apache.maven.cling.executor.MavenExecutorTestSupport;
+import org.apache.maven.cling.executor.embedded.EmbeddedMavenExecutor;
+import org.apache.maven.cling.executor.forked.ForkedMavenExecutor;
 import org.apache.maven.cling.executor.internal.HelperImpl;
 import org.apache.maven.cling.executor.internal.ToolboxTool;
-import org.junit.jupiter.api.BeforeAll;
-import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.TestInfo;
 import org.junit.jupiter.api.Timeout;
+import org.junit.jupiter.api.io.CleanupMode;
 import org.junit.jupiter.api.io.TempDir;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.EnumSource;
 
-import static 
org.apache.maven.cling.executor.MavenExecutorTestSupport.mvn3ExecutorRequestBuilder;
-import static 
org.apache.maven.cling.executor.MavenExecutorTestSupport.mvn4ExecutorRequestBuilder;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
+@Timeout(15)
 public class ToolboxToolTest {
-    private static final String VERSION = "0.7.4";
+    private static final Executor EMBEDDED_MAVEN_EXECUTOR = new 
EmbeddedMavenExecutor();
+    private static final Executor FORKED_MAVEN_EXECUTOR = new 
ForkedMavenExecutor();
 
-    @TempDir
-    private static Path userHome;
+    public static final String TOOLBOX_VERSION = 
System.getProperty("version.toolbox");
 
-    @BeforeAll
-    static void beforeAll() throws Exception {
+    @TempDir(cleanup = CleanupMode.NEVER)
+    private static Path tempDir;
+
+    private Path userHome;
+
+    @BeforeEach
+    void beforeEach(TestInfo testInfo) throws Exception {
+        userHome = 
tempDir.resolve(testInfo.getTestMethod().orElseThrow().getName());
+        Files.createDirectories(userHome);
         MimirInfuser.infuseUW(userHome);
+
+        System.out.println("=== " + 
testInfo.getTestMethod().orElseThrow().getName());
     }
 
     private ExecutorRequest.Builder getExecutorRequest(ExecutorHelper helper) {
@@ -61,103 +72,74 @@ private ExecutorRequest.Builder 
getExecutorRequest(ExecutorHelper helper) {
         return builder;
     }
 
-    @Timeout(15)
     @ParameterizedTest
     @EnumSource(ExecutorHelper.Mode.class)
     void dump3(ExecutorHelper.Mode mode) throws Exception {
-        ExecutorHelper helper = new HelperImpl(
-                mode,
-                mvn3ExecutorRequestBuilder().build().installationDirectory(),
-                userHome,
-                MavenExecutorTestSupport.EMBEDDED_MAVEN_EXECUTOR,
-                MavenExecutorTestSupport.FORKED_MAVEN_EXECUTOR);
-        Map<String, String> dump = new ToolboxTool(helper, 
VERSION).dump(getExecutorRequest(helper));
+        ExecutorHelper helper =
+                new HelperImpl(mode, mvn3Home(), userHome, 
EMBEDDED_MAVEN_EXECUTOR, FORKED_MAVEN_EXECUTOR);
+        Map<String, String> dump = new ToolboxTool(helper, 
TOOLBOX_VERSION).dump(getExecutorRequest(helper));
+        System.out.println(mode.name() + ": " + dump.toString());
         assertEquals(System.getProperty("maven3version"), 
dump.get("maven.version"));
     }
 
-    @Timeout(15)
     @ParameterizedTest
     @EnumSource(ExecutorHelper.Mode.class)
     void dump4(ExecutorHelper.Mode mode) throws Exception {
-        ExecutorHelper helper = new HelperImpl(
-                mode,
-                mvn4ExecutorRequestBuilder().build().installationDirectory(),
-                userHome,
-                MavenExecutorTestSupport.EMBEDDED_MAVEN_EXECUTOR,
-                MavenExecutorTestSupport.FORKED_MAVEN_EXECUTOR);
-        Map<String, String> dump = new ToolboxTool(helper, 
VERSION).dump(getExecutorRequest(helper));
+        ExecutorHelper helper =
+                new HelperImpl(mode, mvn4Home(), userHome, 
EMBEDDED_MAVEN_EXECUTOR, FORKED_MAVEN_EXECUTOR);
+        Map<String, String> dump = new ToolboxTool(helper, 
TOOLBOX_VERSION).dump(getExecutorRequest(helper));
+        System.out.println(mode.name() + ": " + dump.toString());
         assertEquals(System.getProperty("maven4version"), 
dump.get("maven.version"));
     }
 
-    @Timeout(15)
     @ParameterizedTest
     @EnumSource(ExecutorHelper.Mode.class)
     void version3(ExecutorHelper.Mode mode) {
-        ExecutorHelper helper = new HelperImpl(
-                mode,
-                mvn3ExecutorRequestBuilder().build().installationDirectory(),
-                userHome,
-                MavenExecutorTestSupport.EMBEDDED_MAVEN_EXECUTOR,
-                MavenExecutorTestSupport.FORKED_MAVEN_EXECUTOR);
+        ExecutorHelper helper =
+                new HelperImpl(mode, mvn3Home(), userHome, 
EMBEDDED_MAVEN_EXECUTOR, FORKED_MAVEN_EXECUTOR);
+        System.out.println(mode.name() + ": " + helper.mavenVersion());
         assertEquals(System.getProperty("maven3version"), 
helper.mavenVersion());
     }
 
-    @Timeout(15)
     @ParameterizedTest
     @EnumSource(ExecutorHelper.Mode.class)
     void version4(ExecutorHelper.Mode mode) {
-        ExecutorHelper helper = new HelperImpl(
-                mode,
-                mvn4ExecutorRequestBuilder().build().installationDirectory(),
-                userHome,
-                MavenExecutorTestSupport.EMBEDDED_MAVEN_EXECUTOR,
-                MavenExecutorTestSupport.FORKED_MAVEN_EXECUTOR);
+        ExecutorHelper helper =
+                new HelperImpl(mode, mvn4Home(), userHome, 
EMBEDDED_MAVEN_EXECUTOR, FORKED_MAVEN_EXECUTOR);
+        System.out.println(mode.name() + ": " + helper.mavenVersion());
         assertEquals(System.getProperty("maven4version"), 
helper.mavenVersion());
     }
 
-    @Timeout(15)
     @ParameterizedTest
     @EnumSource(ExecutorHelper.Mode.class)
     void localRepository3(ExecutorHelper.Mode mode) {
-        ExecutorHelper helper = new HelperImpl(
-                mode,
-                mvn3ExecutorRequestBuilder().build().installationDirectory(),
-                userHome,
-                MavenExecutorTestSupport.EMBEDDED_MAVEN_EXECUTOR,
-                MavenExecutorTestSupport.FORKED_MAVEN_EXECUTOR);
-        String localRepository = new ToolboxTool(helper, 
VERSION).localRepository(getExecutorRequest(helper));
+        ExecutorHelper helper =
+                new HelperImpl(mode, mvn3Home(), userHome, 
EMBEDDED_MAVEN_EXECUTOR, FORKED_MAVEN_EXECUTOR);
+        String localRepository = new ToolboxTool(helper, 
TOOLBOX_VERSION).localRepository(getExecutorRequest(helper));
+        System.out.println(mode.name() + ": " + localRepository);
         Path local = Paths.get(localRepository);
         assertTrue(Files.isDirectory(local));
     }
 
-    @Timeout(15)
     @ParameterizedTest
     @EnumSource(ExecutorHelper.Mode.class)
-    @Disabled("disable temporarily so that we can get the debug statement")
     void localRepository4(ExecutorHelper.Mode mode) {
-        ExecutorHelper helper = new HelperImpl(
-                mode,
-                mvn4ExecutorRequestBuilder().build().installationDirectory(),
-                userHome,
-                MavenExecutorTestSupport.EMBEDDED_MAVEN_EXECUTOR,
-                MavenExecutorTestSupport.FORKED_MAVEN_EXECUTOR);
-        String localRepository = new ToolboxTool(helper, 
VERSION).localRepository(getExecutorRequest(helper));
+        ExecutorHelper helper =
+                new HelperImpl(mode, mvn4Home(), userHome, 
EMBEDDED_MAVEN_EXECUTOR, FORKED_MAVEN_EXECUTOR);
+        String localRepository = new ToolboxTool(helper, 
TOOLBOX_VERSION).localRepository(getExecutorRequest(helper));
+        System.out.println(mode.name() + ": " + localRepository);
         Path local = Paths.get(localRepository);
         assertTrue(Files.isDirectory(local));
     }
 
-    @Timeout(15)
     @ParameterizedTest
     @EnumSource(ExecutorHelper.Mode.class)
     void artifactPath3(ExecutorHelper.Mode mode) {
-        ExecutorHelper helper = new HelperImpl(
-                mode,
-                mvn3ExecutorRequestBuilder().build().installationDirectory(),
-                userHome,
-                MavenExecutorTestSupport.EMBEDDED_MAVEN_EXECUTOR,
-                MavenExecutorTestSupport.FORKED_MAVEN_EXECUTOR);
-        String path = new ToolboxTool(helper, VERSION)
+        ExecutorHelper helper =
+                new HelperImpl(mode, mvn3Home(), userHome, 
EMBEDDED_MAVEN_EXECUTOR, FORKED_MAVEN_EXECUTOR);
+        String path = new ToolboxTool(helper, TOOLBOX_VERSION)
                 .artifactPath(getExecutorRequest(helper), 
"aopalliance:aopalliance:1.0", "central");
+        System.out.println(mode.name() + ": " + path);
         // split repository: assert "ends with" as split may introduce prefixes
         assertTrue(
                 path.endsWith("aopalliance" + File.separator + "aopalliance" + 
File.separator + "1.0" + File.separator
@@ -165,18 +147,14 @@ void artifactPath3(ExecutorHelper.Mode mode) {
                 "path=" + path);
     }
 
-    @Timeout(15)
     @ParameterizedTest
     @EnumSource(ExecutorHelper.Mode.class)
     void artifactPath4(ExecutorHelper.Mode mode) {
-        ExecutorHelper helper = new HelperImpl(
-                mode,
-                mvn4ExecutorRequestBuilder().build().installationDirectory(),
-                userHome,
-                MavenExecutorTestSupport.EMBEDDED_MAVEN_EXECUTOR,
-                MavenExecutorTestSupport.FORKED_MAVEN_EXECUTOR);
-        String path = new ToolboxTool(helper, VERSION)
+        ExecutorHelper helper =
+                new HelperImpl(mode, mvn4Home(), userHome, 
EMBEDDED_MAVEN_EXECUTOR, FORKED_MAVEN_EXECUTOR);
+        String path = new ToolboxTool(helper, TOOLBOX_VERSION)
                 .artifactPath(getExecutorRequest(helper), 
"aopalliance:aopalliance:1.0", "central");
+        System.out.println(mode.name() + ": " + path);
         // split repository: assert "ends with" as split may introduce prefixes
         assertTrue(
                 path.endsWith("aopalliance" + File.separator + "aopalliance" + 
File.separator + "1.0" + File.separator
@@ -184,35 +162,35 @@ void artifactPath4(ExecutorHelper.Mode mode) {
                 "path=" + path);
     }
 
-    @Timeout(15)
     @ParameterizedTest
     @EnumSource(ExecutorHelper.Mode.class)
     void metadataPath3(ExecutorHelper.Mode mode) {
-        ExecutorHelper helper = new HelperImpl(
-                mode,
-                mvn3ExecutorRequestBuilder().build().installationDirectory(),
-                userHome,
-                MavenExecutorTestSupport.EMBEDDED_MAVEN_EXECUTOR,
-                MavenExecutorTestSupport.FORKED_MAVEN_EXECUTOR);
-        String path =
-                new ToolboxTool(helper, 
VERSION).metadataPath(getExecutorRequest(helper), "aopalliance", "someremote");
+        ExecutorHelper helper =
+                new HelperImpl(mode, mvn4Home(), userHome, 
EMBEDDED_MAVEN_EXECUTOR, FORKED_MAVEN_EXECUTOR);
+        String path = new ToolboxTool(helper, TOOLBOX_VERSION)
+                .metadataPath(getExecutorRequest(helper), "aopalliance", 
"someremote");
+        System.out.println(mode.name() + ": " + path);
         // split repository: assert "ends with" as split may introduce prefixes
         assertTrue(path.endsWith("aopalliance" + File.separator + 
"maven-metadata-someremote.xml"), "path=" + path);
     }
 
-    @Timeout(15)
     @ParameterizedTest
     @EnumSource(ExecutorHelper.Mode.class)
     void metadataPath4(ExecutorHelper.Mode mode) {
-        ExecutorHelper helper = new HelperImpl(
-                mode,
-                mvn4ExecutorRequestBuilder().build().installationDirectory(),
-                userHome,
-                MavenExecutorTestSupport.EMBEDDED_MAVEN_EXECUTOR,
-                MavenExecutorTestSupport.FORKED_MAVEN_EXECUTOR);
-        String path =
-                new ToolboxTool(helper, 
VERSION).metadataPath(getExecutorRequest(helper), "aopalliance", "someremote");
+        ExecutorHelper helper =
+                new HelperImpl(mode, mvn4Home(), userHome, 
EMBEDDED_MAVEN_EXECUTOR, FORKED_MAVEN_EXECUTOR);
+        String path = new ToolboxTool(helper, TOOLBOX_VERSION)
+                .metadataPath(getExecutorRequest(helper), "aopalliance", 
"someremote");
+        System.out.println(mode.name() + ": " + path);
         // split repository: assert "ends with" as split may introduce prefixes
         assertTrue(path.endsWith("aopalliance" + File.separator + 
"maven-metadata-someremote.xml"), "path=" + path);
     }
+
+    public Path mvn3Home() {
+        return Paths.get(System.getProperty("maven3home"));
+    }
+
+    public Path mvn4Home() {
+        return Paths.get(System.getProperty("maven4home"));
+    }
 }
diff --git a/impl/maven-impl/pom.xml b/impl/maven-impl/pom.xml
index a9d4010a28..f021234671 100644
--- a/impl/maven-impl/pom.xml
+++ b/impl/maven-impl/pom.xml
@@ -188,9 +188,9 @@ under the License.
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-surefire-plugin</artifactId>
         <configuration>
-          <systemProperties>
+          <systemPropertyVariables>
             <localRepository>${settings.localRepository}</localRepository>
-          </systemProperties>
+          </systemPropertyVariables>
         </configuration>
       </plugin>
     </plugins>
diff --git a/its/core-it-suite/pom.xml b/its/core-it-suite/pom.xml
index 5fd7927b81..8e9c0f8133 100644
--- a/its/core-it-suite/pom.xml
+++ b/its/core-it-suite/pom.xml
@@ -80,7 +80,6 @@ under the License.
     <jetty9Version>9.4.57.v20241219</jetty9Version>
 
     <stubPluginVersion>0.1-stub-SNAPSHOT</stubPluginVersion>
-    <version.toolbox>0.7.4</version.toolbox>
   </properties>
 
   <dependencies>
@@ -520,7 +519,6 @@ under the License.
           <useSystemClassLoader>false</useSystemClassLoader>
           
<promoteUserPropertiesToSystemProperties>false</promoteUserPropertiesToSystemProperties>
           <systemPropertyVariables>
-            <version.toolbox>${version.toolbox}</version.toolbox>
             <maven.test.user.home>${preparedUserHome}</maven.test.user.home>
             
<maven.test.repo.outer>${settings.localRepository}</maven.test.repo.outer>
             
<maven.test.repo.local>${preparedUserHome}/.m2/repository</maven.test.repo.local>
diff --git 
a/its/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng8400CanonicalMavenHomeTest.java
 
b/its/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng8400CanonicalMavenHomeTest.java
index bf4b79bf78..5122d16567 100644
--- 
a/its/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng8400CanonicalMavenHomeTest.java
+++ 
b/its/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng8400CanonicalMavenHomeTest.java
@@ -57,7 +57,7 @@ void testIt() throws Exception {
         Verifier verifier = newVerifier(basedir.toString(), null);
         verifier.addCliArgument("-DasProperties");
         verifier.addCliArgument("-DtoFile=dump.properties");
-        
verifier.addCliArgument("eu.maveniverse.maven.plugins:toolbox:0.7.4:gav-dump");
+        verifier.addCliArgument("eu.maveniverse.maven.plugins:toolbox:" + 
verifier.getToolboxVersion() + ":gav-dump");
         verifier.execute();
         verifier.verifyErrorFreeLog();
 
diff --git 
a/its/core-it-support/maven-it-helper/src/main/java/org/apache/maven/it/Verifier.java
 
b/its/core-it-support/maven-it-helper/src/main/java/org/apache/maven/it/Verifier.java
index b25b328d67..9ce5f12968 100644
--- 
a/its/core-it-support/maven-it-helper/src/main/java/org/apache/maven/it/Verifier.java
+++ 
b/its/core-it-support/maven-it-helper/src/main/java/org/apache/maven/it/Verifier.java
@@ -108,6 +108,9 @@ public class Verifier {
 
     private final List<String> jvmArguments = new ArrayList<>();
 
+    // TestSuiteOrdering creates Verifier in non-forked JVM as well, and there 
no prop set is set (so use default)
+    private final String toolboxVersion = 
System.getProperty("version.toolbox", "0.14.0");
+
     private Path userHomeDirectory; // the user home
 
     private String executable = ExecutorRequest.MVN;
@@ -155,7 +158,7 @@ public Verifier(String basedir, List<String> 
defaultCliArguments) throws Verific
                     this.userHomeDirectory,
                     EMBEDDED_MAVEN_EXECUTOR,
                     FORKED_MAVEN_EXECUTOR);
-            this.executorTool = new ToolboxTool(executorHelper, 
System.getProperty("version.toolbox", "0.7.4"));
+            this.executorTool = new ToolboxTool(executorHelper, 
toolboxVersion);
             this.defaultCliArguments =
                     new ArrayList<>(defaultCliArguments != null ? 
defaultCliArguments : DEFAULT_CLI_ARGUMENTS);
             this.logFile = this.basedir.resolve(logFileName);
@@ -168,6 +171,10 @@ public void setUserHomeDirectory(Path userHomeDirectory) {
         this.userHomeDirectory = requireNonNull(userHomeDirectory, 
"userHomeDirectory");
     }
 
+    public String getToolboxVersion() {
+        return toolboxVersion;
+    }
+
     public String getExecutable() {
         return executable;
     }
diff --git a/pom.xml b/pom.xml
index 66d81017f7..85f850addd 100644
--- a/pom.xml
+++ b/pom.xml
@@ -172,6 +172,9 @@ under the License.
     <woodstoxVersion>7.1.1</woodstoxVersion>
     <xmlunitVersion>2.10.4</xmlunitVersion>
     <jacocoArgLine />
+
+    <!-- Set as system property in surefire/failsafe to propagate to tests and 
IT Verifier -->
+    <toolboxVersion>0.14.0</toolboxVersion>
   </properties>
 
   <!--bootstrap-start-comment-->
@@ -717,6 +720,20 @@ under the License.
           <configuration>
             <forkNode 
implementation="org.apache.maven.plugin.surefire.extensions.SurefireForkNodeFactory"
 />
             <argLine>-Xmx256m @{jacocoArgLine}</argLine>
+            <systemPropertyVariables combine.children="append">
+              <version.toolbox>${toolboxVersion}</version.toolbox>
+            </systemPropertyVariables>
+          </configuration>
+        </plugin>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-failsafe-plugin</artifactId>
+          <configuration>
+            <forkNode 
implementation="org.apache.maven.plugin.surefire.extensions.SurefireForkNodeFactory"
 />
+            <argLine>-Xmx256m @{jacocoArgLine}</argLine>
+            <systemPropertyVariables combine.children="append">
+              <version.toolbox>${toolboxVersion}</version.toolbox>
+            </systemPropertyVariables>
           </configuration>
         </plugin>
         <!-- enforce backwards compatibility -->


Reply via email to