diff --git a/core/profiles/src/main/java/software/amazon/awssdk/profiles/Profile.java b/core/profiles/src/main/java/software/amazon/awssdk/profiles/Profile.java index 4a4efcd63607..5d897e404098 100644 --- a/core/profiles/src/main/java/software/amazon/awssdk/profiles/Profile.java +++ b/core/profiles/src/main/java/software/amazon/awssdk/profiles/Profile.java @@ -16,10 +16,10 @@ package software.amazon.awssdk.profiles; import java.util.Collections; -import java.util.LinkedHashMap; import java.util.Map; import java.util.Objects; import java.util.Optional; +import java.util.TreeMap; import software.amazon.awssdk.annotations.SdkPublicApi; import software.amazon.awssdk.utils.SystemSetting; import software.amazon.awssdk.utils.ToString; @@ -190,7 +190,10 @@ public void setName(String name) { @Override public Builder properties(Map properties) { - this.properties = Collections.unmodifiableMap(new LinkedHashMap<>(properties)); + Map keyCaseInsensitiveMap = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); + keyCaseInsensitiveMap.putAll(properties); + //Why LinkedHashMap being used here, should we really consider insertion order? + this.properties = Collections.unmodifiableMap(keyCaseInsensitiveMap); return this; } diff --git a/core/profiles/src/test/java/software/amazon/awssdk/profiles/ProfileFileTest.java b/core/profiles/src/test/java/software/amazon/awssdk/profiles/ProfileFileTest.java index f4d10da43180..2fdc952b4dbe 100644 --- a/core/profiles/src/test/java/software/amazon/awssdk/profiles/ProfileFileTest.java +++ b/core/profiles/src/test/java/software/amazon/awssdk/profiles/ProfileFileTest.java @@ -72,6 +72,22 @@ public void profilesCanContainProperties() { .isEqualTo(profiles(profile("foo", property("name", "value")))); } + @Test + public void profilesCanContainPropertiesWithMixedCase() { + Map profiles = profiles(profile("foo", property("name", "value"))); + assertThat(configFileProfiles("[profile foo]\n" + + "Name = value")) + .isEqualTo(profiles); + + profiles.forEach((s, profile) -> { + assertThat(s).isEqualTo("foo"); + assertThat(profile.properties().containsKey("NAME")).isTrue(); + assertThat(profile.properties().containsKey("Name")).isTrue(); + assertThat(profile.properties().containsKey("naMe")).isTrue(); + assertThat(profile.properties().containsKey("name")).isTrue(); + }); + } + @Test public void windowsStyleLineEndingsAreSupported() { assertThat(configFileProfiles("[profile foo]\r\n" +