Skip to content

Commit 9977dde

Browse files
authored
Case-sensitive EnvProperty (#1043)
1 parent 82756a6 commit 9977dde

File tree

2 files changed

+54
-48
lines changed

2 files changed

+54
-48
lines changed

implementation/src/main/java/io/smallrye/config/EnvConfigSource.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717

1818
import static io.smallrye.config.common.utils.ConfigSourceUtil.CONFIG_ORDINAL_KEY;
1919
import static io.smallrye.config.common.utils.StringUtil.isNumeric;
20-
import static java.lang.Character.toLowerCase;
2120
import static java.security.AccessController.doPrivileged;
2221

2322
import java.io.Serializable;
@@ -78,7 +77,9 @@ public EnvConfigSource(final Map<String, String> properties, final int ordinal)
7877
for (Map.Entry<String, String> entry : properties.entrySet()) {
7978
this.properties.put(new EnvProperty(entry.getKey()), entry.getValue());
8079
this.names.add(entry.getKey());
81-
this.names.add(StringUtil.toLowerCaseAndDotted(entry.getKey()));
80+
String keyLowerCaseAndDotted = StringUtil.toLowerCaseAndDotted(entry.getKey());
81+
this.properties.putIfAbsent(new EnvProperty(keyLowerCaseAndDotted), entry.getValue());
82+
this.names.add(keyLowerCaseAndDotted);
8283
}
8384
}
8485

@@ -198,7 +199,7 @@ public int hashCode() {
198199
case '/':
199200
continue;
200201
}
201-
h = 31 * h + Character.toLowerCase(c);
202+
h = 31 * h + c;
202203
}
203204
return h;
204205
}
@@ -244,11 +245,11 @@ static boolean equals(final String name, final String other) {
244245
}
245246

246247
if (o == '.') {
247-
if (n != '.' && n != '-' && n != '_') {
248+
if (n != '.' && n != '-' && n != '_' && n != '/') {
248249
return false;
249250
}
250251
} else if (o == '-') {
251-
if (n != '.' && n != '-' && n != '_') {
252+
if (n != '.' && n != '-' && n != '_' && n != '/') {
252253
return false;
253254
}
254255
} else if (o == '"') {
@@ -287,7 +288,7 @@ && isNumeric(name, matchPosition - range, matchPosition)) {
287288
return false;
288289
}
289290
}
290-
} else if (toLowerCase(o) != toLowerCase(n)) {
291+
} else if (o != n) {
291292
return false;
292293
}
293294
matchPosition--;

implementation/src/test/java/io/smallrye/config/EnvConfigSourceTest.java

Lines changed: 47 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
*/
1616
package io.smallrye.config;
1717

