|
|
|
@ -32,7 +32,25 @@ namespace { |
|
|
|
|
|
|
|
|
|
TEST(GcpObservabilityConfigJsonParsingTest, Basic) { |
|
|
|
|
const char* json_str = R"json({ |
|
|
|
|
"cloud_logging": {}, |
|
|
|
|
"cloud_logging": { |
|
|
|
|
"client_rpc_events": [ |
|
|
|
|
{ |
|
|
|
|
"methods": ["google.pubsub.v1.Subscriber/Acknowledge", "google.pubsub.v1.Publisher/CreateTopic"], |
|
|
|
|
"exclude": true |
|
|
|
|
}, |
|
|
|
|
{ |
|
|
|
|
"methods": ["google.pubsub.v1.Subscriber/*", "google.pubsub.v1.Publisher/*"], |
|
|
|
|
"max_metadata_bytes": 4096, |
|
|
|
|
"max_message_bytes": 4096 |
|
|
|
|
}], |
|
|
|
|
"server_rpc_events": [ |
|
|
|
|
{ |
|
|
|
|
"methods": ["*"], |
|
|
|
|
"max_metadata_bytes": 4096, |
|
|
|
|
"max_message_bytes": 4096 |
|
|
|
|
} |
|
|
|
|
] |
|
|
|
|
}, |
|
|
|
|
"cloud_monitoring": {}, |
|
|
|
|
"cloud_trace": { |
|
|
|
|
"sampling_rate": 0.05 |
|
|
|
@ -45,7 +63,27 @@ TEST(GcpObservabilityConfigJsonParsingTest, Basic) { |
|
|
|
|
auto config = grpc_core::LoadFromJson<GcpObservabilityConfig>( |
|
|
|
|
*json, grpc_core::JsonArgs(), &errors); |
|
|
|
|
ASSERT_TRUE(errors.ok()) << errors.status("unexpected errors"); |
|
|
|
|
EXPECT_TRUE(config.cloud_logging.has_value()); |
|
|
|
|
ASSERT_TRUE(config.cloud_logging.has_value()); |
|
|
|
|
ASSERT_EQ(config.cloud_logging->client_rpc_events.size(), 2); |
|
|
|
|
EXPECT_THAT(config.cloud_logging->client_rpc_events[0].qualified_methods, |
|
|
|
|
::testing::ElementsAre("google.pubsub.v1.Subscriber/Acknowledge", |
|
|
|
|
"google.pubsub.v1.Publisher/CreateTopic")); |
|
|
|
|
EXPECT_TRUE(config.cloud_logging->client_rpc_events[0].exclude); |
|
|
|
|
EXPECT_EQ(config.cloud_logging->client_rpc_events[0].max_metadata_bytes, 0); |
|
|
|
|
EXPECT_EQ(config.cloud_logging->client_rpc_events[0].max_message_bytes, 0); |
|
|
|
|
EXPECT_THAT(config.cloud_logging->client_rpc_events[1].qualified_methods, |
|
|
|
|
::testing::ElementsAre("google.pubsub.v1.Subscriber/*", |
|
|
|
|
"google.pubsub.v1.Publisher/*")); |
|
|
|
|
EXPECT_FALSE(config.cloud_logging->client_rpc_events[1].exclude); |
|
|
|
|
EXPECT_EQ(config.cloud_logging->client_rpc_events[1].max_metadata_bytes, |
|
|
|
|
4096); |
|
|
|
|
EXPECT_EQ(config.cloud_logging->client_rpc_events[1].max_message_bytes, 4096); |
|
|
|
|
ASSERT_EQ(config.cloud_logging->server_rpc_events.size(), 1); |
|
|
|
|
EXPECT_THAT(config.cloud_logging->server_rpc_events[0].qualified_methods, |
|
|
|
|
::testing::ElementsAre("*")); |
|
|
|
|
EXPECT_EQ(config.cloud_logging->server_rpc_events[0].max_metadata_bytes, |
|
|
|
|
4096); |
|
|
|
|
EXPECT_EQ(config.cloud_logging->server_rpc_events[0].max_message_bytes, 4096); |
|
|
|
|
EXPECT_TRUE(config.cloud_monitoring.has_value()); |
|
|
|
|
EXPECT_TRUE(config.cloud_trace.has_value()); |
|
|
|
|
EXPECT_FLOAT_EQ(config.cloud_trace->sampling_rate, 0.05); |
|
|
|
@ -67,6 +105,109 @@ TEST(GcpObservabilityConfigJsonParsingTest, Defaults) { |
|
|
|
|
EXPECT_TRUE(config.project_id.empty()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
TEST(GcpObservabilityConfigJsonParsingTest, LoggingConfigMethodIllegalSlashes) { |
|
|
|
|
const char* json_str = R"json({ |
|
|
|
|
"cloud_logging": { |
|
|
|
|
"client_rpc_events": [ |
|
|
|
|
{ |
|
|
|
|
"methods": ["servicemethod", "service/method/foo"] |
|
|
|
|
} |
|
|
|
|
] |
|
|
|
|
} |
|
|
|
|
})json"; |
|
|
|
|
auto json = grpc_core::Json::Parse(json_str); |
|
|
|
|
ASSERT_TRUE(json.ok()) << json.status(); |
|
|
|
|
grpc_core::ValidationErrors errors; |
|
|
|
|
auto config = grpc_core::LoadFromJson<GcpObservabilityConfig>( |
|
|
|
|
*json, grpc_core::JsonArgs(), &errors); |
|
|
|
|
EXPECT_THAT(errors.status("Parsing error").ToString(), |
|
|
|
|
::testing::AllOf( |
|
|
|
|
::testing::HasSubstr( |
|
|
|
|
"field:cloud_logging.client_rpc_events[0].methods[0]" |
|
|
|
|
" error:Illegal methods[] configuration"), |
|
|
|
|
::testing::HasSubstr( |
|
|
|
|
"field:cloud_logging.client_rpc_events[0].methods[1] " |
|
|
|
|
"error:methods[] can have at most a single '/'"))); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
TEST(GcpObservabilityConfigJsonParsingTest, LoggingConfigEmptyMethod) { |
|
|
|
|
const char* json_str = R"json({ |
|
|
|
|
"cloud_logging": { |
|
|
|
|
"client_rpc_events": [ |
|
|
|
|
{ |
|
|
|
|
"methods": [""] |
|
|
|
|
} |
|
|
|
|
] |
|
|
|
|
} |
|
|
|
|
})json"; |
|
|
|
|
auto json = grpc_core::Json::Parse(json_str); |
|
|
|
|
ASSERT_TRUE(json.ok()) << json.status(); |
|
|
|
|
grpc_core::ValidationErrors errors; |
|
|
|
|
auto config = grpc_core::LoadFromJson<GcpObservabilityConfig>( |
|
|
|
|
*json, grpc_core::JsonArgs(), &errors); |
|
|
|
|
EXPECT_THAT( |
|
|
|
|
errors.status("Parsing error").ToString(), |
|
|
|
|
::testing::HasSubstr("field:cloud_logging.client_rpc_events[0].methods[0]" |
|
|
|
|
" error:Empty configuration")); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
TEST(GcpObservabilityConfigJsonParsingTest, LoggingConfigWildcardEntries) { |
|
|
|
|
const char* json_str = R"json({ |
|
|
|
|
"cloud_logging": { |
|
|
|
|
"client_rpc_events": [ |
|
|
|
|
{ |
|
|
|
|
"methods": ["*", "service/*"] |
|
|
|
|
} |
|
|
|
|
] |
|
|
|
|
} |
|
|
|
|
})json"; |
|
|
|
|
auto json = grpc_core::Json::Parse(json_str); |
|
|
|
|
ASSERT_TRUE(json.ok()) << json.status(); |
|
|
|
|
grpc_core::ValidationErrors errors; |
|
|
|
|
auto config = grpc_core::LoadFromJson<GcpObservabilityConfig>( |
|
|
|
|
*json, grpc_core::JsonArgs(), &errors); |
|
|
|
|
ASSERT_TRUE(errors.ok()) << errors.status("unexpected errors"); |
|
|
|
|
ASSERT_TRUE(config.cloud_logging.has_value()); |
|
|
|
|
ASSERT_EQ(config.cloud_logging->client_rpc_events.size(), 1); |
|
|
|
|
EXPECT_THAT(config.cloud_logging->client_rpc_events[0].qualified_methods, |
|
|
|
|
::testing::ElementsAre("*", "service/*")); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
TEST(GcpObservabilityConfigJsonParsingTest, |
|
|
|
|
LoggingConfigIncorrectWildcardSpecs) { |
|
|
|
|
const char* json_str = R"json({ |
|
|
|
|
"cloud_logging": { |
|
|
|
|
"client_rpc_events": [ |
|
|
|
|
{ |
|
|
|
|
"methods": ["*"], |
|
|
|
|
"exclude": true |
|
|
|
|
}, |
|
|
|
|
{ |
|
|
|
|
"methods": ["*/method", "service/*blah"], |
|
|
|
|
"exclude": true |
|
|
|
|
} |
|
|
|
|
] |
|
|
|
|
} |
|
|
|
|
})json"; |
|
|
|
|
auto json = grpc_core::Json::Parse(json_str); |
|
|
|
|
ASSERT_TRUE(json.ok()) << json.status(); |
|
|
|
|
grpc_core::ValidationErrors errors; |
|
|
|
|
auto config = grpc_core::LoadFromJson<GcpObservabilityConfig>( |
|
|
|
|
*json, grpc_core::JsonArgs(), &errors); |
|
|
|
|
EXPECT_THAT( |
|
|
|
|
errors.status("Parsing error").ToString(), |
|
|
|
|
::testing::AllOf( |
|
|
|
|
::testing::HasSubstr( |
|
|
|
|
"field:cloud_logging.client_rpc_events[0].methods[0]" |
|
|
|
|
" error:Wildcard match '*' not allowed when 'exclude' is set"), |
|
|
|
|
::testing::HasSubstr( |
|
|
|
|
"field:cloud_logging.client_rpc_events[1].methods[0] " |
|
|
|
|
"error:Configuration of type '*/method' not allowed"), |
|
|
|
|
::testing::HasSubstr( |
|
|
|
|
"field:cloud_logging.client_rpc_events[1].methods[1] " |
|
|
|
|
"error:Wildcard specified for method in incorrect manner"))); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
TEST(GcpObservabilityConfigJsonParsingTest, SamplingRateDefaults) { |
|
|
|
|
const char* json_str = R"json({ |
|
|
|
|
"cloud_trace": { |
|
|
|
|