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 15f261555f5e CAMEL-26929: camel-jbang - cmd logger refuses an unknown
level, and cmd browse --endpoint=seda:foo matches (#29927)
15f261555f5e is described below
commit 15f261555f5ee251c563e51b7ca47c5f0e48fba7
Author: Claus Ibsen <[email protected]>
AuthorDate: Sat Nov 14 19:26:40 2026 +0100
CAMEL-26929: camel-jbang - cmd logger refuses an unknown level, and cmd
browse --endpoint=seda:foo matches (#29927)
camel cmd logger --logging-level=BOGUS set the logger to ERROR with exit
code 0: an
unknown level is a usage error now. camel cmd browse --endpoint=seda:foo,
the example
of its help, matched nothing, as the browse console compared the filter with
seda://foo: it matches with EndpointHelper.matchEndpoint too.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
---
.../org/apache/camel/impl/console/BrowseDevConsole.java | 15 +++++++++++----
.../apache/camel/impl/console/BrowseDevConsoleTest.java | 16 ++++++++++++++++
.../dsl/jbang/core/commands/action/LoggerAction.java | 8 ++++++++
.../dsl/jbang/core/commands/action/LoggerActionTest.java | 15 +++++++++++++++
4 files changed, 50 insertions(+), 4 deletions(-)
diff --git
a/core/camel-console/src/main/java/org/apache/camel/impl/console/BrowseDevConsole.java
b/core/camel-console/src/main/java/org/apache/camel/impl/console/BrowseDevConsole.java
index f6ff67937a37..b2bb9313bcd2 100644
---
a/core/camel-console/src/main/java/org/apache/camel/impl/console/BrowseDevConsole.java
+++
b/core/camel-console/src/main/java/org/apache/camel/impl/console/BrowseDevConsole.java
@@ -28,6 +28,7 @@ import org.apache.camel.Exchange;
import org.apache.camel.spi.BrowsableEndpoint;
import org.apache.camel.spi.Metadata;
import org.apache.camel.spi.annotations.DevConsole;
+import org.apache.camel.support.EndpointHelper;
import org.apache.camel.support.MessageHelper;
import org.apache.camel.support.PatternHelper;
import org.apache.camel.support.console.AbstractDevConsole;
@@ -119,8 +120,7 @@ public class BrowseDevConsole extends AbstractDevConsole {
Collection<Endpoint> endpoints = new
TreeSet<>(Comparator.comparing(Endpoint::getEndpointUri));
endpoints.addAll(getCamelContext().getEndpoints());
for (Endpoint endpoint : endpoints) {
- if (endpoint instanceof BrowsableEndpoint be
- && (filter == null ||
PatternHelper.matchPattern(endpoint.getEndpointUri(), filter))) {
+ if (endpoint instanceof BrowsableEndpoint be && (filter == null ||
matches(endpoint, filter))) {
if (dump) {
List<Exchange> list = freshSize ?
be.getExchanges(Integer.MAX_VALUE, null) : be.getExchanges(max, null);
@@ -172,8 +172,7 @@ public class BrowseDevConsole extends AbstractDevConsole {
Collection<Endpoint> endpoints = new
TreeSet<>(Comparator.comparing(Endpoint::getEndpointUri));
endpoints.addAll(getCamelContext().getEndpoints());
for (Endpoint endpoint : endpoints) {
- if (endpoint instanceof BrowsableEndpoint be
- && (filter == null ||
PatternHelper.matchPattern(endpoint.getEndpointUri(), filter))) {
+ if (endpoint instanceof BrowsableEndpoint be && (filter == null ||
matches(endpoint, filter))) {
if (dump) {
List<Exchange> list = freshSize ?
be.getExchanges(Integer.MAX_VALUE, null) : be.getExchanges(max, null);
int queueSize = list != null ? list.size() : 0;
@@ -225,4 +224,12 @@ public class BrowseDevConsole extends AbstractDevConsole {
return JsonRecordSupport.toJsonObject(response);
}
+ /**
+ * Whether the endpoint matches the filter: the endpoint URI with or
without the // of the scheme (camel cmd browse
+ * --endpoint=seda:foo, the example of its help, matched none, as the URI
is seda://foo), or a pattern.
+ */
+ private boolean matches(Endpoint endpoint, String filter) {
+ return PatternHelper.matchPattern(endpoint.getEndpointUri(), filter)
+ || EndpointHelper.matchEndpoint(getCamelContext(),
endpoint.getEndpointUri(), filter);
+ }
}
diff --git
a/core/camel-console/src/test/java/org/apache/camel/impl/console/BrowseDevConsoleTest.java
b/core/camel-console/src/test/java/org/apache/camel/impl/console/BrowseDevConsoleTest.java
index ff127b2e9199..407435549f1d 100644
---
a/core/camel-console/src/test/java/org/apache/camel/impl/console/BrowseDevConsoleTest.java
+++
b/core/camel-console/src/test/java/org/apache/camel/impl/console/BrowseDevConsoleTest.java
@@ -61,6 +61,22 @@ public class BrowseDevConsoleTest extends ContextTestSupport
{
Assertions.assertTrue(out.contains("seda://queue1"));
}
+ @Test
+ public void testBrowseConsoleFilterWithoutTheSlashesOfTheScheme() throws
Exception {
+ // camel cmd browse --endpoint=seda:queue1, as its help shows, matched
none: the URI is seda://queue1
+ template.sendBody("direct:start", "Message 1");
+
+ DevConsole console =
PluginHelper.getDevConsoleResolver(context).resolveDevConsole("browse");
+ JsonObject out = (JsonObject) console.call(DevConsole.MediaType.JSON,
Map.of(BrowseDevConsole.FILTER, "seda:queue1"));
+
+ JsonArray browse = out.getCollection("browse");
+ Assertions.assertEquals(1, browse.size(), out.toJson());
+ Assertions.assertEquals("seda://queue1", ((JsonObject)
browse.get(0)).getString("endpointUri"));
+ // a pattern still matches
+ out = (JsonObject) console.call(DevConsole.MediaType.JSON,
Map.of(BrowseDevConsole.FILTER, "seda*"));
+ Assertions.assertEquals(2, out.getCollection("browse").size(),
out.toJson());
+ }
+
@Test
public void testBrowseConsoleJson() throws Exception {
// Send some messages to the seda queue
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/LoggerAction.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/LoggerAction.java
index 3fb3b1cc5635..388140fa8185 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/LoggerAction.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/LoggerAction.java
@@ -30,6 +30,7 @@ import org.aesh.command.option.Argument;
import org.aesh.command.option.Mixin;
import org.aesh.command.option.Option;
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.CopyableRow;
import org.apache.camel.dsl.jbang.core.common.JsonOutput;
import org.apache.camel.dsl.jbang.core.common.LoggingLevelCompletionCandidates;
@@ -57,6 +58,9 @@ public class LoggerAction extends ActionBaseCommand {
completer = PidNameAgeCompletionCandidates.class)
String sort;
+ // the levels of the logging, as the completion offers them, and OFF
+ private static final List<String> LEVELS = List.of("ERROR", "WARN",
"INFO", "DEBUG", "TRACE", "OFF");
+
@Option(name = "logging-level", description = "To change logging level
(${COMPLETION-CANDIDATES})",
completer = LoggingLevelCompletionCandidates.class)
String loggingLevel;
@@ -82,6 +86,10 @@ public class LoggerAction extends ActionBaseCommand {
if (name == null) {
name = "*";
}
+ // an unknown level was set as ERROR, with exit code 0 (CAMEL-26929)
+ if (LEVELS.stream().noneMatch(l -> l.equalsIgnoreCase(loggingLevel))) {
+ throw CliException.usage("Unknown logging level: " + loggingLevel
+ " (" + String.join(", ", LEVELS) + ")");
+ }
return callChangeLoggingLevel();
}
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 56828e745327..cdb70db8e91c 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
@@ -25,6 +25,8 @@ import java.util.stream.Stream;
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.util.json.JsonObject;
import org.junit.jupiter.api.AfterEach;
@@ -35,6 +37,7 @@ import org.mockito.MockedStatic;
import org.mockito.junit.jupiter.MockitoExtension;
import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.Mockito.lenient;
import static org.mockito.Mockito.mock;
@@ -105,6 +108,18 @@ class LoggerActionTest extends CamelCommandBaseTestSupport
{
}
}
+ @Test
+ void anUnknownLoggingLevelIsAUsageError() {
+ // it was set as ERROR, with exit code 0 (CAMEL-26929)
+ LoggerAction command = new LoggerAction(new
CamelJBangMain().withPrinter(printer));
+ command.loggingLevel = "BOGUS";
+
+ CliException e = assertThrows(CliException.class, command::doCall);
+
+ assertEquals(CliExitCode.USAGE, e.getExitCode());
+ assertEquals("Unknown logging level: BOGUS (ERROR, WARN, INFO, DEBUG,
TRACE, OFF)", e.getMessage());
+ }
+
@Test
void testEmptyOutputWhenNoLoggers() throws Exception {
JsonObject context = new JsonObject();