18+
import static io.smallrye.config.Converters.BOOLEAN_CONVERTER;
1819
import static io.smallrye.config.Converters.STRING_CONVERTER;
1920
import static io.smallrye.config.KeyValuesConfigSource.config;
2021
import static java.util.stream.Collectors.toList;
@@ -175,52 +176,40 @@ void envEquals() {
175176
assertFalse(EnvProperty.equals("BAR", new String("foo.bar")));
176177
assertFalse(EnvProperty.equals("foo.bar", new String("BAR")));
177178

178-
assertTrue(EnvProperty.equals("FOO_BAR", new String("FOO_BAR")));
179-
assertTrue(EnvProperty.equals("FOO_BAR", new String("foo.bar")));
180-
assertTrue(EnvProperty.equals("FOO_BAR", new String("FOO.BAR")));
181-
assertTrue(EnvProperty.equals("FOO_BAR", new String("foo-bar")));
182-
assertTrue(EnvProperty.equals("FOO_BAR", new String("foo_bar")));
179+
assertTrue(envSourceEquals("FOO_BAR", new String("FOO_BAR")));
180+
assertTrue(envSourceEquals("FOO_BAR", new String("foo.bar")));
181+
assertTrue(envSourceEquals("FOO_BAR", new String("FOO.BAR")));
182+
assertTrue(envSourceEquals("FOO_BAR", new String("foo-bar")));
183+
assertTrue(envSourceEquals("FOO_BAR", new String("foo_bar")));
183184

184185
assertTrue(EnvProperty.equals("foo.bar", new String("foo.bar")));
185186
assertTrue(EnvProperty.equals("foo-bar", new String("foo-bar")));
186-
assertTrue(EnvProperty.equals("foo.bar", new String("FOO_BAR")));
187187
assertTrue(EnvProperty.equals("FOO.BAR", new String("FOO_BAR")));
188-
assertTrue(EnvProperty.equals("foo-bar", new String("FOO_BAR")));
189-
assertTrue(EnvProperty.equals("foo_bar", new String("FOO_BAR")));
190-
191-
assertTrue(EnvProperty.equals("FOO__BAR__BAZ", new String("foo.\"bar\".baz")));
192-
assertTrue(EnvProperty.equals("foo.\"bar\".baz", new String("FOO__BAR__BAZ")));
193-
194-
assertTrue(EnvProperty.equals("FOO__BAR__BAZ_0__Z_0_", new String("foo.\"bar\".baz[0].z[0]")));
195-
196-
assertTrue(EnvProperty.equals("_DEV_FOO_BAR", new String("%dev.foo.bar")));
197-
assertTrue(EnvProperty.equals("%dev.foo.bar", new String("_DEV_FOO_BAR")));
198-
assertTrue(EnvProperty.equals("_ENV_SMALLRYE_MP_CONFIG_PROP", new String("_ENV_SMALLRYE_MP_CONFIG_PROP")));
199-
assertTrue(EnvProperty.equals("%env.smallrye.mp.config.prop", new String("%env.smallrye.mp.config.prop")));
200-
assertTrue(EnvProperty.equals("_ENV_SMALLRYE_MP_CONFIG_PROP", new String("%env.smallrye.mp.config.prop")));
201-
assertTrue(EnvProperty.equals("%env.smallrye.mp.config.prop", new String("_ENV_SMALLRYE_MP_CONFIG_PROP")));
202-
203-
assertTrue(EnvProperty.equals("indexed[0]", new String("indexed[0]")));
204-
assertTrue(EnvProperty.equals("INDEXED_0_", new String("INDEXED_0_")));
205-
assertTrue(EnvProperty.equals("indexed[0]", new String("INDEXED_0_")));
206-
assertTrue(EnvProperty.equals("INDEXED_0_", new String("indexed[0]")));
207-
assertTrue(EnvProperty.equals("foo.bar.indexed[0]", new String("foo.bar.indexed[0]")));
208-
assertTrue(EnvProperty.equals("FOO_BAR_INDEXED_0_", new String("foo.bar.indexed[0]")));
209-
assertTrue(EnvProperty.equals("foo.bar[0].indexed[0]", new String("foo.bar[0].indexed[0]")));
210-
assertTrue(EnvProperty.equals("FOO_BAR_0__INDEXED_0_", new String("foo.bar[0].indexed[0]")));
211-
212-
assertTrue(EnvProperty.equals("env.\"quoted.key\".value", new String("env.\"quoted.key\".value")));
213-
assertTrue(EnvProperty.equals("ENV__QUOTED_KEY__VALUE", new String("ENV__QUOTED_KEY__VALUE")));
214-
assertTrue(EnvProperty.equals("ENV__QUOTED_KEY__VALUE", new String("env.\"quoted.key\".value")));
215-
assertTrue(EnvProperty.equals("env.\"quoted.key\".value", new String("ENV__QUOTED_KEY__VALUE")));
216-
assertTrue(EnvProperty.equals("env.\"quoted.key\".value", new String("env.\"quoted-key\".value")));
217-
assertTrue(EnvProperty.equals("env.\"quoted-key\".value", new String("env.\"quoted.key\".value")));
218-
219-
assertTrue(EnvProperty.equals("TEST_LANGUAGE__DE_ETR__", new String("test.language.\"de.etr\"")));
220-
assertTrue(EnvProperty.equals("test.language.\"de.etr\"", new String("TEST_LANGUAGE__DE_ETR__")));
221-
222-
assertEquals(new EnvProperty("TEST_LANGUAGE__DE_ETR_").hashCode(),
223-
new EnvProperty("test.language.\"de.etr\"").hashCode());
188+
189+
assertTrue(envSourceEquals("FOO__BAR__BAZ", new String("foo.\"bar\".baz")));
190+
assertTrue(envSourceEquals("FOO__BAR__BAZ_0__Z_0_", new String("foo.\"bar\".baz[0].z[0]")));
191+
192+
assertTrue(envSourceEquals("_DEV_FOO_BAR", new String("%dev.foo.bar")));
193+
assertTrue(envSourceEquals("%env.smallrye.mp.config.prop", new String("%env.smallrye.mp.config.prop")));
194+
assertTrue(envSourceEquals("_ENV_SMALLRYE_MP_CONFIG_PROP", new String("%env.smallrye.mp.config.prop")));
195+
196+
assertTrue(envSourceEquals("indexed[0]", new String("indexed[0]")));
197+
assertTrue(envSourceEquals("INDEXED_0_", new String("INDEXED_0_")));
198+
assertTrue(envSourceEquals("INDEXED_0_", new String("indexed[0]")));
199+
assertTrue(envSourceEquals("foo.bar.indexed[0]", new String("foo.bar.indexed[0]")));
200+
assertTrue(envSourceEquals("FOO_BAR_INDEXED_0_", new String("foo.bar.indexed[0]")));
201+
assertTrue(envSourceEquals("foo.bar[0].indexed[0]", new String("foo.bar[0].indexed[0]")));
202+
assertTrue(envSourceEquals("FOO_BAR_0__INDEXED_0_", new String("foo.bar[0].indexed[0]")));
203+
204+
assertTrue(envSourceEquals("env.\"quoted.key\".value", new String("env.\"quoted.key\".value")));
205+
assertTrue(envSourceEquals("ENV__QUOTED_KEY__VALUE", new String("ENV__QUOTED_KEY__VALUE")));
206+
assertTrue(envSourceEquals("ENV__QUOTED_KEY__VALUE", new String("env.\"quoted.key\".value")));
207+
assertTrue(envSourceEquals("env.\"quoted.key\".value", new String("env.\"quoted-key\".value")));
208+
assertTrue(envSourceEquals("env.\"quoted-key\".value", new String("env.\"quoted.key\".value")));
209+
assertTrue(envSourceEquals("TEST_LANGUAGE__DE_ETR__", new String("test.language.\"de.etr\"")));
210+
211+
assertTrue(EnvProperty.equals("smallrye/mp/config/prop", new String("smallrye/mp/config/prop")));
212+
assertTrue(envSourceEquals("SMALLRYE_MP_CONFIG_PROP", new String("smallrye/mp/config/prop")));
224213
}
225214

