From 71f515feb92117efd86cf624dd7bcfedff632284 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Barto=C5=A1?= Date: Mon, 13 Jan 2025 17:48:23 +0100 Subject: [PATCH] Unable to set '--log-syslog-max-length' property (#36253) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Closes #35386 Signed-off-by: Martin Bartoš --- .../java/org/keycloak/config/LoggingOptions.java | 2 +- .../mappers/LoggingPropertyMappers.java | 11 +++++++++++ .../quarkus/runtime/cli/PicocliTest.java | 16 ++++++++++++++++ 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/quarkus/config-api/src/main/java/org/keycloak/config/LoggingOptions.java b/quarkus/config-api/src/main/java/org/keycloak/config/LoggingOptions.java index 3aee1d0bbc5..edc6a58b206 100644 --- a/quarkus/config-api/src/main/java/org/keycloak/config/LoggingOptions.java +++ b/quarkus/config-api/src/main/java/org/keycloak/config/LoggingOptions.java @@ -173,7 +173,7 @@ public class LoggingOptions { .defaultValue(SyslogHandler.SyslogType.RFC5424.toString().toLowerCase()) .build(); - public static final Option LOG_SYSLOG_MAX_LENGTH = new OptionBuilder<>("log-syslog-max-length", MemorySize.class) + public static final Option LOG_SYSLOG_MAX_LENGTH = new OptionBuilder<>("log-syslog-max-length", String.class) .category(OptionCategory.LOGGING) // based on the 'quarkus.log.syslog.max-length' property .description("Set the maximum length, in bytes, of the message allowed to be sent. The length includes the header and the message. " + diff --git a/quarkus/runtime/src/main/java/org/keycloak/quarkus/runtime/configuration/mappers/LoggingPropertyMappers.java b/quarkus/runtime/src/main/java/org/keycloak/quarkus/runtime/configuration/mappers/LoggingPropertyMappers.java index 224c66bc928..59b293716f3 100644 --- a/quarkus/runtime/src/main/java/org/keycloak/quarkus/runtime/configuration/mappers/LoggingPropertyMappers.java +++ b/quarkus/runtime/src/main/java/org/keycloak/quarkus/runtime/configuration/mappers/LoggingPropertyMappers.java @@ -12,6 +12,7 @@ import java.util.function.BiFunction; import java.util.logging.Level; import java.util.stream.Stream; +import io.quarkus.runtime.configuration.MemorySizeConverter; import org.jboss.logmanager.LogContext; import org.keycloak.config.LoggingOptions; import org.keycloak.config.Option; @@ -135,6 +136,7 @@ public final class LoggingPropertyMappers { fromOption(LoggingOptions.LOG_SYSLOG_MAX_LENGTH) .isEnabled(LoggingPropertyMappers::isSyslogEnabled, SYSLOG_ENABLED_MSG) .to("quarkus.log.syslog.max-length") + .validator(LoggingPropertyMappers::validateSyslogMaxLength) .paramLabel("max-length") .build(), fromOption(LoggingOptions.LOG_SYSLOG_PROTOCOL) @@ -258,4 +260,13 @@ public final class LoggingPropertyMappers { return Optional.of(LoggingOptions.DEFAULT_LOG_TRACING_FORMAT); } + + private static void validateSyslogMaxLength(String value) { + var converter = new MemorySizeConverter(); + try { + converter.convert(value); + } catch (IllegalArgumentException e) { + throw new PropertyException(String.format("Invalid value for option '--log-syslog-max-length': %s", e.getMessage())); + } + } } diff --git a/quarkus/runtime/src/test/java/org/keycloak/quarkus/runtime/cli/PicocliTest.java b/quarkus/runtime/src/test/java/org/keycloak/quarkus/runtime/cli/PicocliTest.java index 94c3074b08e..16451125d14 100644 --- a/quarkus/runtime/src/test/java/org/keycloak/quarkus/runtime/cli/PicocliTest.java +++ b/quarkus/runtime/src/test/java/org/keycloak/quarkus/runtime/cli/PicocliTest.java @@ -19,6 +19,7 @@ package org.keycloak.quarkus.runtime.cli; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.containsString; +import static org.hamcrest.Matchers.nullValue; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; @@ -205,4 +206,19 @@ public class PicocliTest extends AbstractConfigurationTest { "Option: '--db postgres' is not expected to contain whitespace, please remove any unnecessary quoting/escaping")); } + @Test + public void syslogMaxLengthMemorySize() { + NonRunningPicocli nonRunningPicocli = pseudoLaunch("start-dev", "--log=syslog", "--log-syslog-max-length=60k"); + assertEquals(CommandLine.ExitCode.OK, nonRunningPicocli.exitCode); + assertEquals("60k", nonRunningPicocli.config.getConfigValue("quarkus.log.syslog.max-length").getValue()); + + nonRunningPicocli = pseudoLaunch("start-dev", "--log=syslog"); + assertEquals(CommandLine.ExitCode.OK, nonRunningPicocli.exitCode); + assertThat(nonRunningPicocli.config.getConfigValue("quarkus.log.syslog.max-length").getValue(), nullValue()); + + nonRunningPicocli = pseudoLaunch("start-dev", "--log=syslog", "--log-syslog-max-length=wrong"); + assertEquals(CommandLine.ExitCode.USAGE, nonRunningPicocli.exitCode); + assertThat(nonRunningPicocli.getErrString(), containsString( + "Invalid value for option '--log-syslog-max-length': value wrong not in correct format (regular expression): [0-9]+[BbKkMmGgTtPpEeZzYy]?")); + } }