aboutsummaryrefslogtreecommitdiffhomepage
path: root/test/cpp/util/cli_call.cc
diff options
context:
space:
mode:
authorGravatar Yang Gao <yangg@google.com>2015-06-16 00:43:25 -0700
committerGravatar Yang Gao <yangg@google.com>2015-06-16 00:43:25 -0700
commit102eccb63238f2b40e89d2ec1ed93a7771a82798 (patch)
tree08d6e3b841ba37ccf88fbf18281115bbb062d01f /test/cpp/util/cli_call.cc
parentac366f9c2e3736815c4445baa4ad4745d2b0b511 (diff)
Support sending and showing received metadata in grpc_cli
Diffstat (limited to 'test/cpp/util/cli_call.cc')
-rw-r--r--test/cpp/util/cli_call.cc24
1 files changed, 16 insertions, 8 deletions
diff --git a/test/cpp/util/cli_call.cc b/test/cpp/util/cli_call.cc
index eb67b8d314..5c2b2adb5c 100644
--- a/test/cpp/util/cli_call.cc
+++ b/test/cpp/util/cli_call.cc
@@ -52,11 +52,20 @@ namespace {
void* tag(int i) { return (void*)(gpr_intptr) i; }
} // namespace
-void CliCall::Call(std::shared_ptr<grpc::ChannelInterface> channel,
- const grpc::string& method, const grpc::string& request,
- grpc::string* response) {
+Status CliCall::Call(std::shared_ptr<grpc::ChannelInterface> channel,
+ const grpc::string& method, const grpc::string& request,
+ grpc::string* response, const MetadataContainer& metadata,
+ MetadataContainer* server_initial_metadata,
+ MetadataContainer* server_trailing_metadata) {
std::unique_ptr<grpc::GenericStub> stub(new grpc::GenericStub(channel));
grpc::ClientContext ctx;
+ if (!metadata.empty()) {
+ for (std::multimap<grpc::string, grpc::string>::const_iterator iter =
+ metadata.begin();
+ iter != metadata.end(); ++iter) {
+ ctx.AddMetadata(iter->first, iter->second);
+ }
+ }
grpc::CompletionQueue cq;
std::unique_ptr<grpc::GenericClientAsyncReaderWriter> call(
stub->Call(&ctx, method, &cq, tag(1)));
@@ -79,7 +88,7 @@ void CliCall::Call(std::shared_ptr<grpc::ChannelInterface> channel,
cq.Next(&got_tag, &ok);
if (!ok) {
std::cout << "Failed to read response." << std::endl;
- return;
+ return Status(StatusCode::INTERNAL, "Failed to read response");
}
grpc::Status status;
call->Finish(&status, tag(5));
@@ -87,7 +96,6 @@ void CliCall::Call(std::shared_ptr<grpc::ChannelInterface> channel,
GPR_ASSERT(ok);
if (status.IsOk()) {
- std::cout << "RPC finished with OK status." << std::endl;
std::vector<grpc::Slice> slices;
recv_buffer.Dump(&slices);
@@ -96,10 +104,10 @@ void CliCall::Call(std::shared_ptr<grpc::ChannelInterface> channel,
response->append(reinterpret_cast<const char*>(slices[i].begin()),
slices[i].size());
}
- } else {
- std::cout << "RPC finished with status code " << status.code()
- << " details: " << status.details() << std::endl;
}
+ *server_initial_metadata = ctx.GetServerInitialMetadata();
+ *server_trailing_metadata = ctx.GetServerTrailingMetadata();
+ return status;
}
} // namespace testing