Skip to content

Commit 4238860

Browse files
committed
Make the string <-> Volume enum conversion safe from potential locale conversion issues.
1 parent a183d30 commit 4238860

File tree

2 files changed

+28
-6
lines changed
  • profiler/src
    • main/java/com/splunk/opentelemetry/profiler/snapshot
    • test/java/com/splunk/opentelemetry/profiler/snapshot

2 files changed

+28
-6
lines changed

profiler/src/main/java/com/splunk/opentelemetry/profiler/snapshot/Volume.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616

1717
package com.splunk.opentelemetry.profiler.snapshot;
1818

19+
import java.util.Locale;
20+
1921
public enum Volume {
2022
OFF,
2123
HIGHEST;
@@ -26,14 +28,14 @@ static Volume fromString(String value) {
2628
}
2729

2830
try {
29-
return Volume.valueOf(value.toUpperCase());
31+
return Volume.valueOf(value.toUpperCase(Locale.ROOT));
3032
} catch (IllegalArgumentException e) {
3133
return OFF;
3234
}
3335
}
3436

3537
@Override
3638
public String toString() {
37-
return name().toLowerCase();
39+
return name().toLowerCase(Locale.ROOT);
3840
}
3941
}

profiler/src/test/java/com/splunk/opentelemetry/profiler/snapshot/VolumeTest.java

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,18 @@
1818

1919
import static org.junit.jupiter.api.Assertions.assertEquals;
2020

21+
import java.util.Locale;
2122
import java.util.stream.Stream;
2223
import org.junit.jupiter.params.ParameterizedTest;
2324
import org.junit.jupiter.params.provider.Arguments;
25+
import org.junit.jupiter.params.provider.EnumSource;
2426
import org.junit.jupiter.params.provider.MethodSource;
2527

2628
class VolumeTest {
2729
@ParameterizedTest
28-
@MethodSource("volumesAsStrings")
29-
void toStringRepresentation(Volume volume, String asString) {
30-
assertEquals(asString, volume.toString());
30+
@EnumSource(Volume.class)
31+
void toStringRepresentation(Volume volume) {
32+
assertEquals(volume.name().toLowerCase(Locale.ROOT), volume.toString());
3133
}
3234

3335
@ParameterizedTest
@@ -36,8 +38,26 @@ void fromStringRepresentation(Volume volume, String asString) {
3638
assertEquals(volume, Volume.fromString(asString));
3739
}
3840

41+
@ParameterizedTest
42+
@MethodSource("volumesAsStrings")
43+
void fromStringIsNotSensitiveToLocale(Volume volume, String asString) {
44+
var defaultLocale = Locale.getDefault();
45+
try {
46+
for (var locale : Locale.getAvailableLocales()) {
47+
Locale.setDefault(locale);
48+
assertEquals(volume, Volume.fromString(asString));
49+
}
50+
} finally {
51+
Locale.setDefault(defaultLocale);
52+
}
53+
}
54+
3955
private static Stream<Arguments> volumesAsStrings() {
40-
return Stream.of(Arguments.of(Volume.OFF, "off"), Arguments.of(Volume.HIGHEST, "highest"));
56+
return Stream.of(
57+
Arguments.of(Volume.OFF, "off"),
58+
Arguments.of(Volume.HIGHEST, "highest"),
59+
Arguments.of(Volume.HIGHEST, "hıghest")
60+
);
4161
}
4262

4363
@ParameterizedTest

0 commit comments

Comments
 (0)