|
|
|
@ -61,8 +61,6 @@ |
|
|
|
|
// - Test handling of creation of faulty RR instance by having the LB return a
|
|
|
|
|
// serverlist with non-existent backends after having initially returned a
|
|
|
|
|
// valid one.
|
|
|
|
|
// - test using secure credentials and make sure we don't send call
|
|
|
|
|
// credentials to the balancer
|
|
|
|
|
//
|
|
|
|
|
// Findings from end to end testing to be covered here:
|
|
|
|
|
// - Handling of LB servers restart, including reconnection after backing-off
|
|
|
|
@ -126,12 +124,22 @@ class CountedService : public ServiceType { |
|
|
|
|
using BackendService = CountedService<TestServiceImpl>; |
|
|
|
|
using BalancerService = CountedService<LoadBalancer::Service>; |
|
|
|
|
|
|
|
|
|
const char g_kCallCredsMdKey[] = "Balancer should not ..."; |
|
|
|
|
const char g_kCallCredsMdValue[] = "... receive me"; |
|
|
|
|
|
|
|
|
|
class BackendServiceImpl : public BackendService { |
|
|
|
|
public: |
|
|
|
|
BackendServiceImpl() {} |
|
|
|
|
|
|
|
|
|
Status Echo(ServerContext* context, const EchoRequest* request, |
|
|
|
|
EchoResponse* response) override { |
|
|
|
|
// Backend should receive the call credentials metadata.
|
|
|
|
|
auto call_credentials_entry = |
|
|
|
|
context->client_metadata().find(g_kCallCredsMdKey); |
|
|
|
|
EXPECT_NE(call_credentials_entry, context->client_metadata().end()); |
|
|
|
|
if (call_credentials_entry != context->client_metadata().end()) { |
|
|
|
|
EXPECT_EQ(call_credentials_entry->second, g_kCallCredsMdValue); |
|
|
|
|
} |
|
|
|
|
IncreaseRequestCount(); |
|
|
|
|
const auto status = TestServiceImpl::Echo(context, request, response); |
|
|
|
|
IncreaseResponseCount(); |
|
|
|
@ -190,6 +198,9 @@ class BalancerServiceImpl : public BalancerService { |
|
|
|
|
shutdown_(false) {} |
|
|
|
|
|
|
|
|
|
Status BalanceLoad(ServerContext* context, Stream* stream) override { |
|
|
|
|
// Balancer shouldn't receive the call credentials metadata.
|
|
|
|
|
EXPECT_EQ(context->client_metadata().find(g_kCallCredsMdKey), |
|
|
|
|
context->client_metadata().end()); |
|
|
|
|
gpr_log(GPR_INFO, "LB[%p]: BalanceLoad", this); |
|
|
|
|
LoadBalanceRequest request; |
|
|
|
|
std::vector<ResponseDelayPair> responses_and_delays; |
|
|
|
@ -394,8 +405,15 @@ class GrpclbEnd2endTest : public ::testing::Test { |
|
|
|
|
uri << "fake:///" << kApplicationTargetName_; |
|
|
|
|
// TODO(dgq): templatize tests to run everything using both secure and
|
|
|
|
|
// insecure channel credentials.
|
|
|
|
|
std::shared_ptr<ChannelCredentials> creds(new SecureChannelCredentials( |
|
|
|
|
grpc_fake_transport_security_credentials_create())); |
|
|
|
|
grpc_channel_credentials* channel_creds = |
|
|
|
|
grpc_fake_transport_security_credentials_create(); |
|
|
|
|
grpc_call_credentials* call_creds = grpc_md_only_test_credentials_create( |
|
|
|
|
g_kCallCredsMdKey, g_kCallCredsMdValue, false); |
|
|
|
|
std::shared_ptr<ChannelCredentials> creds( |
|
|
|
|
new SecureChannelCredentials(grpc_composite_channel_credentials_create( |
|
|
|
|
channel_creds, call_creds, nullptr))); |
|
|
|
|
grpc_call_credentials_unref(call_creds); |
|
|
|
|
grpc_channel_credentials_unref(channel_creds); |
|
|
|
|
channel_ = CreateCustomChannel(uri.str(), creds, args); |
|
|
|
|
stub_ = grpc::testing::EchoTestService::NewStub(channel_); |
|
|
|
|
} |
|
|
|
|