This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push:
new 9250de96834f CAMEL-25720: camel-jbang - run the tests of
camel-jbang-core in parallel forks (#28004)
9250de96834f is described below
commit 9250de96834f9e3b53db4ce32bd0d21f5efbdf13
Author: Claus Ibsen <[email protected]>
AuthorDate: Sat Oct 17 16:32:27 2026 +0200
CAMEL-25720: camel-jbang - run the tests of camel-jbang-core in parallel
forks (#28004)
The tests ran one JVM per test class, one class at a time, as they shared
the
static home directory of the CLI and files in the working directory. They
now
run in 4 reused forks. Each fork has a user.home of its own under target,
and a
test gets a temporary home from useTestHomeDir() (or a given one from
useHomeDir(Path)) instead of a fixed target/... directory. The tests that
use
the working directory (@UsesWorkingDirectory: run, export, dependency,
transform, init, a local camel-cli.properties) or a fixed port
(@UsesFixedPort)
run after the others, one class at a time, in the serial-test execution.
NoFixedHomeDirTest fails on a test that sets a fixed home, and AGENTS.md
(and
CLAUDE.md) of the module tell coding agents how the tests run.
The surefire time of the module goes from 399 to 153 seconds locally, and
to 96
with #28005.
Co-authored-by: Claude Opus 5.5 (1M context) <[email protected]>
Signed-off-by: Claus Ibsen <[email protected]>
---
dsl/camel-jbang/camel-jbang-core/AGENTS.md | 30 ++++++++++
dsl/camel-jbang/camel-jbang-core/CLAUDE.md | 1 +
dsl/camel-jbang/camel-jbang-core/pom.xml | 46 ++++++++++++++-
.../core/commands/CamelCommandBaseTestSupport.java | 51 ++++++++++++++++
.../jbang/core/commands/CamelJBangMainTest.java | 3 +-
.../jbang/core/commands/DependencyCopyTest.java | 1 +
.../jbang/core/commands/DependencyListTest.java | 1 +
.../jbang/core/commands/DependencyUpdateTest.java | 1 +
.../dsl/jbang/core/commands/EvalSimpleTest.java | 15 +++++
.../dsl/jbang/core/commands/ExportMainJibTest.java | 1 +
.../jbang/core/commands/ExportMainJkubeTest.java | 1 +
.../camel/dsl/jbang/core/commands/ExportTest.java | 1 +
.../camel/dsl/jbang/core/commands/InitTest.java | 1 +
.../camel/dsl/jbang/core/commands/LoadTest.java | 8 +++
.../jbang/core/commands/NoFixedHomeDirTest.java | 67 ++++++++++++++++++++++
.../jbang/core/commands/TransformRouteTest.java | 1 +
.../dsl/jbang/core/commands/TransformTest.java | 1 +
.../dsl/jbang/core/commands/UserConfigHelper.java | 10 ++--
...mandBaseTestSupport.java => UsesFixedPort.java} | 35 ++++++-----
...eTestSupport.java => UsesWorkingDirectory.java} | 36 ++++++------
.../commands/action/ActionCommandTestSupport.java | 2 +-
.../action/CamelStartupRecorderActionTest.java | 3 +-
.../core/commands/action/LoggerActionTest.java | 2 +-
.../commands/action/RouteActionJavaSourceTest.java | 2 +
.../commands/config/BaseConfigTestSupport.java | 12 +++-
.../commands/infra/InfraCommandTestSupport.java | 2 +-
.../core/commands/infra/InfraRestartTest.java | 2 +
.../dsl/jbang/core/commands/infra/InfraTest.java | 2 +
.../jbang/core/commands/plugin/PluginAddTest.java | 3 +-
.../core/commands/plugin/PluginDeleteTest.java | 3 +-
.../jbang/core/commands/plugin/PluginGetTest.java | 3 +-
.../jbang/core/commands/plugin/PluginListTest.java | 3 +-
.../process/ProcessCommandTestSupport.java | 2 +-
.../core/commands/version/VersionGetTest.java | 12 +++-
.../dsl/jbang/core/common/PluginHelperTest.java | 9 +++
35 files changed, 311 insertions(+), 62 deletions(-)
diff --git a/dsl/camel-jbang/camel-jbang-core/AGENTS.md
b/dsl/camel-jbang/camel-jbang-core/AGENTS.md
new file mode 100644
index 000000000000..9fc02a7f5f67
--- /dev/null
+++ b/dsl/camel-jbang/camel-jbang-core/AGENTS.md
@@ -0,0 +1,30 @@
+# camel-jbang-core: notes for coding agents
+
+The commands of the Camel CLI (`camel run`, `export`, `get`, `cmd`, `catalog`,
`ask`, ...). The rules of the whole
+repository are in the root `AGENTS.md`; this file adds what is particular to
this module.
+
+## Tests
+
+The tests run in 4 forks at the same time, and each fork runs many test
classes one after the other (the forks are
+reused). So a test must not depend on a fresh JVM, nor share anything with the
tests of the other forks:
+
+- The home of the CLI (`CommandLineHelper.getHomeDir()`: the `.camel`
directory, the user configuration and the
+ plugins) is a static field. A test that needs a home calls
`useTestHomeDir()` of `CamelCommandBaseTestSupport`,
+ which gives it an empty temporary home and restores the previous one after
the test. Never use a fixed directory
+ such as `target` or `target/test-xxx`, as the other forks use it at the same
time. A test that needs another home,
+ such as the home of a Camel that runs outside this JVM, calls
`useHomeDir(Path)`, which also restores the previous
+ home after the test.
+- Each fork has a `user.home` of its own under `target` (see `pom.xml`), so
the tests do not see the `~/.camel` of
+ the developer. From an IDE, `user.home` is the real home: `UserConfigHelper`
refuses to write the user
+ configuration there.
+- The forks share the working directory (the module directory). A test whose
command uses it is annotated
+ `@UsesWorkingDirectory`: `camel run` deletes `.camel-jbang`, `export`,
`dependency` and `transform` write in it,
+ `camel init` writes a file given without a directory there, and a local
`camel-cli.properties` is read from it. A
+ test that listens on a fixed port, such as `camel infra run` with the
default port of a service, is annotated
+ `@UsesFixedPort`. These tests run after the others, one class at a time, in
a fork of their own (the `serial-test`
+ execution). Prefer a temporary directory (`--dir`) and port 0, so a test
does not need them.
+- Restore what else a test changes in the JVM: system properties
(`@SetSystemProperty` of junit-pioneer, or set and
+ clear them), static fields, and stop the servers, threads and CamelContexts
that it starts.
+- A test that only fails now and then usually shares something with another
test: run the module a few times with
+ `-Dcamel.surefire.forkCount=8` to find out. `-Dtest=SomeTest` runs one
class, whichever execution it belongs to.
+- `NoFixedHomeDirTest` fails on a test that sets a fixed home; its message
says what to do.
diff --git a/dsl/camel-jbang/camel-jbang-core/CLAUDE.md
b/dsl/camel-jbang/camel-jbang-core/CLAUDE.md
new file mode 120000
index 000000000000..47dc3e3d863c
--- /dev/null
+++ b/dsl/camel-jbang/camel-jbang-core/CLAUDE.md
@@ -0,0 +1 @@
+AGENTS.md
\ No newline at end of file
diff --git a/dsl/camel-jbang/camel-jbang-core/pom.xml
b/dsl/camel-jbang/camel-jbang-core/pom.xml
index 1ac50f7ee976..dc0753e88fa5 100644
--- a/dsl/camel-jbang/camel-jbang-core/pom.xml
+++ b/dsl/camel-jbang/camel-jbang-core/pom.xml
@@ -40,7 +40,11 @@
<label>jbang</label>
<supportLevel>Stable</supportLevel>
<camel-prepare-component>false</camel-prepare-component>
- <camel.surefire.reuseForks>false</camel.surefire.reuseForks>
+ <!-- the tests run in parallel forks that are reused, each with a home
of its own (see the surefire
+ configuration). No concurrency inside a fork: the CLI keeps the
home directory in a static field -->
+ <camel.surefire.forkCount>4</camel.surefire.forkCount>
+ <camel.surefire.reuseForks>true</camel.surefire.reuseForks>
+ <camel.surefire.parallel>false</camel.surefire.parallel>
</properties>
<dependencies>
@@ -343,6 +347,46 @@
</execution>
</executions>
</plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <systemPropertyVariables>
+ <!-- a home of its own per fork (~/.camel, the user
configuration and plugins), out of the
+ developer's and away from the other forks. The
local Maven repository stays the build's,
+ so what the tests resolve is not downloaded again
-->
+
<user.home>${project.build.directory}/test-home-${surefire.forkNumber}</user.home>
+
<maven.repo.local>${settings.localRepository}</maven.repo.local>
+ <!-- the home of the developer, for a test that talks
to a Camel launched through JBang -->
+
<camel.test.user.home>${user.home}</camel.test.user.home>
+ </systemPropertyVariables>
+ </configuration>
+ <executions>
+ <execution>
+ <!-- the serial tests run after, one class at a time
-->
+ <id>default-test</id>
+ <configuration>
+ <excludedGroups>serial</excludedGroups>
+ </configuration>
+ </execution>
+ <execution>
+ <!-- the tests of what the forks share: the working
directory (the .camel-jbang directory of
+ camel run, export and others, a local
camel-cli.properties) or a fixed port. These tests
+ (@UsesWorkingDirectory, @UsesFixedPort) run in
one fork -->
+ <id>serial-test</id>
+ <goals>
+ <goal>test</goal>
+ </goals>
+ <configuration>
+ <forkCount>1</forkCount>
+ <groups>serial</groups>
+ <systemPropertyVariables>
+
<user.home>${project.build.directory}/test-home-serial</user.home>
+ </systemPropertyVariables>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
</plugins>
</build>
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/CamelCommandBaseTestSupport.java
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/CamelCommandBaseTestSupport.java
index abb5ba65b746..1bb03b9ab398 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/CamelCommandBaseTestSupport.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/CamelCommandBaseTestSupport.java
@@ -17,20 +17,71 @@
package org.apache.camel.dsl.jbang.core.commands;
+import java.io.IOException;
+import java.nio.file.Files;
import java.nio.file.Path;
+import org.apache.camel.dsl.jbang.core.common.CommandLineHelper;
import org.apache.camel.dsl.jbang.core.common.StringPrinter;
+import org.apache.camel.util.FileUtil;
+import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
public class CamelCommandBaseTestSupport {
protected StringPrinter printer;
+ private Path previousHome;
+ private Path testHome;
+
@BeforeEach
public void setup() throws Exception {
printer = new StringPrinter();
}
+ /**
+ * Gives the test a home directory of its own: an empty directory for the
{@code .camel} directory, the user
+ * configuration and the plugins of the CLI. The tests run in parallel
forks, so a fixed directory would be shared
+ * with the tests of the other forks. The previous home is used again
after the test.
+ *
+ * @return the home directory
+ */
+ protected Path useTestHomeDir() throws IOException {
+ if (testHome != null) {
+ // called again: the home of the earlier call is not used anymore
+ FileUtil.removeDir(testHome.toFile());
+ }
+ testHome = Files.createTempDirectory("camel-cli-test-home");
+ useHomeDir(testHome);
+ return testHome;
+ }
+
+ /**
+ * Uses the given directory as the home of the CLI in the test, and the
previous home again after the test. A test
+ * that talks to a Camel which runs outside this JVM uses the home of that
Camel; any other test uses
+ * {@link #useTestHomeDir()}.
+ *
+ * @param home the home directory
+ */
+ protected void useHomeDir(Path home) {
+ if (previousHome == null) {
+ previousHome = CommandLineHelper.getHomeDir();
+ }
+ CommandLineHelper.useHomeDir(home.toString());
+ }
+
+ @AfterEach
+ public void restoreHomeDir() {
+ if (previousHome != null) {
+ CommandLineHelper.useHomeDir(previousHome.toString());
+ previousHome = null;
+ }
+ if (testHome != null) {
+ FileUtil.removeDir(testHome.toFile());
+ testHome = null;
+ }
+ }
+
public static String quarkusExtRegistry() {
return "--quarkus-ext-registry="
+
Path.of("target/test-classes/registry.quarkus.io").toAbsolutePath().normalize().toUri().toString();
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/CamelJBangMainTest.java
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/CamelJBangMainTest.java
index 23b9e6dca1df..f017fadbbd10 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/CamelJBangMainTest.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/CamelJBangMainTest.java
@@ -19,7 +19,6 @@ package org.apache.camel.dsl.jbang.core.commands;
import java.lang.reflect.Field;
import java.util.List;
-import org.apache.camel.dsl.jbang.core.common.CommandLineHelper;
import org.apache.camel.dsl.jbang.core.common.PluginHelper;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@@ -36,7 +35,7 @@ class CamelJBangMainTest extends CamelCommandBaseTestSupport {
public void setup() throws Exception {
super.setup();
- CommandLineHelper.useHomeDir("target");
+ useTestHomeDir();
PluginHelper.createPluginConfig();
main = new CamelJBangMain().withPrinter(printer);
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/DependencyCopyTest.java
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/DependencyCopyTest.java
index d50387268eb9..34cbfa12a448 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/DependencyCopyTest.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/DependencyCopyTest.java
@@ -43,6 +43,7 @@ import static org.mockito.Mockito.spy;
* camel dependency copy: the JARs of the dependencies of the integration,
copied to a directory. The dependencies are
* not downloaded: each resolves to a JAR of its own.
*/
+@UsesWorkingDirectory
class DependencyCopyTest extends CamelCommandBaseTestSupport {
@TempDir
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/DependencyListTest.java
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/DependencyListTest.java
index 3aa581256e6a..0b66e4f9b466 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/DependencyListTest.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/DependencyListTest.java
@@ -36,6 +36,7 @@ import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;
import picocli.CommandLine;
+@UsesWorkingDirectory
class DependencyListTest extends CamelCommandBaseTestSupport {
private File workingDir;
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/DependencyUpdateTest.java
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/DependencyUpdateTest.java
index 9a0328045ffd..9fd159172a1c 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/DependencyUpdateTest.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/DependencyUpdateTest.java
@@ -38,6 +38,7 @@ import picocli.CommandLine;
import static org.assertj.core.api.Assertions.assertThat;
+@UsesWorkingDirectory
class DependencyUpdateTest extends CamelCommandBaseTestSupport {
private File workingDir;
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/EvalSimpleTest.java
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/EvalSimpleTest.java
index 415e261d8fb1..83388e420d19 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/EvalSimpleTest.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/EvalSimpleTest.java
@@ -16,15 +16,30 @@
*/
package org.apache.camel.dsl.jbang.core.commands;
+import java.nio.file.Path;
+
import org.apache.camel.dsl.jbang.core.commands.action.EvalExpressionCommand;
+import org.apache.camel.util.HomeHelper;
import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.condition.DisabledIfSystemProperty;
import picocli.CommandLine;
+@UsesWorkingDirectory
@DisabledIfSystemProperty(named = "ci.env.name", matches = ".*",
disabledReason = "Runs only local")
class EvalSimpleTest extends CamelCommandBaseTestSupport {
+ @BeforeEach
+ @Override
+ public void setup() throws Exception {
+ super.setup();
+ // not a home of its own (useTestHomeDir): the Camel this test starts
is the one installed with JBang, which
+ // uses the home of the user, so the test must look there too, or it
waits for an answer and leaves that Camel
+ // running
+ useHomeDir(Path.of(System.getProperty("camel.test.user.home",
HomeHelper.resolveHomeDir())));
+ }
+
@Test
public void shouldEvalSimple() throws Exception {
String[] args = new String[] { "--isolated=true",
"--template=${length()}", "--body=hello_world" };
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/ExportMainJibTest.java
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/ExportMainJibTest.java
index f930c6a6a91a..40a465c2e636 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/ExportMainJibTest.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/ExportMainJibTest.java
@@ -37,6 +37,7 @@ import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;
import picocli.CommandLine;
+@UsesWorkingDirectory
class ExportMainJibTest {
private File workingDir;
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/ExportMainJkubeTest.java
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/ExportMainJkubeTest.java
index aaed6f734ae1..49f77ed3aaaa 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/ExportMainJkubeTest.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/ExportMainJkubeTest.java
@@ -37,6 +37,7 @@ import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;
import picocli.CommandLine;
+@UsesWorkingDirectory
class ExportMainJkubeTest {
private File workingDir;
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/ExportTest.java
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/ExportTest.java
index 9e9eba93fea4..b956f3a79269 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/ExportTest.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/ExportTest.java
@@ -54,6 +54,7 @@ import picocli.CommandLine;
import static org.assertj.core.api.Assertions.assertThat;
+@UsesWorkingDirectory
class ExportTest {
private static final Logger LOG =
LoggerFactory.getLogger(ExportTest.class);
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/InitTest.java
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/InitTest.java
index 606442bf933b..f812cf72a0b1 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/InitTest.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/InitTest.java
@@ -36,6 +36,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
+@UsesWorkingDirectory
class InitTest {
private Path workingDir;
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/LoadTest.java
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/LoadTest.java
index fc55e8db0b80..0ef7e8ced20f 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/LoadTest.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/LoadTest.java
@@ -22,7 +22,9 @@ import java.nio.file.Path;
import java.nio.file.Paths;
import org.apache.camel.dsl.jbang.core.commands.action.CamelLoadAction;
+import org.apache.camel.dsl.jbang.core.common.CommandLineHelper;
import org.apache.camel.dsl.jbang.core.common.PathUtils;
+import org.apache.camel.util.HomeHelper;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
@@ -33,18 +35,24 @@ import static
org.apache.camel.dsl.jbang.core.common.RuntimeUtil.getPid;
import static org.assertj.core.api.Assertions.assertThat;
import static org.awaitility.Awaitility.await;
+@UsesWorkingDirectory
class LoadTest {
private Path workingDir;
+ private Path previousHome;
@BeforeEach
public void setup() throws IOException {
Path base = Paths.get("target");
workingDir = Files.createTempDirectory(base, "camel-load");
+ // the routes run in this JVM, and their CLI connector reads the
actions in the user home
+ previousHome = CommandLineHelper.getHomeDir();
+ CommandLineHelper.useHomeDir(HomeHelper.resolveHomeDir());
}
@AfterEach
public void end() throws IOException {
+ CommandLineHelper.useHomeDir(previousHome.toString());
// force removing, since deleteOnExit is not removing.
PathUtils.deleteDirectory(workingDir);
}
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/NoFixedHomeDirTest.java
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/NoFixedHomeDirTest.java
new file mode 100644
index 000000000000..bea0df6ad586
--- /dev/null
+++
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/NoFixedHomeDirTest.java
@@ -0,0 +1,67 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.dsl.jbang.core.commands;
+
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.regex.Pattern;
+import java.util.stream.Stream;
+
+import org.junit.jupiter.api.Test;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * The tests run in parallel forks (AGENTS.md of this module), so a home of
the CLI given as a fixed directory, such as
+ * one under target, is used by the tests of the other forks at the same time.
A test that sets the home with a string
+ * or a path of literals fails here: it calls useTestHomeDir() of
CamelCommandBaseTestSupport instead, or sets a
+ * temporary directory as the home and restores the previous home after the
test.
+ */
+class NoFixedHomeDirTest {
+
+ private static final Path SOURCES = Path.of("src/test/java");
+ private static final Pattern FIXED_HOME =
Pattern.compile("useHomeDir\\(\\s*(\"|(Paths\\.get|Path\\.of)\\(\\s*\")");
+
+ @Test
+ void noTestUsesAFixedHome() throws IOException {
+ List<String> problems = new ArrayList<>();
+ for (Path file : sources()) {
+ List<String> lines = Files.readAllLines(file);
+ for (int i = 0; i < lines.size(); i++) {
+ if (FIXED_HOME.matcher(lines.get(i)).find()) {
+ problems.add(SOURCES.relativize(file) + ":" + (i + 1) + ":
" + lines.get(i).strip());
+ }
+ }
+ }
+ assertThat(problems)
+ .as("A fixed home is shared with the tests of the other forks:
call useTestHomeDir() of"
+ + " CamelCommandBaseTestSupport, or set a @TempDir as the
home and restore the previous home in"
+ + " @AfterEach")
+ .isEmpty();
+ }
+
+ private static List<Path> sources() throws IOException {
+ try (Stream<Path> files = Files.walk(SOURCES)) {
+ return files.filter(p -> p.toString().endsWith(".java"))
+ .filter(p ->
!p.getFileName().toString().equals(NoFixedHomeDirTest.class.getSimpleName() +
".java"))
+ .sorted().toList();
+ }
+ }
+}
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/TransformRouteTest.java
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/TransformRouteTest.java
index e9023e187070..31f124758f43 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/TransformRouteTest.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/TransformRouteTest.java
@@ -36,6 +36,7 @@ import static org.assertj.core.api.Assertions.catchThrowable;
/**
* camel transform route: a route in another DSL, printed or written to a file
or directory.
*/
+@UsesWorkingDirectory
class TransformRouteTest extends CamelCommandBaseTestSupport {
private static final String YAML = """
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/TransformTest.java
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/TransformTest.java
index 58535bfc21d0..1ff6ad4d9a09 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/TransformTest.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/TransformTest.java
@@ -32,6 +32,7 @@ import picocli.CommandLine;
import static org.assertj.core.api.Assertions.assertThat;
+@UsesWorkingDirectory
class TransformTest {
private Path workingDir;
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/UserConfigHelper.java
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/UserConfigHelper.java
index 56f0ee8971ae..925fb56e4258 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/UserConfigHelper.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/UserConfigHelper.java
@@ -24,6 +24,7 @@ import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import org.apache.camel.dsl.jbang.core.common.CommandLineHelper;
+import org.apache.camel.util.HomeHelper;
public final class UserConfigHelper {
@@ -39,11 +40,12 @@ public final class UserConfigHelper {
Path userConfigDir;
String configFileName = CommandLineHelper.USER_CONFIG;
if (!local) {
- CommandLineHelper.useHomeDir("target");
- userConfigDir = Paths.get("target");
- if (!userConfigDir.toFile().exists()) {
- userConfigDir.toFile().mkdirs();
+ // the home of the test
(CamelCommandBaseTestSupport.useTestHomeDir), never the home of the user
+ userConfigDir = CommandLineHelper.getHomeDir();
+ if (userConfigDir.equals(Paths.get(HomeHelper.resolveHomeDir()))) {
+ throw new IllegalStateException("Use a test home directory
before writing the user configuration");
}
+ Files.createDirectories(userConfigDir);
} else {
userConfigDir = Paths.get(".");
configFileName = CommandLineHelper.LOCAL_USER_CONFIG;
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/CamelCommandBaseTestSupport.java
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/UsesFixedPort.java
similarity index 55%
copy from
dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/CamelCommandBaseTestSupport.java
copy to
dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/UsesFixedPort.java
index abb5ba65b746..f312a176b172 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/CamelCommandBaseTestSupport.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/UsesFixedPort.java
@@ -14,26 +14,25 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
package org.apache.camel.dsl.jbang.core.commands;
-import java.nio.file.Path;
-
-import org.apache.camel.dsl.jbang.core.common.StringPrinter;
-import org.junit.jupiter.api.BeforeEach;
-
-public class CamelCommandBaseTestSupport {
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
- protected StringPrinter printer;
-
- @BeforeEach
- public void setup() throws Exception {
- printer = new StringPrinter();
- }
-
- public static String quarkusExtRegistry() {
- return "--quarkus-ext-registry="
- +
Path.of("target/test-classes/registry.quarkus.io").toAbsolutePath().normalize().toUri().toString();
- }
+import org.junit.jupiter.api.Tag;
+/**
+ * A test that listens on a fixed port, such as camel infra run with the
default port of the service.
+ * <p/>
+ * The test forks run in parallel, and two tests on the same port fail to
bind, so these tests run after them in a fork
+ * of their own, one class at a time (the {@code serial-test} execution in
pom.xml).
+ */
+@Target(ElementType.TYPE)
+@Retention(RetentionPolicy.RUNTIME)
+@Inherited
+@Tag("serial")
+public @interface UsesFixedPort {
}
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/CamelCommandBaseTestSupport.java
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/UsesWorkingDirectory.java
similarity index 52%
copy from
dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/CamelCommandBaseTestSupport.java
copy to
dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/UsesWorkingDirectory.java
index abb5ba65b746..474219263da0 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/CamelCommandBaseTestSupport.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/UsesWorkingDirectory.java
@@ -14,26 +14,26 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
package org.apache.camel.dsl.jbang.core.commands;
-import java.nio.file.Path;
-
-import org.apache.camel.dsl.jbang.core.common.StringPrinter;
-import org.junit.jupiter.api.BeforeEach;
-
-public class CamelCommandBaseTestSupport {
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
- protected StringPrinter printer;
-
- @BeforeEach
- public void setup() throws Exception {
- printer = new StringPrinter();
- }
-
- public static String quarkusExtRegistry() {
- return "--quarkus-ext-registry="
- +
Path.of("target/test-classes/registry.quarkus.io").toAbsolutePath().normalize().toUri().toString();
- }
+import org.junit.jupiter.api.Tag;
+/**
+ * A test that uses the working directory of the build: the {@code
.camel-jbang} directory that camel run, export,
+ * dependency, transform and others create and delete, or a local {@code
camel-cli.properties}.
+ * <p/>
+ * The test forks run in parallel and share the working directory, so these
tests run after them in a fork of their own,
+ * one class at a time (the {@code serial-test} execution in pom.xml).
+ */
+@Target(ElementType.TYPE)
+@Retention(RetentionPolicy.RUNTIME)
+@Inherited
+@Tag("serial")
+public @interface UsesWorkingDirectory {
}
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/action/ActionCommandTestSupport.java
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/action/ActionCommandTestSupport.java
index 6a3540e83ca7..f679fe5d798f 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/action/ActionCommandTestSupport.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/action/ActionCommandTestSupport.java
@@ -64,7 +64,7 @@ abstract class ActionCommandTestSupport extends
CamelCommandBaseTestSupport {
@Override
public void setup() throws Exception {
super.setup();
- CommandLineHelper.useHomeDir("target/test-action");
+ useTestHomeDir();
Files.createDirectories(CommandLineHelper.getCamelDir());
}
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/action/CamelStartupRecorderActionTest.java
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/action/CamelStartupRecorderActionTest.java
index 64fbede3b3d8..75151e6e508a 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/action/CamelStartupRecorderActionTest.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/action/CamelStartupRecorderActionTest.java
@@ -23,7 +23,6 @@ import
org.apache.camel.dsl.jbang.core.commands.CamelCommandBaseTestSupport;
import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain;
import org.apache.camel.dsl.jbang.core.common.CliException;
import org.apache.camel.dsl.jbang.core.common.CliExitCode;
-import org.apache.camel.dsl.jbang.core.common.CommandLineHelper;
import org.apache.camel.dsl.jbang.core.common.ProcessFinder.CamelProcess;
import org.apache.camel.util.json.JsonArray;
import org.apache.camel.util.json.JsonObject;
@@ -41,7 +40,7 @@ class CamelStartupRecorderActionTest extends
CamelCommandBaseTestSupport {
@Override
public void setup() throws Exception {
super.setup();
- CommandLineHelper.useHomeDir("target/startup-recorder-test");
+ useTestHomeDir();
}
@Test
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/action/LoggerActionTest.java
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/action/LoggerActionTest.java
index 8fedd383260c..56828e745327 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/action/LoggerActionTest.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/action/LoggerActionTest.java
@@ -51,7 +51,7 @@ class LoggerActionTest extends CamelCommandBaseTestSupport {
@Override
public void setup() throws Exception {
super.setup();
- CommandLineHelper.useHomeDir("target/test-logger");
+ useTestHomeDir();
Files.createDirectories(CommandLineHelper.getCamelDir());
}
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/action/RouteActionJavaSourceTest.java
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/action/RouteActionJavaSourceTest.java
index fc7d6eb95deb..24de5f0b77b5 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/action/RouteActionJavaSourceTest.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/action/RouteActionJavaSourceTest.java
@@ -22,6 +22,7 @@ import java.util.List;
import org.apache.camel.diagram.RouteDiagramLayoutEngine.RouteInfo;
import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain;
+import org.apache.camel.dsl.jbang.core.commands.UsesWorkingDirectory;
import org.apache.camel.dsl.jbang.core.common.CliException;
import org.apache.camel.dsl.jbang.core.common.CliExitCode;
import org.apache.camel.dsl.jbang.core.common.StringPrinter;
@@ -39,6 +40,7 @@ import static
org.assertj.core.api.Assertions.assertThatThrownBy;
* routes are dumped from a CamelContext that is never started, so nothing is
compiled and a source that does not
* compile (here: a processor class that does not exist) still gets its
diagram.
*/
+@UsesWorkingDirectory
class RouteActionJavaSourceTest {
private static final String ORDERS = """
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/config/BaseConfigTestSupport.java
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/config/BaseConfigTestSupport.java
index 384aa8e2211e..e546ada800d1 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/config/BaseConfigTestSupport.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/config/BaseConfigTestSupport.java
@@ -21,16 +21,22 @@ import java.nio.file.Files;
import java.nio.file.Paths;
import org.apache.camel.dsl.jbang.core.commands.CamelCommandBaseTestSupport;
+import org.apache.camel.dsl.jbang.core.commands.UsesWorkingDirectory;
import org.apache.camel.dsl.jbang.core.common.CommandLineHelper;
import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+@UsesWorkingDirectory
public class BaseConfigTestSupport extends CamelCommandBaseTestSupport {
+ @BeforeEach
+ void useTestHome() throws IOException {
+ // the global config file of UserConfigHelper.createUserConfig goes in
the home of the test, removed after it
+ useTestHomeDir();
+ }
+
@AfterEach
void removeConfigFiles() throws IOException {
Files.deleteIfExists(Paths.get(CommandLineHelper.LOCAL_USER_CONFIG));
- // remove the global config file written under target by
UserConfigHelper.createUserConfig, so it does not
- // leak into later tests in the same JVM. Target the build directory
explicitly to never touch the real home.
- Files.deleteIfExists(Paths.get("target",
CommandLineHelper.USER_CONFIG));
}
}
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/infra/InfraCommandTestSupport.java
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/infra/InfraCommandTestSupport.java
index 38e9ab36b995..34972e5583f6 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/infra/InfraCommandTestSupport.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/infra/InfraCommandTestSupport.java
@@ -38,7 +38,7 @@ abstract class InfraCommandTestSupport extends
CamelCommandBaseTestSupport {
@Override
public void setup() throws Exception {
super.setup();
- CommandLineHelper.useHomeDir("target/test-infra-cmd");
+ useTestHomeDir();
Files.createDirectories(CommandLineHelper.getCamelDir());
}
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/infra/InfraRestartTest.java
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/infra/InfraRestartTest.java
index fbd714cc2347..7af2c0d641f4 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/infra/InfraRestartTest.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/infra/InfraRestartTest.java
@@ -22,11 +22,13 @@ import java.util.List;
import org.apache.camel.dsl.jbang.core.commands.CamelCommandBaseTestSupport;
import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain;
+import org.apache.camel.dsl.jbang.core.commands.UsesFixedPort;
import org.apache.camel.dsl.jbang.core.common.CommandLineHelper;
import org.assertj.core.api.Assertions;
import org.awaitility.Awaitility;
import org.junit.jupiter.api.Test;
+@UsesFixedPort
public class InfraRestartTest extends CamelCommandBaseTestSupport {
/**
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/infra/InfraTest.java
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/infra/InfraTest.java
index 794fa260c8b4..20bd47bb7d14 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/infra/InfraTest.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/infra/InfraTest.java
@@ -21,12 +21,14 @@ import java.util.stream.Collectors;
import org.apache.camel.dsl.jbang.core.commands.CamelCommandBaseTestSupport;
import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain;
+import org.apache.camel.dsl.jbang.core.commands.UsesFixedPort;
import org.apache.camel.dsl.jbang.core.model.InfraBaseDTO;
import org.apache.camel.util.json.Jsoner;
import org.assertj.core.api.Assertions;
import org.awaitility.Awaitility;
import org.junit.jupiter.api.Test;
+@UsesFixedPort
public class InfraTest extends CamelCommandBaseTestSupport {
/**
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/plugin/PluginAddTest.java
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/plugin/PluginAddTest.java
index a7c43a2d7c76..65a3d6a5dbc7 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/plugin/PluginAddTest.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/plugin/PluginAddTest.java
@@ -18,7 +18,6 @@ package org.apache.camel.dsl.jbang.core.commands.plugin;
import org.apache.camel.dsl.jbang.core.commands.CamelCommandBaseTestSupport;
import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain;
-import org.apache.camel.dsl.jbang.core.common.CommandLineHelper;
import org.apache.camel.dsl.jbang.core.common.PluginHelper;
import org.apache.camel.dsl.jbang.core.common.PluginType;
import org.apache.camel.util.json.JsonObject;
@@ -32,7 +31,7 @@ class PluginAddTest extends CamelCommandBaseTestSupport {
public void setup() throws Exception {
super.setup();
- CommandLineHelper.useHomeDir("target");
+ useTestHomeDir();
PluginHelper.createPluginConfig();
}
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/plugin/PluginDeleteTest.java
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/plugin/PluginDeleteTest.java
index 9cdda931eb53..706e4c336cfa 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/plugin/PluginDeleteTest.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/plugin/PluginDeleteTest.java
@@ -18,7 +18,6 @@ package org.apache.camel.dsl.jbang.core.commands.plugin;
import org.apache.camel.dsl.jbang.core.commands.CamelCommandBaseTestSupport;
import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain;
-import org.apache.camel.dsl.jbang.core.common.CommandLineHelper;
import org.apache.camel.dsl.jbang.core.common.PluginHelper;
import org.apache.camel.dsl.jbang.core.common.PluginType;
import org.junit.jupiter.api.Assertions;
@@ -31,7 +30,7 @@ class PluginDeleteTest extends CamelCommandBaseTestSupport {
public void setup() throws Exception {
super.setup();
- CommandLineHelper.useHomeDir("target");
+ useTestHomeDir();
PluginHelper.createPluginConfig();
}
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/plugin/PluginGetTest.java
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/plugin/PluginGetTest.java
index d3e6f3a3de4d..39588257ab4d 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/plugin/PluginGetTest.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/plugin/PluginGetTest.java
@@ -20,7 +20,6 @@ import java.util.List;
import org.apache.camel.dsl.jbang.core.commands.CamelCommandBaseTestSupport;
import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain;
-import org.apache.camel.dsl.jbang.core.common.CommandLineHelper;
import org.apache.camel.dsl.jbang.core.common.PluginHelper;
import org.apache.camel.dsl.jbang.core.common.PluginType;
import org.apache.camel.util.json.JsonObject;
@@ -34,7 +33,7 @@ class PluginGetTest extends CamelCommandBaseTestSupport {
public void setup() throws Exception {
super.setup();
- CommandLineHelper.useHomeDir("target");
+ useTestHomeDir();
PluginHelper.createPluginConfig();
}
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/plugin/PluginListTest.java
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/plugin/PluginListTest.java
index 88c5d342a0cf..fe992f5c0471 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/plugin/PluginListTest.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/plugin/PluginListTest.java
@@ -20,7 +20,6 @@ import java.util.List;
import org.apache.camel.dsl.jbang.core.commands.CamelCommandBaseTestSupport;
import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain;
-import org.apache.camel.dsl.jbang.core.common.CommandLineHelper;
import org.apache.camel.dsl.jbang.core.common.PluginHelper;
import org.apache.camel.dsl.jbang.core.common.PluginType;
import org.junit.jupiter.api.Assertions;
@@ -33,7 +32,7 @@ class PluginListTest extends CamelCommandBaseTestSupport {
public void setup() throws Exception {
super.setup();
- CommandLineHelper.useHomeDir("target");
+ useTestHomeDir();
PluginHelper.createPluginConfig();
}
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/process/ProcessCommandTestSupport.java
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/process/ProcessCommandTestSupport.java
index 0eca566564b3..21f7cb92988d 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/process/ProcessCommandTestSupport.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/process/ProcessCommandTestSupport.java
@@ -48,7 +48,7 @@ abstract class ProcessCommandTestSupport extends
CamelCommandBaseTestSupport {
@Override
public void setup() throws Exception {
super.setup();
- CommandLineHelper.useHomeDir("target/test-process");
+ useTestHomeDir();
Files.createDirectories(CommandLineHelper.getCamelDir());
}
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/version/VersionGetTest.java
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/version/VersionGetTest.java
index f916ede1081f..7e32eb22b145 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/version/VersionGetTest.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/version/VersionGetTest.java
@@ -19,18 +19,26 @@ package org.apache.camel.dsl.jbang.core.commands.version;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
-import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.util.List;
import org.apache.camel.dsl.jbang.core.commands.CamelCommandBaseTestSupport;
import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain;
import org.apache.camel.dsl.jbang.core.commands.UserConfigHelper;
+import org.apache.camel.dsl.jbang.core.common.CommandLineHelper;
import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
class VersionGetTest extends CamelCommandBaseTestSupport {
+ @BeforeEach
+ @Override
+ public void setup() throws Exception {
+ super.setup();
+ useTestHomeDir();
+ }
+
@Test
public void shouldPrintVersions() throws Exception {
UserConfigHelper.createUserConfig("");
@@ -81,7 +89,7 @@ class VersionGetTest extends CamelCommandBaseTestSupport {
}
private void createJBangVersionFile(String version) throws IOException {
- Path jBangDir = Paths.get("target", ".jbang", "cache");
+ Path jBangDir = CommandLineHelper.getHomeDir().resolve(".jbang/cache");
if (!jBangDir.toFile().exists()) {
jBangDir.toFile().mkdirs();
}
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/common/PluginHelperTest.java
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/common/PluginHelperTest.java
index c1fe440e8b81..0f1128d59859 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/common/PluginHelperTest.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/common/PluginHelperTest.java
@@ -23,6 +23,7 @@ import java.util.Map;
import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain;
import org.apache.camel.util.json.JsonObject;
+import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
@@ -41,11 +42,19 @@ public class PluginHelperTest {
@TempDir
Path tempDir;
+ private Path previousHome;
+
@BeforeEach
public void setup() {
+ previousHome = CommandLineHelper.getHomeDir();
CommandLineHelper.useHomeDir(tempDir.toString());
}
+ @AfterEach
+ public void restoreHome() {
+ CommandLineHelper.useHomeDir(previousHome.toString());
+ }
+
@Test
public void testEmbeddedPluginDetectionDoesNotThrowException() {
assertDoesNotThrow(PluginHelper::hasEmbeddedPlugins);