Skip to content

Commit fbb5ebb

Browse files
jkwatsonjunwense
andauthored
PR 6524 with amendments (#6569)
Co-authored-by: junwense <[email protected]> Co-authored-by: SeanJ <[email protected]>
1 parent 20bcd75 commit fbb5ebb

File tree

2 files changed

+85
-3
lines changed

2 files changed

+85
-3
lines changed

api/incubator/src/main/java/io/opentelemetry/api/incubator/propagation/CaseInsensitiveMap.java

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,18 +14,31 @@ class CaseInsensitiveMap extends HashMap<String, String> {
1414

1515
private static final long serialVersionUID = -4202518750189126871L;
1616

17+
CaseInsensitiveMap() {}
18+
1719
CaseInsensitiveMap(Map<String, String> carrier) {
18-
super(carrier);
20+
if (carrier != null) {
21+
this.putAll(carrier);
22+
}
1923
}
2024

2125
@Override
2226
public String put(String key, String value) {
23-
return super.put(key.toLowerCase(Locale.ROOT), value);
27+
return super.put(getKeyLowerCase(key), value);
28+
}
29+
30+
@Override
31+
public void putAll(Map<? extends String, ? extends String> m) {
32+
m.forEach(this::put);
33+
}
34+
35+
private static String getKeyLowerCase(String key) {
36+
return key.toLowerCase(Locale.ROOT);
2437
}
2538

2639
@Override
2740
@Nullable
2841
public String get(Object key) {
29-
return super.get(((String) key).toLowerCase(Locale.ROOT));
42+
return super.get(getKeyLowerCase((String) key));
3043
}
3144
}
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.api.incubator.propagation;
7+
8+
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat;
9+
10+
import java.util.HashMap;
11+
import java.util.Map;
12+
import org.junit.jupiter.api.Test;
13+
14+
class CaseInsensitiveMapTest {
15+
16+
@Test
17+
void createByConstructor() {
18+
Map<String, String> map = new HashMap<>();
19+
map.put("Key1", "test");
20+
map.put("Key2", "test2");
21+
22+
CaseInsensitiveMap caseInsensitiveMap = new CaseInsensitiveMap(map);
23+
24+
Map<String, String> standardMap = new HashMap<>();
25+
standardMap.put("key1", "test");
26+
standardMap.put("key2", "test2");
27+
28+
assertThat(caseInsensitiveMap).isEqualTo(standardMap);
29+
}
30+
31+
@Test
32+
void putAll() {
33+
CaseInsensitiveMap caseInsensitiveMap = new CaseInsensitiveMap();
34+
Map<String, String> standardMap = new HashMap<>();
35+
standardMap.put("key1", "test");
36+
standardMap.put("key2", "test2");
37+
caseInsensitiveMap.putAll(standardMap);
38+
assertThat(caseInsensitiveMap).isEqualTo(standardMap);
39+
}
40+
41+
@Test
42+
void putIfAbsent() {
43+
CaseInsensitiveMap caseInsensitiveMap = new CaseInsensitiveMap();
44+
caseInsensitiveMap.putIfAbsent("key1", "test");
45+
assertThat(caseInsensitiveMap.get("KEY1")).isEqualTo("test");
46+
caseInsensitiveMap.putIfAbsent("key1", "nope");
47+
assertThat(caseInsensitiveMap.get("KEY1")).isEqualTo("test");
48+
}
49+
50+
@Test
51+
void createByConstructorWithNullMap() {
52+
CaseInsensitiveMap caseInsensitiveMap = new CaseInsensitiveMap(null);
53+
assertThat(caseInsensitiveMap).isEmpty();
54+
}
55+
56+
@Test
57+
void caseInsensitivity() {
58+
CaseInsensitiveMap caseInsensitiveMap = new CaseInsensitiveMap(null);
59+
60+
assertThat(caseInsensitiveMap).isEmpty();
61+
62+
caseInsensitiveMap.put("KEY1", "test1");
63+
caseInsensitiveMap.put("KEY2", "test2");
64+
assertThat(caseInsensitiveMap.get("key1")).isEqualTo("test1");
65+
assertThat(caseInsensitiveMap.get("key2")).isEqualTo("test2");
66+
assertThat(caseInsensitiveMap.get("kEy2")).isEqualTo("test2");
67+
assertThat(caseInsensitiveMap.get("KEY2")).isEqualTo("test2");
68+
}
69+
}

0 commit comments

Comments
 (0)