From fc7a09f52c63f4e48517e60d5ff84bb4a2539dfd Mon Sep 17 00:00:00 2001 From: esigo Date: Wed, 22 Dec 2021 15:21:46 +0100 Subject: [PATCH 1/6] Jaeger: ThriftSender unit test --- exporters/jaeger/BUILD | 1 + exporters/jaeger/test/jaeger_exporter_test.cc | 74 +++++++++++++++++++ 2 files changed, 75 insertions(+) diff --git a/exporters/jaeger/BUILD b/exporters/jaeger/BUILD index 7ccca66f50..49e60cfb1d 100644 --- a/exporters/jaeger/BUILD +++ b/exporters/jaeger/BUILD @@ -129,6 +129,7 @@ cc_test( deps = [ ":opentelemetry_exporter_jaeger_trace", "//sdk/src/resource", + "//sdk/src/trace", "@com_google_googletest//:gtest_main", ], ) diff --git a/exporters/jaeger/test/jaeger_exporter_test.cc b/exporters/jaeger/test/jaeger_exporter_test.cc index ab680e35fc..d258e18c55 100644 --- a/exporters/jaeger/test/jaeger_exporter_test.cc +++ b/exporters/jaeger/test/jaeger_exporter_test.cc @@ -4,6 +4,9 @@ #include #include #include +#include "opentelemetry/sdk/trace/batch_span_processor.h" +#include "opentelemetry/sdk/trace/tracer_provider.h" +#include "opentelemetry/trace/provider.h" #ifdef BAZEL_BUILD # include "exporters/jaeger/src/thrift_sender.h" @@ -28,6 +31,15 @@ namespace exporter namespace jaeger { +namespace trace_api = opentelemetry::trace; +namespace resource = opentelemetry::sdk::resource; + +template +static nostd::span MakeSpan(T (&array)[N]) +{ + return nostd::span(array); +} + class JaegerExporterTestPeer : public ::testing::Test { public: @@ -49,6 +61,68 @@ class MockThriftSender : public ThriftSender MOCK_METHOD(int, Append, (std::unique_ptr &&), (noexcept, override)); }; +class MockTransport : public Transport +{ +public: + MOCK_METHOD(int, EmitBatch, (const thrift::Batch &), (override)); + MOCK_METHOD(uint32_t, MaxPacketSize, (), (const, override)); +}; + +// Create spans, let processor call Export() +TEST_F(JaegerExporterTestPeer, ExportIntegrationTest) +{ + auto mock_transport = new MockTransport; + auto mock_thrift_sender = new ThriftSender(std::unique_ptr{mock_transport}); + auto exporter = GetExporter(std::unique_ptr{mock_thrift_sender}); + + resource::ResourceAttributes resource_attributes = {{"service.name", "unit_test_service"}, + {"tenant.id", "test_user"}}; + resource_attributes["bool_value"] = true; + resource_attributes["int32_value"] = static_cast(1); + resource_attributes["uint32_value"] = static_cast(2); + resource_attributes["int64_value"] = static_cast(0x1100000000LL); + resource_attributes["uint64_value"] = static_cast(0x1200000000ULL); + resource_attributes["double_value"] = static_cast(3.1); + resource_attributes["vec_bool_value"] = std::vector{true, false, true}; + resource_attributes["vec_int32_value"] = std::vector{1, 2}; + resource_attributes["vec_uint32_value"] = std::vector{3, 4}; + resource_attributes["vec_int64_value"] = std::vector{5, 6}; + resource_attributes["vec_uint64_value"] = std::vector{7, 8}; + resource_attributes["vec_double_value"] = std::vector{3.2, 3.3}; + resource_attributes["vec_string_value"] = std::vector{"vector", "string"}; + auto resource = resource::Resource::Create(resource_attributes); + + auto processor_opts = sdk::trace::BatchSpanProcessorOptions(); + processor_opts.max_export_batch_size = 5; + processor_opts.max_queue_size = 5; + processor_opts.schedule_delay_millis = std::chrono::milliseconds(256); + auto processor = std::unique_ptr( + new sdk::trace::BatchSpanProcessor(std::move(exporter), processor_opts)); + auto provider = nostd::shared_ptr( + new sdk::trace::TracerProvider(std::move(processor), resource)); + + EXPECT_CALL(*mock_transport, EmitBatch(_)).Times(Exactly(1)).WillOnce(Return(1)); + + std::string report_trace_id; + { + char trace_id_hex[2 * trace_api::TraceId::kSize] = {0}; + auto tracer = provider->GetTracer("test"); + auto parent_span = tracer->StartSpan("Test parent span"); + + trace_api::StartSpanOptions child_span_opts = {}; + child_span_opts.parent = parent_span->GetContext(); + + auto child_span = tracer->StartSpan("Test child span", child_span_opts); + child_span->End(); + parent_span->End(); + + nostd::get(child_span_opts.parent) + .trace_id() + .ToLowerBase16(MakeSpan(trace_id_hex)); + report_trace_id.assign(trace_id_hex, sizeof(trace_id_hex)); + } +} + TEST_F(JaegerExporterTestPeer, ShutdownTest) { auto mock_thrift_sender = new MockThriftSender; From 7a89afc00067f91293fd3f3d3367798d9033adfe Mon Sep 17 00:00:00 2001 From: Oblivion Date: Wed, 22 Dec 2021 15:34:35 +0000 Subject: [PATCH 2/6] remove unsupported types --- exporters/jaeger/test/jaeger_exporter_test.cc | 2 -- 1 file changed, 2 deletions(-) diff --git a/exporters/jaeger/test/jaeger_exporter_test.cc b/exporters/jaeger/test/jaeger_exporter_test.cc index d258e18c55..1cc7acbe41 100644 --- a/exporters/jaeger/test/jaeger_exporter_test.cc +++ b/exporters/jaeger/test/jaeger_exporter_test.cc @@ -81,13 +81,11 @@ TEST_F(JaegerExporterTestPeer, ExportIntegrationTest) resource_attributes["int32_value"] = static_cast(1); resource_attributes["uint32_value"] = static_cast(2); resource_attributes["int64_value"] = static_cast(0x1100000000LL); - resource_attributes["uint64_value"] = static_cast(0x1200000000ULL); resource_attributes["double_value"] = static_cast(3.1); resource_attributes["vec_bool_value"] = std::vector{true, false, true}; resource_attributes["vec_int32_value"] = std::vector{1, 2}; resource_attributes["vec_uint32_value"] = std::vector{3, 4}; resource_attributes["vec_int64_value"] = std::vector{5, 6}; - resource_attributes["vec_uint64_value"] = std::vector{7, 8}; resource_attributes["vec_double_value"] = std::vector{3.2, 3.3}; resource_attributes["vec_string_value"] = std::vector{"vector", "string"}; auto resource = resource::Resource::Create(resource_attributes); From bff27f317a249e723b9b9972e155f4738ef9e5fa Mon Sep 17 00:00:00 2001 From: esigo Date: Wed, 22 Dec 2021 17:13:26 +0100 Subject: [PATCH 3/6] CI cmake --- exporters/jaeger/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exporters/jaeger/CMakeLists.txt b/exporters/jaeger/CMakeLists.txt index 5ae830aa60..8850099d72 100644 --- a/exporters/jaeger/CMakeLists.txt +++ b/exporters/jaeger/CMakeLists.txt @@ -82,7 +82,7 @@ if(BUILD_TESTING) endif() target_link_libraries( jaeger_exporter_test ${GTEST_BOTH_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} - ${GMOCK_LIB} opentelemetry_exporter_jaeger_trace) + ${GMOCK_LIB} opentelemetry_sdk opentelemetry_exporter_jaeger_trace) target_include_directories(jaeger_exporter_test PRIVATE ${CMAKE_CURRENT_LIST_DIR}/src) From ee5ddddf32d8bf8f41987ee1efe47048760c7a25 Mon Sep 17 00:00:00 2001 From: esigo Date: Wed, 22 Dec 2021 17:53:57 +0100 Subject: [PATCH 4/6] fix cmake --- exporters/jaeger/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exporters/jaeger/CMakeLists.txt b/exporters/jaeger/CMakeLists.txt index 8850099d72..b6108013d6 100644 --- a/exporters/jaeger/CMakeLists.txt +++ b/exporters/jaeger/CMakeLists.txt @@ -82,7 +82,7 @@ if(BUILD_TESTING) endif() target_link_libraries( jaeger_exporter_test ${GTEST_BOTH_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} - ${GMOCK_LIB} opentelemetry_sdk opentelemetry_exporter_jaeger_trace) + ${GMOCK_LIB} opentelemetry_trace opentelemetry_exporter_jaeger_trace) target_include_directories(jaeger_exporter_test PRIVATE ${CMAKE_CURRENT_LIST_DIR}/src) From 0364ff320464e47880591d7068da66045fd9732d Mon Sep 17 00:00:00 2001 From: esigo Date: Wed, 22 Dec 2021 18:28:23 +0100 Subject: [PATCH 5/6] remove unsupported attribute types --- exporters/jaeger/test/jaeger_exporter_test.cc | 21 +++++++------------ 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/exporters/jaeger/test/jaeger_exporter_test.cc b/exporters/jaeger/test/jaeger_exporter_test.cc index 1cc7acbe41..a924e51645 100644 --- a/exporters/jaeger/test/jaeger_exporter_test.cc +++ b/exporters/jaeger/test/jaeger_exporter_test.cc @@ -82,12 +82,6 @@ TEST_F(JaegerExporterTestPeer, ExportIntegrationTest) resource_attributes["uint32_value"] = static_cast(2); resource_attributes["int64_value"] = static_cast(0x1100000000LL); resource_attributes["double_value"] = static_cast(3.1); - resource_attributes["vec_bool_value"] = std::vector{true, false, true}; - resource_attributes["vec_int32_value"] = std::vector{1, 2}; - resource_attributes["vec_uint32_value"] = std::vector{3, 4}; - resource_attributes["vec_int64_value"] = std::vector{5, 6}; - resource_attributes["vec_double_value"] = std::vector{3.2, 3.3}; - resource_attributes["vec_string_value"] = std::vector{"vector", "string"}; auto resource = resource::Resource::Create(resource_attributes); auto processor_opts = sdk::trace::BatchSpanProcessorOptions(); @@ -103,9 +97,8 @@ TEST_F(JaegerExporterTestPeer, ExportIntegrationTest) std::string report_trace_id; { - char trace_id_hex[2 * trace_api::TraceId::kSize] = {0}; - auto tracer = provider->GetTracer("test"); - auto parent_span = tracer->StartSpan("Test parent span"); + auto tracer = provider->GetTracer("test"); + auto parent_span = tracer->StartSpan("Test parent span"); trace_api::StartSpanOptions child_span_opts = {}; child_span_opts.parent = parent_span->GetContext(); @@ -114,10 +107,12 @@ TEST_F(JaegerExporterTestPeer, ExportIntegrationTest) child_span->End(); parent_span->End(); - nostd::get(child_span_opts.parent) - .trace_id() - .ToLowerBase16(MakeSpan(trace_id_hex)); - report_trace_id.assign(trace_id_hex, sizeof(trace_id_hex)); + auto parent_ctx = parent_span->GetContext(); + auto child_ctx = child_span->GetContext(); + EXPECT_EQ(parent_ctx.trace_id(), child_ctx.trace_id()); + EXPECT_EQ(parent_ctx.trace_state(), child_ctx.trace_state()); + ASSERT_TRUE(parent_ctx.IsValid()); + ASSERT_TRUE(child_ctx.IsValid()); } } From cdd2f05d052d8d0f71f43b0d2e2882bf8897f837 Mon Sep 17 00:00:00 2001 From: esigo Date: Wed, 22 Dec 2021 19:49:05 +0100 Subject: [PATCH 6/6] cleanup --- exporters/jaeger/test/jaeger_exporter_test.cc | 36 +++++++++---------- 1 file changed, 16 insertions(+), 20 deletions(-) diff --git a/exporters/jaeger/test/jaeger_exporter_test.cc b/exporters/jaeger/test/jaeger_exporter_test.cc index a924e51645..7f86f877bc 100644 --- a/exporters/jaeger/test/jaeger_exporter_test.cc +++ b/exporters/jaeger/test/jaeger_exporter_test.cc @@ -6,7 +6,6 @@ #include #include "opentelemetry/sdk/trace/batch_span_processor.h" #include "opentelemetry/sdk/trace/tracer_provider.h" -#include "opentelemetry/trace/provider.h" #ifdef BAZEL_BUILD # include "exporters/jaeger/src/thrift_sender.h" @@ -95,25 +94,22 @@ TEST_F(JaegerExporterTestPeer, ExportIntegrationTest) EXPECT_CALL(*mock_transport, EmitBatch(_)).Times(Exactly(1)).WillOnce(Return(1)); - std::string report_trace_id; - { - auto tracer = provider->GetTracer("test"); - auto parent_span = tracer->StartSpan("Test parent span"); - - trace_api::StartSpanOptions child_span_opts = {}; - child_span_opts.parent = parent_span->GetContext(); - - auto child_span = tracer->StartSpan("Test child span", child_span_opts); - child_span->End(); - parent_span->End(); - - auto parent_ctx = parent_span->GetContext(); - auto child_ctx = child_span->GetContext(); - EXPECT_EQ(parent_ctx.trace_id(), child_ctx.trace_id()); - EXPECT_EQ(parent_ctx.trace_state(), child_ctx.trace_state()); - ASSERT_TRUE(parent_ctx.IsValid()); - ASSERT_TRUE(child_ctx.IsValid()); - } + auto tracer = provider->GetTracer("test"); + auto parent_span = tracer->StartSpan("Test parent span"); + + trace_api::StartSpanOptions child_span_opts = {}; + child_span_opts.parent = parent_span->GetContext(); + auto child_span = tracer->StartSpan("Test child span", child_span_opts); + + child_span->End(); + parent_span->End(); + + auto parent_ctx = parent_span->GetContext(); + auto child_ctx = child_span->GetContext(); + EXPECT_EQ(parent_ctx.trace_id(), child_ctx.trace_id()); + EXPECT_EQ(parent_ctx.trace_state(), child_ctx.trace_state()); + ASSERT_TRUE(parent_ctx.IsValid()); + ASSERT_TRUE(child_ctx.IsValid()); } TEST_F(JaegerExporterTestPeer, ShutdownTest)