[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 grpc {
namespace testing { 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 { class TestLoggingSink : public grpc_core::LoggingSink {
public: public:
Config FindMatch(bool /* is_client */, absl::string_view /* service */, Config FindMatch(bool /* is_client */, absl::string_view /* service */,
@ -149,7 +139,7 @@ class LoggingTest : public ::testing::Test {
void RunServerLoop() { server_->Wait(); } void RunServerLoop() { server_->Wait(); }
std::string server_address_; std::string server_address_;
MyTestServiceImpl service_; CallbackTestServiceImpl service_;
std::unique_ptr<grpc::Server> server_; std::unique_ptr<grpc::Server> server_;
std::thread server_thread_; std::thread server_thread_;

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

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