diff options
author | 2016-09-09 14:27:12 -0700 | |
---|---|---|
committer | 2016-12-15 15:54:39 -0800 | |
commit | f9329217b1ce334a19b8720f70a17ce8f5d5db23 (patch) | |
tree | 3d62b8efd0a785a9523123da73a36c0603b4346a /test/cpp/util/proto_file_parser.cc | |
parent | 47f1f9e1ead610ccfc464bf3f6d2918867a0a212 (diff) |
Support client streaming
Diffstat (limited to 'test/cpp/util/proto_file_parser.cc')
-rw-r--r-- | test/cpp/util/proto_file_parser.cc | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/test/cpp/util/proto_file_parser.cc b/test/cpp/util/proto_file_parser.cc index bc8a6083f4..41bf88cc14 100644 --- a/test/cpp/util/proto_file_parser.cc +++ b/test/cpp/util/proto_file_parser.cc @@ -144,12 +144,18 @@ ProtoFileParser::~ProtoFileParser() {} grpc::string ProtoFileParser::GetFullMethodName(const grpc::string& method) { has_error_ = false; + + if (known_methods_.find(method) != known_methods_.end()) { + return known_methods_[method]; + } + const protobuf::MethodDescriptor* method_descriptor = nullptr; for (auto it = service_desc_list_.begin(); it != service_desc_list_.end(); it++) { const auto* service_desc = *it; for (int j = 0; j < service_desc->method_count(); j++) { const auto* method_desc = service_desc->method(j); + fprintf(stderr, "%s\n", method_desc->full_name().c_str()); if (MethodNameMatch(method_desc->full_name(), method)) { if (method_descriptor) { std::ostringstream error_stream; @@ -169,6 +175,8 @@ grpc::string ProtoFileParser::GetFullMethodName(const grpc::string& method) { return ""; } + known_methods_[method] = method_descriptor->full_name(); + return method_descriptor->full_name(); } @@ -205,6 +213,25 @@ grpc::string ProtoFileParser::GetMessageTypeFromMethod( : method_desc->output_type()->full_name(); } +bool ProtoFileParser::IsStreaming(const grpc::string& method, bool is_request) { + has_error_ = false; + + grpc::string full_method_name = GetFullMethodName(method); + if (has_error_) { + return false; + } + + const protobuf::MethodDescriptor* method_desc = + desc_pool_->FindMethodByName(full_method_name); + if (!method_desc) { + LogError("Method not found"); + return false; + } + + return is_request ? method_desc->client_streaming() + : method_desc->server_streaming(); +} + grpc::string ProtoFileParser::GetSerializedProtoFromMethod( const grpc::string& method, const grpc::string& text_format_proto, bool is_request) { |