Skip to content

Commit daa99d1

Browse files
committed
test: Add Basic Interoperability Tests
1 parent 3aafcfd commit daa99d1

File tree

1 file changed

+67
-0
lines changed

1 file changed

+67
-0
lines changed

tests/OpenTelemetry/Integration/InteroperabilityTest.php

+67
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace DDTrace\Tests\OpenTelemetry\Integration;
44

5+
use DDTrace\SpanLink;
56
use DDTrace\Tag;
67
use DDTrace\Tests\Common\BaseTestCase;
78
use DDTrace\Tests\Common\SpanAssertion;
@@ -14,6 +15,8 @@
1415
use OpenTelemetry\API\Trace\SpanContext;
1516
use OpenTelemetry\API\Trace\SpanContextValidator;
1617
use OpenTelemetry\API\Trace\SpanKind;
18+
use OpenTelemetry\API\Trace\TraceFlags;
19+
use OpenTelemetry\API\Trace\TraceState;
1720
use OpenTelemetry\Context\Context;
1821
use OpenTelemetry\Context\ContextStorage;
1922
use OpenTelemetry\Extension\Propagator\B3\B3Propagator;
@@ -907,5 +910,69 @@ public function testAttributesInteroperability()
907910
$this->assertEquals(2, $traces[0][0]['metrics']['m2']);
908911
}
909912

913+
public function testSpanLinksInteroperabilityFromDatadogSpan()
914+
{
915+
$traces = $this->isolateTracer(function () {
916+
$span = start_span();
917+
$span->name = "dd.span";
918+
919+
$spanLink = new SpanLink();
920+
$spanLink->traceId = "ff0000000000051791e0000000000041";
921+
$spanLink->spanId = "ff00000000000517";
922+
$spanLink->traceState = "dd=t.dm:-0";
923+
$spanLink->attributes = [
924+
'arg1' => 'value1',
925+
'arg2' => 'value2',
926+
];
927+
$span->links[] = $spanLink;
928+
929+
/** @var \OpenTelemetry\SDK\Trace\Span $OTelSpan */
930+
$OTelSpan = Span::getCurrent();
931+
$OTelSpanLink = $OTelSpan->toSpanData()->getLinks()[0];
932+
$OTelSpanLinkContext = $OTelSpanLink->getSpanContext();
933+
934+
$this->assertSame('ff0000000000051791e0000000000041', $OTelSpanLinkContext->getTraceId());
935+
$this->assertSame('ff00000000000517', $OTelSpanLinkContext->getSpanId());
936+
$this->assertSame('dd=t.dm:-0', (string) $OTelSpanLinkContext->getTraceState());
937+
938+
$this->assertSame([
939+
'arg1' => 'value1',
940+
'arg2' => 'value2',
941+
], $OTelSpanLink->getAttributes()->toArray());
942+
943+
close_span();
944+
});
910945

946+
$this->assertCount(1, $traces[0]);
947+
$this->assertSame("[{\"trace_id\":\"ff0000000000051791e0000000000041\",\"span_id\":\"ff00000000000517\",\"trace_state\":\"dd=t.dm:-0\",\"attributes\":{\"arg1\":\"value1\",\"arg2\":\"value2\"}}]", $traces[0][0]['meta']['_dd.span_links']);
948+
}
949+
950+
public function testSpanLinksInteroperabilityFromOpenTelemetrySpan()
951+
{
952+
$sampledSpanContext = SpanContext::create(
953+
'12345678876543211234567887654321',
954+
'8765432112345678',
955+
TraceFlags::SAMPLED,
956+
new TraceState('dd=t.dm:-0')
957+
);
958+
959+
$traces = $this->isolateTracer(function () use ($sampledSpanContext) {
960+
$otelSpan = self::getTracer()->spanBuilder("otel.span")
961+
->addLink($sampledSpanContext, ['arg1' => 'value1'])
962+
->startSpan();
963+
964+
$activeSpan = active_span();
965+
$spanLink = $activeSpan->links[0];
966+
$this->assertSame('12345678876543211234567887654321', $spanLink->traceId);
967+
$this->assertSame('8765432112345678', $spanLink->spanId);
968+
$this->assertSame('dd=t.dm:-0', $spanLink->traceState);
969+
$this->assertSame(['arg1' => 'value1'], $spanLink->attributes);
970+
$this->assertEquals(0, $spanLink->droppedAttributesCount);
971+
972+
$otelSpan->end();
973+
});
974+
975+
$this->assertCount(1, $traces[0]);
976+
$this->assertSame("[{\"trace_id\":\"12345678876543211234567887654321\",\"span_id\":\"8765432112345678\",\"trace_state\":\"dd=t.dm:-0\",\"attributes\":{\"arg1\":\"value1\"},\"dropped_attributes_count\":0}]", $traces[0][0]['meta']['_dd.span_links']);
977+
}
911978
}

0 commit comments

Comments
 (0)