Skip to content

Commit 9f9d372

Browse files
Add logs to tainted map 'garbage-collected entries are purged' flaky test (#7240)
Add logs to tainted map 'garbage-collected entries are purged' flaky test
1 parent 001c89e commit 9f9d372

File tree

4 files changed

+24
-5
lines changed

4 files changed

+24
-5
lines changed

dd-java-agent/agent-iast/src/main/java/com/datadog/iast/taint/TaintedObject.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,4 +43,18 @@ public Range[] getRanges() {
4343
public void setRanges(@Nonnull final Range[] ranges) {
4444
this.ranges = ranges;
4545
}
46+
47+
@Override
48+
public String toString() {
49+
final Object referent = get();
50+
return "[hash: "
51+
+ positiveHashCode
52+
+ ", gen: "
53+
+ generation
54+
+ "] "
55+
+ (referent == null ? "GCed" : referent)
56+
+ " ("
57+
+ (ranges == null ? 0 : ranges.length)
58+
+ " ranges)";
59+
}
4660
}

dd-java-agent/agent-iast/src/test/groovy/com/datadog/iast/taint/ObjectGen.groovy

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,16 @@ class ObjectGen {
99

1010
final int capacity
1111
final Map<Integer, List<Object>> pool
12+
final Closure<Object> factory
1213

13-
ObjectGen(int capacity) {
14+
ObjectGen(int capacity, Closure<Object> factory = { new Object() }) {
1415
assert (capacity & (capacity - 1)) == 0, 'capacity must be a power of 2'
1516
this.capacity = capacity
1617
this.pool = new HashMap<>(capacity)
1718
for (int i = 0; i < capacity; i++) {
1819
this.pool.put(i, new ArrayList<Object>())
1920
}
21+
this.factory = factory
2022
}
2123

2224
def genBuckets(int nBuckets, int nObjects) {
@@ -57,7 +59,7 @@ class ObjectGen {
5759
def genObjects(int nObjects, Closure<Boolean> isValid) {
5860
def res = new ArrayList(nObjects)
5961
while (res.size() < nObjects) {
60-
def obj = new Object()
62+
def obj = factory.call()
6163
int bucket = getIndex(obj)
6264
if (isValid.call(bucket)) {
6365
res.add(obj)
@@ -69,7 +71,7 @@ class ObjectGen {
6971
}
7072

7173
def genObject() {
72-
def obj = new Object()
74+
def obj = factory.call()
7375
int bucket = getIndex(obj)
7476
pool.get(bucket).add(obj)
7577
return bucket

dd-java-agent/agent-iast/src/test/groovy/com/datadog/iast/taint/TaintedMapTest.groovy

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import datadog.trace.util.AgentTaskScheduler
1515
import java.util.concurrent.CountDownLatch
1616
import java.util.concurrent.Executors
1717
import java.util.concurrent.TimeUnit
18+
import java.util.concurrent.atomic.AtomicInteger
1819

1920
class TaintedMapTest extends DDSpecification {
2021

@@ -94,7 +95,8 @@ class TaintedMapTest extends DDSpecification {
9495

9596
int iters = 16
9697
int nObjectsPerIter = flatModeThreshold - 1
97-
def gen = new ObjectGen(capacity)
98+
final atomic = new AtomicInteger()
99+
def gen = new ObjectGen(capacity, { "object_${atomic.incrementAndGet()}"} )
98100
def objectBuffer = new CircularBuffer<Object>(iters)
99101

100102
when:
@@ -119,7 +121,7 @@ class TaintedMapTest extends DDSpecification {
119121
}
120122

121123
then:
122-
map.size() == iters
124+
assert map.size() == iters: map.toList()
123125
map.count() == iters
124126
final entries = map.toList()
125127
entries.findAll { it.get() != null }.size() == iters

dd-java-agent/agent-iast/src/test/groovy/com/datadog/iast/taint/TaintedObjectTest.groovy

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,5 +22,6 @@ class TaintedObjectTest extends Specification {
2222
then:
2323
ranges.size() > max
2424
tainted.ranges.size() == max
25+
tainted.toString().contains("${tainted.ranges.size()} ranges")
2526
}
2627
}

0 commit comments

Comments
 (0)