From 166d8b8f8d44a312721ddc4d042bcab2709c3009 Mon Sep 17 00:00:00 2001 From: Privacy Sandbox Team Date: Mon, 23 Sep 2024 14:24:06 -0400 Subject: [PATCH] feat: add prod_debug option to export event message Bug: 369159855 Change-Id: I0f82482f4cbfbc5a5060e1718ee1e6c01bfb36d6 GitOrigin-RevId: d1965d3a4db56452ad4367a0f23ec93e6d82789c --- src/logger/request_context_impl.h | 14 +++++++++----- src/logger/request_context_impl_prod_test.cc | 13 +++++++++++++ 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/src/logger/request_context_impl.h b/src/logger/request_context_impl.h index 90f1ee418..b9bc3317b 100644 --- a/src/logger/request_context_impl.h +++ b/src/logger/request_context_impl.h @@ -94,10 +94,11 @@ class ContextImpl final : public PSLogContext { ContextImpl( const absl::btree_map& context_map, const ConsentedDebugConfiguration& debug_config, - absl::AnyInvocable debug_info = []() { return nullptr; }) + absl::AnyInvocable debug_info = []() { return nullptr; }, + bool prod_debug = false) : consented_sink(ServerToken()), debug_response_sink_(std::move(debug_info)) { - Update(context_map, debug_config); + Update(context_map, debug_config, prod_debug); } // note: base class PSLogContext has no virtual destructor! @@ -115,17 +116,19 @@ class ContextImpl final : public PSLogContext { absl::LogSink* DebugResponseSink() override { return &debug_response_sink_; }; void Update(const absl::btree_map& new_context, - const ConsentedDebugConfiguration& debug_config) { + const ConsentedDebugConfiguration& debug_config, + bool prod_debug = false) { context_ = FormatContext(new_context); consented_sink.client_debug_token_ = debug_config.is_consented() ? debug_config.token() : ""; debug_response_sink_.should_log_ = debug_config.is_debug_info_in_response(); + prod_debug_ = prod_debug; } template void SetEventMessageField(T&& field) { if constexpr (!std::is_same_v) { - if ((is_debug_response() && !IsProd()) || is_consented()) { + if ((is_debug_response() && !IsProd()) || is_consented() || prod_debug_) { provider_.Set(std::forward(field)); } } @@ -136,7 +139,7 @@ class ContextImpl final : public PSLogContext { if (is_debug_response()) { AddEventMessage(provider_.Get(), debug_response_sink_.debug_info_); } - if (if_export_consented && is_consented()) { + if ((if_export_consented && is_consented()) || prod_debug_) { absl::StatusOr json_str = ProtoToJson(provider_.Get()); if (json_str.ok()) { logger_private->EmitLogRecord( @@ -207,6 +210,7 @@ class ContextImpl final : public PSLogContext { ConsentedSinkImpl consented_sink; DebugResponseSinkImpl debug_response_sink_; EventMessageProvider provider_; + bool prod_debug_ = false; static constexpr std::string_view kLogAttribute = "ps_tee_log_type"; }; diff --git a/src/logger/request_context_impl_prod_test.cc b/src/logger/request_context_impl_prod_test.cc index fc9162f61..6589e94c1 100644 --- a/src/logger/request_context_impl_prod_test.cc +++ b/src/logger/request_context_impl_prod_test.cc @@ -169,6 +169,19 @@ TEST_F(EventMessageTest, NotConsented) { EXPECT_THAT(ReadSs(), IsEmpty()); } +TEST_F(EventMessageTest, ProdDebug) { + em_instance_ = std::make_unique>( + absl::btree_map{}, mismatched_token_, + []() { return nullptr; }, /*prod_debug =*/true); + SetServerTokenForTestOnly(kServerToken); + CHECK(!em_instance_->is_consented()); + em_instance_->SetEventMessageField(std::string("test gen id")); + em_instance_->ExportEventMessage(/*if_export_consented=*/true); + std::string otlp_output = ReadSs(); + EXPECT_THAT(otlp_output, ContainsRegex("test gen id")); + EXPECT_THAT(otlp_output, ContainsRegex("ps_tee_log_type: event_message")); +} + TEST(FormatContext, NoContextGeneratesEmptyString) { EXPECT_THAT(FormatContext({}), IsEmpty()); }