Automated change: Fix sanity tests
diff --git a/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc b/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc index 3817e7f..41228ca 100644 --- a/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +++ b/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc
@@ -263,8 +263,7 @@ if (!child_config.ok()) { // Should never happen. absl::Status status = absl::InternalError( - absl::StrCat(cluster_name_, - ": error parsing child policy config: ", + absl::StrCat(cluster_name_, ": error parsing child policy config: ", child_config.status().message())); ReportTransientFailure(status); return status; @@ -276,10 +275,8 @@ lb_args.args = args.args; lb_args.channel_control_helper = std::make_unique<Helper>(Ref()); child_policy_ = - CoreConfiguration::Get() - .lb_policy_registry() - .CreateLoadBalancingPolicy((*child_config)->name(), - std::move(lb_args)); + CoreConfiguration::Get().lb_policy_registry().CreateLoadBalancingPolicy( + (*child_config)->name(), std::move(lb_args)); if (child_policy_ == nullptr) { // Should never happen. absl::Status status = absl::UnavailableError( @@ -390,7 +387,7 @@ if (!child_number.has_value()) { for (child_number = new_numbers.next_available_child_number; mappings.child_locality_map.find(*child_number) != - mappings.child_locality_map.end(); + mappings.child_locality_map.end(); ++(*child_number)) { } new_numbers.next_available_child_number = *child_number + 1; @@ -498,40 +495,39 @@ if (outlier_detection_update.success_rate_ejection.has_value()) { outlier_detection_config["successRateEjection"] = Json::FromObject({ {"stdevFactor", - Json::FromNumber( - outlier_detection_update.success_rate_ejection - ->stdev_factor)}, + Json::FromNumber(outlier_detection_update.success_rate_ejection + ->stdev_factor)}, {"enforcementPercentage", Json::FromNumber(outlier_detection_update.success_rate_ejection ->enforcement_percentage)}, {"minimumHosts", - Json::FromNumber( - outlier_detection_update.success_rate_ejection - ->minimum_hosts)}, + Json::FromNumber(outlier_detection_update.success_rate_ejection + ->minimum_hosts)}, {"requestVolume", - Json::FromNumber( - outlier_detection_update.success_rate_ejection - ->request_volume)}, + Json::FromNumber(outlier_detection_update.success_rate_ejection + ->request_volume)}, }); } if (outlier_detection_update.failure_percentage_ejection.has_value()) { - outlier_detection_config["failurePercentageEjection"] = Json::FromObject({ - {"threshold", - Json::FromNumber(outlier_detection_update - .failure_percentage_ejection->threshold)}, - {"enforcementPercentage", - Json::FromNumber( - outlier_detection_update.failure_percentage_ejection - ->enforcement_percentage)}, - {"minimumHosts", - Json::FromNumber(outlier_detection_update - .failure_percentage_ejection - ->minimum_hosts)}, - {"requestVolume", - Json::FromNumber(outlier_detection_update - .failure_percentage_ejection - ->request_volume)}, - }); + outlier_detection_config["failurePercentageEjection"] = + Json::FromObject({ + {"threshold", + Json::FromNumber( + outlier_detection_update.failure_percentage_ejection + ->threshold)}, + {"enforcementPercentage", + Json::FromNumber( + outlier_detection_update.failure_percentage_ejection + ->enforcement_percentage)}, + {"minimumHosts", + Json::FromNumber( + outlier_detection_update.failure_percentage_ejection + ->minimum_hosts)}, + {"requestVolume", + Json::FromNumber( + outlier_detection_update.failure_percentage_ejection + ->request_volume)}, + }); } } outlier_detection_config["childPolicy"] = @@ -566,8 +562,8 @@ })}, })}); if (GRPC_TRACE_FLAG_ENABLED(grpc_cds_lb_trace)) { - gpr_log(GPR_INFO, "[cdslb %p] generated config for child policy: %s", - this, JsonDump(json, /*indent=*/1).c_str()); + gpr_log(GPR_INFO, "[cdslb %p] generated config for child policy: %s", this, + JsonDump(json, /*indent=*/1).c_str()); } return json; } @@ -579,10 +575,9 @@ std::shared_ptr<const XdsEndpointResource> endpoints; std::vector<size_t /*child_number*/> priority_child_numbers; - ClusterEntry( - std::string cluster, - std::shared_ptr<const XdsEndpointResource> resource, - std::vector<size_t> child_numbers) + ClusterEntry(std::string cluster, + std::shared_ptr<const XdsEndpointResource> resource, + std::vector<size_t> child_numbers) : cluster_name(std::move(cluster)), endpoints(std::move(resource)), priority_child_numbers(std::move(child_numbers)) {}
diff --git a/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc b/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc index d6cc8d9..6642837 100644 --- a/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +++ b/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc
@@ -469,8 +469,7 @@ // Clean up cert provider state. if (root_certificate_provider_ != nullptr) { grpc_pollset_set_del_pollset_set( - interested_parties(), - root_certificate_provider_->interested_parties()); + interested_parties(), root_certificate_provider_->interested_parties()); root_certificate_provider_.reset(); } if (identity_certificate_provider_ != nullptr) { @@ -564,9 +563,8 @@ if (it != xds_config.clusters.end()) { if (!it->second.ok()) { // Shouldn't happen. - return absl::InternalError( - absl::StrCat("xDS config does not contain entry for cluster ", - cluster_name)); + return absl::InternalError(absl::StrCat( + "xDS config does not contain entry for cluster ", cluster_name)); } return it->second->front().cluster.get(); } @@ -580,9 +578,8 @@ if (cluster.cluster_name == cluster_name) return cluster.cluster.get(); } } - return absl::InternalError( - absl::StrCat("xDS config does not contain entry for cluster ", - cluster_name)); + return absl::InternalError(absl::StrCat( + "xDS config does not contain entry for cluster ", cluster_name)); } absl::Status XdsClusterImplLb::MaybeConfigureCertificateProviderLocked( @@ -599,10 +596,12 @@ if (!cluster_resource.ok()) return cluster_resource.status(); // Configure root cert. absl::string_view root_provider_instance_name = - (*cluster_resource)->common_tls_context.certificate_validation_context + (*cluster_resource) + ->common_tls_context.certificate_validation_context .ca_certificate_provider_instance.instance_name; absl::string_view root_provider_cert_name = - (*cluster_resource)->common_tls_context.certificate_validation_context + (*cluster_resource) + ->common_tls_context.certificate_validation_context .ca_certificate_provider_instance.certificate_name; RefCountedPtr<XdsCertificateProvider> new_root_provider; if (!root_provider_instance_name.empty()) { @@ -636,10 +635,11 @@ : root_certificate_provider_->distributor()); // Configure identity cert. absl::string_view identity_provider_instance_name = - (*cluster_resource)->common_tls_context.tls_certificate_provider_instance - .instance_name; + (*cluster_resource) + ->common_tls_context.tls_certificate_provider_instance.instance_name; absl::string_view identity_provider_cert_name = - (*cluster_resource)->common_tls_context.tls_certificate_provider_instance + (*cluster_resource) + ->common_tls_context.tls_certificate_provider_instance .certificate_name; RefCountedPtr<XdsCertificateProvider> new_identity_provider; if (!identity_provider_instance_name.empty()) { @@ -673,7 +673,8 @@ : identity_certificate_provider_->distributor()); // Configure SAN matchers. const std::vector<StringMatcher>& match_subject_alt_names = - (*cluster_resource)->common_tls_context.certificate_validation_context + (*cluster_resource) + ->common_tls_context.certificate_validation_context .match_subject_alt_names; xds_certificate_provider_->UpdateSubjectAlternativeNameMatchers( config_->cluster_name(), match_subject_alt_names);
diff --git a/src/core/ext/filters/client_channel/resolver/xds/xds_config.cc b/src/core/ext/filters/client_channel/resolver/xds/xds_config.cc index 57e28a9..2c41087 100644 --- a/src/core/ext/filters/client_channel/resolver/xds/xds_config.cc +++ b/src/core/ext/filters/client_channel/resolver/xds/xds_config.cc
@@ -113,10 +113,9 @@ RefCountedPtr<RouteConfigWatcher> self = Ref(); config_watcher_->work_serializer_->Run( [self = std::move(self)]() { - self->config_watcher_->OnResourceDoesNotExist( - absl::StrCat( - self->name_, - ": xDS route configuration resource does not exist")); + self->config_watcher_->OnResourceDoesNotExist(absl::StrCat( + self->name_, + ": xDS route configuration resource does not exist")); }, DEBUG_LOCATION); } @@ -179,7 +178,7 @@ : public XdsEndpointResourceType::WatcherInterface { public: EndpointWatcher(RefCountedPtr<XdsDependencyManager> config_watcher, - std::string name) + std::string name) : config_watcher_(std::move(config_watcher)), name_(std::move(name)) {} void OnResourceChanged( @@ -233,8 +232,8 @@ listener_resource_name_(std::move(listener_resource_name)) { if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_resolver_trace)) { gpr_log(GPR_INFO, - "[XdsDependencyManager %p] starting watch for listener %s", - this, listener_resource_name_.c_str()); + "[XdsDependencyManager %p] starting watch for listener %s", this, + listener_resource_name_.c_str()); } auto listener_watcher = MakeRefCounted<ListenerWatcher>(Ref()); listener_watcher_ = listener_watcher.get(); @@ -257,14 +256,14 @@ /*delay_unsubscription=*/false); } for (const auto& p : cluster_watchers_) { - XdsClusterResourceType::CancelWatch( - xds_client_.get(), p.first, p.second.watcher, - /*delay_unsubscription=*/false); + XdsClusterResourceType::CancelWatch(xds_client_.get(), p.first, + p.second.watcher, + /*delay_unsubscription=*/false); } for (const auto& p : endpoint_watchers_) { - XdsEndpointResourceType::CancelWatch( - xds_client_.get(), p.first, p.second.watcher, - /*delay_unsubscription=*/false); + XdsEndpointResourceType::CancelWatch(xds_client_.get(), p.first, + p.second.watcher, + /*delay_unsubscription=*/false); } xds_client_.reset(); for (auto& p : dns_resolvers_) { @@ -383,13 +382,11 @@ XdsVirtualHostListIterator(&route_config->virtual_hosts), data_plane_authority_); if (!vhost_index.has_value()) { - OnError( - route_config_name_.empty() - ? listener_resource_name_ - : route_config_name_, - absl::UnavailableError(absl::StrCat("could not find VirtualHost for ", - data_plane_authority_, - " in RouteConfiguration"))); + OnError(route_config_name_.empty() ? listener_resource_name_ + : route_config_name_, + absl::UnavailableError( + absl::StrCat("could not find VirtualHost for ", + data_plane_authority_, " in RouteConfiguration"))); return; } // Update our data. @@ -400,8 +397,7 @@ MaybeReportUpdate(); } -void XdsDependencyManager::OnError(std::string context, - absl::Status status) { +void XdsDependencyManager::OnError(std::string context, absl::Status status) { if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_resolver_trace)) { gpr_log(GPR_INFO, "[XdsDependencyManager %p] received Listener or RouteConfig " @@ -437,7 +433,7 @@ } void XdsDependencyManager::OnClusterError(const std::string& name, - absl::Status status) { + absl::Status status) { if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_resolver_trace)) { gpr_log(GPR_INFO, "[XdsDependencyManager %p] received Cluster error: %s %s", this, name.c_str(), status.ToString().c_str()); @@ -446,8 +442,8 @@ auto it = cluster_watchers_.find(name); if (it == cluster_watchers_.end()) return; if (it->second.update.value_or(nullptr) == nullptr) { - it->second.update = absl::Status( - status.code(), absl::StrCat(name, ": ", status.message())); + it->second.update = + absl::Status(status.code(), absl::StrCat(name, ": ", status.message())); } MaybeReportUpdate(); } @@ -488,9 +484,9 @@ } } if (!empty_localities.empty()) { - it->second.update.resolution_note = absl::StrCat( - "EDS resource ", name, " contains empty localities: [", - absl::StrJoin(empty_localities, "; "), "]"); + it->second.update.resolution_note = + absl::StrCat("EDS resource ", name, " contains empty localities: [", + absl::StrJoin(empty_localities, "; "), "]"); } } it->second.update.endpoints = std::move(endpoint); @@ -498,10 +494,11 @@ } void XdsDependencyManager::OnEndpointError(const std::string& name, - absl::Status status) { + absl::Status status) { if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_resolver_trace)) { - gpr_log(GPR_INFO, "[XdsDependencyManager %p] received Endpoint error: %s %s", - this, name.c_str(), status.ToString().c_str()); + gpr_log(GPR_INFO, + "[XdsDependencyManager %p] received Endpoint error: %s %s", this, + name.c_str(), status.ToString().c_str()); } if (xds_client_ == nullptr) return; auto it = endpoint_watchers_.find(name); @@ -528,10 +525,10 @@ } void XdsDependencyManager::OnDnsResult(const std::string& dns_name, - Resolver::Result result) { + Resolver::Result result) { if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_resolver_trace)) { - gpr_log(GPR_INFO, "[XdsDependencyManager %p] received DNS update: %s", - this, dns_name.c_str()); + gpr_log(GPR_INFO, "[XdsDependencyManager %p] received DNS update: %s", this, + dns_name.c_str()); } if (xds_client_ == nullptr) return; auto it = dns_resolvers_.find(dns_name); @@ -544,9 +541,9 @@ locality.endpoints = std::move(*result.addresses); it->second.update.resolution_note = std::move(result.resolution_note); } else if (result.resolution_note.empty()) { - it->second.update.resolution_note = absl::StrCat( - "DNS resolution failed for ", dns_name, ": ", - result.addresses.status().ToString()); + it->second.update.resolution_note = + absl::StrCat("DNS resolution failed for ", dns_name, ": ", + result.addresses.status().ToString()); } XdsEndpointResource::Priority priority; priority.localities.emplace(locality.name.get(), std::move(locality)); @@ -561,16 +558,13 @@ std::set<std::string> clusters; for (auto& route : current_virtual_host_->routes) { auto* route_action = - absl::get_if<XdsRouteConfigResource::Route::RouteAction>( - &route.action); + absl::get_if<XdsRouteConfigResource::Route::RouteAction>(&route.action); if (route_action == nullptr) continue; Match( route_action->action, // cluster name [&](const XdsRouteConfigResource::Route::RouteAction::ClusterName& - cluster_name) { - clusters.insert(cluster_name.cluster_name); - }, + cluster_name) { clusters.insert(cluster_name.cluster_name); }, // WeightedClusters [&](const std::vector< XdsRouteConfigResource::Route::RouteAction::ClusterWeight>& @@ -582,7 +576,8 @@ // ClusterSpecifierPlugin [&](const XdsRouteConfigResource::Route::RouteAction:: ClusterSpecifierPluginName& cluster_specifier_plugin_name) { -// FIXME: plugin needs to expose a method to get us the list of possible clusters + // FIXME: plugin needs to expose a method to get us the list of + // possible clusters }); } return clusters; @@ -590,8 +585,8 @@ absl::StatusOr<bool> XdsDependencyManager::PopulateClusterConfigList( const std::string& name, - std::vector<XdsConfig::ClusterConfig>* cluster_list, - int depth, std::set<std::string>* clusters_seen, + std::vector<XdsConfig::ClusterConfig>* cluster_list, int depth, + std::set<std::string>* clusters_seen, std::set<std::string>* eds_resources_seen) { if (depth == kMaxXdsAggregateClusterRecursionDepth) { return absl::FailedPreconditionError( @@ -606,8 +601,8 @@ auto watcher = MakeRefCounted<ClusterWatcher>(Ref(), name); if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_resolver_trace)) { gpr_log(GPR_INFO, - "[XdsDependencyManager %p] starting watch for cluster %s", - this, name.c_str()); + "[XdsDependencyManager %p] starting watch for cluster %s", this, + name.c_str()); } state.watcher = watcher.get(); XdsClusterResourceType::StartWatch(xds_client_.get(), name, @@ -659,18 +654,18 @@ // LOGICAL_DNS cluster. [&](const XdsClusterResource::LogicalDns& logical_dns) -> absl::StatusOr<bool> { -// FIXME: implement + // FIXME: implement return true; }, // Aggregate cluster. Recursively expand to child clusters. [&](const XdsClusterResource::Aggregate& aggregate) -> absl::StatusOr<bool> { bool missing_cluster = false; - for (const std::string& child_name - : aggregate.prioritized_cluster_names) { - auto result = PopulateClusterConfigList( - child_name, cluster_list, depth + 1, clusters_seen, - eds_resources_seen); + for (const std::string& child_name : + aggregate.prioritized_cluster_names) { + auto result = + PopulateClusterConfigList(child_name, cluster_list, depth + 1, + clusters_seen, eds_resources_seen); if (!result.ok()) return result; if (!*result) missing_cluster = true; } @@ -701,9 +696,9 @@ } else if (!*result) { missing_data = true; } else if (cluster_list->empty()) { - cluster_list = absl::UnavailableError(absl::StrCat( - "aggregate cluster dependency graph for ", cluster, - " has no leaf clusters")); + cluster_list = absl::UnavailableError( + absl::StrCat("aggregate cluster dependency graph for ", cluster, + " has no leaf clusters")); } } // Remove entries in cluster_watchers_ for any clusters not in clusters_seen. @@ -715,12 +710,12 @@ } if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_resolver_trace)) { gpr_log(GPR_INFO, - "[XdsDependencyManager %p] cancelling watch for cluster %s", - this, cluster_name.c_str()); + "[XdsDependencyManager %p] cancelling watch for cluster %s", this, + cluster_name.c_str()); } - XdsClusterResourceType::CancelWatch( - xds_client_.get(), cluster_name, it->second.watcher, - /*delay_unsubscription=*/false); + XdsClusterResourceType::CancelWatch(xds_client_.get(), cluster_name, + it->second.watcher, + /*delay_unsubscription=*/false); it = cluster_watchers_.erase(it); } // Remove entries in endpoint_watchers_ for any EDS resources not in @@ -737,9 +732,9 @@ "[XdsDependencyManager %p] cancelling watch for EDS resource %s", this, eds_resource_name.c_str()); } - XdsEndpointResourceType::CancelWatch( - xds_client_.get(), eds_resource_name, it->second.watcher, - /*delay_unsubscription=*/false); + XdsEndpointResourceType::CancelWatch(xds_client_.get(), eds_resource_name, + it->second.watcher, + /*delay_unsubscription=*/false); it = endpoint_watchers_.erase(it); } // If we have all the data we need, then send an update.
diff --git a/src/core/ext/filters/client_channel/resolver/xds/xds_config.h b/src/core/ext/filters/client_channel/resolver/xds/xds_config.h index 2d38ec6..bcfaf95 100644 --- a/src/core/ext/filters/client_channel/resolver/xds/xds_config.h +++ b/src/core/ext/filters/client_channel/resolver/xds/xds_config.h
@@ -22,10 +22,10 @@ #include "absl/strings/string_view.h" #include "src/core/ext/xds/xds_client_grpc.h" -#include "src/core/ext/xds/xds_listener.h" #include "src/core/ext/xds/xds_cluster.h" -#include "src/core/ext/xds/xds_route_config.h" #include "src/core/ext/xds/xds_endpoint.h" +#include "src/core/ext/xds/xds_listener.h" +#include "src/core/ext/xds/xds_route_config.h" #include "src/core/lib/gprpp/ref_counted.h" #include "src/core/lib/resolver/resolver.h" @@ -59,8 +59,8 @@ std::string resolution_note; bool operator==(const ClusterConfig& other) const { - return cluster_name == other.cluster_name && - cluster == other.cluster && endpoints == other.endpoints && + return cluster_name == other.cluster_name && cluster == other.cluster && + endpoints == other.endpoints && resolution_note == other.resolution_note; } }; @@ -78,7 +78,7 @@ public: virtual ~Watcher() = default; -// FIXME: see if we can make this const + // FIXME: see if we can make this const virtual void OnUpdate(RefCountedPtr<XdsConfig> config) = 0; // These methods are invoked when there is an error or @@ -87,11 +87,11 @@ virtual void OnResourceDoesNotExist(std::string context) = 0; }; - XdsDependencyManager( - RefCountedPtr<GrpcXdsClient> xds_client, - std::shared_ptr<WorkSerializer> work_serializer, - std::unique_ptr<Watcher> watcher, std::string data_plane_authority, - std::string listener_resource_name); + XdsDependencyManager(RefCountedPtr<GrpcXdsClient> xds_client, + std::shared_ptr<WorkSerializer> work_serializer, + std::unique_ptr<Watcher> watcher, + std::string data_plane_authority, + std::string listener_resource_name); void Orphan() override; @@ -164,8 +164,8 @@ // Returns true if all resources have been obtained. absl::StatusOr<bool> PopulateClusterConfigList( const std::string& name, - std::vector<XdsConfig::ClusterConfig>* cluster_list, - int depth, std::set<std::string>* clusters_seen, + std::vector<XdsConfig::ClusterConfig>* cluster_list, int depth, + std::set<std::string>* clusters_seen, std::set<std::string>* eds_resources_seen); // Checks whether all necessary resources have been obtained, and if
diff --git a/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc b/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc index 0174c2f..b07e15d 100644 --- a/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +++ b/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc
@@ -140,8 +140,8 @@ explicit XdsWatcher(RefCountedPtr<XdsResolver> resolver) : resolver_(std::move(resolver)) {} - void OnUpdate(RefCountedPtr<XdsDependencyManager::XdsConfig> config) - override { + void OnUpdate( + RefCountedPtr<XdsDependencyManager::XdsConfig> config) override { resolver_->OnUpdate(std::move(config)); } @@ -397,8 +397,8 @@ // invalid data. data->routes_.reserve(resolver->current_config_->virtual_host->routes.size()); for (auto& route : resolver->current_config_->virtual_host->routes) { - absl::Status status = data->AddRouteEntry(resolver, route, - default_max_stream_duration); + absl::Status status = + data->AddRouteEntry(resolver, route, default_max_stream_duration); if (!status.ok()) { return status; } @@ -544,8 +544,8 @@ weighted_clusters) { uint32_t end = 0; for (const auto& weighted_cluster : weighted_clusters) { - auto result = CreateMethodConfig( - resolver, route_entry->route, &weighted_cluster); + auto result = CreateMethodConfig(resolver, route_entry->route, + &weighted_cluster); if (!result.ok()) { return result.status(); } @@ -1038,10 +1038,9 @@ // use with ChannelArgs::SetObject(). RefCountedPtr<GrpcXdsClient> xds_client = xds_client_->Ref(DEBUG_LOCATION, "xds resolver result"); - result.args = - args_.SetObject(std::move(xds_client)) - .SetObject(config_selector) - .SetObject(current_config_); + result.args = args_.SetObject(std::move(xds_client)) + .SetObject(config_selector) + .SetObject(current_config_); result_handler_->ReportResult(std::move(result)); }
diff --git a/test/cpp/end2end/xds/xds_core_end2end_test.cc b/test/cpp/end2end/xds/xds_core_end2end_test.cc index 520f20d..6ab8094 100644 --- a/test/cpp/end2end/xds/xds_core_end2end_test.cc +++ b/test/cpp/end2end/xds/xds_core_end2end_test.cc
@@ -912,10 +912,9 @@ grpc::Status status = stub2->Echo(&context, request, &response); EXPECT_EQ(status.error_code(), StatusCode::UNAVAILABLE); EXPECT_EQ(status.error_message(), - absl::StrCat( - kNewClusterName, - ": authority \"xds.unknown.com\" not present in " - "bootstrap config")); + absl::StrCat(kNewClusterName, + ": authority \"xds.unknown.com\" not present in " + "bootstrap config")); ASSERT_EQ(GRPC_CHANNEL_TRANSIENT_FAILURE, channel2->GetState(false)); }