@@ -14,6 +14,7 @@ import datadog.trace.core.monitor.HealthMetrics
1414import datadog.trace.core.propagation.PropagationTags
1515import datadog.trace.core.scopemanager.ContinuableScopeManager
1616import datadog.trace.test.util.DDSpecification
17+ import groovy.json.JsonSlurper
1718import spock.lang.Subject
1819import spock.lang.Timeout
1920import 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