Revert "[reflection] Add v1 reflection" (#34594)

Reverts grpc/grpc#34535
pull/34598/head^2
Craig Tiller 1 year ago committed by GitHub
parent 36b70504e5
commit 3b0916fc0a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 1
      BUILD
  2. 7
      CMakeLists.txt
  3. 1
      build_autogenerated.yaml
  4. 1
      grpc.gyp
  5. 8
      include/grpcpp/ext/proto_server_reflection_plugin.h
  6. 116
      src/cpp/ext/proto_server_reflection.cc
  7. 104
      src/cpp/ext/proto_server_reflection.h
  8. 30
      src/cpp/ext/proto_server_reflection_plugin.cc
  9. 80
      test/cpp/end2end/proto_server_reflection_test.cc
  10. 26
      test/cpp/util/grpc_tool_test.cc

@ -2108,7 +2108,6 @@ grpc_cc_library(
deps = [
"grpc++",
"grpc++_config_proto",
"//src/proto/grpc/reflection/v1:reflection_proto",
"//src/proto/grpc/reflection/v1alpha:reflection_proto",
],
alwayslink = 1,

7
CMakeLists.txt generated

@ -624,9 +624,6 @@ protobuf_generate_grpc_cpp_with_import_path_correction(
protobuf_generate_grpc_cpp_with_import_path_correction(
src/proto/grpc/lookup/v1/rls_config.proto src/proto/grpc/lookup/v1/rls_config.proto
)
protobuf_generate_grpc_cpp_with_import_path_correction(
src/proto/grpc/reflection/v1/reflection.proto src/proto/grpc/reflection/v1/reflection.proto
)
protobuf_generate_grpc_cpp_with_import_path_correction(
src/proto/grpc/reflection/v1alpha/reflection.proto src/proto/grpc/reflection/v1alpha/reflection.proto
)
@ -4283,10 +4280,6 @@ endif()
if(gRPC_BUILD_CODEGEN)
add_library(grpc++_reflection
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/reflection/v1/reflection.pb.cc
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/reflection/v1/reflection.grpc.pb.cc
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/reflection/v1/reflection.pb.h
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/reflection/v1/reflection.grpc.pb.h
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/reflection/v1alpha/reflection.pb.cc
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.cc
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/reflection/v1alpha/reflection.pb.h

@ -3673,7 +3673,6 @@ libs:
headers:
- src/cpp/ext/proto_server_reflection.h
src:
- src/proto/grpc/reflection/v1/reflection.proto
- src/proto/grpc/reflection/v1alpha/reflection.proto
- src/cpp/ext/proto_server_reflection.cc
- src/cpp/ext/proto_server_reflection_plugin.cc

1
grpc.gyp generated

@ -1842,7 +1842,6 @@
'grpc++',
],
'sources': [
'src/proto/grpc/reflection/v1/reflection.proto',
'src/proto/grpc/reflection/v1alpha/reflection.proto',
'src/cpp/ext/proto_server_reflection.cc',
'src/cpp/ext/proto_server_reflection_plugin.cc',

@ -19,15 +19,11 @@
#ifndef GRPCPP_EXT_PROTO_SERVER_REFLECTION_PLUGIN_H
#define GRPCPP_EXT_PROTO_SERVER_REFLECTION_PLUGIN_H
#include <memory>
#include <grpcpp/impl/server_builder_plugin.h>
#include <grpcpp/support/config.h>
namespace grpc {
class ProtoServerReflection;
class ProtoServerReflectionBackend;
class ProtoServerReflectionV1;
class ServerInitializer;
namespace reflection {
@ -43,9 +39,7 @@ class ProtoServerReflectionPlugin : public grpc::ServerBuilderPlugin {
bool has_sync_methods() const override;
private:
std::shared_ptr<grpc::ProtoServerReflectionBackend> backend_;
std::shared_ptr<grpc::ProtoServerReflection> reflection_service_v1alpha_;
std::shared_ptr<grpc::ProtoServerReflectionV1> reflection_service_v1_;
std::shared_ptr<grpc::ProtoServerReflection> reflection_service_;
};
/// Add proto reflection plugin to \a ServerBuilder.

@ -23,41 +23,58 @@
#include <grpcpp/grpcpp.h>
#include <grpcpp/support/interceptor.h>
#include <grpcpp/support/sync_stream.h>
// IWYU pragma: no_include "google/protobuf/descriptor.h"
// IWYU pragma: no_include <google/protobuf/descriptor.h>
// IWYU pragma: no_include "src/proto/grpc/reflection/v1/reflection.pb.h"
// IWYU pragma: no_include "src/proto/grpc/reflection/v1alpha/reflection.pb.h"
using grpc::reflection::v1alpha::ErrorResponse;
using grpc::reflection::v1alpha::ExtensionNumberResponse;
using grpc::reflection::v1alpha::ExtensionRequest;
using grpc::reflection::v1alpha::ListServiceResponse;
using grpc::reflection::v1alpha::ServerReflectionRequest;
using grpc::reflection::v1alpha::ServerReflectionResponse;
using grpc::reflection::v1alpha::ServiceResponse;
namespace grpc {
template <typename Request, typename Response>
Status ProtoServerReflectionBackend::ServerReflectionInfo(
ServerReaderWriter<Response, Request>* stream) const {
Request request;
Response response;
ProtoServerReflection::ProtoServerReflection()
: descriptor_pool_(protobuf::DescriptorPool::generated_pool()) {}
void ProtoServerReflection::SetServiceList(
const std::vector<std::string>* services) {
services_ = services;
}
Status ProtoServerReflection::ServerReflectionInfo(
ServerContext* context,
ServerReaderWriter<ServerReflectionResponse, ServerReflectionRequest>*
stream) {
ServerReflectionRequest request;
ServerReflectionResponse response;
Status status;
while (stream->Read(&request)) {
switch (request.message_request_case()) {
case Request::MessageRequestCase::kFileByFilename:
status = GetFileByName(request.file_by_filename(), &response);
case ServerReflectionRequest::MessageRequestCase::kFileByFilename:
status = GetFileByName(context, request.file_by_filename(), &response);
break;
case Request::MessageRequestCase::kFileContainingSymbol:
status = GetFileContainingSymbol(request.file_containing_symbol(),
&response);
case ServerReflectionRequest::MessageRequestCase::kFileContainingSymbol:
status = GetFileContainingSymbol(
context, request.file_containing_symbol(), &response);
break;
case Request::MessageRequestCase::kFileContainingExtension:
case ServerReflectionRequest::MessageRequestCase::
kFileContainingExtension:
status = GetFileContainingExtension(
&request.file_containing_extension(), &response);
context, &request.file_containing_extension(), &response);
break;
case Request::MessageRequestCase::kAllExtensionNumbersOfType:
case ServerReflectionRequest::MessageRequestCase::
kAllExtensionNumbersOfType:
status = GetAllExtensionNumbers(
request.all_extension_numbers_of_type(),
context, request.all_extension_numbers_of_type(),
response.mutable_all_extension_numbers_response());
break;
case Request::MessageRequestCase::kListServices:
status = ListService(response.mutable_list_services_response());
case ServerReflectionRequest::MessageRequestCase::kListServices:
status =
ListService(context, response.mutable_list_services_response());
break;
default:
status = Status(StatusCode::UNIMPLEMENTED, "");
@ -67,34 +84,35 @@ Status ProtoServerReflectionBackend::ServerReflectionInfo(
FillErrorResponse(status, response.mutable_error_response());
}
response.set_valid_host(request.host());
response.set_allocated_original_request(new Request(request));
response.set_allocated_original_request(
new ServerReflectionRequest(request));
stream->Write(response);
}
return Status::OK;
}
template <typename Response>
void ProtoServerReflectionBackend::FillErrorResponse(
const Status& status, Response* error_response) const {
void ProtoServerReflection::FillErrorResponse(const Status& status,
ErrorResponse* error_response) {
error_response->set_error_code(status.error_code());
error_response->set_error_message(status.error_message());
}
template <typename Response>
Status ProtoServerReflectionBackend::ListService(Response* response) const {
Status ProtoServerReflection::ListService(ServerContext* /*context*/,
ListServiceResponse* response) {
if (services_ == nullptr) {
return Status(StatusCode::NOT_FOUND, "Services not found.");
}
for (const auto& value : *services_) {
auto* service_response = response->add_service();
ServiceResponse* service_response = response->add_service();
service_response->set_name(value);
}
return Status::OK;
}
template <typename Response>
Status ProtoServerReflectionBackend::GetFileByName(const std::string& file_name,
Response* response) const {
Status ProtoServerReflection::GetFileByName(
ServerContext* /*context*/, const std::string& file_name,
ServerReflectionResponse* response) {
if (descriptor_pool_ == nullptr) {
return Status::CANCELLED;
}
@ -109,9 +127,9 @@ Status ProtoServerReflectionBackend::GetFileByName(const std::string& file_name,
return Status::OK;
}
template <typename Response>
Status ProtoServerReflectionBackend::GetFileContainingSymbol(
const std::string& symbol, Response* response) const {
Status ProtoServerReflection::GetFileContainingSymbol(
ServerContext* /*context*/, const std::string& symbol,
ServerReflectionResponse* response) {
if (descriptor_pool_ == nullptr) {
return Status::CANCELLED;
}
@ -126,9 +144,9 @@ Status ProtoServerReflectionBackend::GetFileContainingSymbol(
return Status::OK;
}
template <typename Request, typename Response>
Status ProtoServerReflectionBackend::GetFileContainingExtension(
const Request* request, Response* response) const {
Status ProtoServerReflection::GetFileContainingExtension(
ServerContext* /*context*/, const ExtensionRequest* request,
ServerReflectionResponse* response) {
if (descriptor_pool_ == nullptr) {
return Status::CANCELLED;
}
@ -150,9 +168,9 @@ Status ProtoServerReflectionBackend::GetFileContainingExtension(
return Status::OK;
}
template <typename Response>
Status ProtoServerReflectionBackend::GetAllExtensionNumbers(
const std::string& type, Response* response) const {
Status ProtoServerReflection::GetAllExtensionNumbers(
ServerContext* /*context*/, const std::string& type,
ExtensionNumberResponse* response) {
if (descriptor_pool_ == nullptr) {
return Status::CANCELLED;
}
@ -172,10 +190,10 @@ Status ProtoServerReflectionBackend::GetAllExtensionNumbers(
return Status::OK;
}
template <typename Response>
void ProtoServerReflectionBackend::FillFileDescriptorResponse(
const protobuf::FileDescriptor* file_desc, Response* response,
std::unordered_set<std::string>* seen_files) const {
void ProtoServerReflection::FillFileDescriptorResponse(
const protobuf::FileDescriptor* file_desc,
ServerReflectionResponse* response,
std::unordered_set<std::string>* seen_files) {
if (seen_files->find(file_desc->name()) != seen_files->end()) {
return;
}
@ -192,18 +210,4 @@ void ProtoServerReflectionBackend::FillFileDescriptorResponse(
}
}
Status ProtoServerReflection::ServerReflectionInfo(
ServerContext* /* context */,
ServerReaderWriter<reflection::v1alpha::ServerReflectionResponse,
reflection::v1alpha::ServerReflectionRequest>* stream) {
return backend_->ServerReflectionInfo(stream);
}
Status ProtoServerReflectionV1::ServerReflectionInfo(
ServerContext* /* context */,
ServerReaderWriter<reflection::v1::ServerReflectionResponse,
reflection::v1::ServerReflectionRequest>* stream) {
return backend_->ServerReflectionInfo(stream);
}
} // namespace grpc

@ -19,10 +19,8 @@
#ifndef GRPC_SRC_CPP_EXT_PROTO_SERVER_REFLECTION_H
#define GRPC_SRC_CPP_EXT_PROTO_SERVER_REFLECTION_H
#include <memory>
#include <string>
#include <unordered_set>
#include <utility>
#include <vector>
#include <grpcpp/grpcpp.h>
@ -31,72 +29,18 @@
#include <grpcpp/support/status.h>
#include <grpcpp/support/sync_stream.h>
#include "src/proto/grpc/reflection/v1/reflection.grpc.pb.h"
#include "src/proto/grpc/reflection/v1/reflection.pb.h"
#include "src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.h"
#include "src/proto/grpc/reflection/v1alpha/reflection.pb.h"
namespace grpc {
class ProtoServerReflectionBackend {
public:
ProtoServerReflectionBackend()
: descriptor_pool_(protobuf::DescriptorPool::generated_pool()) {}
void SetServiceList(const std::vector<std::string>* services) {
services_ = services;
}
template <typename Request, typename Response>
Status ServerReflectionInfo(
ServerReaderWriter<Response, Request>* stream) const;
private:
template <typename Response>
Status ListService(Response* response) const;
template <typename Response>
Status GetFileByName(const std::string& file_name, Response* response) const;
template <typename Response>
Status GetFileContainingSymbol(const std::string& symbol,
Response* response) const;
template <typename Request, typename Response>
Status GetFileContainingExtension(const Request* request,
Response* response) const;
template <typename Response>
Status GetAllExtensionNumbers(const std::string& type,
Response* response) const;
template <typename Response>
void FillFileDescriptorResponse(
const protobuf::FileDescriptor* file_desc, Response* response,
std::unordered_set<std::string>* seen_files) const;
template <typename Response>
void FillErrorResponse(const Status& status, Response* error_response) const;
const protobuf::DescriptorPool* descriptor_pool_;
const std::vector<string>* services_;
};
class ProtoServerReflection final
: public reflection::v1alpha::ServerReflection::Service {
public:
ProtoServerReflection()
: grpc::ProtoServerReflection(
std::make_shared<ProtoServerReflectionBackend>()) {}
explicit ProtoServerReflection(
std::shared_ptr<ProtoServerReflectionBackend> backend)
: backend_(std::move(backend)) {}
ProtoServerReflection();
// Add the full names of registered services
void SetServiceList(const std::vector<std::string>* services) {
backend_->SetServiceList(services);
}
void SetServiceList(const std::vector<std::string>* services);
// implementation of ServerReflectionInfo(stream ServerReflectionRequest) rpc
// in ServerReflection service
@ -106,26 +50,36 @@ class ProtoServerReflection final
reflection::v1alpha::ServerReflectionRequest>* stream)
override;
std::shared_ptr<ProtoServerReflectionBackend> backend_;
};
private:
Status ListService(ServerContext* context,
reflection::v1alpha::ListServiceResponse* response);
class ProtoServerReflectionV1 final
: public reflection::v1::ServerReflection::Service {
public:
explicit ProtoServerReflectionV1(
std::shared_ptr<ProtoServerReflectionBackend> backend)
: backend_(std::move(backend)) {}
Status GetFileByName(ServerContext* context, const std::string& file_name,
reflection::v1alpha::ServerReflectionResponse* response);
// implementation of ServerReflectionInfo(stream ServerReflectionRequest) rpc
// in ServerReflection service
Status ServerReflectionInfo(
ServerContext* /* context */,
ServerReaderWriter<reflection::v1::ServerReflectionResponse,
reflection::v1::ServerReflectionRequest>* stream)
override;
Status GetFileContainingSymbol(
ServerContext* context, const std::string& symbol,
reflection::v1alpha::ServerReflectionResponse* response);
private:
std::shared_ptr<ProtoServerReflectionBackend> backend_;
Status GetFileContainingExtension(
ServerContext* context,
const reflection::v1alpha::ExtensionRequest* request,
reflection::v1alpha::ServerReflectionResponse* response);
Status GetAllExtensionNumbers(
ServerContext* context, const std::string& type,
reflection::v1alpha::ExtensionNumberResponse* response);
void FillFileDescriptorResponse(
const protobuf::FileDescriptor* file_desc,
reflection::v1alpha::ServerReflectionResponse* response,
std::unordered_set<std::string>* seen_files);
void FillErrorResponse(const Status& status,
reflection::v1alpha::ErrorResponse* error_response);
const protobuf::DescriptorPool* descriptor_pool_;
const std::vector<string>* services_;
};
} // namespace grpc

@ -16,9 +16,6 @@
//
//
#include <memory>
#include <string>
#include <grpcpp/ext/proto_server_reflection_plugin.h>
#include <grpcpp/impl/server_builder_plugin.h>
#include <grpcpp/impl/server_initializer.h>
@ -30,40 +27,35 @@ namespace grpc {
namespace reflection {
ProtoServerReflectionPlugin::ProtoServerReflectionPlugin()
: backend_(std::make_shared<ProtoServerReflectionBackend>()),
reflection_service_v1alpha_(
std::make_shared<ProtoServerReflection>(backend_)),
reflection_service_v1_(
std::make_shared<ProtoServerReflectionV1>(backend_)) {}
: reflection_service_(new grpc::ProtoServerReflection()) {}
std::string ProtoServerReflectionPlugin::name() {
return "proto_server_reflection";
}
void ProtoServerReflectionPlugin::InitServer(grpc::ServerInitializer* si) {
si->RegisterService(reflection_service_v1_);
si->RegisterService(reflection_service_v1alpha_);
si->RegisterService(reflection_service_);
}
void ProtoServerReflectionPlugin::Finish(grpc::ServerInitializer* si) {
backend_->SetServiceList(si->GetServiceList());
reflection_service_->SetServiceList(si->GetServiceList());
}
void ProtoServerReflectionPlugin::ChangeArguments(const std::string& /*name*/,
void* /*value*/) {}
bool ProtoServerReflectionPlugin::has_sync_methods() const {
return (reflection_service_v1_ &&
reflection_service_v1_->has_synchronous_methods()) ||
(reflection_service_v1alpha_ &&
reflection_service_v1alpha_->has_synchronous_methods());
if (reflection_service_) {
return reflection_service_->has_synchronous_methods();
}
return false;
}
bool ProtoServerReflectionPlugin::has_async_methods() const {
return (reflection_service_v1_ &&
reflection_service_v1_->has_async_methods()) ||
(reflection_service_v1alpha_ &&
reflection_service_v1alpha_->has_async_methods());
if (reflection_service_) {
return reflection_service_->has_async_methods();
}
return false;
}
static std::unique_ptr<grpc::ServerBuilderPlugin> CreateProtoReflection() {

@ -16,12 +16,10 @@
//
//
#include <memory>
#include <vector>
#include <gmock/gmock-matchers.h>
#include <gtest/gtest.h>
#include "absl/memory/memory.h"
#include <grpc/grpc.h>
#include <grpcpp/channel.h>
#include <grpcpp/client_context.h>
@ -33,13 +31,10 @@
#include <grpcpp/server_builder.h>
#include <grpcpp/server_context.h>
#include "src/proto/grpc/reflection/v1/reflection.grpc.pb.h"
#include "src/proto/grpc/reflection/v1/reflection.pb.h"
#include "src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.h"
#include "src/proto/grpc/reflection/v1alpha/reflection.pb.h"
#include "src/proto/grpc/testing/echo.grpc.pb.h"
#include "test/core/util/port.h"
#include "test/core/util/test_config.h"
#include "test/cpp/end2end/test_service_impl.h"
#include "test/cpp/util/proto_reflection_descriptor_database.h"
namespace grpc {
@ -61,9 +56,10 @@ class ProtoServerReflectionTest : public ::testing::Test {
void ResetStub() {
string target = "dns:localhost:" + to_string(port_);
channel_ = grpc::CreateChannel(target, InsecureChannelCredentials());
stub_ = grpc::testing::EchoTestService::NewStub(channel_);
desc_db_ = std::make_unique<ProtoReflectionDescriptorDatabase>(channel_);
std::shared_ptr<Channel> channel =
grpc::CreateChannel(target, InsecureChannelCredentials());
stub_ = grpc::testing::EchoTestService::NewStub(channel);
desc_db_ = std::make_unique<ProtoReflectionDescriptorDatabase>(channel);
desc_pool_ = std::make_unique<protobuf::DescriptorPool>(desc_db_.get());
}
@ -121,18 +117,8 @@ class ProtoServerReflectionTest : public ::testing::Test {
EXPECT_EQ(desc->DebugString(), ref_desc->DebugString());
}
template <typename Response>
std::vector<std::string> ServicesFromResponse(const Response& response) {
std::vector<std::string> services;
for (const auto& service : response.list_services_response().service()) {
services.emplace_back(service.name());
}
return services;
}
protected:
std::unique_ptr<Server> server_;
std::shared_ptr<Channel> channel_;
std::unique_ptr<grpc::testing::EchoTestService::Stub> stub_;
std::unique_ptr<ProtoReflectionDescriptorDatabase> desc_db_;
std::unique_ptr<protobuf::DescriptorPool> desc_pool_;
@ -156,58 +142,6 @@ TEST_F(ProtoServerReflectionTest, CheckResponseWithLocalDescriptorPool) {
}
}
TEST_F(ProtoServerReflectionTest, V1AlphaApiInstalled) {
ResetStub();
using Service = reflection::v1alpha::ServerReflection;
using Request = reflection::v1alpha::ServerReflectionRequest;
using Response = reflection::v1alpha::ServerReflectionResponse;
Service::Stub stub(channel_);
ClientContext context;
auto reader_writer = stub.ServerReflectionInfo(&context);
Request request;
request.set_list_services("*");
reader_writer->Write(request);
Response response;
ASSERT_EQ(reader_writer->Read(&response), true);
EXPECT_THAT(ServicesFromResponse(response),
::testing::UnorderedElementsAre(
reflection::v1alpha::ServerReflection::service_full_name(),
reflection::v1::ServerReflection::service_full_name()));
request = Request::default_instance();
request.set_file_containing_symbol(Service::service_full_name());
reader_writer->WriteLast(request, WriteOptions());
response = Response::default_instance();
ASSERT_EQ(reader_writer->Read(&response), true);
EXPECT_EQ(response.file_descriptor_response().file_descriptor_proto_size(), 1)
<< response.DebugString();
}
TEST_F(ProtoServerReflectionTest, V1ApiInstalled) {
ResetStub();
using Service = reflection::v1::ServerReflection;
using Request = reflection::v1::ServerReflectionRequest;
using Response = reflection::v1::ServerReflectionResponse;
Service::Stub stub(channel_);
ClientContext context;
auto reader_writer = stub.ServerReflectionInfo(&context);
Request request;
request.set_list_services("*");
reader_writer->Write(request);
Response response;
ASSERT_TRUE(reader_writer->Read(&response));
EXPECT_THAT(ServicesFromResponse(response),
::testing::UnorderedElementsAre(
reflection::v1alpha::ServerReflection::service_full_name(),
reflection::v1::ServerReflection::service_full_name()));
request = Request::default_instance();
request.set_file_containing_symbol(Service::service_full_name());
reader_writer->WriteLast(request, WriteOptions());
response = Response::default_instance();
ASSERT_TRUE(reader_writer->Read(&response));
EXPECT_EQ(response.file_descriptor_response().file_descriptor_proto_size(), 1)
<< response.DebugString();
}
} // namespace testing
} // namespace grpc

@ -21,12 +21,10 @@
#include <chrono>
#include <sstream>
#include <gmock/gmock-matchers.h>
#include <gtest/gtest.h>
#include "absl/flags/declare.h"
#include "absl/flags/flag.h"
#include "absl/strings/str_split.h"
#include <grpc/grpc.h>
#include <grpc/support/alloc.h>
@ -386,11 +384,9 @@ TEST_F(GrpcToolTest, ListCommand) {
EXPECT_TRUE(0 == GrpcToolMainLib(ArraySize(argv), argv, TestCliCredentials(),
std::bind(PrintStream, &output_stream,
std::placeholders::_1)));
EXPECT_THAT(absl::StrSplit(output_stream.str(), "\n"),
::testing::UnorderedElementsAre(
"grpc.testing.EchoTestService",
"grpc.reflection.v1alpha.ServerReflection",
"grpc.reflection.v1.ServerReflection", ""));
EXPECT_TRUE(0 == strcmp(output_stream.str().c_str(),
"grpc.testing.EchoTestService\n"
"grpc.reflection.v1alpha.ServerReflection\n"));
ShutdownServer();
}
@ -1399,11 +1395,9 @@ TEST_F(GrpcToolTest, ListCommandOverrideSslHostName) {
0 == GrpcToolMainLib(
ArraySize(argv), argv, TestCliCredentials(true),
std::bind(PrintStream, &output_stream, std::placeholders::_1)));
EXPECT_THAT(
absl::StrSplit(output_stream.str(), '\n'),
::testing::UnorderedElementsAre(
"grpc.testing.EchoTestService", "grpc.reflection.v1.ServerReflection",
"grpc.reflection.v1alpha.ServerReflection", ""));
EXPECT_TRUE(0 == strcmp(output_stream.str().c_str(),
"grpc.testing.EchoTestService\n"
"grpc.reflection.v1alpha.ServerReflection\n"));
absl::SetFlag(&FLAGS_channel_creds_type, "");
absl::SetFlag(&FLAGS_ssl_target, "");
@ -1426,11 +1420,9 @@ TEST_F(GrpcToolTest, ConfiguringDefaultServiceConfig) {
std::bind(PrintStream, &output_stream,
std::placeholders::_1)));
absl::SetFlag(&FLAGS_default_service_config, "");
EXPECT_THAT(
absl::StrSplit(output_stream.str().c_str(), '\n'),
::testing::UnorderedElementsAre(
"grpc.testing.EchoTestService", "grpc.reflection.v1.ServerReflection",
"grpc.reflection.v1alpha.ServerReflection", ""));
EXPECT_TRUE(0 == strcmp(output_stream.str().c_str(),
"grpc.testing.EchoTestService\n"
"grpc.reflection.v1alpha.ServerReflection\n"));
ShutdownServer();
}

Loading…
Cancel
Save