226215
@Test
@@ -237,4 +226,20 @@ void sameSemanticMeaning() {
237226

238227
assertEquals("fromEnv", config.getRawValue("foo.bar-baz"));
239228
}
229+
230+
@Test
231+
void sameNames() {
232+
EnvConfigSource envConfigSource = new EnvConfigSource(
233+
Map.of("my_string_property", "lower", "MY_STRING_PROPERTY", "upper"), 100);
234+
assertFalse(EnvProperty.equals("MY_STRING_PROPERTY", "my_string_property"));
235+
assertFalse(EnvProperty.equals("my_string_property", "MY_STRING_PROPERTY"));
236+
assertTrue(EnvProperty.equals("my_string_property", "my_string_property"));
237+
assertTrue(EnvProperty.equals("MY_STRING_PROPERTY", "MY_STRING_PROPERTY"));
238+
assertEquals("lower", envConfigSource.getValue("my_string_property"));
239+
assertEquals("upper", envConfigSource.getValue("MY_STRING_PROPERTY"));
240+
}
241+
242+
private static boolean envSourceEquals(String name, String lookup) {
243+
return BOOLEAN_CONVERTER.convert(new EnvConfigSource(Map.of(name, "true"), 100).getValue(lookup));
244+
}
240245
}

0 commit comments

Comments
 (0)