added status request ability to the FullDuplexCall so that cpp server can pass the node client's status_code_and_message test

pull/8234/head
Noah Eisen 9 years ago
parent c5b927abce
commit 2cef11c667
  1. 38
      test/cpp/interop/interop_server.cc

@ -82,6 +82,8 @@ const char kEchoInitialMetadataKey[] = "x-grpc-test-echo-initial";
const char kEchoTrailingBinMetadataKey[] = "x-grpc-test-echo-trailing-bin"; const char kEchoTrailingBinMetadataKey[] = "x-grpc-test-echo-trailing-bin";
const char kEchoUserAgentKey[] = "x-grpc-test-echo-useragent"; const char kEchoUserAgentKey[] = "x-grpc-test-echo-useragent";
namespace {
void MaybeEchoMetadata(ServerContext* context) { void MaybeEchoMetadata(ServerContext* context) {
const auto& client_metadata = context->client_metadata(); const auto& client_metadata = context->client_metadata();
GPR_ASSERT(client_metadata.count(kEchoInitialMetadataKey) <= 1); GPR_ASSERT(client_metadata.count(kEchoInitialMetadataKey) <= 1);
@ -145,6 +147,28 @@ bool CheckExpectedCompression(const ServerContext& context,
return true; return true;
} }
Status RequestedStatusOrOk(const SimpleRequest* request) {
if (request->has_response_status()) {
return Status(
static_cast<grpc::StatusCode>(request->response_status().code()),
request->response_status().message());
} else {
return Status::OK;
}
}
Status RequestedStatusOrOk(const StreamingOutputCallRequest* request) {
if (request->has_response_status()) {
return Status(
static_cast<grpc::StatusCode>(request->response_status().code()),
request->response_status().message());
} else {
return Status::OK;
}
}
} // anonomous namespace
class TestServiceImpl : public TestService::Service { class TestServiceImpl : public TestService::Service {
public: public:
Status EmptyCall(ServerContext* context, const grpc::testing::Empty* request, Status EmptyCall(ServerContext* context, const grpc::testing::Empty* request,
@ -179,13 +203,7 @@ class TestServiceImpl : public TestService::Service {
} }
} }
if (request->has_response_status()) { return RequestedStatusOrOk(request);
return Status(
static_cast<grpc::StatusCode>(request->response_status().code()),
request->response_status().message());
}
return Status::OK;
} }
Status StreamingOutputCall( Status StreamingOutputCall(
@ -223,7 +241,7 @@ class TestServiceImpl : public TestService::Service {
write_success = writer->Write(response, wopts); write_success = writer->Write(response, wopts);
} }
if (write_success) { if (write_success) {
return Status::OK; return RequestedStatusOrOk(request);
} else { } else {
return Status(grpc::StatusCode::INTERNAL, "Error writing response."); return Status(grpc::StatusCode::INTERNAL, "Error writing response.");
} }
@ -273,7 +291,7 @@ class TestServiceImpl : public TestService::Service {
} }
} }
if (write_success) { if (write_success) {
return Status::OK; return RequestedStatusOrOk(&request);
} else { } else {
return Status(grpc::StatusCode::INTERNAL, "Error writing response."); return Status(grpc::StatusCode::INTERNAL, "Error writing response.");
} }
@ -302,7 +320,7 @@ class TestServiceImpl : public TestService::Service {
write_success = stream->Write(response); write_success = stream->Write(response);
} }
if (write_success) { if (write_success) {
return Status::OK; return RequestedStatusOrOk(&request);
} else { } else {
return Status(grpc::StatusCode::INTERNAL, "Error writing response."); return Status(grpc::StatusCode::INTERNAL, "Error writing response.");
} }

Loading…
Cancel
Save