callback_test_service.cc
Go to the documentation of this file.
1 /*
2  *
3  * Copyright 2019 gRPC authors.
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  */
18 
20 
21 namespace grpc {
22 namespace testing {
23 namespace {
24 
26  return std::string(r.data(), r.size());
27 }
28 
30  const char* key,
31  const std::multimap<grpc::string_ref, grpc::string_ref>& metadata,
32  int default_value) {
33  if (metadata.find(key) != metadata.end()) {
34  std::istringstream iss(ToString(metadata.find(key)->second));
35  iss >> default_value;
36  }
37 
38  return default_value;
39 }
40 
42  const char* key,
43  const std::multimap<grpc::string_ref, grpc::string_ref>& metadata,
44  int default_value) {
45  return GetIntValueFromMetadataHelper(key, metadata, default_value);
46 }
47 } // namespace
48 
50  CallbackServerContext* context, const EchoRequest* /*request*/,
51  EchoResponse* response) {
52  int response_msgs_size = GetIntValueFromMetadata(
53  kServerMessageSize, context->client_metadata(), 0);
54  if (response_msgs_size > 0) {
55  response->set_message(std::string(response_msgs_size, 'a'));
56  } else {
57  response->set_message("");
58  }
59  auto* reactor = context->DefaultReactor();
60  reactor->Finish(grpc::Status::OK);
61  return reactor;
62 }
63 
66  class Reactor : public ServerBidiReactor<EchoRequest, EchoResponse> {
67  public:
68  explicit Reactor(CallbackServerContext* context) {
70  context->client_metadata(), 0);
71  StartRead(&request_);
72  }
73  void OnDone() override {
74  GPR_ASSERT(finished_);
75  delete this;
76  }
77  void OnCancel() override {}
78  void OnReadDone(bool ok) override {
79  if (!ok) {
80  // Stream is over
82  finished_ = true;
83  return;
84  }
85  if (message_size_ > 0) {
86  response_.set_message(std::string(message_size_, 'a'));
87  } else {
88  response_.set_message("");
89  }
90  StartWrite(&response_);
91  }
92  void OnWriteDone(bool ok) override {
93  if (!ok) {
94  gpr_log(GPR_ERROR, "Server write failed");
95  return;
96  }
97  StartRead(&request_);
98  }
99 
100  private:
101  EchoRequest request_;
102  EchoResponse response_;
103  int message_size_;
104  bool finished_{false};
105  };
106 
107  return new Reactor(context);
108 }
109 } // namespace testing
110 } // namespace grpc
grpc::string_ref
Definition: grpcpp/impl/codegen/string_ref.h:43
testing
Definition: aws_request_signer_test.cc:25
metadata
Definition: cq_verifier.cc:48
response_
grpc_http_response response_
Definition: google_c2p_resolver.cc:101
grpc
Definition: grpcpp/alarm.h:33
grpc::testing::CallbackStreamingTestService::BidiStream
ServerBidiReactor< EchoRequest, EchoResponse > * BidiStream(CallbackServerContext *context) override
Definition: callback_test_service.cc:65
testing::internal::string
::std::string string
Definition: bloaty/third_party/protobuf/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:881
grpc::ServerBidiReactor
ServerBidiReactor is the interface for a bidirectional streaming RPC.
Definition: impl/codegen/server_callback.h:188
GPR_ASSERT
#define GPR_ASSERT(x)
Definition: include/grpc/impl/codegen/log.h:94
gpr_log
GPRAPI void gpr_log(const char *file, int line, gpr_log_severity severity, const char *format,...) GPR_PRINT_FORMAT_CHECK(4
grpc::testing::kServerMessageSize
const char *const kServerMessageSize
Definition: callback_test_service.h:35
grpc::Status::OK
static const Status & OK
An OK pre-defined instance.
Definition: include/grpcpp/impl/codegen/status.h:113
GPR_ERROR
#define GPR_ERROR
Definition: include/grpc/impl/codegen/log.h:57
grpc::CallbackServerContext
Definition: grpcpp/impl/codegen/server_context.h:606
request_
EchoRequest request_
Definition: client_callback_end2end_test.cc:724
grpc::testing::CallbackStreamingTestService::Echo
ServerUnaryReactor * Echo(CallbackServerContext *context, const EchoRequest *request, EchoResponse *response) override
Definition: callback_test_service.cc:49
key
const char * key
Definition: hpack_parser_table.cc:164
benchmark::internal::Finish
double Finish(Counter const &c, IterationCount iterations, double cpu_time, double num_threads)
Definition: benchmark/src/counter.cc:20
grpc::testing::ToString
std::string ToString(const grpc::string_ref &r)
Definition: string_ref_helper.cc:24
fix_build_deps.r
r
Definition: fix_build_deps.py:491
asyncio_get_stats.response
response
Definition: asyncio_get_stats.py:28
grpc::testing::internal::GetIntValueFromMetadata
int GetIntValueFromMetadata(const char *key, const std::multimap< grpc::string_ref, grpc::string_ref > &metadata, int default_value)
Definition: test_service_impl.cc:101
ok
bool ok
Definition: async_end2end_test.cc:197
grpc::testing::internal::GetIntValueFromMetadataHelper
int GetIntValueFromMetadataHelper(const char *key, const std::multimap< grpc::string_ref, grpc::string_ref > &metadata, int default_value)
Definition: test_service_impl.cc:88
grpc::ServerUnaryReactor
Definition: impl/codegen/server_callback.h:699
context
grpc::ClientContext context
Definition: istio_echo_server_lib.cc:61
callback_test_service.h


grpc
Author(s):
autogenerated on Thu Mar 13 2025 02:58:43