You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ja...@apache.org on 2021/03/25 08:46:40 UTC

[camel-quarkus] branch master updated: Only invoke completed method on unknown arguments if the failure remedy is FAIL

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

jamesnetherton pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git


The following commit(s) were added to refs/heads/master by this push:
     new 0a9e60f  Only invoke completed method on unknown arguments if the failure remedy is FAIL
0a9e60f is described below

commit 0a9e60fb893912859a6400b32c8486317783746f
Author: James Netherton <ja...@gmail.com>
AuthorDate: Wed Mar 24 18:00:33 2021 +0000

    Only invoke completed method on unknown arguments if the failure remedy is FAIL
    
    Fixes #2293
---
 .../CamelMainUnknownArgumentFailTest.java          |  2 +-
 .../CamelMainUnknownArgumentIgnoreTest.java        |  4 +--
 .../CamelMainUnknownArgumentWarnTest.java          | 12 ++++++--
 .../org/apache/camel/quarkus/main/CamelMain.java   | 20 +++++++++----
 .../support/process/QuarkusProcessExecutor.java    | 15 ++++++++--
 integration-tests/main-command-mode/pom.xml        |  4 +++
 .../camel/quarkus/main/cmd/it/CommandModeTest.java | 33 ++++++++++++++++++++++
 .../pom.xml                                        |  8 ++++--
 .../quarkus/main/unknown/args/fail/Routes.java}    | 23 +++++----------
 .../src/main/resources/application.properties      | 21 ++++++++++++++
 .../args/fail/MainUnknownArgumentFailIT.java}      | 22 +++------------
 .../args/fail/MainUnknownArgumentFailTest.java}    | 23 +++++++++------
 .../pom.xml                                        |  8 ++++--
 .../quarkus/main/unknown/args/ignore/Routes.java}  | 23 +++++----------
 .../src/main/resources/application.properties      | 21 ++++++++++++++
 .../args/ignore/MainUnknownArgumentIgnoreIT.java}  | 22 +++------------
 .../ignore/MainUnknownArgumentIgnoreTest.java}     | 23 +++++++++------
 integration-tests/pom.xml                          |  2 ++
 tooling/scripts/test-categories.yaml               |  4 ++-
 tooling/test-list/pom.xml                          |  2 ++
 20 files changed, 189 insertions(+), 103 deletions(-)

