PR 6524 with amendments (#6569)

Co-authored-by: junwense <970597653@qq.com>
Co-authored-by: SeanJ <44492651+junwense@users.noreply.github.com>
This commit is contained in:
John Watson 2024-07-12 20:09:03 -07:00 committed by GitHub
parent 20bcd7546b
commit fbb5ebb01e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 85 additions and 3 deletions

View File

@ -14,18 +14,31 @@ class CaseInsensitiveMap extends HashMap<String, String> {
private static final long serialVersionUID = -4202518750189126871L;
CaseInsensitiveMap() {}
CaseInsensitiveMap(Map<String, String> carrier) {
super(carrier);
if (carrier != null) {
this.putAll(carrier);
}
}
@Override
public String put(String key, String value) {
return super.put(key.toLowerCase(Locale.ROOT), value);
return super.put(getKeyLowerCase(key), value);
}
@Override
public void putAll(Map<? extends String, ? extends String> m) {
m.forEach(this::put);
}
private static String getKeyLowerCase(String key) {
return key.toLowerCase(Locale.ROOT);
}
@Override
@Nullable
public String get(Object key) {
return super.get(((String) key).toLowerCase(Locale.ROOT));
return super.get(getKeyLowerCase((String) key));
}
}

View File

@ -0,0 +1,69 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.api.incubator.propagation;
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat;
import java.util.HashMap;
import java.util.Map;
import org.junit.jupiter.api.Test;
class CaseInsensitiveMapTest {
@Test
void createByConstructor() {
Map<String, String> map = new HashMap<>();
map.put("Key1", "test");
map.put("Key2", "test2");
CaseInsensitiveMap caseInsensitiveMap = new CaseInsensitiveMap(map);
Map<String, String> standardMap = new HashMap<>();
standardMap.put("key1", "test");
standardMap.put("key2", "test2");
assertThat(caseInsensitiveMap).isEqualTo(standardMap);
}
@Test
void putAll() {
CaseInsensitiveMap caseInsensitiveMap = new CaseInsensitiveMap();
Map<String, String> standardMap = new HashMap<>();
standardMap.put("key1", "test");
standardMap.put("key2", "test2");
caseInsensitiveMap.putAll(standardMap);
assertThat(caseInsensitiveMap).isEqualTo(standardMap);
}
@Test
void putIfAbsent() {
CaseInsensitiveMap caseInsensitiveMap = new CaseInsensitiveMap();
caseInsensitiveMap.putIfAbsent("key1", "test");
assertThat(caseInsensitiveMap.get("KEY1")).isEqualTo("test");
caseInsensitiveMap.putIfAbsent("key1", "nope");
assertThat(caseInsensitiveMap.get("KEY1")).isEqualTo("test");
}
@Test
void createByConstructorWithNullMap() {
CaseInsensitiveMap caseInsensitiveMap = new CaseInsensitiveMap(null);
assertThat(caseInsensitiveMap).isEmpty();
}
@Test
void caseInsensitivity() {
CaseInsensitiveMap caseInsensitiveMap = new CaseInsensitiveMap(null);
assertThat(caseInsensitiveMap).isEmpty();
caseInsensitiveMap.put("KEY1", "test1");
caseInsensitiveMap.put("KEY2", "test2");
assertThat(caseInsensitiveMap.get("key1")).isEqualTo("test1");
assertThat(caseInsensitiveMap.get("key2")).isEqualTo("test2");
assertThat(caseInsensitiveMap.get("kEy2")).isEqualTo("test2");
assertThat(caseInsensitiveMap.get("KEY2")).isEqualTo("test2");
}
}