Skip to content

Commit

Permalink
Added long_connection test.
Browse files Browse the repository at this point in the history
  • Loading branch information
adelez committed Sep 12, 2018
1 parent 584dd05 commit 094dc68
Show file tree
Hide file tree
Showing 4 changed files with 42 additions and 1 deletion.
5 changes: 5 additions & 0 deletions doc/interop-test-descriptions.md
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
8 changes: 7 additions & 1 deletion test/cpp/interop/client.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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);

Expand Down
28 changes: 28 additions & 0 deletions test/cpp/interop/interop_client.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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...");

Expand Down
2 changes: 2 additions & 0 deletions test/cpp/interop/interop_client.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit 094dc68

Please sign in to comment.