@@ -21,6 +21,8 @@ using namespace opentelemetry::exporter::jaeger;
2121using namespace opentelemetry ::sdk::instrumentationlibrary;
2222using std::vector;
2323
24+ using Attributes = std::initializer_list<std::pair<nostd::string_view, common::AttributeValue>>;
25+
2426TEST (JaegerSpanRecordable, SetIdentity)
2527{
2628 JaegerRecordable rec;
@@ -297,3 +299,36 @@ TEST(JaegerSpanRecordable, SetResource)
297299 }
298300 }
299301}
302+
303+ TEST (JaegerSpanRecordable, AddLink)
304+ {
305+ JaegerRecordable rec;
306+
307+ int64_t trace_id_val[2 ] = {0x0000000000000000 , 0x1000000000000000 };
308+ int64_t span_id_val = 0x2000000000000000 ;
309+
310+ const trace::TraceId trace_id{
311+ nostd::span<uint8_t , 16 >(reinterpret_cast <uint8_t *>(trace_id_val), 16 )};
312+
313+ const trace::SpanId span_id (
314+ nostd::span<uint8_t , 8 >(reinterpret_cast <uint8_t *>(&span_id_val), 8 ));
315+
316+ const trace::SpanContext span_context{trace_id, span_id,
317+ trace::TraceFlags{trace::TraceFlags::kIsSampled }, true };
318+ rec.AddLink (span_context, common::KeyValueIterableView<Attributes>({{" attr1" , " string" }}));
319+
320+ auto references = rec.References ();
321+ EXPECT_EQ (references.size (), 1 );
322+
323+ auto reference = references.front ();
324+
325+ #if JAEGER_IS_LITTLE_ENDIAN == 1
326+ EXPECT_EQ (reference.traceIdLow , otel_bswap_64 (trace_id_val[1 ]));
327+ EXPECT_EQ (reference.traceIdHigh , otel_bswap_64 (trace_id_val[0 ]));
328+ EXPECT_EQ (reference.spanId , otel_bswap_64 (span_id_val));
329+ #else
330+ EXPECT_EQ (reference.traceIdLow , trace_id_val[0 ]);
331+ EXPECT_EQ (reference.traceIdHigh , trace_id_val[1 ]);
332+ EXPECT_EQ (reference.spanId , span_id_val);
333+ #endif
334+ }
0 commit comments