reconnect_interop_client.cc
Go to the documentation of this file.
1 /*
2  *
3  * Copyright 2015 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 
19 #include <memory>
20 #include <sstream>
21 
22 #include "absl/flags/flag.h"
23 
24 #include <grpc/grpc.h>
25 #include <grpc/support/log.h>
26 #include <grpcpp/channel.h>
27 #include <grpcpp/client_context.h>
29 
30 #include "src/proto/grpc/testing/empty.pb.h"
31 #include "src/proto/grpc/testing/messages.pb.h"
32 #include "src/proto/grpc/testing/test.grpc.pb.h"
35 
36 ABSL_FLAG(int32_t, server_control_port, 0, "Server port for control rpcs.");
37 ABSL_FLAG(int32_t, server_retry_port, 0,
38  "Server port for testing reconnection.");
39 ABSL_FLAG(std::string, server_host, "localhost", "Server host to connect to");
40 // TODO(Capstan): Consider using absl::Duration
41 ABSL_FLAG(int32_t, max_reconnect_backoff_ms, 0,
42  "Maximum backoff time, or 0 for default.");
43 
45 using grpc::Channel;
49 using grpc::Status;
50 using grpc::testing::Empty;
54 using grpc::testing::ReconnectService;
55 using grpc::testing::TLS;
56 
57 int main(int argc, char** argv) {
58  grpc::testing::InitTest(&argc, &argv, true);
59  GPR_ASSERT(absl::GetFlag(FLAGS_server_control_port));
60  GPR_ASSERT(absl::GetFlag(FLAGS_server_retry_port));
61 
62  std::ostringstream server_address;
63  server_address << absl::GetFlag(FLAGS_server_host) << ':'
64  << absl::GetFlag(FLAGS_server_control_port);
65  std::unique_ptr<ReconnectService::Stub> control_stub(
66  ReconnectService::NewStub(
68  ClientContext start_context;
69  ReconnectParams reconnect_params;
70  reconnect_params.set_max_reconnect_backoff_ms(
71  absl::GetFlag(FLAGS_max_reconnect_backoff_ms));
72  Empty empty_response;
73  Status start_status =
74  control_stub->Start(&start_context, reconnect_params, &empty_response);
75  GPR_ASSERT(start_status.ok());
76 
77  gpr_log(GPR_INFO, "Starting connections with retries.");
78  server_address.str("");
79  server_address << absl::GetFlag(FLAGS_server_host) << ':'
80  << absl::GetFlag(FLAGS_server_retry_port);
81  ChannelArguments channel_args;
82  if (absl::GetFlag(FLAGS_max_reconnect_backoff_ms) > 0) {
84  absl::GetFlag(FLAGS_max_reconnect_backoff_ms));
85  }
86  std::shared_ptr<Channel> retry_channel =
87  CreateTestChannel(server_address.str(), "foo.test.google.fr", TLS, false,
88  std::shared_ptr<CallCredentials>(), channel_args);
89 
90  // About 13 retries.
91  const int kDeadlineSeconds = 540;
92  // Use any rpc to test retry.
93  std::unique_ptr<ReconnectService::Stub> retry_stub(
94  ReconnectService::NewStub(retry_channel));
95  ClientContext retry_context;
97  std::chrono::seconds(kDeadlineSeconds));
98  Status retry_status =
99  retry_stub->Start(&retry_context, reconnect_params, &empty_response);
101  gpr_log(GPR_INFO, "Done retrying, getting final data from server");
102 
103  ClientContext stop_context;
105  Status stop_status = control_stub->Stop(&stop_context, Empty(), &response);
106  GPR_ASSERT(stop_status.ok());
107  GPR_ASSERT(response.passed() == true);
108  gpr_log(GPR_INFO, "Passed");
109  return 0;
110 }
grpc::testing::InitTest
void InitTest(int *argc, char ***argv, bool remove_flags)
Definition: test_config_cc.cc:28
absl::time_internal::cctz::seconds
std::chrono::duration< std::int_fast64_t > seconds
Definition: abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h:40
GPR_INFO
#define GPR_INFO
Definition: include/grpc/impl/codegen/log.h:56
now
static double now(void)
Definition: test/core/fling/client.cc:130
log.h
grpc::Status::ok
bool ok() const
Is the status OK?
Definition: include/grpcpp/impl/codegen/status.h:126
ABSL_FLAG
ABSL_FLAG(int32_t, server_control_port, 0, "Server port for control rpcs.")
testing::internal::string
::std::string string
Definition: bloaty/third_party/protobuf/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:881
grpc::ClientContext::set_deadline
void set_deadline(const T &deadline)
Definition: grpcpp/impl/codegen/client_context.h:274
create_test_channel.h
server_address
std::string server_address("0.0.0.0:10000")
framework.rpc.grpc_channelz.Channel
Channel
Definition: grpc_channelz.py:32
GPR_ASSERT
#define GPR_ASSERT(x)
Definition: include/grpc/impl/codegen/log.h:94
channel_arguments.h
gpr_log
GPRAPI void gpr_log(const char *file, int line, gpr_log_severity severity, const char *format,...) GPR_PRINT_FORMAT_CHECK(4
grpc.h
GRPC_ARG_MAX_RECONNECT_BACKOFF_MS
#define GRPC_ARG_MAX_RECONNECT_BACKOFF_MS
Definition: grpc_types.h:261
channel.h
absl::GetFlag
ABSL_MUST_USE_RESULT T GetFlag(const absl::Flag< T > &flag)
Definition: abseil-cpp/absl/flags/flag.h:98
grpc.beta.implementations.CallCredentials
CallCredentials
Definition: implementations.py:35
messages_pb2.ReconnectParams
ReconnectParams
Definition: messages_pb2.py:646
grpc::CreateTestChannel
std::shared_ptr< Channel > CreateTestChannel(const std::string &server, const std::string &cred_type, const std::string &override_hostname, bool use_prod_roots, const std::shared_ptr< CallCredentials > &creds, const ChannelArguments &args)
Definition: create_test_channel.cc:88
Empty
Definition: abseil-cpp/absl/container/internal/compressed_tuple_test.cc:33
grpc::ClientContext
Definition: grpcpp/impl/codegen/client_context.h:195
grpc::ChannelArguments
Definition: grpcpp/support/channel_arguments.h:39
client_context.h
http2_server_health_check.server_host
server_host
Definition: http2_server_health_check.py:27
grpc::testing::INSECURE
@ INSECURE
Definition: create_test_channel.h:34
asyncio_get_stats.response
response
Definition: asyncio_get_stats.py:28
grpc::protobuf::util::Status
GRPC_CUSTOM_UTIL_STATUS Status
Definition: include/grpcpp/impl/codegen/config_protobuf.h:93
main
int main(int argc, char **argv)
Definition: reconnect_interop_client.cc:57
grpc::Status
Definition: include/grpcpp/impl/codegen/status.h:35
test_config.h
grpc::ChannelArguments::SetInt
void SetInt(const std::string &key, int value)
Set an integer argument value under key.
Definition: channel_arguments.cc:174
grpc::Status::error_code
StatusCode error_code() const
Return the instance's error code.
Definition: include/grpcpp/impl/codegen/status.h:118
grpc.StatusCode.DEADLINE_EXCEEDED
tuple DEADLINE_EXCEEDED
Definition: src/python/grpcio/grpc/__init__.py:264
int32_t
signed int int32_t
Definition: stdint-msvc2008.h:77
messages_pb2.ReconnectInfo
ReconnectInfo
Definition: messages_pb2.py:653
grpc::testing::TLS
@ TLS
Definition: create_test_channel.h:34


grpc
Author(s):
autogenerated on Fri May 16 2025 03:00:00