From 013e339761e1871a3dbe33f0654630e913d2da8a Mon Sep 17 00:00:00 2001 From: "Mark D. Roth" Date: Thu, 25 Feb 2021 10:55:34 -0800 Subject: [PATCH] xds_end2end_test: improve TestType API (#25557) --- test/cpp/end2end/xds_end2end_test.cc | 240 ++++++++++++++------------- 1 file changed, 127 insertions(+), 113 deletions(-) diff --git a/test/cpp/end2end/xds_end2end_test.cc b/test/cpp/end2end/xds_end2end_test.cc index 5f5c0769ef5..2649af19b4e 100644 --- a/test/cpp/end2end/xds_end2end_test.cc +++ b/test/cpp/end2end/xds_end2end_test.cc @@ -1319,23 +1319,39 @@ class LrsServiceImpl : public std::enable_shared_from_this { 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 { } 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 { } // 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 { 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 channel_creds = GetParam().use_xds_credentials() ? experimental::XdsCredentials(CreateTlsFallbackCredentials()) @@ -1852,7 +1869,7 @@ class XdsEnd2endTest : public ::testing::TestWithParam { void SetNextResolution( const std::vector& 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& 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