diff --git a/sdk-extensions/autoconfigure-spi/src/main/java/io/opentelemetry/sdk/autoconfigure/spi/internal/DefaultConfigProperties.java b/sdk-extensions/autoconfigure-spi/src/main/java/io/opentelemetry/sdk/autoconfigure/spi/internal/DefaultConfigProperties.java index b8673993fe3..af0e4bae2bf 100644 --- a/sdk-extensions/autoconfigure-spi/src/main/java/io/opentelemetry/sdk/autoconfigure/spi/internal/DefaultConfigProperties.java +++ b/sdk-extensions/autoconfigure-spi/src/main/java/io/opentelemetry/sdk/autoconfigure/spi/internal/DefaultConfigProperties.java @@ -159,7 +159,7 @@ public Duration getDuration(String name) { try { long rawNumber = Long.parseLong(numberString.trim()); TimeUnit unit = getDurationUnit(unitString.trim()); - return Duration.ofMillis(TimeUnit.MILLISECONDS.convert(rawNumber, unit)); + return Duration.ofNanos(TimeUnit.NANOSECONDS.convert(rawNumber, unit)); } catch (NumberFormatException ex) { throw new ConfigurationException( "Invalid duration property " @@ -256,6 +256,10 @@ private static List filterBlanksAndNulls(String[] values) { /** Returns the TimeUnit associated with a unit string. Defaults to milliseconds. */ private static TimeUnit getDurationUnit(String unitString) { switch (unitString) { + case "us": + return TimeUnit.MICROSECONDS; + case "ns": + return TimeUnit.NANOSECONDS; case "": // Fallthrough expected case "ms": return TimeUnit.MILLISECONDS; diff --git a/sdk-extensions/autoconfigure-spi/src/test/java/io/opentelemetry/sdk/autoconfigure/spi/internal/ConfigPropertiesTest.java b/sdk-extensions/autoconfigure-spi/src/test/java/io/opentelemetry/sdk/autoconfigure/spi/internal/ConfigPropertiesTest.java index e0fe198dc9e..78cc6806c08 100644 --- a/sdk-extensions/autoconfigure-spi/src/test/java/io/opentelemetry/sdk/autoconfigure/spi/internal/ConfigPropertiesTest.java +++ b/sdk-extensions/autoconfigure-spi/src/test/java/io/opentelemetry/sdk/autoconfigure/spi/internal/ConfigPropertiesTest.java @@ -185,8 +185,24 @@ void invalidDuration() { .hasMessage("Invalid duration property duration=9mm. Invalid duration string, found: mm"); } + @Test + void durationNegativeParsing() { + assertThat( + DefaultConfigProperties.createFromMap(Collections.singletonMap("duration", "-41")) + .getDuration("duration")) + .isEqualTo(Duration.ofMillis(-41)); + } + @Test void durationUnitParsing() { + assertThat( + DefaultConfigProperties.createFromMap(Collections.singletonMap("duration", "3ns")) + .getDuration("duration")) + .isEqualTo(Duration.ofNanos(3)); + assertThat( + DefaultConfigProperties.createFromMap(Collections.singletonMap("duration", "2us")) + .getDuration("duration")) + .isEqualTo(Duration.ofNanos(2000)); assertThat( DefaultConfigProperties.createFromMap(Collections.singletonMap("duration", "1")) .getDuration("duration"))