@@ -398,6 +398,27 @@ TEST(Tracer, StartSpanWithAttributesCopy)
398
398
ASSERT_EQ (" c" , strings[2 ]);
399
399
}
400
400
401
+ TEST (Tracer, StartSpanWithInvalidAttributes)
402
+ {
403
+ InMemorySpanExporter *exporter = new InMemorySpanExporter ();
404
+ std::shared_ptr<InMemorySpanData> span_data = exporter->GetData ();
405
+ auto tracer = initTracer (std::unique_ptr<SpanExporter>{exporter});
406
+
407
+ {
408
+ tracer
409
+ ->StartSpan (" span 1" ,
410
+ {
411
+ {" attr1" , " value1" },
412
+ {" invalid_key\xff " , " valid_value" },
413
+ {" valid_key" , " invalid_value\xff " },
414
+ })
415
+ ->End ();
416
+ }
417
+
418
+ auto spans = span_data->GetSpans ();
419
+ ASSERT_EQ (1 , spans.size ());
420
+ }
421
+
401
422
TEST (Tracer, GetSampler)
402
423
{
403
424
auto resource = Resource::Create ({});
@@ -586,6 +607,30 @@ TEST(Tracer, StartSpanWithCustomConfig)
586
607
#endif
587
608
}
588
609
610
+ TEST (Tracer, SpanSetEventsWithInvalidAttributes)
611
+ {
612
+ InMemorySpanExporter *exporter = new InMemorySpanExporter ();
613
+ std::shared_ptr<InMemorySpanData> span_data = exporter->GetData ();
614
+ auto tracer = initTracer (std::unique_ptr<SpanExporter>{exporter});
615
+
616
+ auto span = tracer->StartSpan (" span 1" );
617
+ span->AddEvent (" event 3" , std::chrono::system_clock::now (),
618
+ {
619
+ {" attr1" , 1 },
620
+ {" invalid_key\xff " , " valid_value" },
621
+ {" valid_key" , " invalid_value\xff " },
622
+ });
623
+ span->End ();
624
+
625
+ auto spans = span_data->GetSpans ();
626
+ ASSERT_EQ (1 , spans.size ());
627
+
628
+ auto &span_data_events = spans.at (0 )->GetEvents ();
629
+ ASSERT_EQ (1 , span_data_events.size ());
630
+ ASSERT_EQ (" event 3" , span_data_events[0 ].GetName ());
631
+ ASSERT_EQ (1 , span_data_events[0 ].GetAttributes ().size ());
632
+ }
633
+
589
634
TEST (Tracer, StartSpanWithCustomConfigDifferingConditionOrder)
590
635
{
591
636
std::shared_ptr<opentelemetry::trace::Tracer> noop_tracer =
@@ -707,6 +752,27 @@ TEST(Tracer, SpanSetLinks)
707
752
ASSERT_EQ (nostd::get<std::string>(link2.GetAttributes ().at (" attr3" )), " 3" );
708
753
ASSERT_EQ (nostd::get<std::string>(link2.GetAttributes ().at (" attr4" )), " 4" );
709
754
}
755
+
756
+ {
757
+
758
+ // Span link with invalid attributes
759
+ tracer
760
+ ->StartSpan (" efg" , {{" attr1" , 1 }},
761
+ {{SpanContext (false , false ),
762
+ {
763
+ {" attr2" , 2 },
764
+ {" invalid_key\xff " , " valid_value" },
765
+ {" valid_key" , " invalid_value\xff " },
766
+ }}})
767
+ ->End ();
768
+ auto spans = span_data->GetSpans ();
769
+ ASSERT_EQ (1 , spans.size ());
770
+
771
+ auto &span_data_links = spans.at (0 )->GetLinks ();
772
+ ASSERT_EQ (1 , span_data_links.size ());
773
+ auto link = span_data_links.at (0 );
774
+ ASSERT_EQ (nostd::get<int >(link.GetAttributes ().at (" attr2" )), 2 );
775
+ }
710
776
}
711
777
712
778
#if OPENTELEMETRY_ABI_VERSION_NO >= 2
0 commit comments