|
|
|
@ -213,13 +213,14 @@ class ClientLbEnd2endTest : public ::testing::Test { |
|
|
|
|
bool SendRpc( |
|
|
|
|
const std::unique_ptr<grpc::testing::EchoTestService::Stub>& stub, |
|
|
|
|
EchoResponse* response = nullptr, int timeout_ms = 1000, |
|
|
|
|
Status* result = nullptr) { |
|
|
|
|
Status* result = nullptr, bool wait_for_ready = false) { |
|
|
|
|
const bool local_response = (response == nullptr); |
|
|
|
|
if (local_response) response = new EchoResponse; |
|
|
|
|
EchoRequest request; |
|
|
|
|
request.set_message(kRequestMessage_); |
|
|
|
|
ClientContext context; |
|
|
|
|
context.set_deadline(grpc_timeout_milliseconds_to_deadline(timeout_ms)); |
|
|
|
|
if (wait_for_ready) context.set_wait_for_ready(true); |
|
|
|
|
Status status = stub->Echo(&context, request, response); |
|
|
|
|
if (result != nullptr) *result = status; |
|
|
|
|
if (local_response) delete response; |
|
|
|
@ -228,10 +229,11 @@ class ClientLbEnd2endTest : public ::testing::Test { |
|
|
|
|
|
|
|
|
|
void CheckRpcSendOk( |
|
|
|
|
const std::unique_ptr<grpc::testing::EchoTestService::Stub>& stub, |
|
|
|
|
const grpc_core::DebugLocation& location) { |
|
|
|
|
const grpc_core::DebugLocation& location, bool wait_for_ready = false) { |
|
|
|
|
EchoResponse response; |
|
|
|
|
Status status; |
|
|
|
|
const bool success = SendRpc(stub, &response, 2000, &status); |
|
|
|
|
const bool success = |
|
|
|
|
SendRpc(stub, &response, 2000, &status, wait_for_ready); |
|
|
|
|
ASSERT_TRUE(success) << "From " << location.file() << ":" << location.line() |
|
|
|
|
<< "\n" |
|
|
|
|
<< "Error: " << status.error_message() << " " |
|
|
|
@ -306,7 +308,7 @@ class ClientLbEnd2endTest : public ::testing::Test { |
|
|
|
|
if (ignore_failure) { |
|
|
|
|
SendRpc(stub); |
|
|
|
|
} else { |
|
|
|
|
CheckRpcSendOk(stub, location); |
|
|
|
|
CheckRpcSendOk(stub, location, true); |
|
|
|
|
} |
|
|
|
|
} while (servers_[server_idx]->service_.request_count() == 0); |
|
|
|
|
ResetCounters(); |
|
|
|
@ -518,7 +520,7 @@ TEST_F(ClientLbEnd2endTest, PickFirstUpdates) { |
|
|
|
|
do { |
|
|
|
|
channel_state = channel->GetState(true /* try to connect */); |
|
|
|
|
} while (channel_state == GRPC_CHANNEL_READY); |
|
|
|
|
GPR_ASSERT(channel_state != GRPC_CHANNEL_READY); |
|
|
|
|
ASSERT_NE(channel_state, GRPC_CHANNEL_READY); |
|
|
|
|
servers_[0]->service_.ResetCounters(); |
|
|
|
|
|
|
|
|
|
// Next update introduces servers_[1], making the channel recover.
|
|
|
|
@ -835,7 +837,7 @@ TEST_F(ClientLbEnd2endTest, RoundRobinUpdates) { |
|
|
|
|
do { |
|
|
|
|
channel_state = channel->GetState(true /* try to connect */); |
|
|
|
|
} while (channel_state == GRPC_CHANNEL_READY); |
|
|
|
|
GPR_ASSERT(channel_state != GRPC_CHANNEL_READY); |
|
|
|
|
ASSERT_NE(channel_state, GRPC_CHANNEL_READY); |
|
|
|
|
servers_[0]->service_.ResetCounters(); |
|
|
|
|
|
|
|
|
|
// Next update introduces servers_[1], making the channel recover.
|
|
|
|
@ -844,7 +846,7 @@ TEST_F(ClientLbEnd2endTest, RoundRobinUpdates) { |
|
|
|
|
SetNextResolution(ports); |
|
|
|
|
WaitForServer(stub, 1, DEBUG_LOCATION); |
|
|
|
|
channel_state = channel->GetState(false /* try to connect */); |
|
|
|
|
GPR_ASSERT(channel_state == GRPC_CHANNEL_READY); |
|
|
|
|
ASSERT_EQ(channel_state, GRPC_CHANNEL_READY); |
|
|
|
|
|
|
|
|
|
// Check LB policy name for the channel.
|
|
|
|
|
EXPECT_EQ("round_robin", channel->GetLoadBalancingPolicyName()); |
|
|
|
@ -954,7 +956,7 @@ TEST_F(ClientLbEnd2endTest, RoundRobinReresolve) { |
|
|
|
|
if (SendRpc(stub)) break; |
|
|
|
|
now = gpr_now(GPR_CLOCK_MONOTONIC); |
|
|
|
|
} |
|
|
|
|
GPR_ASSERT(gpr_time_cmp(deadline, now) > 0); |
|
|
|
|
ASSERT_GT(gpr_time_cmp(deadline, now), 0); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
TEST_F(ClientLbEnd2endTest, RoundRobinSingleReconnect) { |
|
|
|
|