|
|
|
@ -1319,23 +1319,39 @@ class LrsServiceImpl : public std::enable_shared_from_this<LrsServiceImpl> { |
|
|
|
|
|
|
|
|
|
class TestType { |
|
|
|
|
public: |
|
|
|
|
TestType(bool use_xds_resolver, bool enable_load_reporting, |
|
|
|
|
bool enable_rds_testing = false, bool use_v2 = false, |
|
|
|
|
bool use_xds_credentials = false) |
|
|
|
|
: use_xds_resolver_(use_xds_resolver), |
|
|
|
|
enable_load_reporting_(enable_load_reporting), |
|
|
|
|
enable_rds_testing_(enable_rds_testing), |
|
|
|
|
use_v2_(use_v2), |
|
|
|
|
use_xds_credentials_(use_xds_credentials) {} |
|
|
|
|
|
|
|
|
|
bool use_xds_resolver() const { return use_xds_resolver_; } |
|
|
|
|
TestType& set_use_fake_resolver() { |
|
|
|
|
use_fake_resolver_ = true; |
|
|
|
|
return *this; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
TestType& set_enable_load_reporting() { |
|
|
|
|
enable_load_reporting_ = true; |
|
|
|
|
return *this; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
TestType& set_enable_rds_testing() { |
|
|
|
|
enable_rds_testing_ = true; |
|
|
|
|
return *this; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
TestType& set_use_v2() { |
|
|
|
|
use_v2_ = true; |
|
|
|
|
return *this; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
TestType& set_use_xds_credentials() { |
|
|
|
|
use_xds_credentials_ = true; |
|
|
|
|
return *this; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
bool use_fake_resolver() const { return use_fake_resolver_; } |
|
|
|
|
bool enable_load_reporting() const { return enable_load_reporting_; } |
|
|
|
|
bool enable_rds_testing() const { return enable_rds_testing_; } |
|
|
|
|
bool use_v2() const { return use_v2_; } |
|
|
|
|
bool use_xds_credentials() const { return use_xds_credentials_; } |
|
|
|
|
|
|
|
|
|
std::string AsString() const { |
|
|
|
|
std::string retval = (use_xds_resolver_ ? "XdsResolver" : "FakeResolver"); |
|
|
|
|
std::string retval = (use_fake_resolver_ ? "FakeResolver" : "XdsResolver"); |
|
|
|
|
retval += (use_v2_ ? "V2" : "V3"); |
|
|
|
|
if (enable_load_reporting_) retval += "WithLoadReporting"; |
|
|
|
|
if (enable_rds_testing_) retval += "Rds"; |
|
|
|
@ -1344,11 +1360,11 @@ class TestType { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private: |
|
|
|
|
const bool use_xds_resolver_; |
|
|
|
|
const bool enable_load_reporting_; |
|
|
|
|
const bool enable_rds_testing_; |
|
|
|
|
const bool use_v2_; |
|
|
|
|
const bool use_xds_credentials_; |
|
|
|
|
bool use_fake_resolver_ = false; |
|
|
|
|
bool enable_load_reporting_ = false; |
|
|
|
|
bool enable_rds_testing_ = false; |
|
|
|
|
bool use_v2_ = false; |
|
|
|
|
bool use_xds_credentials_ = false; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
std::string ReadFile(const char* file_path) { |
|
|
|
@ -1618,7 +1634,8 @@ class XdsEnd2endTest : public ::testing::TestWithParam<TestType> { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
const char* DefaultEdsServiceName() const { |
|
|
|
|
return GetParam().use_xds_resolver() ? kDefaultEdsServiceName : kServerName; |
|
|
|
|
return GetParam().use_fake_resolver() ? kServerName |
|
|
|
|
: kDefaultEdsServiceName; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void TearDown() override { |
|
|
|
@ -1659,7 +1676,7 @@ class XdsEnd2endTest : public ::testing::TestWithParam<TestType> { |
|
|
|
|
} |
|
|
|
|
// If the parent channel is using the fake resolver, we inject the
|
|
|
|
|
// response generator here.
|
|
|
|
|
if (!GetParam().use_xds_resolver()) { |
|
|
|
|
if (GetParam().use_fake_resolver()) { |
|
|
|
|
if (response_generator == nullptr) { |
|
|
|
|
response_generator = response_generator_.get(); |
|
|
|
|
} |
|
|
|
@ -1671,7 +1688,7 @@ class XdsEnd2endTest : public ::testing::TestWithParam<TestType> { |
|
|
|
|
logical_dns_cluster_resolver_response_generator_.get(), |
|
|
|
|
&kLogicalDnsClusterResolverResponseGeneratorVtable); |
|
|
|
|
std::string uri = absl::StrCat( |
|
|
|
|
GetParam().use_xds_resolver() ? "xds" : "fake", ":///", server_name); |
|
|
|
|
GetParam().use_fake_resolver() ? "fake" : "xds", ":///", server_name); |
|
|
|
|
std::shared_ptr<ChannelCredentials> channel_creds = |
|
|
|
|
GetParam().use_xds_credentials() |
|
|
|
|
? experimental::XdsCredentials(CreateTlsFallbackCredentials()) |
|
|
|
@ -1852,7 +1869,7 @@ class XdsEnd2endTest : public ::testing::TestWithParam<TestType> { |
|
|
|
|
void SetNextResolution( |
|
|
|
|
const std::vector<int>& ports, |
|
|
|
|
grpc_core::FakeResolverResponseGenerator* response_generator = nullptr) { |
|
|
|
|
if (GetParam().use_xds_resolver()) return; // Not used with xds resolver.
|
|
|
|
|
if (!GetParam().use_fake_resolver()) return; // Not used with xds resolver.
|
|
|
|
|
grpc_core::ExecCtx exec_ctx; |
|
|
|
|
grpc_core::Resolver::Result result; |
|
|
|
|
result.addresses = CreateAddressListFromPortList(ports); |
|
|
|
@ -2342,8 +2359,8 @@ TEST_P(BasicTest, Vanilla) { |
|
|
|
|
} |
|
|
|
|
// Check LB policy name for the channel.
|
|
|
|
|
EXPECT_EQ( |
|
|
|
|
(GetParam().use_xds_resolver() ? "xds_cluster_manager_experimental" |
|
|
|
|
: "xds_cluster_resolver_experimental"), |
|
|
|
|
(GetParam().use_fake_resolver() ? "xds_cluster_resolver_experimental" |
|
|
|
|
: "xds_cluster_manager_experimental"), |
|
|
|
|
channel_->GetLoadBalancingPolicyName()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -7911,7 +7928,7 @@ class ClientLoadReportingTest : public XdsEnd2endTest { |
|
|
|
|
|
|
|
|
|
// Tests that the load report received at the balancer is correct.
|
|
|
|
|
TEST_P(ClientLoadReportingTest, Vanilla) { |
|
|
|
|
if (!GetParam().use_xds_resolver()) { |
|
|
|
|
if (GetParam().use_fake_resolver()) { |
|
|
|
|
balancers_[0]->lrs_service()->set_cluster_names({kServerName}); |
|
|
|
|
} |
|
|
|
|
SetNextResolution({}); |
|
|
|
@ -8041,7 +8058,7 @@ TEST_P(ClientLoadReportingTest, HonorsClustersRequestedByLrsServer) { |
|
|
|
|
// Tests that if the balancer restarts, the client load report contains the
|
|
|
|
|
// stats before and after the restart correctly.
|
|
|
|
|
TEST_P(ClientLoadReportingTest, BalancerRestart) { |
|
|
|
|
if (!GetParam().use_xds_resolver()) { |
|
|
|
|
if (GetParam().use_fake_resolver()) { |
|
|
|
|
balancers_[0]->lrs_service()->set_cluster_names({kServerName}); |
|
|
|
|
} |
|
|
|
|
SetNextResolution({}); |
|
|
|
@ -8117,7 +8134,7 @@ class ClientLoadReportingWithDropTest : public XdsEnd2endTest { |
|
|
|
|
|
|
|
|
|
// Tests that the drop stats are correctly reported by client load reporting.
|
|
|
|
|
TEST_P(ClientLoadReportingWithDropTest, Vanilla) { |
|
|
|
|
if (!GetParam().use_xds_resolver()) { |
|
|
|
|
if (GetParam().use_fake_resolver()) { |
|
|
|
|
balancers_[0]->lrs_service()->set_cluster_names({kServerName}); |
|
|
|
|
} |
|
|
|
|
SetNextResolution({}); |
|
|
|
@ -8209,139 +8226,136 @@ std::string TestTypeName(const ::testing::TestParamInfo<TestType>& info) { |
|
|
|
|
return info.param.AsString(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// TestType params:
|
|
|
|
|
// - use_xds_resolver
|
|
|
|
|
// - enable_load_reporting
|
|
|
|
|
// - enable_rds_testing = false
|
|
|
|
|
// - use_v2 = false
|
|
|
|
|
// - use_xds_credentials = false
|
|
|
|
|
|
|
|
|
|
INSTANTIATE_TEST_SUITE_P(XdsTest, BasicTest, |
|
|
|
|
::testing::Values(TestType(false, true), |
|
|
|
|
TestType(false, false), |
|
|
|
|
TestType(true, false), |
|
|
|
|
TestType(true, true)), |
|
|
|
|
&TestTypeName); |
|
|
|
|
// Run with all combinations of xds/fake resolver and enabling load reporting.
|
|
|
|
|
INSTANTIATE_TEST_SUITE_P( |
|
|
|
|
XdsTest, BasicTest, |
|
|
|
|
::testing::Values( |
|
|
|
|
TestType(), TestType().set_enable_load_reporting(), |
|
|
|
|
TestType().set_use_fake_resolver(), |
|
|
|
|
TestType().set_use_fake_resolver().set_enable_load_reporting()), |
|
|
|
|
&TestTypeName); |
|
|
|
|
|
|
|
|
|
// Run with both fake resolver and xds resolver.
|
|
|
|
|
// Don't run with load reporting or v2 or RDS, since they are irrelevant to
|
|
|
|
|
// the tests.
|
|
|
|
|
INSTANTIATE_TEST_SUITE_P(XdsTest, SecureNamingTest, |
|
|
|
|
::testing::Values(TestType(false, false), |
|
|
|
|
TestType(true, false)), |
|
|
|
|
::testing::Values(TestType(), |
|
|
|
|
TestType().set_use_fake_resolver()), |
|
|
|
|
&TestTypeName); |
|
|
|
|
|
|
|
|
|
// LDS depends on XdsResolver.
|
|
|
|
|
INSTANTIATE_TEST_SUITE_P(XdsTest, LdsTest, |
|
|
|
|
::testing::Values(TestType(true, false), |
|
|
|
|
TestType(true, true)), |
|
|
|
|
INSTANTIATE_TEST_SUITE_P(XdsTest, LdsTest, ::testing::Values(TestType()), |
|
|
|
|
&TestTypeName); |
|
|
|
|
|
|
|
|
|
// LDS/RDS commmon tests depend on XdsResolver.
|
|
|
|
|
INSTANTIATE_TEST_SUITE_P(XdsTest, LdsRdsTest, |
|
|
|
|
::testing::Values(TestType(true, false), |
|
|
|
|
TestType(true, true), |
|
|
|
|
TestType(true, false, true), |
|
|
|
|
TestType(true, true, true), |
|
|
|
|
// Also test with xDS v2.
|
|
|
|
|
TestType(true, true, true, true)), |
|
|
|
|
&TestTypeName); |
|
|
|
|
INSTANTIATE_TEST_SUITE_P( |
|
|
|
|
XdsTest, LdsRdsTest, |
|
|
|
|
::testing::Values(TestType(), TestType().set_enable_rds_testing(), |
|
|
|
|
// Also test with xDS v2.
|
|
|
|
|
TestType().set_enable_rds_testing().set_use_v2()), |
|
|
|
|
&TestTypeName); |
|
|
|
|
|
|
|
|
|
// CDS depends on XdsResolver.
|
|
|
|
|
INSTANTIATE_TEST_SUITE_P(XdsTest, CdsTest, |
|
|
|
|
::testing::Values(TestType(true, false), |
|
|
|
|
TestType(true, true)), |
|
|
|
|
&TestTypeName); |
|
|
|
|
INSTANTIATE_TEST_SUITE_P( |
|
|
|
|
XdsTest, CdsTest, |
|
|
|
|
::testing::Values(TestType(), TestType().set_enable_load_reporting()), |
|
|
|
|
&TestTypeName); |
|
|
|
|
|
|
|
|
|
// CDS depends on XdsResolver.
|
|
|
|
|
// Security depends on v3.
|
|
|
|
|
// Not enabling load reporting or RDS, since those are irrelevant to these
|
|
|
|
|
// tests.
|
|
|
|
|
INSTANTIATE_TEST_SUITE_P(XdsTest, XdsSecurityTest, |
|
|
|
|
::testing::Values(TestType(true, false, false, false, |
|
|
|
|
true)), |
|
|
|
|
&TestTypeName); |
|
|
|
|
INSTANTIATE_TEST_SUITE_P( |
|
|
|
|
XdsTest, XdsSecurityTest, |
|
|
|
|
::testing::Values(TestType().set_use_xds_credentials()), &TestTypeName); |
|
|
|
|
|
|
|
|
|
// We are only testing the server here.
|
|
|
|
|
INSTANTIATE_TEST_SUITE_P(XdsTest, XdsEnabledServerTest, |
|
|
|
|
::testing::Values(TestType(true, false, false, false, |
|
|
|
|
false)), |
|
|
|
|
&TestTypeName); |
|
|
|
|
::testing::Values(TestType()), &TestTypeName); |
|
|
|
|
|
|
|
|
|
// We are only testing the server here.
|
|
|
|
|
INSTANTIATE_TEST_SUITE_P(XdsTest, XdsServerSecurityTest, |
|
|
|
|
::testing::Values(TestType(false, false, false, false, |
|
|
|
|
true)), |
|
|
|
|
::testing::Values(TestType() |
|
|
|
|
.set_use_fake_resolver() |
|
|
|
|
.set_use_xds_credentials()), |
|
|
|
|
&TestTypeName); |
|
|
|
|
|
|
|
|
|
// EDS could be tested with or without XdsResolver, but the tests would
|
|
|
|
|
// be the same either way, so we test it only with XdsResolver.
|
|
|
|
|
INSTANTIATE_TEST_SUITE_P(XdsTest, EdsTest, |
|
|
|
|
::testing::Values(TestType(true, false), |
|
|
|
|
TestType(true, true)), |
|
|
|
|
&TestTypeName); |
|
|
|
|
INSTANTIATE_TEST_SUITE_P( |
|
|
|
|
XdsTest, EdsTest, |
|
|
|
|
::testing::Values(TestType(), TestType().set_enable_load_reporting()), |
|
|
|
|
&TestTypeName); |
|
|
|
|
|
|
|
|
|
// Test initial resource timeouts for each resource type.
|
|
|
|
|
// Do this only for XdsResolver with RDS enabled, so that we can test
|
|
|
|
|
// all resource types.
|
|
|
|
|
// Run with V3 only, since the functionality is no different in V2.
|
|
|
|
|
INSTANTIATE_TEST_SUITE_P(XdsTest, TimeoutTest, |
|
|
|
|
::testing::Values(TestType(true, false, true)), |
|
|
|
|
::testing::Values(TestType().set_enable_rds_testing()), |
|
|
|
|
&TestTypeName); |
|
|
|
|
|
|
|
|
|
// XdsResolverOnlyTest depends on XdsResolver.
|
|
|
|
|
INSTANTIATE_TEST_SUITE_P(XdsTest, XdsResolverOnlyTest, |
|
|
|
|
::testing::Values(TestType(true, false), |
|
|
|
|
TestType(true, true)), |
|
|
|
|
&TestTypeName); |
|
|
|
|
INSTANTIATE_TEST_SUITE_P( |
|
|
|
|
XdsTest, XdsResolverOnlyTest, |
|
|
|
|
::testing::Values(TestType(), TestType().set_enable_load_reporting()), |
|
|
|
|
&TestTypeName); |
|
|
|
|
|
|
|
|
|
// XdsResolverLoadReprtingOnlyTest depends on XdsResolver and load reporting.
|
|
|
|
|
INSTANTIATE_TEST_SUITE_P(XdsTest, XdsResolverLoadReportingOnlyTest, |
|
|
|
|
::testing::Values(TestType(true, true)), |
|
|
|
|
&TestTypeName); |
|
|
|
|
|
|
|
|
|
INSTANTIATE_TEST_SUITE_P(XdsTest, LocalityMapTest, |
|
|
|
|
::testing::Values(TestType(false, true), |
|
|
|
|
TestType(false, false), |
|
|
|
|
TestType(true, false), |
|
|
|
|
TestType(true, true)), |
|
|
|
|
&TestTypeName); |
|
|
|
|
|
|
|
|
|
INSTANTIATE_TEST_SUITE_P(XdsTest, FailoverTest, |
|
|
|
|
::testing::Values(TestType(false, true), |
|
|
|
|
TestType(false, false), |
|
|
|
|
TestType(true, false), |
|
|
|
|
TestType(true, true)), |
|
|
|
|
&TestTypeName); |
|
|
|
|
|
|
|
|
|
INSTANTIATE_TEST_SUITE_P(XdsTest, DropTest, |
|
|
|
|
::testing::Values(TestType(false, true), |
|
|
|
|
TestType(false, false), |
|
|
|
|
TestType(true, false), |
|
|
|
|
TestType(true, true)), |
|
|
|
|
&TestTypeName); |
|
|
|
|
|
|
|
|
|
INSTANTIATE_TEST_SUITE_P(XdsTest, BalancerUpdateTest, |
|
|
|
|
::testing::Values(TestType(false, true), |
|
|
|
|
TestType(false, false), |
|
|
|
|
TestType(true, true)), |
|
|
|
|
&TestTypeName); |
|
|
|
|
INSTANTIATE_TEST_SUITE_P( |
|
|
|
|
XdsTest, XdsResolverLoadReportingOnlyTest, |
|
|
|
|
::testing::Values(TestType().set_enable_load_reporting()), &TestTypeName); |
|
|
|
|
|
|
|
|
|
INSTANTIATE_TEST_SUITE_P( |
|
|
|
|
XdsTest, LocalityMapTest, |
|
|
|
|
::testing::Values( |
|
|
|
|
TestType(), TestType().set_enable_load_reporting(), |
|
|
|
|
TestType().set_use_fake_resolver(), |
|
|
|
|
TestType().set_use_fake_resolver().set_enable_load_reporting()), |
|
|
|
|
&TestTypeName); |
|
|
|
|
|
|
|
|
|
INSTANTIATE_TEST_SUITE_P( |
|
|
|
|
XdsTest, FailoverTest, |
|
|
|
|
::testing::Values( |
|
|
|
|
TestType(), TestType().set_enable_load_reporting(), |
|
|
|
|
TestType().set_use_fake_resolver(), |
|
|
|
|
TestType().set_use_fake_resolver().set_enable_load_reporting()), |
|
|
|
|
&TestTypeName); |
|
|
|
|
|
|
|
|
|
INSTANTIATE_TEST_SUITE_P( |
|
|
|
|
XdsTest, DropTest, |
|
|
|
|
::testing::Values( |
|
|
|
|
TestType(), TestType().set_enable_load_reporting(), |
|
|
|
|
TestType().set_use_fake_resolver(), |
|
|
|
|
TestType().set_use_fake_resolver().set_enable_load_reporting()), |
|
|
|
|
&TestTypeName); |
|
|
|
|
|
|
|
|
|
INSTANTIATE_TEST_SUITE_P( |
|
|
|
|
XdsTest, BalancerUpdateTest, |
|
|
|
|
::testing::Values( |
|
|
|
|
TestType().set_use_fake_resolver(), |
|
|
|
|
TestType().set_use_fake_resolver().set_enable_load_reporting(), |
|
|
|
|
TestType().set_enable_load_reporting()), |
|
|
|
|
&TestTypeName); |
|
|
|
|
|
|
|
|
|
// Load reporting tests are not run with load reporting disabled.
|
|
|
|
|
INSTANTIATE_TEST_SUITE_P(XdsTest, ClientLoadReportingTest, |
|
|
|
|
::testing::Values(TestType(false, true), |
|
|
|
|
TestType(true, true)), |
|
|
|
|
&TestTypeName); |
|
|
|
|
INSTANTIATE_TEST_SUITE_P( |
|
|
|
|
XdsTest, ClientLoadReportingTest, |
|
|
|
|
::testing::Values( |
|
|
|
|
TestType().set_enable_load_reporting(), |
|
|
|
|
TestType().set_enable_load_reporting().set_use_fake_resolver()), |
|
|
|
|
&TestTypeName); |
|
|
|
|
|
|
|
|
|
// Load reporting tests are not run with load reporting disabled.
|
|
|
|
|
INSTANTIATE_TEST_SUITE_P(XdsTest, ClientLoadReportingWithDropTest, |
|
|
|
|
::testing::Values(TestType(false, true), |
|
|
|
|
TestType(true, true)), |
|
|
|
|
&TestTypeName); |
|
|
|
|
INSTANTIATE_TEST_SUITE_P( |
|
|
|
|
XdsTest, ClientLoadReportingWithDropTest, |
|
|
|
|
::testing::Values( |
|
|
|
|
TestType().set_enable_load_reporting(), |
|
|
|
|
TestType().set_enable_load_reporting().set_use_fake_resolver()), |
|
|
|
|
&TestTypeName); |
|
|
|
|
|
|
|
|
|
INSTANTIATE_TEST_SUITE_P(XdsTest, BootstrapContentsFromEnvVarTest, |
|
|
|
|
::testing::Values(TestType(true, false)), |
|
|
|
|
&TestTypeName); |
|
|
|
|
::testing::Values(TestType()), &TestTypeName); |
|
|
|
|
|
|
|
|
|
} // namespace
|
|
|
|
|
} // namespace testing
|
|
|
|
|