// Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 #include #include #include #include #include #include #include #include "opentelemetry/common/timestamp.h" #include "opentelemetry/nostd/shared_ptr.h" #include "opentelemetry/nostd/span.h" #include "opentelemetry/nostd/string_view.h" #include "opentelemetry/nostd/unique_ptr.h" #include "opentelemetry/trace/noop.h" #include "opentelemetry/trace/span.h" #include "opentelemetry/trace/span_context.h" #include "opentelemetry/trace/span_id.h" #include "opentelemetry/trace/span_metadata.h" #include "opentelemetry/trace/trace_flags.h" #include "opentelemetry/trace/trace_id.h" #include "opentelemetry/trace/tracer.h" namespace trace_api = opentelemetry::trace; namespace nonstd = opentelemetry::nostd; namespace common = opentelemetry::common; TEST(NoopTest, UseNoopTracers) { std::shared_ptr tracer{new trace_api::NoopTracer{}}; auto s1 = tracer->StartSpan("abc"); std::map attributes1; s1->AddEvent("abc", attributes1); std::vector> attributes2; s1->AddEvent("abc", attributes2); s1->AddEvent("abc", {{"a", 1}, {"b", "2"}, {"c", 3.0}}); std::vector>> attributes3; s1->AddEvent("abc", attributes3); s1->SetAttribute("abc", 4); s1->AddEvent("abc"); // add Empty EXPECT_EQ(s1->IsRecording(), false); s1->SetStatus(trace_api::StatusCode::kUnset, "span unset"); s1->UpdateName("test_name"); common::SystemTimestamp t1; s1->AddEvent("test_time_stamp", t1); s1->GetContext(); } #if OPENTELEMETRY_ABI_VERSION_NO >= 2 TEST(NoopTest, UseNoopTracersAbiv2) { std::shared_ptr tracer{new trace_api::NoopTracer{}}; auto s1 = tracer->StartSpan("abc"); EXPECT_EQ(s1->IsRecording(), false); trace_api::SpanContext target(false, false); s1->AddLink(target, {{"noop1", 1}}); s1->AddLinks({{trace_api::SpanContext(false, false), {{"noop2", 2}}}}); EXPECT_FALSE(tracer->Enabled()); } #endif /* OPENTELEMETRY_ABI_VERSION_NO >= 2 */ TEST(NoopTest, StartSpan) { std::shared_ptr tracer{new trace_api::NoopTracer{}}; std::map attrs = {{"a", "3"}}; std::vector>> links = { {trace_api::SpanContext(false, false), attrs}}; auto s1 = tracer->StartSpan("abc", attrs, links); auto s2 = tracer->StartSpan("efg", {{"a", 3}}, {{trace_api::SpanContext(false, false), {{"b", 4}}}}); } TEST(NoopTest, CreateSpanValidSpanContext) { // Create valid spancontext for NoopSpan constexpr uint8_t buf_span[] = {1, 2, 3, 4, 5, 6, 7, 8}; constexpr uint8_t buf_trace[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}; auto trace_id = trace_api::TraceId{buf_trace}; auto span_id = trace_api::SpanId{buf_span}; auto span_context = nonstd::unique_ptr( new trace_api::SpanContext{trace_id, span_id, trace_api::TraceFlags{true}, false}); std::shared_ptr tracer{new trace_api::NoopTracer{}}; auto s1 = nonstd::shared_ptr(new trace_api::NoopSpan(tracer, std::move(span_context))); auto stored_span_context = s1->GetContext(); EXPECT_EQ(stored_span_context.span_id(), span_id); EXPECT_EQ(stored_span_context.trace_id(), trace_id); s1->AddEvent("even1"); // noop s1->End(); // noop }