[logging] Add tests for cases where we don't send any metadata and improve debuggability (#33486)

<!--

If you know who should review your pull request, please assign it to
that
person, otherwise the pull request would get assigned randomly.

If your pull request is for a specific language, please add the
appropriate
lang label.

-->
pull/33513/head
Yash Tibrewal 2 years ago committed by GitHub
parent 12e0e60242
commit 441ff0e757
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 12
      test/cpp/ext/filters/logging/library.h
  2. 330
      test/cpp/ext/filters/logging/logging_census_integration_test.cc
  3. 1123
      test/cpp/ext/filters/logging/logging_test.cc

@ -44,16 +44,6 @@
namespace grpc {
namespace testing {
class MyTestServiceImpl : public TestServiceImpl {
public:
Status Echo(ServerContext* context, const EchoRequest* request,
EchoResponse* response) override {
context->AddInitialMetadata("server-header-key", "server-header-value");
context->AddTrailingMetadata("server-trailer-key", "server-trailer-value");
return TestServiceImpl::Echo(context, request, response);
}
};
class TestLoggingSink : public grpc_core::LoggingSink {
public:
Config FindMatch(bool /* is_client */, absl::string_view /* service */,
@ -149,7 +139,7 @@ class LoggingTest : public ::testing::Test {
void RunServerLoop() { server_->Wait(); }
std::string server_address_;
MyTestServiceImpl service_;
CallbackTestServiceImpl service_;
std::unique_ptr<grpc::Server> server_;
std::thread server_thread_;

@ -71,6 +71,8 @@ TEST_F(LoggingCensusIntegrationTest, Basic) {
{
EchoRequest request;
request.set_message("foo");
request.mutable_param()->set_echo_metadata(true);
request.mutable_param()->set_echo_metadata_initially(true);
EchoResponse response;
grpc::ClientContext context;
::opencensus::trace::AlwaysSampler always_sampler;
@ -83,7 +85,7 @@ TEST_F(LoggingCensusIntegrationTest, Basic) {
expected_trace_id = app_census_context.Context().trace_id().ToHex();
context.set_census_context(
reinterpret_cast<census_context*>(&app_census_context));
context.AddMetadata("client-key", "client-value");
context.AddMetadata("key", "value");
traces_recorder_->StartRecording();
grpc::Status status = stub_->Echo(&context, request, &response);
EXPECT_TRUE(status.ok());
@ -96,184 +98,222 @@ TEST_F(LoggingCensusIntegrationTest, Basic) {
EXPECT_THAT(
g_test_logging_sink->entries(),
::testing::UnorderedElementsAre(
AllOf(Field(&LoggingSink::Entry::type,
AllOf(Field("type", &LoggingSink::Entry::type,
Eq(LoggingSink::Entry::EventType::kClientHeader)),
Field(&LoggingSink::Entry::logger,
Field("logger", &LoggingSink::Entry::logger,
Eq(LoggingSink::Entry::Logger::kClient)),
Field(&LoggingSink::Entry::authority, Eq(server_address_)),
Field(&LoggingSink::Entry::service_name,
Field("authority", &LoggingSink::Entry::authority,
Eq(server_address_)),
Field("service_name", &LoggingSink::Entry::service_name,
Eq("grpc.testing.EchoTestService")),
Field(&LoggingSink::Entry::method_name, Eq("Echo")),
Field(&LoggingSink::Entry::payload,
Field(&LoggingSink::Entry::Payload::metadata,
UnorderedElementsAre(
Pair("client-key", "client-value")))),
Field(&LoggingSink::Entry::trace_id, Eq(expected_trace_id)),
Field(&LoggingSink::Entry::span_id, Ne("")),
Field(&LoggingSink::Entry::is_sampled, true)),
AllOf(Field(&LoggingSink::Entry::type,
Field("method_name", &LoggingSink::Entry::method_name,
Eq("Echo")),
Field("payload", &LoggingSink::Entry::payload,
Field("metadata", &LoggingSink::Entry::Payload::metadata,
UnorderedElementsAre(Pair("key", "value")))),
Field("trace_id", &LoggingSink::Entry::trace_id,
Eq(expected_trace_id)),
Field("span_id", &LoggingSink::Entry::span_id, Ne("")),
Field("is_sampled", &LoggingSink::Entry::is_sampled, true)),
AllOf(Field("type", &LoggingSink::Entry::type,
Eq(LoggingSink::Entry::EventType::kClientMessage)),
Field(&LoggingSink::Entry::logger,
Field("logger", &LoggingSink::Entry::logger,
Eq(LoggingSink::Entry::Logger::kClient)),
Field(&LoggingSink::Entry::authority, Eq(server_address_)),
Field(&LoggingSink::Entry::service_name,
Field("authority", &LoggingSink::Entry::authority,
Eq(server_address_)),
Field("service_name", &LoggingSink::Entry::service_name,
Eq("grpc.testing.EchoTestService")),
Field(&LoggingSink::Entry::method_name, Eq("Echo")),
Field(&LoggingSink::Entry::payload,
AllOf(Field(&LoggingSink::Entry::Payload::message_length,
Eq(5)),
Field(&LoggingSink::Entry::Payload::message,
Eq("\n\003foo")))),
Field(&LoggingSink::Entry::trace_id, Eq(expected_trace_id)),
Field(&LoggingSink::Entry::span_id, Ne("")),
Field(&LoggingSink::Entry::is_sampled, true)),
AllOf(Field(&LoggingSink::Entry::type,
Field("method_name", &LoggingSink::Entry::method_name,
Eq("Echo")),
Field("payload", &LoggingSink::Entry::payload,
AllOf(Field("message_length",
&LoggingSink::Entry::Payload::message_length,
Eq(12)),
Field("message",
&LoggingSink::Entry::Payload::message,
Eq("\x0a\x03\x66\x6f\x6f\x12\x05\x20\x01\x88"
"\x01\x01")))),
Field("trace_id", &LoggingSink::Entry::trace_id,
Eq(expected_trace_id)),
Field("span_id", &LoggingSink::Entry::span_id, Ne("")),
Field("is_sampled", &LoggingSink::Entry::is_sampled, true)),
AllOf(Field("type", &LoggingSink::Entry::type,
Eq(LoggingSink::Entry::EventType::kClientHalfClose)),
Field(&LoggingSink::Entry::logger,
Field("logger", &LoggingSink::Entry::logger,
Eq(LoggingSink::Entry::Logger::kClient)),
Field(&LoggingSink::Entry::authority, Eq(server_address_)),
Field(&LoggingSink::Entry::service_name,
Field("authority", &LoggingSink::Entry::authority,
Eq(server_address_)),
Field("service_name", &LoggingSink::Entry::service_name,
Eq("grpc.testing.EchoTestService")),
Field(&LoggingSink::Entry::method_name, Eq("Echo")),
Field(&LoggingSink::Entry::trace_id, Eq(expected_trace_id)),
Field(&LoggingSink::Entry::span_id, Ne("")),
Field(&LoggingSink::Entry::is_sampled, true)),
AllOf(Field(&LoggingSink::Entry::type,
Field("method_name", &LoggingSink::Entry::method_name,
Eq("Echo")),
Field("trace_id", &LoggingSink::Entry::trace_id,
Eq(expected_trace_id)),
Field("span_id", &LoggingSink::Entry::span_id, Ne("")),
Field("is_sampled", &LoggingSink::Entry::is_sampled, true)),
AllOf(Field("type", &LoggingSink::Entry::type,
Eq(LoggingSink::Entry::EventType::kServerHeader)),
Field(&LoggingSink::Entry::logger,
Field("logger", &LoggingSink::Entry::logger,
Eq(LoggingSink::Entry::Logger::kClient)),
Field(&LoggingSink::Entry::authority, Eq(server_address_)),
Field(&LoggingSink::Entry::service_name,
Field("authority", &LoggingSink::Entry::authority,
Eq(server_address_)),
Field("service_name", &LoggingSink::Entry::service_name,
Eq("grpc.testing.EchoTestService")),
Field(&LoggingSink::Entry::method_name, Eq("Echo")),
Field(&LoggingSink::Entry::payload,
Field(&LoggingSink::Entry::Payload::metadata,
UnorderedElementsAre(Pair("server-header-key",
"server-header-value")))),
Field(&LoggingSink::Entry::trace_id, Eq(expected_trace_id)),
Field(&LoggingSink::Entry::span_id, Ne("")),
Field(&LoggingSink::Entry::is_sampled, true)),
AllOf(Field(&LoggingSink::Entry::type,
Field("method_name", &LoggingSink::Entry::method_name,
Eq("Echo")),
Field("payload", &LoggingSink::Entry::payload,
Field("metadata", &LoggingSink::Entry::Payload::metadata,
UnorderedElementsAre(Pair("key", "value")))),
Field("trace_id", &LoggingSink::Entry::trace_id,
Eq(expected_trace_id)),
Field("span_id", &LoggingSink::Entry::span_id, Ne("")),
Field("is_sampled", &LoggingSink::Entry::is_sampled, true)),
AllOf(Field("type", &LoggingSink::Entry::type,
Eq(LoggingSink::Entry::EventType::kServerMessage)),
Field(&LoggingSink::Entry::logger,
Field("logger", &LoggingSink::Entry::logger,
Eq(LoggingSink::Entry::Logger::kClient)),
Field(&LoggingSink::Entry::authority, Eq(server_address_)),
Field(&LoggingSink::Entry::service_name,
Field("authority", &LoggingSink::Entry::authority,
Eq(server_address_)),
Field("service_name", &LoggingSink::Entry::service_name,
Eq("grpc.testing.EchoTestService")),
Field(&LoggingSink::Entry::method_name, Eq("Echo")),
Field(&LoggingSink::Entry::payload,
AllOf(Field(&LoggingSink::Entry::Payload::message_length,
Field("method_name", &LoggingSink::Entry::method_name,
Eq("Echo")),
Field("payload", &LoggingSink::Entry::payload,
AllOf(Field("message_length",
&LoggingSink::Entry::Payload::message_length,
Eq(5)),
Field(&LoggingSink::Entry::Payload::message,
Field("message",
&LoggingSink::Entry::Payload::message,
Eq("\n\003foo")))),
Field(&LoggingSink::Entry::trace_id, Eq(expected_trace_id)),
Field(&LoggingSink::Entry::span_id, Ne("")),
Field(&LoggingSink::Entry::is_sampled, true)),
AllOf(
Field(&LoggingSink::Entry::type,
Eq(LoggingSink::Entry::EventType::kServerTrailer)),
Field(&LoggingSink::Entry::logger,
Eq(LoggingSink::Entry::Logger::kClient)),
Field(&LoggingSink::Entry::authority, Eq(server_address_)),
Field(&LoggingSink::Entry::service_name,
Eq("grpc.testing.EchoTestService")),
Field(&LoggingSink::Entry::method_name, Eq("Echo")),
Field(&LoggingSink::Entry::payload,
Field(&LoggingSink::Entry::Payload::metadata,
UnorderedElementsAre(Pair("server-trailer-key",
"server-trailer-value")))),
Field(&LoggingSink::Entry::trace_id, Eq(expected_trace_id)),
Field(&LoggingSink::Entry::span_id, Ne("")),
Field(&LoggingSink::Entry::is_sampled, true)),
AllOf(Field(&LoggingSink::Entry::type,
Field("trace_id", &LoggingSink::Entry::trace_id,
Eq(expected_trace_id)),
Field("span_id", &LoggingSink::Entry::span_id, Ne("")),
Field("is_sampled", &LoggingSink::Entry::is_sampled, true)),
AllOf(Field("type", &LoggingSink::Entry::type,
Eq(LoggingSink::Entry::EventType::kServerTrailer)),
Field("logger", &LoggingSink::Entry::logger,
Eq(LoggingSink::Entry::Logger::kClient)),
Field("authority", &LoggingSink::Entry::authority,
Eq(server_address_)),
Field("service_name", &LoggingSink::Entry::service_name,
Eq("grpc.testing.EchoTestService")),
Field("method_name", &LoggingSink::Entry::method_name,
Eq("Echo")),
Field("payload", &LoggingSink::Entry::payload,
Field("metadata", &LoggingSink::Entry::Payload::metadata,
UnorderedElementsAre(Pair("key", "value")))),
Field("trace_id", &LoggingSink::Entry::trace_id,
Eq(expected_trace_id)),
Field("span_id", &LoggingSink::Entry::span_id, Ne("")),
Field("is_sampled", &LoggingSink::Entry::is_sampled, true)),
AllOf(Field("type", &LoggingSink::Entry::type,
Eq(LoggingSink::Entry::EventType::kClientHeader)),
Field(&LoggingSink::Entry::logger,
Field("logger", &LoggingSink::Entry::logger,
Eq(LoggingSink::Entry::Logger::kServer)),
Field(&LoggingSink::Entry::authority, Eq(server_address_)),
Field(&LoggingSink::Entry::service_name,
Field("authority", &LoggingSink::Entry::authority,
Eq(server_address_)),
Field("service_name", &LoggingSink::Entry::service_name,
Eq("grpc.testing.EchoTestService")),
Field(&LoggingSink::Entry::method_name, Eq("Echo")),
Field(&LoggingSink::Entry::payload,
Field(&LoggingSink::Entry::Payload::metadata,
UnorderedElementsAre(
Pair("client-key", "client-value")))),
Field(&LoggingSink::Entry::trace_id, Eq(expected_trace_id)),
Field(&LoggingSink::Entry::span_id, Ne("")),
Field(&LoggingSink::Entry::is_sampled, true)),
AllOf(Field(&LoggingSink::Entry::type,
Field("method_name", &LoggingSink::Entry::method_name,
Eq("Echo")),
Field("payload", &LoggingSink::Entry::payload,
Field("metadata", &LoggingSink::Entry::Payload::metadata,
UnorderedElementsAre(Pair("key", "value")))),
Field("trace_id", &LoggingSink::Entry::trace_id,
Eq(expected_trace_id)),
Field("span_id", &LoggingSink::Entry::span_id, Ne("")),
Field("is_sampled", &LoggingSink::Entry::is_sampled, true)),
AllOf(Field("type", &LoggingSink::Entry::type,
Eq(LoggingSink::Entry::EventType::kClientMessage)),
Field(&LoggingSink::Entry::logger,
Field("logger", &LoggingSink::Entry::logger,
Eq(LoggingSink::Entry::Logger::kServer)),
Field(&LoggingSink::Entry::authority, Eq(server_address_)),
Field(&LoggingSink::Entry::service_name,
Field("authority", &LoggingSink::Entry::authority,
Eq(server_address_)),
Field("service_name", &LoggingSink::Entry::service_name,
Eq("grpc.testing.EchoTestService")),
Field(&LoggingSink::Entry::method_name, Eq("Echo")),
Field(&LoggingSink::Entry::payload,
AllOf(Field(&LoggingSink::Entry::Payload::message_length,
Eq(5)),
Field(&LoggingSink::Entry::Payload::message,
Eq("\n\003foo")))),
Field(&LoggingSink::Entry::trace_id, Eq(expected_trace_id)),
Field(&LoggingSink::Entry::span_id, Ne("")),
Field(&LoggingSink::Entry::is_sampled, true)),
AllOf(Field(&LoggingSink::Entry::type,
Field("method_name", &LoggingSink::Entry::method_name,
Eq("Echo")),
Field("payload", &LoggingSink::Entry::payload,
AllOf(Field("message_length",
&LoggingSink::Entry::Payload::message_length,
Eq(12)),
Field("message",
&LoggingSink::Entry::Payload::message,
Eq("\x0a\x03\x66\x6f\x6f\x12\x05\x20\x01\x88"
"\x01\x01")))),
Field("trace_id", &LoggingSink::Entry::trace_id,
Eq(expected_trace_id)),
Field("span_id", &LoggingSink::Entry::span_id, Ne("")),
Field("is_sampled", &LoggingSink::Entry::is_sampled, true)),
AllOf(Field("type", &LoggingSink::Entry::type,
Eq(LoggingSink::Entry::EventType::kClientHalfClose)),
Field(&LoggingSink::Entry::logger,
Field("logger", &LoggingSink::Entry::logger,
Eq(LoggingSink::Entry::Logger::kServer)),
Field(&LoggingSink::Entry::authority, Eq(server_address_)),
Field(&LoggingSink::Entry::service_name,
Field("authority", &LoggingSink::Entry::authority,
Eq(server_address_)),
Field("service_name", &LoggingSink::Entry::service_name,
Eq("grpc.testing.EchoTestService")),
Field(&LoggingSink::Entry::method_name, Eq("Echo")),
Field(&LoggingSink::Entry::trace_id, Eq(expected_trace_id)),
Field(&LoggingSink::Entry::span_id, Ne("")),
Field(&LoggingSink::Entry::is_sampled, true)),
AllOf(Field(&LoggingSink::Entry::type,
Field("method_name", &LoggingSink::Entry::method_name,
Eq("Echo")),
Field("trace_id", &LoggingSink::Entry::trace_id,
Eq(expected_trace_id)),
Field("span_id", &LoggingSink::Entry::span_id, Ne("")),
Field("is_sampled", &LoggingSink::Entry::is_sampled, true)),
AllOf(Field("type", &LoggingSink::Entry::type,
Eq(LoggingSink::Entry::EventType::kServerHeader)),
Field(&LoggingSink::Entry::logger,
Field("logger", &LoggingSink::Entry::logger,
Eq(LoggingSink::Entry::Logger::kServer)),
Field(&LoggingSink::Entry::authority, Eq(server_address_)),
Field(&LoggingSink::Entry::service_name,
Field("authority", &LoggingSink::Entry::authority,
Eq(server_address_)),
Field("service_name", &LoggingSink::Entry::service_name,
Eq("grpc.testing.EchoTestService")),
Field(&LoggingSink::Entry::method_name, Eq("Echo")),
Field(&LoggingSink::Entry::payload,
Field(&LoggingSink::Entry::Payload::metadata,
UnorderedElementsAre(Pair("server-header-key",
"server-header-value")))),
Field(&LoggingSink::Entry::trace_id, Eq(expected_trace_id)),
Field(&LoggingSink::Entry::span_id, Ne("")),
Field(&LoggingSink::Entry::is_sampled, true)),
AllOf(Field(&LoggingSink::Entry::type,
Field("method_name", &LoggingSink::Entry::method_name,
Eq("Echo")),
Field("payload", &LoggingSink::Entry::payload,
Field("metadata", &LoggingSink::Entry::Payload::metadata,
UnorderedElementsAre(Pair("key", "value")))),
Field("trace_id", &LoggingSink::Entry::trace_id,
Eq(expected_trace_id)),
Field("span_id", &LoggingSink::Entry::span_id, Ne("")),
Field("is_sampled", &LoggingSink::Entry::is_sampled, true)),
AllOf(Field("type", &LoggingSink::Entry::type,
Eq(LoggingSink::Entry::EventType::kServerMessage)),
Field(&LoggingSink::Entry::logger,
Field("logger", &LoggingSink::Entry::logger,
Eq(LoggingSink::Entry::Logger::kServer)),
Field(&LoggingSink::Entry::authority, Eq(server_address_)),
Field(&LoggingSink::Entry::service_name,
Field("authority", &LoggingSink::Entry::authority,
Eq(server_address_)),
Field("service_name", &LoggingSink::Entry::service_name,
Eq("grpc.testing.EchoTestService")),
Field(&LoggingSink::Entry::method_name, Eq("Echo")),
Field(&LoggingSink::Entry::payload,
AllOf(Field(&LoggingSink::Entry::Payload::message_length,
Field("method_name", &LoggingSink::Entry::method_name,
Eq("Echo")),
Field("payload", &LoggingSink::Entry::payload,
AllOf(Field("message_length",
&LoggingSink::Entry::Payload::message_length,
Eq(5)),
Field(&LoggingSink::Entry::Payload::message,
Field("message",
&LoggingSink::Entry::Payload::message,
Eq("\n\003foo")))),
Field(&LoggingSink::Entry::trace_id, Eq(expected_trace_id)),
Field(&LoggingSink::Entry::span_id, Ne("")),
Field(&LoggingSink::Entry::is_sampled, true)),
AllOf(
Field(&LoggingSink::Entry::type,
Eq(LoggingSink::Entry::EventType::kServerTrailer)),
Field(&LoggingSink::Entry::logger,
Eq(LoggingSink::Entry::Logger::kServer)),
Field(&LoggingSink::Entry::authority, Eq(server_address_)),
Field(&LoggingSink::Entry::service_name,
Eq("grpc.testing.EchoTestService")),
Field(&LoggingSink::Entry::method_name, Eq("Echo")),
Field(&LoggingSink::Entry::payload,
Field(&LoggingSink::Entry::Payload::metadata,
UnorderedElementsAre(Pair("server-trailer-key",
"server-trailer-value")))),
Field(&LoggingSink::Entry::trace_id, Eq(expected_trace_id)),
Field(&LoggingSink::Entry::span_id, Ne("")),
Field(&LoggingSink::Entry::is_sampled, true))));
Field("trace_id", &LoggingSink::Entry::trace_id,
Eq(expected_trace_id)),
Field("span_id", &LoggingSink::Entry::span_id, Ne("")),
Field("is_sampled", &LoggingSink::Entry::is_sampled, true)),
AllOf(Field("type", &LoggingSink::Entry::type,
Eq(LoggingSink::Entry::EventType::kServerTrailer)),
Field("logger", &LoggingSink::Entry::logger,
Eq(LoggingSink::Entry::Logger::kServer)),
Field("authority", &LoggingSink::Entry::authority,
Eq(server_address_)),
Field("service_name", &LoggingSink::Entry::service_name,
Eq("grpc.testing.EchoTestService")),
Field("method_name", &LoggingSink::Entry::method_name,
Eq("Echo")),
Field("payload", &LoggingSink::Entry::payload,
Field("metadata", &LoggingSink::Entry::Payload::metadata,
UnorderedElementsAre(Pair("key", "value")))),
Field("trace_id", &LoggingSink::Entry::trace_id,
Eq(expected_trace_id)),
Field("span_id", &LoggingSink::Entry::span_id, Ne("")),
Field("is_sampled", &LoggingSink::Entry::is_sampled, true))));
}
} // namespace testing

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save