diff --git a/extensions-core/main/deployment/src/test/java/org/apache/camel/quarkus/main/deployment/CamelMainUnknownArgumentFailTest.java b/extensions-core/main/deployment/src/test/java/org/apache/camel/quarkus/main/deployment/CamelMainUnknownArgumentFailTest.java
index a48b1cc..13ba8da 100644
--- a/extensions-core/main/deployment/src/test/java/org/apache/camel/quarkus/main/deployment/CamelMainUnknownArgumentFailTest.java
+++ b/extensions-core/main/deployment/src/test/java/org/apache/camel/quarkus/main/deployment/CamelMainUnknownArgumentFailTest.java
@@ -48,7 +48,7 @@ public class CamelMainUnknownArgumentFailTest {
     @Test
     public void unknownArgumentThrowsException() {
         Exception exception = Assertions.assertThrows(RuntimeException.class, () -> {
-            main.parseArguments(new String[] { "-d", "10", "-foo", "bar" });
+            main.parseArguments(new String[] { "-d", "10", "-foo", "bar", "-t" });
         });
         assertEquals("CamelMain encountered unknown arguments", exception.getMessage());
     }
diff --git a/extensions-core/main/deployment/src/test/java/org/apache/camel/quarkus/main/deployment/CamelMainUnknownArgumentIgnoreTest.java b/extensions-core/main/deployment/src/test/java/org/apache/camel/quarkus/main/deployment/CamelMainUnknownArgumentIgnoreTest.java
index 6b17182..7ffa54b 100644
--- a/extensions-core/main/deployment/src/test/java/org/apache/camel/quarkus/main/deployment/CamelMainUnknownArgumentIgnoreTest.java
+++ b/extensions-core/main/deployment/src/test/java/org/apache/camel/quarkus/main/deployment/CamelMainUnknownArgumentIgnoreTest.java
@@ -53,10 +53,10 @@ public class CamelMainUnknownArgumentIgnoreTest {
         try (ByteArrayOutputStream sysout = new ByteArrayOutputStream()) {
             System.setOut(new PrintStream(sysout));
 
-            main.parseArguments(new String[] { "-d", "10", "-foo", "bar" });
+            main.parseArguments(new String[] { "-d", "10", "-foo", "bar", "-t" });
 
             String consoleContent = sysout.toString();
-            assertFalse(consoleContent.contains("Unknown option: -foo"));
+            assertFalse(consoleContent.contains("Unknown option: -foo bar"));
             assertFalse(consoleContent.contains("Apache Camel Runner takes the following options"));
         } catch (IOException e) {
             throw new RuntimeException(e);
diff --git a/extensions-core/main/deployment/src/test/java/org/apache/camel/quarkus/main/deployment/CamelMainUnknownArgumentWarnTest.java b/extensions-core/main/deployment/src/test/java/org/apache/camel/quarkus/main/deployment/CamelMainUnknownArgumentWarnTest.java
index 27cb594..a112944 100644
--- a/extensions-core/main/deployment/src/test/java/org/apache/camel/quarkus/main/deployment/CamelMainUnknownArgumentWarnTest.java
+++ b/extensions-core/main/deployment/src/test/java/org/apache/camel/quarkus/main/deployment/CamelMainUnknownArgumentWarnTest.java
@@ -27,6 +27,7 @@ import javax.inject.Inject;
 
 import io.quarkus.test.QuarkusUnitTest;
 import org.apache.camel.quarkus.main.CamelMain;
+import org.apache.camel.util.StringHelper;
 import org.jboss.shrinkwrap.api.ShrinkWrap;
 import org.jboss.shrinkwrap.api.asset.Asset;
 import org.jboss.shrinkwrap.api.asset.StringAsset;
@@ -53,10 +54,17 @@ public class CamelMainUnknownArgumentWarnTest {
         try (ByteArrayOutputStream sysout = new ByteArrayOutputStream()) {
             System.setOut(new PrintStream(sysout));
 
-            main.parseArguments(new String[] { "-d", "10", "-foo", "bar" });
+            StringBuilder builder = new StringBuilder();
+            for (int i = 0; i < 150; i++) {
+                builder.append("test");
+            }
+
+            String longArg = builder.toString();
+            main.parseArguments(new String[] { "-d", "10", "-foo", "bar", "-t", longArg });
 
             String consoleContent = sysout.toString();
-            assertTrue(consoleContent.contains("Unknown option: -foo"));
+            assertTrue(consoleContent
+                    .contains("Unknown option: -foo bar " + String.format("%s...", StringHelper.limitLength(longArg, 97))));
             assertTrue(consoleContent.contains("Apache Camel Runner takes the following options"));
         } catch (IOException e) {
             throw new RuntimeException(e);
diff --git a/extensions-core/main/runtime/src/main/java/org/apache/camel/quarkus/main/CamelMain.java b/extensions-core/main/runtime/src/main/java/org/apache/camel/quarkus/main/CamelMain.java
index 965f2b6..6078f35 100644
--- a/extensions-core/main/runtime/src/main/java/org/apache/camel/quarkus/main/CamelMain.java
+++ b/extensions-core/main/runtime/src/main/java/org/apache/camel/quarkus/main/CamelMain.java
@@ -16,10 +16,12 @@
  */
 package org.apache.camel.quarkus.main;
 
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.LinkedList;
+import java.util.List;
 import java.util.concurrent.atomic.AtomicBoolean;
 
 import io.quarkus.runtime.Quarkus;
@@ -35,6 +37,7 @@ import org.apache.camel.main.SimpleMainShutdownStrategy;
 import org.apache.camel.quarkus.core.CamelConfig.FailureRemedy;
 import org.apache.camel.spi.HasCamelContext;
 import org.apache.camel.support.service.ServiceHelper;
+import org.apache.camel.util.StringHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -171,12 +174,12 @@ public final class CamelMain extends MainCommandLineSupport implements HasCamelC
     @Override
     public void parseArguments(String[] arguments) {
         LinkedList<String> args = new LinkedList<>(Arrays.asList(arguments));
+        List<String> unknownArgs = new ArrayList<>();
 
         boolean valid = true;
         while (!args.isEmpty()) {
             initOptions();
             String arg = args.removeFirst();
-
             boolean handled = false;
             for (Option option : options) {
                 if (option.processOption(arg, args)) {
@@ -185,17 +188,22 @@ public final class CamelMain extends MainCommandLineSupport implements HasCamelC
                 }
             }
             if (!handled && !failureRemedy.equals(FailureRemedy.ignore)) {
-                System.out.println("Unknown option: " + arg);
-                System.out.println();
-
+                if (arg.length() >= 100) {
+                    // For long arguments, clean up formatting for console output
+                    String truncatedArg = String.format("%s...", StringHelper.limitLength(arg, 97));
+                    unknownArgs.add(truncatedArg);
+                } else {
+                    unknownArgs.add(arg);
+                }
                 valid = false;
-                break;
             }
         }
         if (!valid) {
+            System.out.println("Unknown option: " + String.join(" ", unknownArgs));
+            System.out.println();
             showOptions();
-            completed();
             if (failureRemedy.equals(FailureRemedy.fail)) {
+                completed();
                 throw new RuntimeException("CamelMain encountered unknown arguments");
             }
         }
diff --git a/integration-tests-support/process-executor-support/src/main/java/org/apache/camel/quarkus/test/support/process/QuarkusProcessExecutor.java b/integration-tests-support/process-executor-support/src/main/java/org/apache/camel/quarkus/test/support/process/QuarkusProcessExecutor.java
index ee1b409..c92a961 100644
--- a/integration-tests-support/process-executor-support/src/main/java/org/apache/camel/quarkus/test/support/process/QuarkusProcessExecutor.java
+++ b/integration-tests-support/process-executor-support/src/main/java/org/apache/camel/quarkus/test/support/process/QuarkusProcessExecutor.java
@@ -39,10 +39,19 @@ public class QuarkusProcessExecutor {
     private final int httpPort = AvailablePortFinder.getNextAvailable();
     private final int httpsPort = AvailablePortFinder.getNextAvailable();
 
-    public QuarkusProcessExecutor(String... args) {
-        LOGGER.infof("Executing process: %s", String.join(" ", command(args)));
+    public QuarkusProcessExecutor(String... jvmArgs) {
+        this(jvmArgs, null);
+    }
+
+    public QuarkusProcessExecutor(String[] jvmArgs, String... applicationArgs) {
+        List<String> command = command(jvmArgs);
+        if (applicationArgs != null) {
+            command.addAll(Arrays.asList(applicationArgs));
+        }
+
+        LOGGER.infof("Executing process: %s", String.join(" ", command));
         executor = new ProcessExecutor()
-                .command(command(args))
+                .command(command)
                 .redirectOutput(System.out)
                 .readOutput(true);
     }
diff --git a/integration-tests/main-command-mode/pom.xml b/integration-tests/main-command-mode/pom.xml
index 44f7ff1..64a2420 100644
--- a/integration-tests/main-command-mode/pom.xml
+++ b/integration-tests/main-command-mode/pom.xml
@@ -45,6 +45,10 @@
             <groupId>org.apache.camel.quarkus</groupId>
             <artifactId>camel-quarkus-timer</artifactId>
         </dependency>
+        <dependency>
+            <groupId>io.quarkus</groupId>
+            <artifactId>quarkus-vertx-web</artifactId>
+        </dependency>
 
         <!-- test dependencies -->
         <dependency>
diff --git a/integration-tests/main-command-mode/src/test/java/org/apache/camel/quarkus/main/cmd/it/CommandModeTest.java b/integration-tests/main-command-mode/src/test/java/org/apache/camel/quarkus/main/cmd/it/CommandModeTest.java
index c907f24..d3a8c8e 100644
--- a/integration-tests/main-command-mode/src/test/java/org/apache/camel/quarkus/main/cmd/it/CommandModeTest.java
+++ b/integration-tests/main-command-mode/src/test/java/org/apache/camel/quarkus/main/cmd/it/CommandModeTest.java
@@ -20,11 +20,14 @@ import java.io.IOException;
 import java.util.concurrent.TimeoutException;
 
 import org.apache.camel.quarkus.test.support.process.QuarkusProcessExecutor;
+import org.apache.camel.util.StringHelper;
 import org.assertj.core.api.Assertions;
 import org.junit.jupiter.api.Test;
 import org.zeroturnaround.exec.InvalidExitValueException;
 import org.zeroturnaround.exec.ProcessResult;
 
+import static org.assertj.core.api.Assertions.assertThat;
+
 public class CommandModeTest {
 
     @Test
@@ -34,4 +37,34 @@ public class CommandModeTest {
         Assertions.assertThat(result.getExitValue()).isEqualTo(0);
         Assertions.assertThat(result.outputUTF8()).contains("Hello Joe!");
     }
+
+    @Test
+    void testMainWarnsOnUnknownArguments() throws InterruptedException, IOException, TimeoutException {
+        // Build a long fake classpath argument
+        StringBuilder builder = new StringBuilder();
+        for (int i = 0; i < 150; i++) {
+            builder.append("jar-" + i + ".jar:");
+        }
+        String classpathArg = builder.toString();
+
+        final String[] jvmArgs = new String[] { "-Dgreeted.subject=Joe" };
+        final String[] applicationArgs = new String[] {
+                "-d",
+                "10",
+                "-cp",
+                classpathArg,
+                "-t"
+        };
+
+        final ProcessResult result = new QuarkusProcessExecutor(jvmArgs, applicationArgs).execute();
+
+        // Verify the application ran successfully
+        assertThat(result.getExitValue()).isEqualTo(0);
+        assertThat(result.outputUTF8()).contains("Hello Joe!");
+
+        // Verify warning for unknown arguments was printed to the console
+        String truncatedCpArg = String.format("%s...", StringHelper.limitLength(classpathArg, 97));
+        assertThat(result.outputUTF8()).contains("Unknown option: -cp " + truncatedCpArg);
+        assertThat(result.outputUTF8()).contains("Apache Camel Runner takes the following options");
+    }
 }
diff --git a/integration-tests/main-command-mode/pom.xml b/integration-tests/main-unknown-args-fail/pom.xml
similarity index 95%
copy from integration-tests/main-command-mode/pom.xml
copy to integration-tests/main-unknown-args-fail/pom.xml
index 44f7ff1..4a1a5bd 100644
--- a/integration-tests/main-command-mode/pom.xml
+++ b/integration-tests/main-unknown-args-fail/pom.xml
@@ -25,8 +25,8 @@
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
-    <artifactId>camel-quarkus-integration-test-main-command-mode</artifactId>
-    <name>Camel Quarkus :: Integration Tests :: Main Command Mode</name>
+    <artifactId>camel-quarkus-integration-test-main-unknown-args-fail</artifactId>
+    <name>Camel Quarkus :: Integration Tests :: Main Unknown Arguments Fail :: Tests</name>
 
     <properties>
         <quarkus.runner.jar>${project.build.directory}/quarkus-app/quarkus-run.jar</quarkus.runner.jar>
@@ -45,6 +45,10 @@
             <groupId>org.apache.camel.quarkus</groupId>
             <artifactId>camel-quarkus-timer</artifactId>
         </dependency>
+        <dependency>
+            <groupId>io.quarkus</groupId>
+            <artifactId>quarkus-vertx-web</artifactId>
+        </dependency>
 
         <!-- test dependencies -->
         <dependency>
diff --git a/integration-tests/main-command-mode/src/test/java/org/apache/camel/quarkus/main/cmd/it/CommandModeTest.java b/integration-tests/main-unknown-args-fail/src/main/java/org/apache/camel/quarkus/main/unknown/args/fail/Routes.java
similarity index 51%
copy from integration-tests/main-command-mode/src/test/java/org/apache/camel/quarkus/main/cmd/it/CommandModeTest.java
copy to integration-tests/main-unknown-args-fail/src/main/java/org/apache/camel/quarkus/main/unknown/args/fail/Routes.java
index c907f24..4d23161 100644
--- a/integration-tests/main-command-mode/src/test/java/org/apache/camel/quarkus/main/cmd/it/CommandModeTest.java
+++ b/integration-tests/main-unknown-args-fail/src/main/java/org/apache/camel/quarkus/main/unknown/args/fail/Routes.java
@@ -14,24 +14,15 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.quarkus.main.cmd.it;
+package org.apache.camel.quarkus.main.unknown.args.fail;
 
-import java.io.IOException;
-import java.util.concurrent.TimeoutException;
+import org.apache.camel.builder.RouteBuilder;
 
-import org.apache.camel.quarkus.test.support.process.QuarkusProcessExecutor;
-import org.assertj.core.api.Assertions;
-import org.junit.jupiter.api.Test;
-import org.zeroturnaround.exec.InvalidExitValueException;
-import org.zeroturnaround.exec.ProcessResult;
+public class Routes extends RouteBuilder {
 
-public class CommandModeTest {
-
-    @Test
-    void hello() throws InvalidExitValueException, IOException, InterruptedException, TimeoutException {
-        final ProcessResult result = new QuarkusProcessExecutor("-Dgreeted.subject=Joe").execute();
-
-        Assertions.assertThat(result.getExitValue()).isEqualTo(0);
-        Assertions.assertThat(result.outputUTF8()).contains("Hello Joe!");
+    @Override
+    public void configure() throws Exception {
+        from("timer:tick?repeatCount=1&delay=-1")
+                .log("Timer tick!");
     }
 }
diff --git a/integration-tests/main-unknown-args-fail/src/main/resources/application.properties b/integration-tests/main-unknown-args-fail/src/main/resources/application.properties
new file mode 100644
index 0000000..62d96d9
--- /dev/null
+++ b/integration-tests/main-unknown-args-fail/src/main/resources/application.properties
@@ -0,0 +1,21 @@
+## ---------------------------------------------------------------------------
+## 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.
+## ---------------------------------------------------------------------------
+
+# Terminate after 1 message is generated
+camel.main.duration-max-messages = 1
+
+quarkus.camel.main.arguments.on-unknown = fail
diff --git a/integration-tests/main-command-mode/src/test/java/org/apache/camel/quarkus/main/cmd/it/CommandModeTest.java b/integration-tests/main-unknown-args-fail/src/test/java/org/apache/camel/quarkus/main/unknown/args/fail/MainUnknownArgumentFailIT.java
similarity index 51%
copy from integration-tests/main-command-mode/src/test/java/org/apache/camel/quarkus/main/cmd/it/CommandModeTest.java
copy to integration-tests/main-unknown-args-fail/src/test/java/org/apache/camel/quarkus/main/unknown/args/fail/MainUnknownArgumentFailIT.java
index c907f24..ee4966c 100644
--- a/integration-tests/main-command-mode/src/test/java/org/apache/camel/quarkus/main/cmd/it/CommandModeTest.java
+++ b/integration-tests/main-unknown-args-fail/src/test/java/org/apache/camel/quarkus/main/unknown/args/fail/MainUnknownArgumentFailIT.java
@@ -14,24 +14,10 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.quarkus.main.cmd.it;
+package org.apache.camel.quarkus.main.unknown.args.fail;
 
-import java.io.IOException;
-import java.util.concurrent.TimeoutException;
+import io.quarkus.test.junit.NativeImageTest;
 
-import org.apache.camel.quarkus.test.support.process.QuarkusProcessExecutor;
-import org.assertj.core.api.Assertions;
-import org.junit.jupiter.api.Test;
-import org.zeroturnaround.exec.InvalidExitValueException;
-import org.zeroturnaround.exec.ProcessResult;
-
-public class CommandModeTest {
-
-    @Test
-    void hello() throws InvalidExitValueException, IOException, InterruptedException, TimeoutException {
-        final ProcessResult result = new QuarkusProcessExecutor("-Dgreeted.subject=Joe").execute();
-
-        Assertions.assertThat(result.getExitValue()).isEqualTo(0);
-        Assertions.assertThat(result.outputUTF8()).contains("Hello Joe!");
-    }
+@NativeImageTest
+class MainUnknownArgumentFailIT extends MainUnknownArgumentFailTest {
 }
diff --git a/integration-tests/main-command-mode/src/test/java/org/apache/camel/quarkus/main/cmd/it/CommandModeTest.java b/integration-tests/main-unknown-args-fail/src/test/java/org/apache/camel/quarkus/main/unknown/args/fail/MainUnknownArgumentFailTest.java
similarity index 57%
copy from integration-tests/main-command-mode/src/test/java/org/apache/camel/quarkus/main/cmd/it/CommandModeTest.java
copy to integration-tests/main-unknown-args-fail/src/test/java/org/apache/camel/quarkus/main/unknown/args/fail/MainUnknownArgumentFailTest.java
index c907f24..e113e07 100644
--- a/integration-tests/main-command-mode/src/test/java/org/apache/camel/quarkus/main/cmd/it/CommandModeTest.java
+++ b/integration-tests/main-unknown-args-fail/src/test/java/org/apache/camel/quarkus/main/unknown/args/fail/MainUnknownArgumentFailTest.java
@@ -14,24 +14,31 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.quarkus.main.cmd.it;
+package org.apache.camel.quarkus.main.unknown.args.fail;
 
 import java.io.IOException;
 import java.util.concurrent.TimeoutException;
 
+import io.quarkus.test.junit.QuarkusTest;
 import org.apache.camel.quarkus.test.support.process.QuarkusProcessExecutor;
-import org.assertj.core.api.Assertions;
 import org.junit.jupiter.api.Test;
-import org.zeroturnaround.exec.InvalidExitValueException;
 import org.zeroturnaround.exec.ProcessResult;
 
-public class CommandModeTest {
+import static org.assertj.core.api.Assertions.assertThat;
+
+@QuarkusTest
+public class MainUnknownArgumentFailTest {
 
     @Test
-    void hello() throws InvalidExitValueException, IOException, InterruptedException, TimeoutException {
-        final ProcessResult result = new QuarkusProcessExecutor("-Dgreeted.subject=Joe").execute();
+    public void testMainTerminatesOnUnknownArguments() throws InterruptedException, IOException, TimeoutException {
+        final ProcessResult result = new QuarkusProcessExecutor(new String[] {}, "-d", "10", "-cp", "foo.jar", "-t").execute();
+
+        // Verify the application did not run successfully
+        assertThat(result.getExitValue()).isEqualTo(1);
+        assertThat(result.outputUTF8()).doesNotContain("Timer tick!");
 
-        Assertions.assertThat(result.getExitValue()).isEqualTo(0);
-        Assertions.assertThat(result.outputUTF8()).contains("Hello Joe!");
+        // Verify warning for unknown arguments was printed to the console
+        assertThat(result.outputUTF8()).contains("Unknown option: -cp foo.jar");
+        assertThat(result.outputUTF8()).contains("Apache Camel Runner takes the following options");
     }
 }
diff --git a/integration-tests/main-command-mode/pom.xml b/integration-tests/main-unknown-args-ignore/pom.xml
similarity index 95%
copy from integration-tests/main-command-mode/pom.xml
copy to integration-tests/main-unknown-args-ignore/pom.xml
index 44f7ff1..c7a7a65 100644
--- a/integration-tests/main-command-mode/pom.xml
+++ b/integration-tests/main-unknown-args-ignore/pom.xml
@@ -25,8 +25,8 @@
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
-    <artifactId>camel-quarkus-integration-test-main-command-mode</artifactId>
-    <name>Camel Quarkus :: Integration Tests :: Main Command Mode</name>
+    <artifactId>camel-quarkus-integration-test-main-unknown-args-ignore</artifactId>
+    <name>Camel Quarkus :: Integration Tests :: Main Unknown Arguments Ignore :: Tests</name>
 
     <properties>
         <quarkus.runner.jar>${project.build.directory}/quarkus-app/quarkus-run.jar</quarkus.runner.jar>
@@ -45,6 +45,10 @@
             <groupId>org.apache.camel.quarkus</groupId>
             <artifactId>camel-quarkus-timer</artifactId>
         </dependency>
+        <dependency>
+            <groupId>io.quarkus</groupId>
+            <artifactId>quarkus-vertx-web</artifactId>
+        </dependency>
 
         <!-- test dependencies -->
         <dependency>
diff --git a/integration-tests/main-command-mode/src/test/java/org/apache/camel/quarkus/main/cmd/it/CommandModeTest.java b/integration-tests/main-unknown-args-ignore/src/main/java/org/apache/camel/quarkus/main/unknown/args/ignore/Routes.java
similarity index 51%
copy from integration-tests/main-command-mode/src/test/java/org/apache/camel/quarkus/main/cmd/it/CommandModeTest.java
copy to integration-tests/main-unknown-args-ignore/src/main/java/org/apache/camel/quarkus/main/unknown/args/ignore/Routes.java
index c907f24..a14e906 100644
--- a/integration-tests/main-command-mode/src/test/java/org/apache/camel/quarkus/main/cmd/it/CommandModeTest.java
+++ b/integration-tests/main-unknown-args-ignore/src/main/java/org/apache/camel/quarkus/main/unknown/args/ignore/Routes.java
@@ -14,24 +14,15 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.quarkus.main.cmd.it;
+package org.apache.camel.quarkus.main.unknown.args.ignore;
 
-import java.io.IOException;
-import java.util.concurrent.TimeoutException;
+import org.apache.camel.builder.RouteBuilder;
 
-import org.apache.camel.quarkus.test.support.process.QuarkusProcessExecutor;
-import org.assertj.core.api.Assertions;
-import org.junit.jupiter.api.Test;
-import org.zeroturnaround.exec.InvalidExitValueException;
-import org.zeroturnaround.exec.ProcessResult;
+public class Routes extends RouteBuilder {
 
-public class CommandModeTest {
-
-    @Test
-    void hello() throws InvalidExitValueException, IOException, InterruptedException, TimeoutException {
-        final ProcessResult result = new QuarkusProcessExecutor("-Dgreeted.subject=Joe").execute();
-
-        Assertions.assertThat(result.getExitValue()).isEqualTo(0);
-        Assertions.assertThat(result.outputUTF8()).contains("Hello Joe!");
+    @Override
+    public void configure() throws Exception {
+        from("timer:tick?repeatCount=1&delay=-1")
+                .log("Timer tick!");
     }
 }
diff --git a/integration-tests/main-unknown-args-ignore/src/main/resources/application.properties b/integration-tests/main-unknown-args-ignore/src/main/resources/application.properties
new file mode 100644
index 0000000..6de63fb
--- /dev/null
+++ b/integration-tests/main-unknown-args-ignore/src/main/resources/application.properties
@@ -0,0 +1,21 @@
+## ---------------------------------------------------------------------------
+## 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.
+## ---------------------------------------------------------------------------
+
+# Terminate after 1 message is generated
+camel.main.duration-max-messages = 1
+
+quarkus.camel.main.arguments.on-unknown = ignore
diff --git a/integration-tests/main-command-mode/src/test/java/org/apache/camel/quarkus/main/cmd/it/CommandModeTest.java b/integration-tests/main-unknown-args-ignore/src/test/java/org/apache/camel/quarkus/main/unknown/args/ignore/MainUnknownArgumentIgnoreIT.java
similarity index 51%
copy from integration-tests/main-command-mode/src/test/java/org/apache/camel/quarkus/main/cmd/it/CommandModeTest.java
copy to integration-tests/main-unknown-args-ignore/src/test/java/org/apache/camel/quarkus/main/unknown/args/ignore/MainUnknownArgumentIgnoreIT.java
index c907f24..be0f91a 100644
--- a/integration-tests/main-command-mode/src/test/java/org/apache/camel/quarkus/main/cmd/it/CommandModeTest.java
+++ b/integration-tests/main-unknown-args-ignore/src/test/java/org/apache/camel/quarkus/main/unknown/args/ignore/MainUnknownArgumentIgnoreIT.java
@@ -14,24 +14,10 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.quarkus.main.cmd.it;
+package org.apache.camel.quarkus.main.unknown.args.ignore;
 
-import java.io.IOException;
-import java.util.concurrent.TimeoutException;
+import io.quarkus.test.junit.NativeImageTest;
 
-import org.apache.camel.quarkus.test.support.process.QuarkusProcessExecutor;
-import org.assertj.core.api.Assertions;
-import org.junit.jupiter.api.Test;
-import org.zeroturnaround.exec.InvalidExitValueException;
-import org.zeroturnaround.exec.ProcessResult;
-
-public class CommandModeTest {
-
-    @Test
-    void hello() throws InvalidExitValueException, IOException, InterruptedException, TimeoutException {
-        final ProcessResult result = new QuarkusProcessExecutor("-Dgreeted.subject=Joe").execute();
-
-        Assertions.assertThat(result.getExitValue()).isEqualTo(0);
-        Assertions.assertThat(result.outputUTF8()).contains("Hello Joe!");
-    }
+@NativeImageTest
+class MainUnknownArgumentIgnoreIT extends MainUnknownArgumentIgnoreTest {
 }
diff --git a/integration-tests/main-command-mode/src/test/java/org/apache/camel/quarkus/main/cmd/it/CommandModeTest.java b/integration-tests/main-unknown-args-ignore/src/test/java/org/apache/camel/quarkus/main/unknown/args/ignore/MainUnknownArgumentIgnoreTest.java
similarity index 56%
copy from integration-tests/main-command-mode/src/test/java/org/apache/camel/quarkus/main/cmd/it/CommandModeTest.java
copy to integration-tests/main-unknown-args-ignore/src/test/java/org/apache/camel/quarkus/main/unknown/args/ignore/MainUnknownArgumentIgnoreTest.java
index c907f24..b205bce 100644
--- a/integration-tests/main-command-mode/src/test/java/org/apache/camel/quarkus/main/cmd/it/CommandModeTest.java
+++ b/integration-tests/main-unknown-args-ignore/src/test/java/org/apache/camel/quarkus/main/unknown/args/ignore/MainUnknownArgumentIgnoreTest.java
@@ -14,24 +14,31 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.quarkus.main.cmd.it;
+package org.apache.camel.quarkus.main.unknown.args.ignore;
 
 import java.io.IOException;
 import java.util.concurrent.TimeoutException;
 
+import io.quarkus.test.junit.QuarkusTest;
 import org.apache.camel.quarkus.test.support.process.QuarkusProcessExecutor;
-import org.assertj.core.api.Assertions;
 import org.junit.jupiter.api.Test;
-import org.zeroturnaround.exec.InvalidExitValueException;
 import org.zeroturnaround.exec.ProcessResult;
 
-public class CommandModeTest {
+import static org.assertj.core.api.Assertions.assertThat;
+
+@QuarkusTest
+public class MainUnknownArgumentIgnoreTest {
 
     @Test
-    void hello() throws InvalidExitValueException, IOException, InterruptedException, TimeoutException {
-        final ProcessResult result = new QuarkusProcessExecutor("-Dgreeted.subject=Joe").execute();
+    public void testMainIgnoresUnknownArguments() throws InterruptedException, IOException, TimeoutException {
+        final ProcessResult result = new QuarkusProcessExecutor(new String[] {}, "-d", "10", "-cp", "foo.jar", "-t").execute();
+
+        // Verify the application ran successfully
+        assertThat(result.getExitValue()).isEqualTo(0);
+        assertThat(result.outputUTF8()).contains("Timer tick!");
 
-        Assertions.assertThat(result.getExitValue()).isEqualTo(0);
-        Assertions.assertThat(result.outputUTF8()).contains("Hello Joe!");
+        // Verify unknown arguments were ignored and no warning was printed to the console
+        assertThat(result.outputUTF8()).doesNotContain("Unknown option: -cp foo.jar");
+        assertThat(result.outputUTF8()).doesNotContain("Apache Camel Runner takes the following options");
     }
 }
diff --git a/integration-tests/pom.xml b/integration-tests/pom.xml
index 30ea475..6321b16 100644
--- a/integration-tests/pom.xml
+++ b/integration-tests/pom.xml
@@ -58,6 +58,8 @@
         <module>main-collector</module>
         <module>main-caffeine-lrucache</module>
         <module>main-command-mode</module>
+        <module>main-unknown-args-fail</module>
+        <module>main-unknown-args-ignore</module>
 
         <!-- extensions a..z; do not remove this comment, it is important when sorting via  mvn process-resources -Pformat -->
         <module>activemq</module>
diff --git a/tooling/scripts/test-categories.yaml b/tooling/scripts/test-categories.yaml
index 8f861cd..21c87af 100644
--- a/tooling/scripts/test-categories.yaml
+++ b/tooling/scripts/test-categories.yaml
@@ -149,9 +149,11 @@ misc:
   - as2
   - kotlin
   - disruptor
-networking2-dataformats:
+networking2-dataformats-main:
   - atlasmap
   - mail
+  - main-unknown-args-fail
+  - main-unknown-args-ignore
   - netty
   - nsq
   - servlet
diff --git a/tooling/test-list/pom.xml b/tooling/test-list/pom.xml
index d138aa4..c28b5e4 100644
--- a/tooling/test-list/pom.xml
+++ b/tooling/test-list/pom.xml
@@ -58,6 +58,8 @@
                                 <exclude>support/**/*</exclude>
                                 <exclude>master/pom.xml</exclude>
                                 <exclude>main-command-mode/pom.xml</exclude>
+                                <exclude>main-unknown-args-fail/pom.xml</exclude>
+                                <exclude>main-unknown-args-ignore/pom.xml</exclude>
                             </excludes>
                         </fileSet>
                     </fileSets>