noop_test.cc 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. // Copyright The OpenTelemetry Authors
  2. // SPDX-License-Identifier: Apache-2.0
  3. #include <gtest/gtest.h>
  4. #include <stdint.h>
  5. #include <initializer_list>
  6. #include <map>
  7. #include <string>
  8. #include <utility>
  9. #include <vector>
  10. #include "opentelemetry/common/timestamp.h"
  11. #include "opentelemetry/nostd/shared_ptr.h"
  12. #include "opentelemetry/nostd/span.h"
  13. #include "opentelemetry/nostd/unique_ptr.h"
  14. #include "opentelemetry/trace/noop.h"
  15. #include "opentelemetry/trace/span.h"
  16. #include "opentelemetry/trace/span_context.h"
  17. #include "opentelemetry/trace/span_id.h"
  18. #include "opentelemetry/trace/span_metadata.h"
  19. #include "opentelemetry/trace/trace_flags.h"
  20. #include "opentelemetry/trace/trace_id.h"
  21. #include "opentelemetry/trace/tracer.h"
  22. namespace trace_api = opentelemetry::trace;
  23. namespace nonstd = opentelemetry::nostd;
  24. namespace common = opentelemetry::common;
  25. TEST(NoopTest, UseNoopTracers)
  26. {
  27. std::shared_ptr<trace_api::Tracer> tracer{new trace_api::NoopTracer{}};
  28. auto s1 = tracer->StartSpan("abc");
  29. std::map<std::string, std::string> attributes1;
  30. s1->AddEvent("abc", attributes1);
  31. std::vector<std::pair<std::string, int>> attributes2;
  32. s1->AddEvent("abc", attributes2);
  33. s1->AddEvent("abc", {{"a", 1}, {"b", "2"}, {"c", 3.0}});
  34. std::vector<std::pair<std::string, std::vector<int>>> attributes3;
  35. s1->AddEvent("abc", attributes3);
  36. s1->SetAttribute("abc", 4);
  37. s1->AddEvent("abc"); // add Empty
  38. EXPECT_EQ(s1->IsRecording(), false);
  39. s1->SetStatus(trace_api::StatusCode::kUnset, "span unset");
  40. s1->UpdateName("test_name");
  41. common::SystemTimestamp t1;
  42. s1->AddEvent("test_time_stamp", t1);
  43. s1->GetContext();
  44. }
  45. #if OPENTELEMETRY_ABI_VERSION_NO >= 2
  46. TEST(NoopTest, UseNoopTracersAbiv2)
  47. {
  48. std::shared_ptr<trace_api::Tracer> tracer{new trace_api::NoopTracer{}};
  49. auto s1 = tracer->StartSpan("abc");
  50. EXPECT_EQ(s1->IsRecording(), false);
  51. trace_api::SpanContext target(false, false);
  52. s1->AddLink(target, {{"noop1", 1}});
  53. s1->AddLinks({{trace_api::SpanContext(false, false), {{"noop2", 2}}}});
  54. EXPECT_FALSE(tracer->Enabled());
  55. }
  56. #endif /* OPENTELEMETRY_ABI_VERSION_NO >= 2 */
  57. TEST(NoopTest, StartSpan)
  58. {
  59. std::shared_ptr<trace_api::Tracer> tracer{new trace_api::NoopTracer{}};
  60. std::map<std::string, std::string> attrs = {{"a", "3"}};
  61. std::vector<std::pair<trace_api::SpanContext, std::map<std::string, std::string>>> links = {
  62. {trace_api::SpanContext(false, false), attrs}};
  63. auto s1 = tracer->StartSpan("abc", attrs, links);
  64. auto s2 =
  65. tracer->StartSpan("efg", {{"a", 3}}, {{trace_api::SpanContext(false, false), {{"b", 4}}}});
  66. }
  67. TEST(NoopTest, CreateSpanValidSpanContext)
  68. {
  69. // Create valid spancontext for NoopSpan
  70. constexpr uint8_t buf_span[] = {1, 2, 3, 4, 5, 6, 7, 8};
  71. constexpr uint8_t buf_trace[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
  72. auto trace_id = trace_api::TraceId{buf_trace};
  73. auto span_id = trace_api::SpanId{buf_span};
  74. auto span_context = nonstd::unique_ptr<trace_api::SpanContext>(
  75. new trace_api::SpanContext{trace_id, span_id, trace_api::TraceFlags{true}, false});
  76. std::shared_ptr<trace_api::Tracer> tracer{new trace_api::NoopTracer{}};
  77. auto s1 =
  78. nonstd::shared_ptr<trace_api::Span>(new trace_api::NoopSpan(tracer, std::move(span_context)));
  79. auto stored_span_context = s1->GetContext();
  80. EXPECT_EQ(stored_span_context.span_id(), span_id);
  81. EXPECT_EQ(stored_span_context.trace_id(), trace_id);
  82. s1->AddEvent("even1"); // noop
  83. s1->End(); // noop
  84. }