diff --git a/test/cpp/interop/xds_interop_server.cc b/test/cpp/interop/xds_interop_server.cc index 15fe10d141dd0..49b4a82da6fb5 100644 --- a/test/cpp/interop/xds_interop_server.cc +++ b/test/cpp/interop/xds_interop_server.cc @@ -79,12 +79,14 @@ int main(int argc, char** argv) { return 1; } grpc::EnableDefaultHealthCheckService(false); - if (absl::GetFlag(FLAGS_enable_csm_observability)) { + bool enable_csm_observability = absl::GetFlag(FLAGS_enable_csm_observability); + if (enable_csm_observability) { EnableCsmObservability(); } - grpc::testing::RunServer( - absl::GetFlag(FLAGS_secure_mode), port, maintenance_port, hostname, - absl::GetFlag(FLAGS_server_id), [](grpc::Server* /* unused */) {}); + grpc::testing::RunServer(absl::GetFlag(FLAGS_secure_mode), + enable_csm_observability, port, maintenance_port, + hostname, absl::GetFlag(FLAGS_server_id), + [](grpc::Server* /* unused */) {}); return 0; } diff --git a/test/cpp/interop/xds_interop_server_lib.cc b/test/cpp/interop/xds_interop_server_lib.cc index f8f860efb5539..8508b749f7a9f 100644 --- a/test/cpp/interop/xds_interop_server_lib.cc +++ b/test/cpp/interop/xds_interop_server_lib.cc @@ -169,15 +169,11 @@ class MaintenanceServices { grpc::health::v1::HealthCheckResponse::SERVING); } - std::unique_ptr InitializeServerBuilder(int port) { - auto builder = std::make_unique(); + void AddToServerBuilder(ServerBuilder* builder) { builder->RegisterService(&health_check_service_); builder->RegisterService(&update_health_service_); builder->RegisterService(&hook_service_); - grpc::AddAdminServices(builder.get()); - builder->AddListeningPort(absl::StrCat("0.0.0.0:", port), - grpc::InsecureServerCredentials()); - return builder; + grpc::AddAdminServices(builder); } private: @@ -227,8 +223,9 @@ absl::optional GetStatusForRpcBehaviorMetadata( return absl::nullopt; } -void RunServer(bool secure_mode, const int port, const int maintenance_port, - absl::string_view hostname, absl::string_view server_id, +void RunServer(bool secure_mode, bool enable_csm_observability, int port, + const int maintenance_port, absl::string_view hostname, + absl::string_view server_id, const std::function& server_callback) { std::unique_ptr xds_enabled_server; std::unique_ptr server; @@ -236,7 +233,6 @@ void RunServer(bool secure_mode, const int port, const int maintenance_port, grpc::reflection::InitProtoReflectionServerBuilderPlugin(); MaintenanceServices maintenance_services; - ServerBuilder builder; if (secure_mode) { XdsServerBuilder xds_builder; xds_builder.RegisterService(&service); @@ -245,13 +241,25 @@ void RunServer(bool secure_mode, const int port, const int maintenance_port, grpc::XdsServerCredentials(grpc::InsecureServerCredentials())); xds_enabled_server = xds_builder.BuildAndStart(); gpr_log(GPR_INFO, "Server starting on 0.0.0.0:%d", port); - server = maintenance_services.InitializeServerBuilder(maintenance_port) - ->BuildAndStart(); + ServerBuilder builder; + maintenance_services.AddToServerBuilder(&builder); + server = builder + .AddListeningPort(absl::StrCat("0.0.0.0:", maintenance_port), + grpc::InsecureServerCredentials()) + .BuildAndStart(); gpr_log(GPR_INFO, "Maintenance server listening on 0.0.0.0:%d", maintenance_port); } else { - auto builder = maintenance_services.InitializeServerBuilder(port); - server = builder->RegisterService(&service).BuildAndStart(); + // CSM Observability requires an xDS enabled server. + auto builder = enable_csm_observability + ? std::make_unique() + : std::make_unique(); + maintenance_services.AddToServerBuilder(builder.get()); + server = builder + ->AddListeningPort(absl::StrCat("0.0.0.0:", port), + grpc::InsecureServerCredentials()) + .RegisterService(&service) + .BuildAndStart(); gpr_log(GPR_INFO, "Server listening on 0.0.0.0:%d", port); } server_callback(server.get()); diff --git a/test/cpp/interop/xds_interop_server_lib.h b/test/cpp/interop/xds_interop_server_lib.h index 486822f2b1744..4b196d02fa985 100644 --- a/test/cpp/interop/xds_interop_server_lib.h +++ b/test/cpp/interop/xds_interop_server_lib.h @@ -30,8 +30,9 @@ namespace testing { absl::optional GetStatusForRpcBehaviorMetadata( absl::string_view header_value, absl::string_view hostname); -void RunServer(bool secure_mode, const int port, const int maintenance_port, - absl::string_view hostname, absl::string_view server_id, +void RunServer(bool secure_mode, bool enable_csm_observability, int port, + const int maintenance_port, absl::string_view hostname, + absl::string_view server_id, const std::function& server_callback); } // namespace testing diff --git a/test/cpp/interop/xds_interop_server_test.cc b/test/cpp/interop/xds_interop_server_test.cc index 27b5e39fa86ec..b6b2c3ab538b4 100644 --- a/test/cpp/interop/xds_interop_server_test.cc +++ b/test/cpp/interop/xds_interop_server_test.cc @@ -37,8 +37,9 @@ namespace { void ServerLoop(int port, grpc_core::Mutex* mutex, grpc_core::CondVar* condition, Server** server) { - RunServer(false, port, /* should not be used */ -1, "127.0.0.1", - "test_server", [&](Server* s) { + RunServer(false, /*enable_csm_observability=*/false, port, + /* should not be used */ -1, "127.0.0.1", "test_server", + [&](Server* s) { grpc_core::MutexLock lock(mutex); *server = s; condition->Signal();