Skip to content

Commit ce6a4c0

Browse files
committed
Improving code coverage (again)
1 parent eb67604 commit ce6a4c0

File tree

2 files changed

+143
-3
lines changed

2 files changed

+143
-3
lines changed

internal-api/src/main/java/datadog/trace/api/TagMap.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1067,9 +1067,11 @@ public EntryChange next() {
10671067
*/
10681068
abstract class TagMapFactory<MapT extends TagMap> {
10691069
public static final TagMapFactory<?> INSTANCE =
1070-
Config.get().isOptimizedMapEnabled()
1071-
? new OptimizedTagMapFactory()
1072-
: new LegacyTagMapFactory();
1070+
createFactory(Config.get().isOptimizedMapEnabled());
1071+
1072+
static final TagMapFactory<?> createFactory(boolean useOptimized) {
1073+
return useOptimized ? new OptimizedTagMapFactory() : new LegacyTagMapFactory();
1074+
}
10731075

10741076
public abstract MapT create();
10751077

internal-api/src/test/java/datadog/trace/api/TagMapTest.java

Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,19 +8,92 @@
88
import static org.junit.jupiter.api.Assertions.assertTrue;
99

1010
import java.util.Collection;
11+
import java.util.Collections;
1112
import java.util.HashMap;
1213
import java.util.HashSet;
1314
import java.util.Iterator;
1415
import java.util.Map;
1516
import java.util.Set;
1617
import java.util.concurrent.ThreadLocalRandom;
18+
import org.junit.Test;
1719
import org.junit.jupiter.params.ParameterizedTest;
1820
import org.junit.jupiter.params.provider.EnumSource;
21+
import org.junit.jupiter.params.provider.ValueSource;
1922

2023
public class TagMapTest {
2124
// size is chosen to make sure to stress all types of collisions in the Map
2225
static final int MANY_SIZE = 256;
2326

27+
// static function tests - mostly exist to satisfy coverage checker
28+
@Test
29+
public void fromMap_emptyMap() {
30+
Map<String, String> emptyMap = Collections.emptyMap();
31+
32+
TagMap tagMap = TagMap.fromMap(emptyMap);
33+
assertEquals(tagMap.size(), 0);
34+
assertTrue(tagMap.isEmpty());
35+
36+
assertFalse(tagMap.isFrozen());
37+
}
38+
39+
@Test
40+
public void fromMap_nonEmptyMap() {
41+
// mostly exists to satisfy coverage checker
42+
HashMap<String, String> origMap = new HashMap<>();
43+
origMap.put("foo", "bar");
44+
origMap.put("baz", "quux");
45+
46+
TagMap tagMap = TagMap.fromMap(origMap);
47+
assertEquals(tagMap.size(), origMap.size());
48+
49+
assertEquals(tagMap.get("foo"), origMap.get("foo"));
50+
assertEquals(tagMap.get("baz"), origMap.get("baz"));
51+
52+
assertFalse(tagMap.isFrozen());
53+
}
54+
55+
@Test
56+
public void fromMapImmutable_empty() {
57+
Map<String, String> emptyMap = Collections.emptyMap();
58+
59+
TagMap tagMap = TagMap.fromMapImmutable(emptyMap);
60+
assertEquals(tagMap.size(), 0);
61+
assertTrue(tagMap.isEmpty());
62+
63+
assertTrue(tagMap.isFrozen());
64+
}
65+
66+
@Test
67+
public void fromMapImmutable_nonEmptyMap() {
68+
// mostly exists to satisfy coverage checker
69+
HashMap<String, String> origMap = new HashMap<>();
70+
origMap.put("foo", "bar");
71+
origMap.put("baz", "quux");
72+
73+
TagMap tagMap = TagMap.fromMapImmutable(origMap);
74+
assertEquals(tagMap.size(), origMap.size());
75+
76+
assertEquals(tagMap.get("foo"), origMap.get("foo"));
77+
assertEquals(tagMap.get("baz"), origMap.get("baz"));
78+
79+
assertTrue(tagMap.isFrozen());
80+
}
81+
82+
@ParameterizedTest
83+
@ValueSource(booleans = {false, true})
84+
public void optimizedFactory(boolean optimized) {
85+
TagMapFactory<?> factory = TagMapFactory.createFactory(optimized);
86+
87+
TagMap unsizedMap = factory.create();
88+
assertEquals(optimized, unsizedMap.isOptimized());
89+
90+
TagMap sizedMap = factory.create(32);
91+
assertEquals(optimized, sizedMap.isOptimized());
92+
93+
TagMap emptyMap = factory.empty();
94+
assertEquals(optimized, emptyMap.isOptimized());
95+
}
96+
2497
@ParameterizedTest
2598
@EnumSource(TagMapType.class)
2699
public void map_put(TagMapType mapType) {
@@ -65,6 +138,71 @@ public void booleanEntry(TagMapType mapType) {
65138
assertEquals(true, map.getBooleanOrDefault("unset", true));
66139
}
67140

141+
@ParameterizedTest
142+
@EnumSource(TagMapType.class)
143+
public void numericZeroToBooleanCoercion(TagMapType mapType) {
144+
TagMap map =
145+
TagMap.ledger()
146+
.set("int", 0)
147+
.set("intObj", Integer.valueOf(0))
148+
.set("long", 0L)
149+
.set("longObj", Long.valueOf(0L))
150+
.set("float", 0F)
151+
.set("floatObj", Float.valueOf(0F))
152+
.set("double", 0D)
153+
.set("doubleObj", Double.valueOf(0D))
154+
.build();
155+
156+
assertEquals(false, map.getBoolean("int"));
157+
assertEquals(false, map.getBoolean("intObj"));
158+
assertEquals(false, map.getBoolean("long"));
159+
assertEquals(false, map.getBoolean("longObj"));
160+
assertEquals(false, map.getBoolean("float"));
161+
assertEquals(false, map.getBoolean("floatObj"));
162+
assertEquals(false, map.getBoolean("double"));
163+
assertEquals(false, map.getBoolean("doubleObj"));
164+
}
165+
166+
@ParameterizedTest
167+
@EnumSource(TagMapType.class)
168+
public void numericNonZeroToBooleanCoercion(TagMapType mapType) {
169+
TagMap map =
170+
TagMap.ledger()
171+
.set("int", 1)
172+
.set("intObj", Integer.valueOf(1))
173+
.set("long", 1L)
174+
.set("longObj", Long.valueOf(1L))
175+
.set("float", 1F)
176+
.set("floatObj", Float.valueOf(1F))
177+
.set("double", 1D)
178+
.set("doubleObj", Double.valueOf(1D))
179+
.build();
180+
181+
assertEquals(true, map.getBoolean("int"));
182+
assertEquals(true, map.getBoolean("intObj"));
183+
assertEquals(true, map.getBoolean("long"));
184+
assertEquals(true, map.getBoolean("longObj"));
185+
assertEquals(true, map.getBoolean("float"));
186+
assertEquals(true, map.getBoolean("floatObj"));
187+
assertEquals(true, map.getBoolean("double"));
188+
assertEquals(true, map.getBoolean("doubleObj"));
189+
}
190+
191+
@ParameterizedTest
192+
@EnumSource(TagMapType.class)
193+
public void objectToBooleanCoercion(TagMapType mapType) {
194+
TagMap map =
195+
TagMap.ledger()
196+
.set("obj", new Object())
197+
.set("trueStr", "true")
198+
.set("falseStr", "false")
199+
.build();
200+
201+
assertEquals(true, map.getBoolean("obj"));
202+
assertEquals(true, map.getBoolean("trueStr"));
203+
assertEquals(true, map.getBoolean("falseStr"));
204+
}
205+
68206
@ParameterizedTest
69207
@EnumSource(TagMapType.class)
70208
public void intEntry(TagMapType mapType) {

0 commit comments

Comments
 (0)