Skip to content

Commit 3b1c41a

Browse files
committed
final unit tests changes
1 parent b443ddd commit 3b1c41a

2 files changed

Lines changed: 33 additions & 21 deletions

File tree

dd-trace-core/src/main/java/datadog/trace/core/PendingTraceBuffer.java

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -153,34 +153,30 @@ private static final class DumpDrain
153153
private static final Predicate<Element> NOT_PENDING_TRACE =
154154
element -> !(element instanceof PendingTrace);
155155

156-
private volatile List<Element> DATA = new ArrayList<>();
156+
private volatile List<Element> data = new ArrayList<>();
157157
private int index = 0;
158158

159159
@Override
160160
public void accept(Element pendingTrace) {
161-
DATA.add(pendingTrace);
161+
data.add(pendingTrace);
162162
}
163163

164164
@Override
165165
public Element get() {
166-
if (index < DATA.size()) {
167-
return DATA.get(index++);
166+
if (index < data.size()) {
167+
return data.get(index++);
168168
}
169169
return null; // Should never reach here or else queue may break according to
170170
// MessagePassingQueue docs
171171
}
172172

173173
public List<Element> collectTraces() {
174-
DATA.removeIf(NOT_PENDING_TRACE);
174+
List<Element> traces = data;
175+
data = new ArrayList<>();
176+
traces.removeIf(NOT_PENDING_TRACE);
175177
// Storing oldest traces first
176-
DATA.sort(TRACE_BY_START_TIME.reversed());
177-
List<Element> orderedTraces = DATA;
178-
DATA = new ArrayList<>();
179-
return orderedTraces;
180-
}
181-
182-
public void clear() {
183-
DATA.clear();
178+
traces.sort(TRACE_BY_START_TIME);
179+
return traces;
184180
}
185181
}
186182

dd-trace-core/src/test/groovy/datadog/trace/core/PendingTraceBufferTest.groovy

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import datadog.trace.core.monitor.HealthMetrics
1414
import datadog.trace.core.propagation.PropagationTags
1515
import datadog.trace.core.scopemanager.ContinuableScopeManager
1616
import datadog.trace.test.util.DDSpecification
17+
import groovy.json.JsonSlurper
1718
import spock.lang.Subject
1819
import spock.lang.Timeout
1920
import spock.util.concurrent.PollingConditions
@@ -448,17 +449,21 @@ class PendingTraceBufferTest extends DDSpecification {
448449
}
449450
}
450451

451-
def "testing tracer flare dump"() {
452+
def "testing tracer flare dump with multiple traces"() {
452453
setup:
453454
TracerFlare.addReporter {} // exercises default methods
454455
def dumpReporter = Mock(PendingTraceBuffer.TracerDump)
455456
TracerFlare.addReporter(dumpReporter)
456-
def trace = factory.create(DDTraceId.ONE)
457-
def parent = newSpanOf(trace, UNSET, System.currentTimeMillis() * 1000)
458-
def child = newSpanOf(parent)
457+
def trace1 = factory.create(DDTraceId.ONE)
458+
def parent1 = newSpanOf(trace1, UNSET, System.currentTimeMillis() * 1000)
459+
def child1 = newSpanOf(parent1)
460+
def trace2 = factory.create(DDTraceId.from(2))
461+
def parent2 = newSpanOf(trace2, UNSET, System.currentTimeMillis() * 2000)
462+
def child2 = newSpanOf(parent2)
459463

460464
when:
461-
parent.finish()
465+
parent1.finish()
466+
parent2.finish()
462467
buffer.start()
463468
def entries = buildAndExtractZip()
464469

@@ -467,14 +472,25 @@ class PendingTraceBufferTest extends DDSpecification {
467472
1 * dumpReporter.addReportToFlare(_)
468473
1 * dumpReporter.cleanupAfterFlare()
469474
entries.size() == 1
475+
def pendingTraceText = entries["pending_traces.txt"] as String
470476
(entries["pending_traces.txt"] as String).startsWith('[{"service":"fakeService","name":"fakeOperation","resource":"fakeResource","trace_id":1,"span_id":1,"parent_id":0') // Rest of dump is timestamp specific
471477

478+
def parsedTraces = pendingTraceText.split('\n').collect { new JsonSlurper().parseText(it) }.flatten()
479+
parsedTraces.size() == 2
480+
parsedTraces[0]["trace_id"] == 1 //Asserting both traces exist
481+
parsedTraces[1]["trace_id"] == 2
482+
parsedTraces[0]["start"] < parsedTraces[1]["start"] //Asserting the dump has the oldest trace first
483+
484+
472485
then:
473-
child.finish()
486+
child1.finish()
487+
child2.finish()
474488

475489
then:
476-
trace.size() == 0
477-
trace.pendingReferenceCount == 0
490+
trace1.size() == 0
491+
trace1.pendingReferenceCount == 0
492+
trace2.size() == 0
493+
trace2.pendingReferenceCount == 0
478494
}
479495

480496

0 commit comments

Comments
 (0)