From 0d6edbe91793b119fc4cf0b47295e9f42690e707 Mon Sep 17 00:00:00 2001 From: Alex Martel <13215031+manofthepeace@users.noreply.github.com> Date: Wed, 5 Jul 2023 15:12:42 -0400 Subject: [PATCH] Fix duration converter with multiple units --- .../runtime/configuration/DurationConverter.java | 2 +- .../configuration/DurationConverterTestCase.java | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/core/runtime/src/main/java/io/quarkus/runtime/configuration/DurationConverter.java b/core/runtime/src/main/java/io/quarkus/runtime/configuration/DurationConverter.java index c0269c6c471a8..c8fd191699cf5 100644 --- a/core/runtime/src/main/java/io/quarkus/runtime/configuration/DurationConverter.java +++ b/core/runtime/src/main/java/io/quarkus/runtime/configuration/DurationConverter.java @@ -20,7 +20,7 @@ public class DurationConverter implements Converter, Serializable { private static final String PERIOD = "P"; private static final String PERIOD_OF_TIME = "PT"; private static final Pattern DIGITS = Pattern.compile("^[-+]?\\d+$"); - private static final Pattern DIGITS_AND_UNIT = Pattern.compile("^[-+]?\\d+(?:\\.\\d+)?(?i)[hms]$"); + private static final Pattern DIGITS_AND_UNIT = Pattern.compile("^(?:[-+]?\\d+(?:\\.\\d+)?(?i)[hms])+$"); private static final Pattern DAYS = Pattern.compile("^[-+]?\\d+(?i)d$"); private static final Pattern MILLIS = Pattern.compile("^[-+]?\\d+(?i)ms$"); diff --git a/core/runtime/src/test/java/io/quarkus/runtime/configuration/DurationConverterTestCase.java b/core/runtime/src/test/java/io/quarkus/runtime/configuration/DurationConverterTestCase.java index a3fa126ff7af8..af048140322ae 100644 --- a/core/runtime/src/test/java/io/quarkus/runtime/configuration/DurationConverterTestCase.java +++ b/core/runtime/src/test/java/io/quarkus/runtime/configuration/DurationConverterTestCase.java @@ -68,4 +68,18 @@ public void testValueIsInSec() { Duration actualDuration = durationConverter.convert("2s"); assertEquals(expectedDuration, actualDuration); } + + @Test + public void testValuesWithMultipleUnits() { + Duration expectedDuration = Duration.ofSeconds(150); + Duration actualDuration = durationConverter.convert("2m30s"); + assertEquals(expectedDuration, actualDuration); + } + + @Test + public void testValuesWithMultipleUnitsSigned() { + Duration expectedDuration = Duration.ofSeconds(90); + Duration actualDuration = durationConverter.convert("+2m-30s"); + assertEquals(expectedDuration, actualDuration); + } }