[otel] Re-structure otel_plugin_test initialization

pull/35631/head
Yash Tibrewal 1 year ago
parent 562bc9b363
commit e3710e086c
  1. 25
      test/cpp/ext/csm/metadata_exchange_test.cc
  2. 303
      test/cpp/ext/otel/otel_plugin_test.cc
  3. 41
      test/cpp/ext/otel/otel_test_library.cc
  4. 103
      test/cpp/ext/otel/otel_test_library.h

@ -125,9 +125,9 @@ class MetadataExchangeTest
: public OpenTelemetryPluginEnd2EndTest,
public ::testing::WithParamInterface<TestScenario> {
protected:
void Init(const absl::flat_hash_set<absl::string_view>& metric_names,
void Init(absl::flat_hash_set<absl::string_view> metric_names,
bool enable_client_side_injector = true,
const std::map<std::string, std::string>& labels_to_inject = {}) {
std::map<std::string, std::string> labels_to_inject = {}) {
const char* kBootstrap =
"{\"node\": {\"id\": "
"\"projects/1234567890/networks/mesh:mesh-id/nodes/"
@ -146,16 +146,17 @@ class MetadataExchangeTest
grpc_core::SetEnv("GRPC_XDS_BOOTSTRAP_CONFIG", kBootstrap);
break;
}
OpenTelemetryPluginEnd2EndTest::Init(
metric_names, /*resource=*/GetParam().GetTestResource(),
/*labels_injector=*/
std::make_unique<grpc::internal::ServiceMeshLabelsInjector>(
GetParam().GetTestResource().GetAttributes()),
/*test_no_meter_provider=*/false, labels_to_inject,
/*target_selector=*/
[enable_client_side_injector](absl::string_view /*target*/) {
return enable_client_side_injector;
});
OpenTelemetryPluginEnd2EndTest::Init(std::move(
OpenTelemetryPluginTestConfiguration()
.set_metric_names(std::move(metric_names))
.set_labels_injector(
std::make_unique<grpc::internal::ServiceMeshLabelsInjector>(
GetParam().GetTestResource().GetAttributes()))
.set_labels_to_inject(std::move(labels_to_inject))
.set_target_selector(
[enable_client_side_injector](absl::string_view /*target*/) {
return enable_client_side_injector;
})));
}
~MetadataExchangeTest() override {

@ -51,7 +51,9 @@ TEST(OpenTelemetryPluginBuildTest, Basic) {
}
TEST_F(OpenTelemetryPluginEnd2EndTest, ClientAttemptStarted) {
Init({grpc::OpenTelemetryPluginBuilder::kClientAttemptStartedInstrumentName});
Init(std::move(OpenTelemetryPluginTestConfiguration().set_metric_names(
{grpc::OpenTelemetryPluginBuilder::
kClientAttemptStartedInstrumentName})));
SendRPC();
const char* kMetricName = "grpc.client.attempt.started";
auto data = ReadCurrentMetricsData(
@ -79,8 +81,9 @@ TEST_F(OpenTelemetryPluginEnd2EndTest, ClientAttemptStarted) {
}
TEST_F(OpenTelemetryPluginEnd2EndTest, ClientAttemptDuration) {
Init(
{grpc::OpenTelemetryPluginBuilder::kClientAttemptDurationInstrumentName});
Init(std::move(OpenTelemetryPluginTestConfiguration().set_metric_names(
{grpc::OpenTelemetryPluginBuilder::
kClientAttemptDurationInstrumentName})));
SendRPC();
const char* kMetricName = "grpc.client.attempt.duration";
auto data = ReadCurrentMetricsData(
@ -112,8 +115,9 @@ TEST_F(OpenTelemetryPluginEnd2EndTest, ClientAttemptDuration) {
TEST_F(OpenTelemetryPluginEnd2EndTest,
ClientAttemptSentTotalCompressedMessageSize) {
Init({grpc::OpenTelemetryPluginBuilder::
kClientAttemptSentTotalCompressedMessageSizeInstrumentName});
Init(std::move(OpenTelemetryPluginTestConfiguration().set_metric_names(
{grpc::OpenTelemetryPluginBuilder::
kClientAttemptSentTotalCompressedMessageSizeInstrumentName})));
SendRPC();
const char* kMetricName =
"grpc.client.attempt.sent_total_compressed_message_size";
@ -147,8 +151,9 @@ TEST_F(OpenTelemetryPluginEnd2EndTest,
TEST_F(OpenTelemetryPluginEnd2EndTest,
ClientAttemptRcvdTotalCompressedMessageSize) {
Init({grpc::OpenTelemetryPluginBuilder::
kClientAttemptRcvdTotalCompressedMessageSizeInstrumentName});
Init(std::move(OpenTelemetryPluginTestConfiguration().set_metric_names(
{grpc::OpenTelemetryPluginBuilder::
kClientAttemptRcvdTotalCompressedMessageSizeInstrumentName})));
SendRPC();
const char* kMetricName =
"grpc.client.attempt.rcvd_total_compressed_message_size";
@ -181,7 +186,8 @@ TEST_F(OpenTelemetryPluginEnd2EndTest,
}
TEST_F(OpenTelemetryPluginEnd2EndTest, ServerCallStarted) {
Init({grpc::OpenTelemetryPluginBuilder::kServerCallStartedInstrumentName});
Init(std::move(OpenTelemetryPluginTestConfiguration().set_metric_names(
{grpc::OpenTelemetryPluginBuilder::kServerCallStartedInstrumentName})));
SendRPC();
const char* kMetricName = "grpc.server.call.started";
auto data = ReadCurrentMetricsData(
@ -205,7 +211,8 @@ TEST_F(OpenTelemetryPluginEnd2EndTest, ServerCallStarted) {
}
TEST_F(OpenTelemetryPluginEnd2EndTest, ServerCallDuration) {
Init({grpc::OpenTelemetryPluginBuilder::kServerCallDurationInstrumentName});
Init(std::move(OpenTelemetryPluginTestConfiguration().set_metric_names(
{grpc::OpenTelemetryPluginBuilder::kServerCallDurationInstrumentName})));
SendRPC();
const char* kMetricName = "grpc.server.call.duration";
auto data = ReadCurrentMetricsData(
@ -233,8 +240,9 @@ TEST_F(OpenTelemetryPluginEnd2EndTest, ServerCallDuration) {
TEST_F(OpenTelemetryPluginEnd2EndTest,
ServerCallSentTotalCompressedMessageSize) {
Init({grpc::OpenTelemetryPluginBuilder::
kServerCallSentTotalCompressedMessageSizeInstrumentName});
Init(std::move(OpenTelemetryPluginTestConfiguration().set_metric_names(
{grpc::OpenTelemetryPluginBuilder::
kServerCallSentTotalCompressedMessageSizeInstrumentName})));
SendRPC();
const char* kMetricName =
"grpc.server.call.sent_total_compressed_message_size";
@ -264,8 +272,9 @@ TEST_F(OpenTelemetryPluginEnd2EndTest,
TEST_F(OpenTelemetryPluginEnd2EndTest,
ServerCallRcvdTotalCompressedMessageSize) {
Init({grpc::OpenTelemetryPluginBuilder::
kServerCallRcvdTotalCompressedMessageSizeInstrumentName});
Init(std::move(OpenTelemetryPluginTestConfiguration().set_metric_names(
{grpc::OpenTelemetryPluginBuilder::
kServerCallRcvdTotalCompressedMessageSizeInstrumentName})));
SendRPC();
const char* kMetricName =
"grpc.server.call.rcvd_total_compressed_message_size";
@ -295,23 +304,22 @@ TEST_F(OpenTelemetryPluginEnd2EndTest,
// Make sure that no meter provider results in normal operations.
TEST_F(OpenTelemetryPluginEnd2EndTest, NoMeterProviderRegistered) {
Init({grpc::OpenTelemetryPluginBuilder::kClientAttemptStartedInstrumentName},
/*resource=*/opentelemetry::sdk::resource::Resource::Create({}),
/*labels_injector=*/nullptr,
/*test_no_meter_provider=*/true);
Init(
std::move(OpenTelemetryPluginTestConfiguration()
.set_metric_names({grpc::OpenTelemetryPluginBuilder::
kClientAttemptStartedInstrumentName})
.set_test_no_meter_provider(true)));
SendRPC();
}
// Test that a channel selector returning true records metrics on the channel.
TEST_F(OpenTelemetryPluginEnd2EndTest, TargetSelectorReturnsTrue) {
Init({grpc::OpenTelemetryPluginBuilder::
kClientAttemptStartedInstrumentName}, /*resource=*/
opentelemetry::sdk::resource::Resource::Create({}),
/*labels_injector=*/nullptr,
/*test_no_meter_provider=*/false,
/*labels_to_inject=*/{},
/*target_selector=*/
[](absl::string_view /*target*/) { return true; });
Init(
std::move(OpenTelemetryPluginTestConfiguration()
.set_metric_names({grpc::OpenTelemetryPluginBuilder::
kClientAttemptStartedInstrumentName})
.set_target_selector(
[](absl::string_view /*target*/) { return true; })));
SendRPC();
const char* kMetricName = "grpc.client.attempt.started";
auto data = ReadCurrentMetricsData(
@ -341,14 +349,12 @@ TEST_F(OpenTelemetryPluginEnd2EndTest, TargetSelectorReturnsTrue) {
// Test that a target selector returning false does not record metrics on the
// channel.
TEST_F(OpenTelemetryPluginEnd2EndTest, TargetSelectorReturnsFalse) {
Init({grpc::OpenTelemetryPluginBuilder::
kClientAttemptStartedInstrumentName}, /*resource=*/
opentelemetry::sdk::resource::Resource::Create({}),
/*labels_injector=*/nullptr,
/*test_no_meter_provider=*/false,
/*labels_to_inject=*/{},
/*target_selector=*/
[](absl::string_view /*target*/) { return false; });
Init(
std::move(OpenTelemetryPluginTestConfiguration()
.set_metric_names({grpc::OpenTelemetryPluginBuilder::
kClientAttemptStartedInstrumentName})
.set_target_selector(
[](absl::string_view /*target*/) { return false; })));
SendRPC();
auto data = ReadCurrentMetricsData(
[&](const absl::flat_hash_map<
@ -360,15 +366,13 @@ TEST_F(OpenTelemetryPluginEnd2EndTest, TargetSelectorReturnsFalse) {
// Test that a server selector returning true records metrics on the server.
TEST_F(OpenTelemetryPluginEnd2EndTest, ServerSelectorReturnsTrue) {
Init({grpc::OpenTelemetryPluginBuilder::
kServerCallDurationInstrumentName}, /*resource=*/
opentelemetry::sdk::resource::Resource::Create({}),
/*labels_injector=*/nullptr,
/*test_no_meter_provider=*/false,
/*labels_to_inject=*/{},
/*target_selector=*/absl::AnyInvocable<bool(absl::string_view) const>(),
/*server_selector=*/
[](const grpc_core::ChannelArgs& /*channel_args*/) { return true; });
Init(std::move(OpenTelemetryPluginTestConfiguration()
.set_metric_names({grpc::OpenTelemetryPluginBuilder::
kServerCallDurationInstrumentName})
.set_server_selector(
[](const grpc_core::ChannelArgs& /*channel_args*/) {
return true;
})));
SendRPC();
const char* kMetricName = "grpc.server.call.duration";
auto data = ReadCurrentMetricsData(
@ -388,15 +392,13 @@ TEST_F(OpenTelemetryPluginEnd2EndTest, ServerSelectorReturnsTrue) {
// Test that a server selector returning false does not record metrics on the
// server.
TEST_F(OpenTelemetryPluginEnd2EndTest, ServerSelectorReturnsFalse) {
Init({grpc::OpenTelemetryPluginBuilder::
kServerCallDurationInstrumentName}, /*resource=*/
opentelemetry::sdk::resource::Resource::Create({}),
/*labels_injector=*/nullptr,
/*test_no_meter_provider=*/false,
/*labels_to_inject=*/{},
/*target_selector=*/absl::AnyInvocable<bool(absl::string_view) const>(),
/*server_selector=*/
[](const grpc_core::ChannelArgs& /*channel_args*/) { return false; });
Init(std::move(OpenTelemetryPluginTestConfiguration()
.set_metric_names({grpc::OpenTelemetryPluginBuilder::
kServerCallDurationInstrumentName})
.set_server_selector(
[](const grpc_core::ChannelArgs& /*channel_args*/) {
return false;
})));
SendRPC();
auto data = ReadCurrentMetricsData(
[&](const absl::flat_hash_map<
@ -409,18 +411,12 @@ TEST_F(OpenTelemetryPluginEnd2EndTest, ServerSelectorReturnsFalse) {
// Test that a target attribute filter returning true records metrics with the
// target as is on the channel.
TEST_F(OpenTelemetryPluginEnd2EndTest, TargetAttributeFilterReturnsTrue) {
Init({grpc::OpenTelemetryPluginBuilder::
kClientAttemptStartedInstrumentName}, /*resource=*/
opentelemetry::sdk::resource::Resource::Create({}),
/*labels_injector=*/nullptr,
/*test_no_meter_provider=*/false,
/*labels_to_inject=*/{},
/*target_selector=*/absl::AnyInvocable<bool(absl::string_view) const>(),
/*server_selector=*/
absl::AnyInvocable<bool(const grpc_core::ChannelArgs&) const>(),
/*target_attribute_filter=*/[](absl::string_view /*target*/) {
return true;
});
Init(
std::move(OpenTelemetryPluginTestConfiguration()
.set_metric_names({grpc::OpenTelemetryPluginBuilder::
kClientAttemptStartedInstrumentName})
.set_target_attribute_filter(
[](absl::string_view /*target*/) { return true; })));
SendRPC();
const char* kMetricName = "grpc.client.attempt.started";
auto data = ReadCurrentMetricsData(
@ -450,18 +446,12 @@ TEST_F(OpenTelemetryPluginEnd2EndTest, TargetAttributeFilterReturnsTrue) {
// Test that a target attribute filter returning false records metrics with the
// target as "other".
TEST_F(OpenTelemetryPluginEnd2EndTest, TargetAttributeFilterReturnsFalse) {
Init({grpc::OpenTelemetryPluginBuilder::
kClientAttemptStartedInstrumentName}, /*resource=*/
opentelemetry::sdk::resource::Resource::Create({}),
/*labels_injector=*/nullptr,
/*test_no_meter_provider=*/false,
/*labels_to_inject=*/{},
/*target_selector=*/absl::AnyInvocable<bool(absl::string_view) const>(),
/*server_selector=*/
absl::AnyInvocable<bool(const grpc_core::ChannelArgs&) const>(),
/*target_attribute_filter=*/
[server_address = canonical_server_address_](
absl::string_view /*target*/) { return false; });
Init(
std::move(OpenTelemetryPluginTestConfiguration()
.set_metric_names({grpc::OpenTelemetryPluginBuilder::
kClientAttemptStartedInstrumentName})
.set_target_attribute_filter(
[](absl::string_view /*target*/) { return false; })));
SendRPC();
const char* kMetricName = "grpc.client.attempt.started";
auto data = ReadCurrentMetricsData(
@ -490,7 +480,9 @@ TEST_F(OpenTelemetryPluginEnd2EndTest, TargetAttributeFilterReturnsFalse) {
// Test that generic method names are scrubbed properly on the client side.
TEST_F(OpenTelemetryPluginEnd2EndTest, GenericClientRpc) {
Init({grpc::OpenTelemetryPluginBuilder::kClientAttemptStartedInstrumentName});
Init(std::move(OpenTelemetryPluginTestConfiguration().set_metric_names(
{grpc::OpenTelemetryPluginBuilder::
kClientAttemptStartedInstrumentName})));
SendGenericRPC();
const char* kMetricName = "grpc.client.attempt.started";
auto data = ReadCurrentMetricsData(
@ -521,18 +513,12 @@ TEST_F(OpenTelemetryPluginEnd2EndTest, GenericClientRpc) {
// the method attribute filter is set and it returns false.
TEST_F(OpenTelemetryPluginEnd2EndTest,
GenericClientRpcWithMethodAttributeFilterReturningFalse) {
Init({grpc::OpenTelemetryPluginBuilder::kClientAttemptStartedInstrumentName},
/*resource=*/opentelemetry::sdk::resource::Resource::Create({}),
/*labels_injector=*/nullptr,
/*test_no_meter_provider=*/false,
/*labels_to_inject=*/{},
/*target_selector=*/absl::AnyInvocable<bool(absl::string_view) const>(),
/*server_selector=*/
absl::AnyInvocable<bool(const grpc_core::ChannelArgs&) const>(),
/*target_attribute_filter=*/
absl::AnyInvocable<bool(absl::string_view) const>(),
/*generic_method_attribute_filter=*/
[](absl::string_view /*generic_method*/) { return false; });
Init(std::move(
OpenTelemetryPluginTestConfiguration()
.set_metric_names({grpc::OpenTelemetryPluginBuilder::
kClientAttemptStartedInstrumentName})
.set_generic_method_attribute_filter(
[](absl::string_view /*generic_method*/) { return false; })));
SendGenericRPC();
const char* kMetricName = "grpc.client.attempt.started";
auto data = ReadCurrentMetricsData(
@ -563,18 +549,12 @@ TEST_F(OpenTelemetryPluginEnd2EndTest,
// the method attribute filter is set and it returns true.
TEST_F(OpenTelemetryPluginEnd2EndTest,
GenericClientRpcWithMethodAttributeFilterReturningTrue) {
Init({grpc::OpenTelemetryPluginBuilder::kClientAttemptStartedInstrumentName},
/*resource=*/opentelemetry::sdk::resource::Resource::Create({}),
/*labels_injector=*/nullptr,
/*test_no_meter_provider=*/false,
/*labels_to_inject=*/{},
/*target_selector=*/absl::AnyInvocable<bool(absl::string_view) const>(),
/*server_selector=*/
absl::AnyInvocable<bool(const grpc_core::ChannelArgs&) const>(),
/*target_attribute_filter=*/
absl::AnyInvocable<bool(absl::string_view) const>(),
/*generic_method_attribute_filter=*/
[](absl::string_view /*generic_method*/) { return true; });
Init(std::move(
OpenTelemetryPluginTestConfiguration()
.set_metric_names({grpc::OpenTelemetryPluginBuilder::
kClientAttemptStartedInstrumentName})
.set_generic_method_attribute_filter(
[](absl::string_view /*generic_method*/) { return true; })));
SendGenericRPC();
const char* kMetricName = "grpc.client.attempt.started";
auto data = ReadCurrentMetricsData(
@ -603,7 +583,8 @@ TEST_F(OpenTelemetryPluginEnd2EndTest,
// Test that generic method names are scrubbed properly on the server side.
TEST_F(OpenTelemetryPluginEnd2EndTest, GenericServerRpc) {
Init({grpc::OpenTelemetryPluginBuilder::kServerCallDurationInstrumentName});
Init(std::move(OpenTelemetryPluginTestConfiguration().set_metric_names(
{grpc::OpenTelemetryPluginBuilder::kServerCallDurationInstrumentName})));
SendGenericRPC();
const char* kMetricName = "grpc.server.call.duration";
auto data = ReadCurrentMetricsData(
@ -633,18 +614,12 @@ TEST_F(OpenTelemetryPluginEnd2EndTest, GenericServerRpc) {
// the method attribute filter is set and it returns false.
TEST_F(OpenTelemetryPluginEnd2EndTest,
GenericServerRpcWithMethodAttributeFilterReturningFalse) {
Init({grpc::OpenTelemetryPluginBuilder::kServerCallDurationInstrumentName},
/*resource=*/opentelemetry::sdk::resource::Resource::Create({}),
/*labels_injector=*/nullptr,
/*test_no_meter_provider=*/false,
/*labels_to_inject=*/{},
/*target_selector=*/absl::AnyInvocable<bool(absl::string_view) const>(),
/*server_selector=*/
absl::AnyInvocable<bool(const grpc_core::ChannelArgs&) const>(),
/*target_attribute_filter=*/
absl::AnyInvocable<bool(absl::string_view) const>(),
/*generic_method_attribute_filter=*/
[](absl::string_view /*generic_method*/) { return false; });
Init(std::move(
OpenTelemetryPluginTestConfiguration()
.set_metric_names({grpc::OpenTelemetryPluginBuilder::
kServerCallDurationInstrumentName})
.set_generic_method_attribute_filter(
[](absl::string_view /*generic_method*/) { return false; })));
SendGenericRPC();
const char* kMetricName = "grpc.server.call.duration";
auto data = ReadCurrentMetricsData(
@ -674,18 +649,12 @@ TEST_F(OpenTelemetryPluginEnd2EndTest,
// the method attribute filter is set and it returns true.
TEST_F(OpenTelemetryPluginEnd2EndTest,
GenericServerRpcWithMethodAttributeFilterReturningTrue) {
Init({grpc::OpenTelemetryPluginBuilder::kServerCallDurationInstrumentName},
/*resource=*/opentelemetry::sdk::resource::Resource::Create({}),
/*labels_injector=*/nullptr,
/*test_no_meter_provider=*/false,
/*labels_to_inject=*/{},
/*target_selector=*/absl::AnyInvocable<bool(absl::string_view) const>(),
/*server_selector=*/
absl::AnyInvocable<bool(const grpc_core::ChannelArgs&) const>(),
/*target_attribute_filter=*/
absl::AnyInvocable<bool(absl::string_view) const>(),
/*generic_method_attribute_filter=*/
[](absl::string_view /*generic_method*/) { return true; });
Init(std::move(
OpenTelemetryPluginTestConfiguration()
.set_metric_names({grpc::OpenTelemetryPluginBuilder::
kServerCallDurationInstrumentName})
.set_generic_method_attribute_filter(
[](absl::string_view /*generic_method*/) { return true; })));
SendGenericRPC();
const char* kMetricName = "grpc.server.call.duration";
auto data = ReadCurrentMetricsData(
@ -810,20 +779,13 @@ TEST_F(OpenTelemetryPluginOptionEnd2EndTest, Basic) {
plugin_option_list.emplace_back(std::make_unique<CustomPluginOption>(
/*enabled_on_client*/ true, /*enabled_on_server*/ true,
std::make_pair("key", "value")));
Init({grpc::OpenTelemetryPluginBuilder::kClientAttemptDurationInstrumentName,
grpc::OpenTelemetryPluginBuilder::kServerCallDurationInstrumentName},
/*resource=*/opentelemetry::sdk::resource::Resource::Create({}),
/*labels_injector=*/nullptr,
/*test_no_meter_provider=*/false,
/*labels_to_inject=*/{},
/*target_selector=*/absl::AnyInvocable<bool(absl::string_view) const>(),
/*server_selector=*/
absl::AnyInvocable<bool(const grpc_core::ChannelArgs&) const>(),
/*target_attribute_filter=*/
absl::AnyInvocable<bool(absl::string_view) const>(),
/*generic_method_attribute_filter=*/
absl::AnyInvocable<bool(absl::string_view /*generic_method*/) const>(),
/*plugin_options=*/std::move(plugin_option_list));
Init(
std::move(OpenTelemetryPluginTestConfiguration()
.set_metric_names({grpc::OpenTelemetryPluginBuilder::
kClientAttemptDurationInstrumentName,
grpc::OpenTelemetryPluginBuilder::
kServerCallDurationInstrumentName})
.set_plugin_options(std::move(plugin_option_list))));
SendRPC();
auto data = ReadCurrentMetricsData(
[&](const absl::flat_hash_map<
@ -854,20 +816,13 @@ TEST_F(OpenTelemetryPluginOptionEnd2EndTest, ClientOnlyPluginOption) {
plugin_option_list.emplace_back(std::make_unique<CustomPluginOption>(
/*enabled_on_client*/ true, /*enabled_on_server*/ false,
std::make_pair("key", "value")));
Init({grpc::OpenTelemetryPluginBuilder::kClientAttemptDurationInstrumentName,
grpc::OpenTelemetryPluginBuilder::kServerCallDurationInstrumentName},
/*resource=*/opentelemetry::sdk::resource::Resource::Create({}),
/*labels_injector=*/nullptr,
/*test_no_meter_provider=*/false,
/*labels_to_inject=*/{},
/*target_selector=*/absl::AnyInvocable<bool(absl::string_view) const>(),
/*server_selector=*/
absl::AnyInvocable<bool(const grpc_core::ChannelArgs&) const>(),
/*target_attribute_filter=*/
absl::AnyInvocable<bool(absl::string_view) const>(),
/*generic_method_attribute_filter=*/
absl::AnyInvocable<bool(absl::string_view /*generic_method*/) const>(),
/*plugin_options=*/std::move(plugin_option_list));
Init(
std::move(OpenTelemetryPluginTestConfiguration()
.set_metric_names({grpc::OpenTelemetryPluginBuilder::
kClientAttemptDurationInstrumentName,
grpc::OpenTelemetryPluginBuilder::
kServerCallDurationInstrumentName})
.set_plugin_options(std::move(plugin_option_list))));
SendRPC();
auto data = ReadCurrentMetricsData(
[&](const absl::flat_hash_map<
@ -899,20 +854,13 @@ TEST_F(OpenTelemetryPluginOptionEnd2EndTest, ServerOnlyPluginOption) {
plugin_option_list.emplace_back(std::make_unique<CustomPluginOption>(
/*enabled_on_client*/ false, /*enabled_on_server*/ true,
std::make_pair("key", "value")));
Init({grpc::OpenTelemetryPluginBuilder::kClientAttemptDurationInstrumentName,
grpc::OpenTelemetryPluginBuilder::kServerCallDurationInstrumentName},
/*resource=*/opentelemetry::sdk::resource::Resource::Create({}),
/*labels_injector=*/nullptr,
/*test_no_meter_provider=*/false,
/*labels_to_inject=*/{},
/*target_selector=*/absl::AnyInvocable<bool(absl::string_view) const>(),
/*server_selector=*/
absl::AnyInvocable<bool(const grpc_core::ChannelArgs&) const>(),
/*target_attribute_filter=*/
absl::AnyInvocable<bool(absl::string_view) const>(),
/*generic_method_attribute_filter=*/
absl::AnyInvocable<bool(absl::string_view /*generic_method*/) const>(),
/*plugin_options=*/std::move(plugin_option_list));
Init(
std::move(OpenTelemetryPluginTestConfiguration()
.set_metric_names({grpc::OpenTelemetryPluginBuilder::
kClientAttemptDurationInstrumentName,
grpc::OpenTelemetryPluginBuilder::
kServerCallDurationInstrumentName})
.set_plugin_options(std::move(plugin_option_list))));
SendRPC();
auto data = ReadCurrentMetricsData(
[&](const absl::flat_hash_map<
@ -958,20 +906,13 @@ TEST_F(OpenTelemetryPluginOptionEnd2EndTest,
plugin_option_list.emplace_back(std::make_unique<CustomPluginOption>(
/*enabled_on_client*/ false, /*enabled_on_server*/ true,
std::make_pair("key5", "value5")));
Init({grpc::OpenTelemetryPluginBuilder::kClientAttemptDurationInstrumentName,
grpc::OpenTelemetryPluginBuilder::kServerCallDurationInstrumentName},
/*resource=*/opentelemetry::sdk::resource::Resource::Create({}),
/*labels_injector=*/nullptr,
/*test_no_meter_provider=*/false,
/*labels_to_inject=*/{},
/*target_selector=*/absl::AnyInvocable<bool(absl::string_view) const>(),
/*server_selector=*/
absl::AnyInvocable<bool(const grpc_core::ChannelArgs&) const>(),
/*target_attribute_filter=*/
absl::AnyInvocable<bool(absl::string_view) const>(),
/*generic_method_attribute_filter=*/
absl::AnyInvocable<bool(absl::string_view /*generic_method*/) const>(),
/*plugin_options=*/std::move(plugin_option_list));
Init(
std::move(OpenTelemetryPluginTestConfiguration()
.set_metric_names({grpc::OpenTelemetryPluginBuilder::
kClientAttemptDurationInstrumentName,
grpc::OpenTelemetryPluginBuilder::
kServerCallDurationInstrumentName})
.set_plugin_options(std::move(plugin_option_list))));
SendRPC();
auto data = ReadCurrentMetricsData(
[&](const absl::flat_hash_map<

@ -83,58 +83,43 @@ const grpc_channel_filter AddServiceLabelsFilter::kFilter =
"add_service_labels_filter");
void OpenTelemetryPluginEnd2EndTest::Init(
const absl::flat_hash_set<absl::string_view>& metric_names,
opentelemetry::sdk::resource::Resource resource,
std::unique_ptr<grpc::internal::LabelsInjector> labels_injector,
bool test_no_meter_provider,
const std::map<std::string, std::string>& labels_to_inject,
absl::AnyInvocable<bool(absl::string_view /*target*/) const>
target_selector,
absl::AnyInvocable<bool(const grpc_core::ChannelArgs& /*channel_args*/)
const>
server_selector,
absl::AnyInvocable<bool(absl::string_view /*target*/) const>
target_attribute_filter,
absl::AnyInvocable<bool(absl::string_view /*generic_method*/) const>
generic_method_attribute_filter,
std::vector<
std::unique_ptr<grpc::internal::InternalOpenTelemetryPluginOption>>
plugin_options) {
OpenTelemetryPluginTestConfiguration config) {
// We are resetting the MeterProvider and OpenTelemetry plugin at the start
// of each test to avoid test results from one test carrying over to another
// test. (Some measurements can get arbitrarily delayed.)
auto meter_provider =
std::make_shared<opentelemetry::sdk::metrics::MeterProvider>(
std::make_unique<opentelemetry::sdk::metrics::ViewRegistry>(),
std::move(resource));
std::move(config.resource));
reader_.reset(new grpc::testing::MockMetricReader);
meter_provider->AddMetricReader(reader_);
grpc_core::CoreConfiguration::Reset();
grpc::internal::OpenTelemetryPluginBuilderImpl ot_builder;
ot_builder.DisableAllMetrics();
for (const auto& metric_name : metric_names) {
for (const auto& metric_name : config.metric_names) {
ot_builder.EnableMetric(metric_name);
}
if (!test_no_meter_provider) {
if (!config.test_no_meter_provider) {
auto meter_provider =
std::make_shared<opentelemetry::sdk::metrics::MeterProvider>();
reader_.reset(new grpc::testing::MockMetricReader);
meter_provider->AddMetricReader(reader_);
ot_builder.SetMeterProvider(std::move(meter_provider));
}
ot_builder.SetLabelsInjector(std::move(labels_injector));
ot_builder.SetTargetSelector(std::move(target_selector));
ot_builder.SetServerSelector(std::move(server_selector));
ot_builder.SetTargetAttributeFilter(std::move(target_attribute_filter));
ot_builder.SetLabelsInjector(std::move(config.labels_injector));
ot_builder.SetTargetSelector(std::move(config.target_selector));
ot_builder.SetServerSelector(std::move(config.server_selector));
ot_builder.SetTargetAttributeFilter(
std::move(config.target_attribute_filter));
ot_builder.SetGenericMethodAttributeFilter(
std::move(generic_method_attribute_filter));
for (auto& option : plugin_options) {
std::move(config.generic_method_attribute_filter));
for (auto& option : config.plugin_options) {
ot_builder.AddPluginOption(std::move(option));
}
ot_builder.BuildAndRegisterGlobal();
ChannelArguments channel_args;
if (!labels_to_inject.empty()) {
labels_to_inject_ = labels_to_inject;
if (!config.labels_to_inject.empty()) {
labels_to_inject_ = config.labels_to_inject;
grpc_core::CoreConfiguration::RegisterBuilder(
[](grpc_core::CoreConfiguration::Builder* builder) mutable {
builder->channel_init()->RegisterFilter(

@ -54,31 +54,94 @@ class MockMetricReader : public opentelemetry::sdk::metrics::MetricReader {
void OnInitialized() noexcept override {}
};
class OpenTelemetryPluginEnd2EndTest : public ::testing::Test {
protected:
// Note that we can't use SetUp() here since we want to send in parameters.
void Init(
const absl::flat_hash_set<absl::string_view>& metric_names,
opentelemetry::sdk::resource::Resource resource =
opentelemetry::sdk::resource::Resource::Create({}),
std::unique_ptr<grpc::internal::LabelsInjector> labels_injector = nullptr,
bool test_no_meter_provider = false,
const std::map<std::string, std::string>& labels_to_inject = {},
absl::AnyInvocable<bool(absl::string_view /*target*/) const>
target_selector = absl::AnyInvocable<bool(absl::string_view) const>(),
struct OpenTelemetryPluginTestConfiguration {
public:
OpenTelemetryPluginTestConfiguration& set_metric_names(
absl::flat_hash_set<absl::string_view> names) {
metric_names = std::move(names);
return *this;
}
OpenTelemetryPluginTestConfiguration& set_resource(
const opentelemetry::sdk::resource::Resource& res) {
resource = res;
return *this;
}
OpenTelemetryPluginTestConfiguration& set_labels_injector(
std::unique_ptr<grpc::internal::LabelsInjector> injector) {
labels_injector = std::move(injector);
return *this;
}
OpenTelemetryPluginTestConfiguration& set_test_no_meter_provider(bool flag) {
test_no_meter_provider = flag;
return *this;
}
OpenTelemetryPluginTestConfiguration& set_labels_to_inject(
std::map<std::string, std::string> labels) {
labels_to_inject = std::move(labels);
return *this;
}
OpenTelemetryPluginTestConfiguration& set_target_selector(
absl::AnyInvocable<bool(absl::string_view /*target*/) const> func) {
target_selector = std::move(func);
return *this;
}
OpenTelemetryPluginTestConfiguration& set_server_selector(
absl::AnyInvocable<bool(const grpc_core::ChannelArgs& /*channel_args*/)
const>
server_selector = absl::AnyInvocable<
bool(const grpc_core::ChannelArgs& /*channel_args*/) const>(),
absl::AnyInvocable<bool(absl::string_view /*target*/) const>
target_attribute_filter =
absl::AnyInvocable<bool(absl::string_view) const>(),
func) {
server_selector = std::move(func);
return *this;
}
OpenTelemetryPluginTestConfiguration& set_target_attribute_filter(
absl::AnyInvocable<bool(absl::string_view /*target*/) const> func) {
target_attribute_filter = std::move(func);
return *this;
}
OpenTelemetryPluginTestConfiguration& set_generic_method_attribute_filter(
absl::AnyInvocable<bool(absl::string_view /*generic_method*/) const>
generic_method_attribute_filter = absl::AnyInvocable<
bool(absl::string_view /*generic_method*/) const>(),
func) {
generic_method_attribute_filter = std::move(func);
return *this;
}
OpenTelemetryPluginTestConfiguration& set_plugin_options(
std::vector<
std::unique_ptr<grpc::internal::InternalOpenTelemetryPluginOption>>
plugin_options = {});
options) {
plugin_options = std::move(options);
return *this;
}
absl::flat_hash_set<absl::string_view> metric_names;
opentelemetry::sdk::resource::Resource resource =
opentelemetry::sdk::resource::Resource::Create({});
std::unique_ptr<grpc::internal::LabelsInjector> labels_injector;
bool test_no_meter_provider = false;
std::map<std::string, std::string> labels_to_inject;
absl::AnyInvocable<bool(absl::string_view /*target*/) const> target_selector;
absl::AnyInvocable<bool(const grpc_core::ChannelArgs& /*channel_args*/) const>
server_selector;
absl::AnyInvocable<bool(absl::string_view /*target*/) const>
target_attribute_filter;
absl::AnyInvocable<bool(absl::string_view /*generic_method*/) const>
generic_method_attribute_filter;
std::vector<
std::unique_ptr<grpc::internal::InternalOpenTelemetryPluginOption>>
plugin_options;
};
class OpenTelemetryPluginEnd2EndTest : public ::testing::Test {
protected:
// Note that we can't use SetUp() here since we want to send in parameters.
void Init(OpenTelemetryPluginTestConfiguration config);
void TearDown() override;

Loading…
Cancel
Save