Added long_connection test.

pull/16611/head
Adele Zhou 6 years ago
parent 584dd05646
commit 094dc6822c
  1. 5
      doc/interop-test-descriptions.md
  2. 8
      test/cpp/interop/client.cc
  3. 28
      test/cpp/interop/interop_client.cc
  4. 2
      test/cpp/interop/interop_client.h

@ -944,6 +944,11 @@ the experimental flag, `soak_iterations`.
This tests puts stress on several gRPC components; the resolver, the load
balancer, and the RPC hotpath.
#### long_connection
The client performs a number of large_unary RPCs over a single connection
with a fixed but configuration interval between the RPCs.
### TODO Tests
#### High priority:

@ -57,6 +57,7 @@ DEFINE_string(
"half_duplex : half-duplex streaming;\n"
"jwt_token_creds: large_unary with JWT token auth;\n"
"large_unary : single request and (large) response;\n"
"long_connection: sends large_unary rpcs over a single long connection;\n"
"oauth2_auth_token: raw oauth2 access token auth;\n"
"per_rpc_creds: raw oauth2 access token on a single rpc;\n"
"ping_pong : full-duplex streaming;\n"
@ -84,10 +85,12 @@ DEFINE_bool(do_not_abort_on_transient_failures, false,
"whether abort() is called or not. It does not control whether the "
"test is retried in case of transient failures (and currently the "
"interop tests are not retried even if this flag is set to true)");
DEFINE_int32(soak_iterations, 1000,
"number of iterations to use for the two soak tests; rpc_soak and "
"channel_soak");
DEFINE_int32(iteration_interval, 10,
"The interval in seconds between rpcs. This is used by "
"long_connection test");
using grpc::testing::CreateChannelForTestCase;
using grpc::testing::GetServiceAccountJsonKey;
@ -163,6 +166,9 @@ int main(int argc, char** argv) {
FLAGS_soak_iterations);
actions["rpc_soak"] = std::bind(&grpc::testing::InteropClient::DoRpcSoakTest,
&client, FLAGS_soak_iterations);
actions["long_connection"] =
std::bind(&grpc::testing::InteropClient::DoLongConnectionTest, &client,
FLAGS_soak_iterations, FLAGS_iteration_interval);
UpdateActions(&actions);

@ -1052,6 +1052,34 @@ bool InteropClient::DoChannelSoakTest(int32_t soak_iterations) {
return true;
}
bool InteropClient::DoLongConnectionTest(int32_t soak_iterations,
int32_t iteration_interval) {
gpr_log(GPR_DEBUG, "Sending %d RPCs...", soak_iterations);
GPR_ASSERT(soak_iterations > 0);
GPR_ASSERT(iteration_interval > 0);
SimpleRequest request;
SimpleResponse response;
int num_failures = 0;
for (int i = 0; i < soak_iterations; ++i) {
gpr_log(GPR_DEBUG, "Sending RPC number %d...", i);
if (!PerformLargeUnary(&request, &response)) {
gpr_log(GPR_ERROR, "Iteration %d failed.", i);
num_failures++;
}
gpr_sleep_until(
gpr_time_add(gpr_now(GPR_CLOCK_REALTIME),
gpr_time_from_seconds(iteration_interval, GPR_TIMESPAN)));
}
if (num_failures == 0) {
gpr_log(GPR_DEBUG, "long_connection test done.");
return true;
} else {
gpr_log(GPR_DEBUG, "long_connection test failed with %d rpc failures.",
num_failures);
return false;
}
}
bool InteropClient::DoUnimplementedService() {
gpr_log(GPR_DEBUG, "Sending a request for an unimplemented service...");

@ -76,6 +76,8 @@ class InteropClient {
// languages
bool DoChannelSoakTest(int32_t soak_iterations);
bool DoRpcSoakTest(int32_t soak_iterations);
bool DoLongConnectionTest(int32_t soak_iterations,
int32_t iteration_interval);
// Auth tests.
// username is a string containing the user email

Loading…
Cancel
Save