[xds] tests to wait for asynchronous metrics reports (#37005)

Reports to the metrics reporter may happen asynchronously with work serializer dispatch.

<!--

If you know who should review your pull request, please assign it to that
person, otherwise the pull request would get assigned randomly.

If your pull request is for a specific language, please add the appropriate
lang label.

-->

Closes #37005

COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/37005 from yousukseung:xds-client-tests-fix d65d00a410
PiperOrigin-RevId: 647066953
pull/37060/head
Yousuk Seung 8 months ago committed by Copybara-Service
parent 3caa0043ec
commit cda5d9c778
  1. 421
      test/core/xds/xds_client_test.cc

@ -637,6 +637,37 @@ class XdsClientTest : public ::testing::Test {
} }
const ServerFailureMap& server_failures() const { return server_failures_; } const ServerFailureMap& server_failures() const { return server_failures_; }
// Returns true if matchers return true before the timeout.
// Runs matchers once as soon as it is called and then again
// every time the metrics reporter sees an update.
bool WaitForMetricsReporterData(
::testing::Matcher<ResourceUpdateMap> resource_updates_valid_matcher,
::testing::Matcher<ResourceUpdateMap> resource_updates_invalid_matcher,
::testing::Matcher<ServerFailureMap> server_failures_matcher,
absl::Duration timeout = absl::Seconds(3),
SourceLocation location = SourceLocation()) {
const absl::Time deadline =
absl::Now() + (timeout * grpc_test_slowdown_factor());
MutexLock lock(&mu_);
while (true) {
if (::testing::Matches(resource_updates_valid_matcher)(
resource_updates_valid_) &&
::testing::Matches(resource_updates_invalid_matcher)(
resource_updates_invalid_) &&
::testing::Matches(server_failures_matcher)(server_failures_)) {
return true;
}
if (cond_.WaitWithDeadline(&mu_, deadline)) break;
}
EXPECT_THAT(resource_updates_valid_, resource_updates_valid_matcher)
<< location.file() << ":" << location.line();
EXPECT_THAT(resource_updates_invalid_, resource_updates_invalid_matcher)
<< location.file() << ":" << location.line();
EXPECT_THAT(server_failures_, server_failures_matcher)
<< location.file() << ":" << location.line();
return false;
}
private: private:
void ReportResourceUpdates(absl::string_view xds_server, void ReportResourceUpdates(absl::string_view xds_server,
absl::string_view resource_type, absl::string_view resource_type,
@ -651,17 +682,20 @@ class XdsClientTest : public ::testing::Test {
if (num_resources_invalid > 0) { if (num_resources_invalid > 0) {
resource_updates_invalid_[key] += num_resources_invalid; resource_updates_invalid_[key] += num_resources_invalid;
} }
cond_.SignalAll();
} }
void ReportServerFailure(absl::string_view xds_server) override { void ReportServerFailure(absl::string_view xds_server) override {
MutexLock lock(&mu_); MutexLock lock(&mu_);
++server_failures_[std::string(xds_server)]; ++server_failures_[std::string(xds_server)];
cond_.SignalAll();
} }
mutable Mutex mu_; mutable Mutex mu_;
ResourceUpdateMap resource_updates_valid_ ABSL_GUARDED_BY(mu_); ResourceUpdateMap resource_updates_valid_ ABSL_GUARDED_BY(mu_);
ResourceUpdateMap resource_updates_invalid_ ABSL_GUARDED_BY(mu_); ResourceUpdateMap resource_updates_invalid_ ABSL_GUARDED_BY(mu_);
ServerFailureMap server_failures_ ABSL_GUARDED_BY(mu_); ServerFailureMap server_failures_ ABSL_GUARDED_BY(mu_);
CondVar cond_;
}; };
using ResourceCounts = using ResourceCounts =
@ -930,13 +964,12 @@ TEST_F(XdsClientTest, BasicWatch) {
EXPECT_EQ(resource->name, "foo1"); EXPECT_EQ(resource->name, "foo1");
EXPECT_EQ(resource->value, 6); EXPECT_EQ(resource->value, 6);
// Check metric data. // Check metric data.
EXPECT_THAT(metrics_reporter_->resource_updates_valid(), EXPECT_TRUE(metrics_reporter_->WaitForMetricsReporterData(
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
::testing::Pair(kDefaultXdsServerUrl, ::testing::Pair(kDefaultXdsServerUrl,
XdsFooResourceType::Get()->type_url()), XdsFooResourceType::Get()->type_url()),
1))); 1)),
EXPECT_THAT(metrics_reporter_->resource_updates_invalid(), ::testing::ElementsAre(), ::testing::_));
::testing::ElementsAre());
EXPECT_THAT( EXPECT_THAT(
GetResourceCounts(), GetResourceCounts(),
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
@ -956,13 +989,12 @@ TEST_F(XdsClientTest, BasicWatch) {
CancelFooWatch(watcher.get(), "foo1"); CancelFooWatch(watcher.get(), "foo1");
EXPECT_TRUE(stream->Orphaned()); EXPECT_TRUE(stream->Orphaned());
// Check metric data. // Check metric data.
EXPECT_THAT(metrics_reporter_->resource_updates_valid(), EXPECT_TRUE(metrics_reporter_->WaitForMetricsReporterData(
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
::testing::Pair(kDefaultXdsServerUrl, ::testing::Pair(kDefaultXdsServerUrl,
XdsFooResourceType::Get()->type_url()), XdsFooResourceType::Get()->type_url()),
1))); 1)),
EXPECT_THAT(metrics_reporter_->resource_updates_invalid(), ::testing::ElementsAre(), ::testing::_));
::testing::ElementsAre());
EXPECT_THAT(GetResourceCounts(), ::testing::ElementsAre()); EXPECT_THAT(GetResourceCounts(), ::testing::ElementsAre());
EXPECT_THAT(GetServerConnections(), ::testing::ElementsAre()); EXPECT_THAT(GetServerConnections(), ::testing::ElementsAre());
} }
@ -997,13 +1029,12 @@ TEST_F(XdsClientTest, UpdateFromServer) {
EXPECT_EQ(resource->name, "foo1"); EXPECT_EQ(resource->name, "foo1");
EXPECT_EQ(resource->value, 6); EXPECT_EQ(resource->value, 6);
// Check metric data. // Check metric data.
EXPECT_THAT(metrics_reporter_->resource_updates_valid(), EXPECT_TRUE(metrics_reporter_->WaitForMetricsReporterData(
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
::testing::Pair(kDefaultXdsServerUrl, ::testing::Pair(kDefaultXdsServerUrl,
XdsFooResourceType::Get()->type_url()), XdsFooResourceType::Get()->type_url()),
1))); 1)),
EXPECT_THAT(metrics_reporter_->resource_updates_invalid(), ::testing::ElementsAre(), ::testing::_));
::testing::ElementsAre());
EXPECT_THAT( EXPECT_THAT(
GetResourceCounts(), GetResourceCounts(),
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
@ -1030,13 +1061,12 @@ TEST_F(XdsClientTest, UpdateFromServer) {
EXPECT_EQ(resource->name, "foo1"); EXPECT_EQ(resource->name, "foo1");
EXPECT_EQ(resource->value, 9); EXPECT_EQ(resource->value, 9);
// Check metric data. // Check metric data.
EXPECT_THAT(metrics_reporter_->resource_updates_valid(), EXPECT_TRUE(metrics_reporter_->WaitForMetricsReporterData(
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
::testing::Pair(kDefaultXdsServerUrl, ::testing::Pair(kDefaultXdsServerUrl,
XdsFooResourceType::Get()->type_url()), XdsFooResourceType::Get()->type_url()),
2))); 2)),
EXPECT_THAT(metrics_reporter_->resource_updates_invalid(), ::testing::ElementsAre(), ::testing::_));
::testing::ElementsAre());
EXPECT_THAT( EXPECT_THAT(
GetResourceCounts(), GetResourceCounts(),
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
@ -1085,13 +1115,12 @@ TEST_F(XdsClientTest, MultipleWatchersForSameResource) {
EXPECT_EQ(resource->name, "foo1"); EXPECT_EQ(resource->name, "foo1");
EXPECT_EQ(resource->value, 6); EXPECT_EQ(resource->value, 6);
// Check metric data. // Check metric data.
EXPECT_THAT(metrics_reporter_->resource_updates_valid(), EXPECT_TRUE(metrics_reporter_->WaitForMetricsReporterData(
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
::testing::Pair(kDefaultXdsServerUrl, ::testing::Pair(kDefaultXdsServerUrl,
XdsFooResourceType::Get()->type_url()), XdsFooResourceType::Get()->type_url()),
1))); 1)),
EXPECT_THAT(metrics_reporter_->resource_updates_invalid(), ::testing::ElementsAre(), ::testing::_));
::testing::ElementsAre());
EXPECT_THAT( EXPECT_THAT(
GetResourceCounts(), GetResourceCounts(),
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
@ -1132,13 +1161,12 @@ TEST_F(XdsClientTest, MultipleWatchersForSameResource) {
EXPECT_EQ(resource->name, "foo1"); EXPECT_EQ(resource->name, "foo1");
EXPECT_EQ(resource->value, 9); EXPECT_EQ(resource->value, 9);
// Check metric data. // Check metric data.
EXPECT_THAT(metrics_reporter_->resource_updates_valid(), EXPECT_TRUE(metrics_reporter_->WaitForMetricsReporterData(
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
::testing::Pair(kDefaultXdsServerUrl, ::testing::Pair(kDefaultXdsServerUrl,
XdsFooResourceType::Get()->type_url()), XdsFooResourceType::Get()->type_url()),
2))); 2)),
EXPECT_THAT(metrics_reporter_->resource_updates_invalid(), ::testing::ElementsAre(), ::testing::_));
::testing::ElementsAre());
EXPECT_THAT( EXPECT_THAT(
GetResourceCounts(), GetResourceCounts(),
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
@ -1202,13 +1230,12 @@ TEST_F(XdsClientTest, SubscribeToMultipleResources) {
EXPECT_EQ(resource->name, "foo1"); EXPECT_EQ(resource->name, "foo1");
EXPECT_EQ(resource->value, 6); EXPECT_EQ(resource->value, 6);
// Check metric data. // Check metric data.
EXPECT_THAT(metrics_reporter_->resource_updates_valid(), EXPECT_TRUE(metrics_reporter_->WaitForMetricsReporterData(
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
::testing::Pair(kDefaultXdsServerUrl, ::testing::Pair(kDefaultXdsServerUrl,
XdsFooResourceType::Get()->type_url()), XdsFooResourceType::Get()->type_url()),
1))); 1)),
EXPECT_THAT(metrics_reporter_->resource_updates_invalid(), ::testing::ElementsAre(), ::testing::_));
::testing::ElementsAre());
EXPECT_THAT( EXPECT_THAT(
GetResourceCounts(), GetResourceCounts(),
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
@ -1257,13 +1284,12 @@ TEST_F(XdsClientTest, SubscribeToMultipleResources) {
EXPECT_EQ(resource->name, "foo2"); EXPECT_EQ(resource->name, "foo2");
EXPECT_EQ(resource->value, 7); EXPECT_EQ(resource->value, 7);
// Check metric data. // Check metric data.
EXPECT_THAT(metrics_reporter_->resource_updates_valid(), EXPECT_TRUE(metrics_reporter_->WaitForMetricsReporterData(
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
::testing::Pair(kDefaultXdsServerUrl, ::testing::Pair(kDefaultXdsServerUrl,
XdsFooResourceType::Get()->type_url()), XdsFooResourceType::Get()->type_url()),
2))); 2)),
EXPECT_THAT(metrics_reporter_->resource_updates_invalid(), ::testing::ElementsAre(), ::testing::_));
::testing::ElementsAre());
EXPECT_THAT( EXPECT_THAT(
GetResourceCounts(), GetResourceCounts(),
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
@ -1355,13 +1381,12 @@ TEST_F(XdsClientTest, UpdateContainsOnlyChangedResource) {
EXPECT_EQ(resource->name, "foo2"); EXPECT_EQ(resource->name, "foo2");
EXPECT_EQ(resource->value, 7); EXPECT_EQ(resource->value, 7);
// Check metric data. // Check metric data.
EXPECT_THAT(metrics_reporter_->resource_updates_valid(), EXPECT_TRUE(metrics_reporter_->WaitForMetricsReporterData(
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
::testing::Pair(kDefaultXdsServerUrl, ::testing::Pair(kDefaultXdsServerUrl,
XdsFooResourceType::Get()->type_url()), XdsFooResourceType::Get()->type_url()),
2))); 2)),
EXPECT_THAT(metrics_reporter_->resource_updates_invalid(), ::testing::ElementsAre(), ::testing::_));
::testing::ElementsAre());
EXPECT_THAT( EXPECT_THAT(
GetResourceCounts(), GetResourceCounts(),
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
@ -1388,13 +1413,12 @@ TEST_F(XdsClientTest, UpdateContainsOnlyChangedResource) {
EXPECT_EQ(resource->name, "foo1"); EXPECT_EQ(resource->name, "foo1");
EXPECT_EQ(resource->value, 9); EXPECT_EQ(resource->value, 9);
// Check metric data. // Check metric data.
EXPECT_THAT(metrics_reporter_->resource_updates_valid(), EXPECT_TRUE(metrics_reporter_->WaitForMetricsReporterData(
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
::testing::Pair(kDefaultXdsServerUrl, ::testing::Pair(kDefaultXdsServerUrl,
XdsFooResourceType::Get()->type_url()), XdsFooResourceType::Get()->type_url()),
3))); 3)),
EXPECT_THAT(metrics_reporter_->resource_updates_invalid(), ::testing::ElementsAre(), ::testing::_));
::testing::ElementsAre());
EXPECT_THAT( EXPECT_THAT(
GetResourceCounts(), GetResourceCounts(),
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
@ -1466,13 +1490,13 @@ TEST_F(XdsClientTest, ResourceValidationFailure) {
"[field:value error:is not a number] (node ID:xds_client_test)") "[field:value error:is not a number] (node ID:xds_client_test)")
<< *error; << *error;
// Check metric data. // Check metric data.
EXPECT_THAT(metrics_reporter_->resource_updates_valid(), EXPECT_TRUE(metrics_reporter_->WaitForMetricsReporterData(
::testing::ElementsAre()); ::testing::ElementsAre(),
EXPECT_THAT(metrics_reporter_->resource_updates_invalid(),
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
::testing::Pair(kDefaultXdsServerUrl, ::testing::Pair(kDefaultXdsServerUrl,
XdsFooResourceType::Get()->type_url()), XdsFooResourceType::Get()->type_url()),
1))); 1)),
::testing::_));
EXPECT_THAT(GetResourceCounts(), EXPECT_THAT(GetResourceCounts(),
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
ResourceCountLabelsEq(XdsClient::kOldStyleAuthority, ResourceCountLabelsEq(XdsClient::kOldStyleAuthority,
@ -1519,16 +1543,16 @@ TEST_F(XdsClientTest, ResourceValidationFailure) {
EXPECT_EQ(resource->name, "foo1"); EXPECT_EQ(resource->name, "foo1");
EXPECT_EQ(resource->value, 9); EXPECT_EQ(resource->value, 9);
// Check metric data. // Check metric data.
EXPECT_THAT(metrics_reporter_->resource_updates_valid(), EXPECT_TRUE(metrics_reporter_->WaitForMetricsReporterData(
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
::testing::Pair(kDefaultXdsServerUrl, ::testing::Pair(kDefaultXdsServerUrl,
XdsFooResourceType::Get()->type_url()), XdsFooResourceType::Get()->type_url()),
1))); 1)),
EXPECT_THAT(metrics_reporter_->resource_updates_invalid(),
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
::testing::Pair(kDefaultXdsServerUrl, ::testing::Pair(kDefaultXdsServerUrl,
XdsFooResourceType::Get()->type_url()), XdsFooResourceType::Get()->type_url()),
1))); 1)),
::testing::_));
EXPECT_THAT( EXPECT_THAT(
GetResourceCounts(), GetResourceCounts(),
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
@ -1579,10 +1603,8 @@ TEST_F(XdsClientTest, ResourceValidationFailureMultipleResources) {
// Before the server responds, add a watch for another resource. // Before the server responds, add a watch for another resource.
auto watcher2 = StartFooWatch("foo2"); auto watcher2 = StartFooWatch("foo2");
// Check metric data. // Check metric data.
EXPECT_THAT(metrics_reporter_->resource_updates_valid(), EXPECT_TRUE(metrics_reporter_->WaitForMetricsReporterData(
::testing::ElementsAre()); ::testing::ElementsAre(), ::testing::ElementsAre(), ::testing::_));
EXPECT_THAT(metrics_reporter_->resource_updates_invalid(),
::testing::ElementsAre());
EXPECT_THAT(GetResourceCounts(), EXPECT_THAT(GetResourceCounts(),
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
ResourceCountLabelsEq(XdsClient::kOldStyleAuthority, ResourceCountLabelsEq(XdsClient::kOldStyleAuthority,
@ -1599,10 +1621,8 @@ TEST_F(XdsClientTest, ResourceValidationFailureMultipleResources) {
// Add a watch for a third resource. // Add a watch for a third resource.
auto watcher3 = StartFooWatch("foo3"); auto watcher3 = StartFooWatch("foo3");
// Check metric data. // Check metric data.
EXPECT_THAT(metrics_reporter_->resource_updates_valid(), EXPECT_TRUE(metrics_reporter_->WaitForMetricsReporterData(
::testing::ElementsAre()); ::testing::ElementsAre(), ::testing::ElementsAre(), ::testing::_));
EXPECT_THAT(metrics_reporter_->resource_updates_invalid(),
::testing::ElementsAre());
EXPECT_THAT(GetResourceCounts(), EXPECT_THAT(GetResourceCounts(),
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
ResourceCountLabelsEq(XdsClient::kOldStyleAuthority, ResourceCountLabelsEq(XdsClient::kOldStyleAuthority,
@ -1619,10 +1639,8 @@ TEST_F(XdsClientTest, ResourceValidationFailureMultipleResources) {
// Add a watch for a fourth resource. // Add a watch for a fourth resource.
auto watcher4 = StartFooWatch("foo4"); auto watcher4 = StartFooWatch("foo4");
// Check metric data. // Check metric data.
EXPECT_THAT(metrics_reporter_->resource_updates_valid(), EXPECT_TRUE(metrics_reporter_->WaitForMetricsReporterData(
::testing::ElementsAre()); ::testing::ElementsAre(), ::testing::ElementsAre(), ::testing::_));
EXPECT_THAT(metrics_reporter_->resource_updates_invalid(),
::testing::ElementsAre());
EXPECT_THAT(GetResourceCounts(), EXPECT_THAT(GetResourceCounts(),
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
ResourceCountLabelsEq(XdsClient::kOldStyleAuthority, ResourceCountLabelsEq(XdsClient::kOldStyleAuthority,
@ -1688,16 +1706,16 @@ TEST_F(XdsClientTest, ResourceValidationFailureMultipleResources) {
EXPECT_EQ(resource->name, "foo4"); EXPECT_EQ(resource->name, "foo4");
EXPECT_EQ(resource->value, 5); EXPECT_EQ(resource->value, 5);
// Check metric data. // Check metric data.
EXPECT_THAT(metrics_reporter_->resource_updates_valid(), EXPECT_TRUE(metrics_reporter_->WaitForMetricsReporterData(
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
::testing::Pair(kDefaultXdsServerUrl, ::testing::Pair(kDefaultXdsServerUrl,
XdsFooResourceType::Get()->type_url()), XdsFooResourceType::Get()->type_url()),
1))); 1)),
EXPECT_THAT(metrics_reporter_->resource_updates_invalid(),
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
::testing::Pair(kDefaultXdsServerUrl, ::testing::Pair(kDefaultXdsServerUrl,
XdsFooResourceType::Get()->type_url()), XdsFooResourceType::Get()->type_url()),
5))); 5)),
::testing::_));
EXPECT_THAT( EXPECT_THAT(
GetResourceCounts(), GetResourceCounts(),
::testing::ElementsAre( ::testing::ElementsAre(
@ -1783,13 +1801,12 @@ TEST_F(XdsClientTest, ResourceValidationFailureForCachedResource) {
EXPECT_EQ(resource->name, "foo1"); EXPECT_EQ(resource->name, "foo1");
EXPECT_EQ(resource->value, 6); EXPECT_EQ(resource->value, 6);
// Check metric data. // Check metric data.
EXPECT_THAT(metrics_reporter_->resource_updates_valid(), EXPECT_TRUE(metrics_reporter_->WaitForMetricsReporterData(
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
::testing::Pair(kDefaultXdsServerUrl, ::testing::Pair(kDefaultXdsServerUrl,
XdsFooResourceType::Get()->type_url()), XdsFooResourceType::Get()->type_url()),
1))); 1)),
EXPECT_THAT(metrics_reporter_->resource_updates_invalid(), ::testing::ElementsAre(), ::testing::_));
::testing::ElementsAre());
EXPECT_THAT( EXPECT_THAT(
GetResourceCounts(), GetResourceCounts(),
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
@ -1820,16 +1837,16 @@ TEST_F(XdsClientTest, ResourceValidationFailureForCachedResource) {
"[field:value error:is not a number] (node ID:xds_client_test)") "[field:value error:is not a number] (node ID:xds_client_test)")
<< *error; << *error;
// Check metric data. // Check metric data.
EXPECT_THAT(metrics_reporter_->resource_updates_valid(), EXPECT_TRUE(metrics_reporter_->WaitForMetricsReporterData(
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
::testing::Pair(kDefaultXdsServerUrl, ::testing::Pair(kDefaultXdsServerUrl,
XdsFooResourceType::Get()->type_url()), XdsFooResourceType::Get()->type_url()),
1))); 1)),
EXPECT_THAT(metrics_reporter_->resource_updates_invalid(),
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
::testing::Pair(kDefaultXdsServerUrl, ::testing::Pair(kDefaultXdsServerUrl,
XdsFooResourceType::Get()->type_url()), XdsFooResourceType::Get()->type_url()),
1))); 1)),
::testing::_));
EXPECT_THAT(GetResourceCounts(), EXPECT_THAT(GetResourceCounts(),
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
ResourceCountLabelsEq(XdsClient::kOldStyleAuthority, ResourceCountLabelsEq(XdsClient::kOldStyleAuthority,
@ -1901,18 +1918,16 @@ TEST_F(XdsClientTest, WildcardCapableResponseWithEmptyResource) {
EXPECT_EQ(resource->name, "wc1"); EXPECT_EQ(resource->name, "wc1");
EXPECT_EQ(resource->value, 6); EXPECT_EQ(resource->value, 6);
// Check metric data. // Check metric data.
EXPECT_THAT( EXPECT_TRUE(metrics_reporter_->WaitForMetricsReporterData(
metrics_reporter_->resource_updates_valid(),
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
::testing::Pair(kDefaultXdsServerUrl, ::testing::Pair(kDefaultXdsServerUrl,
XdsWildcardCapableResourceType::Get()->type_url()), XdsWildcardCapableResourceType::Get()->type_url()),
1))); 1)),
EXPECT_THAT(
metrics_reporter_->resource_updates_invalid(),
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
::testing::Pair(kDefaultXdsServerUrl, ::testing::Pair(kDefaultXdsServerUrl,
XdsWildcardCapableResourceType::Get()->type_url()), XdsWildcardCapableResourceType::Get()->type_url()),
1))); 1)),
::testing::_));
EXPECT_THAT( EXPECT_THAT(
GetResourceCounts(), GetResourceCounts(),
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
@ -1971,14 +1986,12 @@ TEST_F(XdsClientTest, ResourceDeletion) {
EXPECT_EQ(resource->name, "wc1"); EXPECT_EQ(resource->name, "wc1");
EXPECT_EQ(resource->value, 6); EXPECT_EQ(resource->value, 6);
// Check metric data. // Check metric data.
EXPECT_THAT( EXPECT_TRUE(metrics_reporter_->WaitForMetricsReporterData(
metrics_reporter_->resource_updates_valid(),
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
::testing::Pair(kDefaultXdsServerUrl, ::testing::Pair(kDefaultXdsServerUrl,
XdsWildcardCapableResourceType::Get()->type_url()), XdsWildcardCapableResourceType::Get()->type_url()),
1))); 1)),
EXPECT_THAT(metrics_reporter_->resource_updates_invalid(), ::testing::ElementsAre(), ::testing::_));
::testing::ElementsAre());
EXPECT_THAT( EXPECT_THAT(
GetResourceCounts(), GetResourceCounts(),
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
@ -2003,14 +2016,12 @@ TEST_F(XdsClientTest, ResourceDeletion) {
// Watcher should see the does-not-exist event. // Watcher should see the does-not-exist event.
EXPECT_TRUE(watcher->WaitForDoesNotExist(absl::Seconds(1))); EXPECT_TRUE(watcher->WaitForDoesNotExist(absl::Seconds(1)));
// Check metric data. // Check metric data.
EXPECT_THAT( EXPECT_TRUE(metrics_reporter_->WaitForMetricsReporterData(
metrics_reporter_->resource_updates_valid(),
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
::testing::Pair(kDefaultXdsServerUrl, ::testing::Pair(kDefaultXdsServerUrl,
XdsWildcardCapableResourceType::Get()->type_url()), XdsWildcardCapableResourceType::Get()->type_url()),
1))); 1)),
EXPECT_THAT(metrics_reporter_->resource_updates_invalid(), ::testing::ElementsAre(), ::testing::_));
::testing::ElementsAre());
EXPECT_THAT(GetResourceCounts(), EXPECT_THAT(GetResourceCounts(),
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
ResourceCountLabelsEq( ResourceCountLabelsEq(
@ -2046,14 +2057,12 @@ TEST_F(XdsClientTest, ResourceDeletion) {
EXPECT_EQ(resource->name, "wc1"); EXPECT_EQ(resource->name, "wc1");
EXPECT_EQ(resource->value, 7); EXPECT_EQ(resource->value, 7);
// Check metric data. // Check metric data.
EXPECT_THAT( EXPECT_TRUE(metrics_reporter_->WaitForMetricsReporterData(
metrics_reporter_->resource_updates_valid(),
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
::testing::Pair(kDefaultXdsServerUrl, ::testing::Pair(kDefaultXdsServerUrl,
XdsWildcardCapableResourceType::Get()->type_url()), XdsWildcardCapableResourceType::Get()->type_url()),
2))); 2)),
EXPECT_THAT(metrics_reporter_->resource_updates_invalid(), ::testing::ElementsAre(), ::testing::_));
::testing::ElementsAre());
EXPECT_THAT( EXPECT_THAT(
GetResourceCounts(), GetResourceCounts(),
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
@ -2107,14 +2116,12 @@ TEST_F(XdsClientTest, ResourceDeletionIgnoredWhenConfigured) {
EXPECT_EQ(resource->name, "wc1"); EXPECT_EQ(resource->name, "wc1");
EXPECT_EQ(resource->value, 6); EXPECT_EQ(resource->value, 6);
// Check metric data. // Check metric data.
EXPECT_THAT( EXPECT_TRUE(metrics_reporter_->WaitForMetricsReporterData(
metrics_reporter_->resource_updates_valid(),
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
::testing::Pair(kDefaultXdsServerUrl, ::testing::Pair(kDefaultXdsServerUrl,
XdsWildcardCapableResourceType::Get()->type_url()), XdsWildcardCapableResourceType::Get()->type_url()),
1))); 1)),
EXPECT_THAT(metrics_reporter_->resource_updates_invalid(), ::testing::ElementsAre(), ::testing::_));
::testing::ElementsAre());
EXPECT_THAT( EXPECT_THAT(
GetResourceCounts(), GetResourceCounts(),
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
@ -2140,14 +2147,12 @@ TEST_F(XdsClientTest, ResourceDeletionIgnoredWhenConfigured) {
// deletion. // deletion.
EXPECT_TRUE(watcher->ExpectNoEvent(absl::Seconds(1))); EXPECT_TRUE(watcher->ExpectNoEvent(absl::Seconds(1)));
// Check metric data. // Check metric data.
EXPECT_THAT( EXPECT_TRUE(metrics_reporter_->WaitForMetricsReporterData(
metrics_reporter_->resource_updates_valid(),
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
::testing::Pair(kDefaultXdsServerUrl, ::testing::Pair(kDefaultXdsServerUrl,
XdsWildcardCapableResourceType::Get()->type_url()), XdsWildcardCapableResourceType::Get()->type_url()),
1))); 1)),
EXPECT_THAT(metrics_reporter_->resource_updates_invalid(), ::testing::ElementsAre(), ::testing::_));
::testing::ElementsAre());
EXPECT_THAT( EXPECT_THAT(
GetResourceCounts(), GetResourceCounts(),
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
@ -2186,14 +2191,12 @@ TEST_F(XdsClientTest, ResourceDeletionIgnoredWhenConfigured) {
EXPECT_EQ(resource->name, "wc1"); EXPECT_EQ(resource->name, "wc1");
EXPECT_EQ(resource->value, 7); EXPECT_EQ(resource->value, 7);
// Check metric data. // Check metric data.
EXPECT_THAT( EXPECT_TRUE(metrics_reporter_->WaitForMetricsReporterData(
metrics_reporter_->resource_updates_valid(),
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
::testing::Pair(kDefaultXdsServerUrl, ::testing::Pair(kDefaultXdsServerUrl,
XdsWildcardCapableResourceType::Get()->type_url()), XdsWildcardCapableResourceType::Get()->type_url()),
2))); 2)),
EXPECT_THAT(metrics_reporter_->resource_updates_invalid(), ::testing::ElementsAre(), ::testing::_));
::testing::ElementsAre());
EXPECT_THAT( EXPECT_THAT(
GetResourceCounts(), GetResourceCounts(),
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
@ -2335,8 +2338,9 @@ TEST_F(XdsClientTest, StreamClosedByServerWithoutSeeingResponse) {
// Check metric data. // Check metric data.
EXPECT_THAT(GetServerConnections(), ::testing::ElementsAre(::testing::Pair( EXPECT_THAT(GetServerConnections(), ::testing::ElementsAre(::testing::Pair(
kDefaultXdsServerUrl, false))); kDefaultXdsServerUrl, false)));
EXPECT_THAT(metrics_reporter_->server_failures(), EXPECT_TRUE(metrics_reporter_->WaitForMetricsReporterData(
::testing::ElementsAre(::testing::Pair(kDefaultXdsServerUrl, 1))); ::testing::_, ::testing::_,
::testing::ElementsAre(::testing::Pair(kDefaultXdsServerUrl, 1))));
// XdsClient should report an error to the watcher. // XdsClient should report an error to the watcher.
auto error = watcher->WaitForNextError(); auto error = watcher->WaitForNextError();
ASSERT_TRUE(error.has_value()); ASSERT_TRUE(error.has_value());
@ -2360,8 +2364,9 @@ TEST_F(XdsClientTest, StreamClosedByServerWithoutSeeingResponse) {
// Connection still reported as unhappy until we get a response. // Connection still reported as unhappy until we get a response.
EXPECT_THAT(GetServerConnections(), ::testing::ElementsAre(::testing::Pair( EXPECT_THAT(GetServerConnections(), ::testing::ElementsAre(::testing::Pair(
kDefaultXdsServerUrl, false))); kDefaultXdsServerUrl, false)));
EXPECT_THAT(metrics_reporter_->server_failures(), EXPECT_TRUE(metrics_reporter_->WaitForMetricsReporterData(
::testing::ElementsAre(::testing::Pair(kDefaultXdsServerUrl, 1))); ::testing::_, ::testing::_,
::testing::ElementsAre(::testing::Pair(kDefaultXdsServerUrl, 1))));
// Server now sends the requested resource. // Server now sends the requested resource.
stream->SendMessageToClient( stream->SendMessageToClient(
ResponseBuilder(XdsFooResourceType::Get()->type_url()) ResponseBuilder(XdsFooResourceType::Get()->type_url())
@ -2431,8 +2436,9 @@ TEST_F(XdsClientTest, ConnectionFails) {
// Connection reported as unhappy. // Connection reported as unhappy.
EXPECT_THAT(GetServerConnections(), ::testing::ElementsAre(::testing::Pair( EXPECT_THAT(GetServerConnections(), ::testing::ElementsAre(::testing::Pair(
kDefaultXdsServerUrl, false))); kDefaultXdsServerUrl, false)));
EXPECT_THAT(metrics_reporter_->server_failures(), EXPECT_TRUE(metrics_reporter_->WaitForMetricsReporterData(
::testing::ElementsAre(::testing::Pair(kDefaultXdsServerUrl, 1))); ::testing::_, ::testing::_,
::testing::ElementsAre(::testing::Pair(kDefaultXdsServerUrl, 1))));
// We should not see a resource-does-not-exist event, because the // We should not see a resource-does-not-exist event, because the
// timer should not be running while the channel is disconnected. // timer should not be running while the channel is disconnected.
EXPECT_TRUE(watcher->ExpectNoEvent(absl::Seconds(4))); EXPECT_TRUE(watcher->ExpectNoEvent(absl::Seconds(4)));
@ -2516,10 +2522,8 @@ TEST_F(XdsClientTest, ResourceDoesNotExistUponTimeout) {
// not existing. // not existing.
EXPECT_TRUE(watcher->WaitForDoesNotExist(absl::Seconds(5))); EXPECT_TRUE(watcher->WaitForDoesNotExist(absl::Seconds(5)));
// Check metric data. // Check metric data.
EXPECT_THAT(metrics_reporter_->resource_updates_valid(), EXPECT_TRUE(metrics_reporter_->WaitForMetricsReporterData(
::testing::ElementsAre()); ::testing::ElementsAre(), ::testing::ElementsAre(), ::testing::_));
EXPECT_THAT(metrics_reporter_->resource_updates_invalid(),
::testing::ElementsAre());
EXPECT_THAT(GetResourceCounts(), EXPECT_THAT(GetResourceCounts(),
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
ResourceCountLabelsEq(XdsClient::kOldStyleAuthority, ResourceCountLabelsEq(XdsClient::kOldStyleAuthority,
@ -2547,13 +2551,12 @@ TEST_F(XdsClientTest, ResourceDoesNotExistUponTimeout) {
EXPECT_EQ(resource->name, "foo1"); EXPECT_EQ(resource->name, "foo1");
EXPECT_EQ(resource->value, 6); EXPECT_EQ(resource->value, 6);
// Check metric data. // Check metric data.
EXPECT_THAT(metrics_reporter_->resource_updates_valid(), EXPECT_TRUE(metrics_reporter_->WaitForMetricsReporterData(
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
::testing::Pair(kDefaultXdsServerUrl, ::testing::Pair(kDefaultXdsServerUrl,
XdsFooResourceType::Get()->type_url()), XdsFooResourceType::Get()->type_url()),
1))); 1)),
EXPECT_THAT(metrics_reporter_->resource_updates_invalid(), ::testing::ElementsAre(), ::testing::_));
::testing::ElementsAre());
EXPECT_THAT( EXPECT_THAT(
GetResourceCounts(), GetResourceCounts(),
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
@ -2620,10 +2623,8 @@ TEST_F(XdsClientTest, ResourceDoesNotExistAfterStreamRestart) {
"(node ID:xds_client_test)") "(node ID:xds_client_test)")
<< *error; << *error;
// Check metric data. // Check metric data.
EXPECT_THAT(metrics_reporter_->resource_updates_valid(), EXPECT_TRUE(metrics_reporter_->WaitForMetricsReporterData(
::testing::ElementsAre()); ::testing::ElementsAre(), ::testing::ElementsAre(), ::testing::_));
EXPECT_THAT(metrics_reporter_->resource_updates_invalid(),
::testing::ElementsAre());
EXPECT_THAT(GetResourceCounts(), EXPECT_THAT(GetResourceCounts(),
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
ResourceCountLabelsEq(XdsClient::kOldStyleAuthority, ResourceCountLabelsEq(XdsClient::kOldStyleAuthority,
@ -2645,10 +2646,8 @@ TEST_F(XdsClientTest, ResourceDoesNotExistAfterStreamRestart) {
// Client should receive a resource does-not-exist. // Client should receive a resource does-not-exist.
ASSERT_TRUE(watcher->WaitForDoesNotExist(absl::Seconds(4))); ASSERT_TRUE(watcher->WaitForDoesNotExist(absl::Seconds(4)));
// Check metric data. // Check metric data.
EXPECT_THAT(metrics_reporter_->resource_updates_valid(), EXPECT_TRUE(metrics_reporter_->WaitForMetricsReporterData(
::testing::ElementsAre()); ::testing::ElementsAre(), ::testing::ElementsAre(), ::testing::_));
EXPECT_THAT(metrics_reporter_->resource_updates_invalid(),
::testing::ElementsAre());
EXPECT_THAT(GetResourceCounts(), EXPECT_THAT(GetResourceCounts(),
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
ResourceCountLabelsEq(XdsClient::kOldStyleAuthority, ResourceCountLabelsEq(XdsClient::kOldStyleAuthority,
@ -2668,13 +2667,12 @@ TEST_F(XdsClientTest, ResourceDoesNotExistAfterStreamRestart) {
EXPECT_EQ(resource->name, "foo1"); EXPECT_EQ(resource->name, "foo1");
EXPECT_EQ(resource->value, 6); EXPECT_EQ(resource->value, 6);
// Check metric data. // Check metric data.
EXPECT_THAT(metrics_reporter_->resource_updates_valid(), EXPECT_TRUE(metrics_reporter_->WaitForMetricsReporterData(
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
::testing::Pair(kDefaultXdsServerUrl, ::testing::Pair(kDefaultXdsServerUrl,
XdsFooResourceType::Get()->type_url()), XdsFooResourceType::Get()->type_url()),
1))); 1)),
EXPECT_THAT(metrics_reporter_->resource_updates_invalid(), ::testing::ElementsAre(), ::testing::_));
::testing::ElementsAre());
EXPECT_THAT( EXPECT_THAT(
GetResourceCounts(), GetResourceCounts(),
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
@ -2812,13 +2810,12 @@ TEST_F(XdsClientTest,
EXPECT_EQ(resource->name, "foo1"); EXPECT_EQ(resource->name, "foo1");
EXPECT_EQ(resource->value, 6); EXPECT_EQ(resource->value, 6);
// Check metric data. // Check metric data.
EXPECT_THAT(metrics_reporter_->resource_updates_valid(), EXPECT_TRUE(metrics_reporter_->WaitForMetricsReporterData(
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
::testing::Pair(kDefaultXdsServerUrl, ::testing::Pair(kDefaultXdsServerUrl,
XdsFooResourceType::Get()->type_url()), XdsFooResourceType::Get()->type_url()),
1))); 1)),
EXPECT_THAT(metrics_reporter_->resource_updates_invalid(), ::testing::ElementsAre(), ::testing::_));
::testing::ElementsAre());
EXPECT_THAT( EXPECT_THAT(
GetResourceCounts(), GetResourceCounts(),
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
@ -2895,13 +2892,12 @@ TEST_F(XdsClientTest,
EXPECT_EQ(resource->name, "foo2"); EXPECT_EQ(resource->name, "foo2");
EXPECT_EQ(resource->value, 7); EXPECT_EQ(resource->value, 7);
// Check metric data. // Check metric data.
EXPECT_THAT(metrics_reporter_->resource_updates_valid(), EXPECT_TRUE(metrics_reporter_->WaitForMetricsReporterData(
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
::testing::Pair(kDefaultXdsServerUrl, ::testing::Pair(kDefaultXdsServerUrl,
XdsFooResourceType::Get()->type_url()), XdsFooResourceType::Get()->type_url()),
3))); 3)),
EXPECT_THAT(metrics_reporter_->resource_updates_invalid(), ::testing::ElementsAre(), ::testing::_));
::testing::ElementsAre());
EXPECT_THAT( EXPECT_THAT(
GetResourceCounts(), GetResourceCounts(),
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
@ -2961,13 +2957,12 @@ TEST_F(XdsClientTest, DoNotSendDoesNotExistForCachedResource) {
EXPECT_EQ(resource->name, "foo1"); EXPECT_EQ(resource->name, "foo1");
EXPECT_EQ(resource->value, 6); EXPECT_EQ(resource->value, 6);
// Check metric data. // Check metric data.
EXPECT_THAT(metrics_reporter_->resource_updates_valid(), EXPECT_TRUE(metrics_reporter_->WaitForMetricsReporterData(
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
::testing::Pair(kDefaultXdsServerUrl, ::testing::Pair(kDefaultXdsServerUrl,
XdsFooResourceType::Get()->type_url()), XdsFooResourceType::Get()->type_url()),
1))); 1)),
EXPECT_THAT(metrics_reporter_->resource_updates_invalid(), ::testing::ElementsAre(), ::testing::_));
::testing::ElementsAre());
EXPECT_THAT( EXPECT_THAT(
GetResourceCounts(), GetResourceCounts(),
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
@ -3002,13 +2997,12 @@ TEST_F(XdsClientTest, DoNotSendDoesNotExistForCachedResource) {
// resending it. // resending it.
EXPECT_TRUE(watcher->ExpectNoEvent(absl::Seconds(4))); EXPECT_TRUE(watcher->ExpectNoEvent(absl::Seconds(4)));
// Check metric data. // Check metric data.
EXPECT_THAT(metrics_reporter_->resource_updates_valid(), EXPECT_TRUE(metrics_reporter_->WaitForMetricsReporterData(
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
::testing::Pair(kDefaultXdsServerUrl, ::testing::Pair(kDefaultXdsServerUrl,
XdsFooResourceType::Get()->type_url()), XdsFooResourceType::Get()->type_url()),
1))); 1)),
EXPECT_THAT(metrics_reporter_->resource_updates_invalid(), ::testing::ElementsAre(), ::testing::_));
::testing::ElementsAre());
EXPECT_THAT( EXPECT_THAT(
GetResourceCounts(), GetResourceCounts(),
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
@ -3025,13 +3019,12 @@ TEST_F(XdsClientTest, DoNotSendDoesNotExistForCachedResource) {
// Watcher will not see any update, since the resource is unchanged. // Watcher will not see any update, since the resource is unchanged.
EXPECT_TRUE(watcher->ExpectNoEvent(absl::Seconds(1))); EXPECT_TRUE(watcher->ExpectNoEvent(absl::Seconds(1)));
// Check metric data. // Check metric data.
EXPECT_THAT(metrics_reporter_->resource_updates_valid(), EXPECT_TRUE(metrics_reporter_->WaitForMetricsReporterData(
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
::testing::Pair(kDefaultXdsServerUrl, ::testing::Pair(kDefaultXdsServerUrl,
XdsFooResourceType::Get()->type_url()), XdsFooResourceType::Get()->type_url()),
2))); 2)),
EXPECT_THAT(metrics_reporter_->resource_updates_invalid(), ::testing::ElementsAre(), ::testing::_));
::testing::ElementsAre());
EXPECT_THAT( EXPECT_THAT(
GetResourceCounts(), GetResourceCounts(),
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
@ -3083,13 +3076,12 @@ TEST_F(XdsClientTest, ResourceWrappedInResourceMessage) {
EXPECT_EQ(resource->name, "foo1"); EXPECT_EQ(resource->name, "foo1");
EXPECT_EQ(resource->value, 6); EXPECT_EQ(resource->value, 6);
// Check metric data. // Check metric data.
EXPECT_THAT(metrics_reporter_->resource_updates_valid(), EXPECT_TRUE(metrics_reporter_->WaitForMetricsReporterData(
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
::testing::Pair(kDefaultXdsServerUrl, ::testing::Pair(kDefaultXdsServerUrl,
XdsFooResourceType::Get()->type_url()), XdsFooResourceType::Get()->type_url()),
1))); 1)),
EXPECT_THAT(metrics_reporter_->resource_updates_invalid(), ::testing::ElementsAre(), ::testing::_));
::testing::ElementsAre());
EXPECT_THAT( EXPECT_THAT(
GetResourceCounts(), GetResourceCounts(),
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
@ -3138,13 +3130,12 @@ TEST_F(XdsClientTest, MultipleResourceTypes) {
EXPECT_EQ(resource->name, "foo1"); EXPECT_EQ(resource->name, "foo1");
EXPECT_EQ(resource->value, 6); EXPECT_EQ(resource->value, 6);
// Check metric data. // Check metric data.
EXPECT_THAT(metrics_reporter_->resource_updates_valid(), EXPECT_TRUE(metrics_reporter_->WaitForMetricsReporterData(
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
::testing::Pair(kDefaultXdsServerUrl, ::testing::Pair(kDefaultXdsServerUrl,
XdsFooResourceType::Get()->type_url()), XdsFooResourceType::Get()->type_url()),
1))); 1)),
EXPECT_THAT(metrics_reporter_->resource_updates_invalid(), ::testing::ElementsAre(), ::testing::_));
::testing::ElementsAre());
EXPECT_THAT( EXPECT_THAT(
GetResourceCounts(), GetResourceCounts(),
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
@ -3182,7 +3173,7 @@ TEST_F(XdsClientTest, MultipleResourceTypes) {
EXPECT_EQ(resource2->name, "bar1"); EXPECT_EQ(resource2->name, "bar1");
EXPECT_EQ(resource2->value, "whee"); EXPECT_EQ(resource2->value, "whee");
// Check metric data. // Check metric data.
EXPECT_THAT(metrics_reporter_->resource_updates_valid(), EXPECT_TRUE(metrics_reporter_->WaitForMetricsReporterData(
::testing::ElementsAre( ::testing::ElementsAre(
::testing::Pair( ::testing::Pair(
::testing::Pair(kDefaultXdsServerUrl, ::testing::Pair(kDefaultXdsServerUrl,
@ -3191,9 +3182,8 @@ TEST_F(XdsClientTest, MultipleResourceTypes) {
::testing::Pair( ::testing::Pair(
::testing::Pair(kDefaultXdsServerUrl, ::testing::Pair(kDefaultXdsServerUrl,
XdsFooResourceType::Get()->type_url()), XdsFooResourceType::Get()->type_url()),
1))); 1)),
EXPECT_THAT(metrics_reporter_->resource_updates_invalid(), ::testing::ElementsAre(), ::testing::_));
::testing::ElementsAre());
EXPECT_THAT( EXPECT_THAT(
GetResourceCounts(), GetResourceCounts(),
::testing::UnorderedElementsAre( ::testing::UnorderedElementsAre(
@ -3269,13 +3259,12 @@ TEST_F(XdsClientTest, Federation) {
EXPECT_EQ(resource->name, "foo1"); EXPECT_EQ(resource->name, "foo1");
EXPECT_EQ(resource->value, 6); EXPECT_EQ(resource->value, 6);
// Check metric data. // Check metric data.
EXPECT_THAT(metrics_reporter_->resource_updates_valid(), EXPECT_TRUE(metrics_reporter_->WaitForMetricsReporterData(
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
::testing::Pair(kDefaultXdsServerUrl, ::testing::Pair(kDefaultXdsServerUrl,
XdsFooResourceType::Get()->type_url()), XdsFooResourceType::Get()->type_url()),
1))); 1)),
EXPECT_THAT(metrics_reporter_->resource_updates_invalid(), ::testing::ElementsAre(), ::testing::_));
::testing::ElementsAre());
EXPECT_THAT( EXPECT_THAT(
GetResourceCounts(), GetResourceCounts(),
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
@ -3337,7 +3326,7 @@ TEST_F(XdsClientTest, Federation) {
EXPECT_EQ(resource->name, kXdstpResourceName); EXPECT_EQ(resource->name, kXdstpResourceName);
EXPECT_EQ(resource->value, 3); EXPECT_EQ(resource->value, 3);
// Check metric data. // Check metric data.
EXPECT_THAT(metrics_reporter_->resource_updates_valid(), EXPECT_TRUE(metrics_reporter_->WaitForMetricsReporterData(
::testing::ElementsAre( ::testing::ElementsAre(
::testing::Pair( ::testing::Pair(
::testing::Pair(kDefaultXdsServerUrl, ::testing::Pair(kDefaultXdsServerUrl,
@ -3346,9 +3335,8 @@ TEST_F(XdsClientTest, Federation) {
::testing::Pair( ::testing::Pair(
::testing::Pair(authority_server.server_uri(), ::testing::Pair(authority_server.server_uri(),
XdsFooResourceType::Get()->type_url()), XdsFooResourceType::Get()->type_url()),
1))); 1)),
EXPECT_THAT(metrics_reporter_->resource_updates_invalid(), ::testing::ElementsAre(), ::testing::_));
::testing::ElementsAre());
EXPECT_THAT( EXPECT_THAT(
GetResourceCounts(), GetResourceCounts(),
::testing::ElementsAre( ::testing::ElementsAre(
@ -3415,13 +3403,12 @@ TEST_F(XdsClientTest, FederationAuthorityDefaultsToTopLevelXdsServer) {
EXPECT_EQ(resource->name, "foo1"); EXPECT_EQ(resource->name, "foo1");
EXPECT_EQ(resource->value, 6); EXPECT_EQ(resource->value, 6);
// Check metric data. // Check metric data.
EXPECT_THAT(metrics_reporter_->resource_updates_valid(), EXPECT_TRUE(metrics_reporter_->WaitForMetricsReporterData(
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
::testing::Pair(kDefaultXdsServerUrl, ::testing::Pair(kDefaultXdsServerUrl,
XdsFooResourceType::Get()->type_url()), XdsFooResourceType::Get()->type_url()),
1))); 1)),
EXPECT_THAT(metrics_reporter_->resource_updates_invalid(), ::testing::ElementsAre(), ::testing::_));
::testing::ElementsAre());
EXPECT_THAT( EXPECT_THAT(
GetResourceCounts(), GetResourceCounts(),
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
@ -3463,13 +3450,12 @@ TEST_F(XdsClientTest, FederationAuthorityDefaultsToTopLevelXdsServer) {
EXPECT_EQ(resource->name, kXdstpResourceName); EXPECT_EQ(resource->name, kXdstpResourceName);
EXPECT_EQ(resource->value, 3); EXPECT_EQ(resource->value, 3);
// Check metric data. // Check metric data.
EXPECT_THAT(metrics_reporter_->resource_updates_valid(), EXPECT_TRUE(metrics_reporter_->WaitForMetricsReporterData(
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
::testing::Pair(kDefaultXdsServerUrl, ::testing::Pair(kDefaultXdsServerUrl,
XdsFooResourceType::Get()->type_url()), XdsFooResourceType::Get()->type_url()),
2))); 2)),
EXPECT_THAT(metrics_reporter_->resource_updates_invalid(), ::testing::ElementsAre(), ::testing::_));
::testing::ElementsAre());
EXPECT_THAT( EXPECT_THAT(
GetResourceCounts(), GetResourceCounts(),
::testing::ElementsAre( ::testing::ElementsAre(
@ -3621,13 +3607,12 @@ TEST_F(XdsClientTest, FederationChannelFailureReportedToWatchers) {
EXPECT_EQ(resource->name, "foo1"); EXPECT_EQ(resource->name, "foo1");
EXPECT_EQ(resource->value, 6); EXPECT_EQ(resource->value, 6);
// Check metric data. // Check metric data.
EXPECT_THAT(metrics_reporter_->resource_updates_valid(), EXPECT_TRUE(metrics_reporter_->WaitForMetricsReporterData(
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
::testing::Pair(kDefaultXdsServerUrl, ::testing::Pair(kDefaultXdsServerUrl,
XdsFooResourceType::Get()->type_url()), XdsFooResourceType::Get()->type_url()),
1))); 1)),
EXPECT_THAT(metrics_reporter_->resource_updates_invalid(), ::testing::ElementsAre(), ::testing::_));
::testing::ElementsAre());
EXPECT_THAT( EXPECT_THAT(
GetResourceCounts(), GetResourceCounts(),
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
@ -3678,7 +3663,7 @@ TEST_F(XdsClientTest, FederationChannelFailureReportedToWatchers) {
EXPECT_EQ(resource->name, kXdstpResourceName); EXPECT_EQ(resource->name, kXdstpResourceName);
EXPECT_EQ(resource->value, 3); EXPECT_EQ(resource->value, 3);
// Check metric data. // Check metric data.
EXPECT_THAT(metrics_reporter_->resource_updates_valid(), EXPECT_TRUE(metrics_reporter_->WaitForMetricsReporterData(
::testing::ElementsAre( ::testing::ElementsAre(
::testing::Pair( ::testing::Pair(
::testing::Pair(kDefaultXdsServerUrl, ::testing::Pair(kDefaultXdsServerUrl,
@ -3687,9 +3672,8 @@ TEST_F(XdsClientTest, FederationChannelFailureReportedToWatchers) {
::testing::Pair( ::testing::Pair(
::testing::Pair(authority_server.server_uri(), ::testing::Pair(authority_server.server_uri(),
XdsFooResourceType::Get()->type_url()), XdsFooResourceType::Get()->type_url()),
1))); 1)),
EXPECT_THAT(metrics_reporter_->resource_updates_invalid(), ::testing::ElementsAre(), ::testing::_));
::testing::ElementsAre());
EXPECT_THAT( EXPECT_THAT(
GetResourceCounts(), GetResourceCounts(),
::testing::ElementsAre( ::testing::ElementsAre(
@ -3730,9 +3714,10 @@ TEST_F(XdsClientTest, FederationChannelFailureReportedToWatchers) {
::testing::ElementsAre( ::testing::ElementsAre(
::testing::Pair(kDefaultXdsServerUrl, true), ::testing::Pair(kDefaultXdsServerUrl, true),
::testing::Pair(authority_server.server_uri(), false))); ::testing::Pair(authority_server.server_uri(), false)));
EXPECT_THAT(metrics_reporter_->server_failures(), EXPECT_TRUE(metrics_reporter_->WaitForMetricsReporterData(
::testing::_, ::testing::_,
::testing::ElementsAre( ::testing::ElementsAre(
::testing::Pair(authority_server.server_uri(), 1))); ::testing::Pair(authority_server.server_uri(), 1))));
// Cancel watch for "foo1". // Cancel watch for "foo1".
CancelFooWatch(watcher.get(), "foo1"); CancelFooWatch(watcher.get(), "foo1");
EXPECT_TRUE(stream->Orphaned()); EXPECT_TRUE(stream->Orphaned());
@ -3843,9 +3828,8 @@ TEST_F(XdsClientTest, FallbackAndRecover) {
XdsFooResourceType::Get()->type_url(), XdsFooResourceType::Get()->type_url(),
"requested"), "requested"),
1))); 1)));
EXPECT_THAT(metrics_reporter_->resource_updates_valid(), EXPECT_TRUE(metrics_reporter_->WaitForMetricsReporterData(
::testing::IsEmpty()); ::testing::IsEmpty(), ::testing::_, ::testing::ElementsAre()));
EXPECT_THAT(metrics_reporter_->server_failures(), ::testing::ElementsAre());
// XdsClient should have created an ADS stream. // XdsClient should have created an ADS stream.
auto stream = WaitForAdsStream(); auto stream = WaitForAdsStream();
ASSERT_TRUE(stream != nullptr); ASSERT_TRUE(stream != nullptr);
@ -3869,11 +3853,12 @@ TEST_F(XdsClientTest, FallbackAndRecover) {
EXPECT_EQ(resource->name, "foo1"); EXPECT_EQ(resource->name, "foo1");
EXPECT_EQ(resource->value, 6); EXPECT_EQ(resource->value, 6);
// Result (local): Metrics show 1 resource update and 1 cached resource. // Result (local): Metrics show 1 resource update and 1 cached resource.
EXPECT_THAT(metrics_reporter_->resource_updates_valid(), EXPECT_TRUE(metrics_reporter_->WaitForMetricsReporterData(
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
::testing::Pair(kDefaultXdsServerUrl, ::testing::Pair(kDefaultXdsServerUrl,
XdsFooResourceType::Get()->type_url()), XdsFooResourceType::Get()->type_url()),
1))); 1)),
::testing::_, ::testing::_));
EXPECT_THAT( EXPECT_THAT(
GetResourceCounts(), GetResourceCounts(),
::testing::ElementsAre(::testing::Pair( ::testing::ElementsAre(::testing::Pair(
@ -3900,15 +3885,17 @@ TEST_F(XdsClientTest, FallbackAndRecover) {
// Result (local): The metrics show the channel as being unhealthy. // Result (local): The metrics show the channel as being unhealthy.
EXPECT_THAT(GetServerConnections(), ::testing::ElementsAre(::testing::Pair( EXPECT_THAT(GetServerConnections(), ::testing::ElementsAre(::testing::Pair(
kDefaultXdsServerUrl, false))); kDefaultXdsServerUrl, false)));
EXPECT_THAT(metrics_reporter_->server_failures(), EXPECT_TRUE(metrics_reporter_->WaitForMetricsReporterData(
::testing::ElementsAre(::testing::Pair(kDefaultXdsServerUrl, 1))); ::testing::_, ::testing::_,
::testing::ElementsAre(::testing::Pair(kDefaultXdsServerUrl, 1))));
// Input: Trigger stream failure. // Input: Trigger stream failure.
stream->MaybeSendStatusToClient(absl::UnavailableError("Stream failure")); stream->MaybeSendStatusToClient(absl::UnavailableError("Stream failure"));
// Result (local): The metrics still show the channel as being unhealthy. // Result (local): The metrics still show the channel as being unhealthy.
EXPECT_THAT(GetServerConnections(), ::testing::ElementsAre(::testing::Pair( EXPECT_THAT(GetServerConnections(), ::testing::ElementsAre(::testing::Pair(
kDefaultXdsServerUrl, false))); kDefaultXdsServerUrl, false)));
EXPECT_THAT(metrics_reporter_->server_failures(), EXPECT_TRUE(metrics_reporter_->WaitForMetricsReporterData(
::testing::ElementsAre(::testing::Pair(kDefaultXdsServerUrl, 1))); ::testing::_, ::testing::_,
::testing::ElementsAre(::testing::Pair(kDefaultXdsServerUrl, 1))));
// Result (remote): The client starts a new stream and sends a subscription // Result (remote): The client starts a new stream and sends a subscription
// message. Note that the server does not respond, so the channel will still // message. Note that the server does not respond, so the channel will still
// have non-OK status. // have non-OK status.
@ -3978,7 +3965,7 @@ TEST_F(XdsClientTest, FallbackAndRecover) {
EXPECT_EQ(resource->name, "foo2"); EXPECT_EQ(resource->name, "foo2");
EXPECT_EQ(resource->value, 30); EXPECT_EQ(resource->value, 30);
// Result (local): Metrics show an update from fallback server. // Result (local): Metrics show an update from fallback server.
EXPECT_THAT(metrics_reporter_->resource_updates_valid(), EXPECT_TRUE(metrics_reporter_->WaitForMetricsReporterData(
::testing::ElementsAre( ::testing::ElementsAre(
::testing::Pair( ::testing::Pair(
::testing::Pair(kDefaultXdsServerUrl, ::testing::Pair(kDefaultXdsServerUrl,
@ -3987,7 +3974,8 @@ TEST_F(XdsClientTest, FallbackAndRecover) {
::testing::Pair( ::testing::Pair(
::testing::Pair(fallback_server.server_uri(), ::testing::Pair(fallback_server.server_uri(),
XdsFooResourceType::Get()->type_url()), XdsFooResourceType::Get()->type_url()),
2))); 2)),
::testing::_, ::testing::_));
EXPECT_THAT(GetServerConnections(), EXPECT_THAT(GetServerConnections(),
::testing::ElementsAre( ::testing::ElementsAre(
::testing::Pair(kDefaultXdsServerUrl, false), ::testing::Pair(kDefaultXdsServerUrl, false),
@ -4015,7 +4003,7 @@ TEST_F(XdsClientTest, FallbackAndRecover) {
.Serialize()); .Serialize());
// Result (local): Metrics show that we've closed the channel to the fallback // Result (local): Metrics show that we've closed the channel to the fallback
// server and received resource updates from the primary server. // server and received resource updates from the primary server.
EXPECT_THAT(metrics_reporter_->resource_updates_valid(), EXPECT_TRUE(metrics_reporter_->WaitForMetricsReporterData(
::testing::ElementsAre( ::testing::ElementsAre(
::testing::Pair( ::testing::Pair(
::testing::Pair(kDefaultXdsServerUrl, ::testing::Pair(kDefaultXdsServerUrl,
@ -4024,11 +4012,11 @@ TEST_F(XdsClientTest, FallbackAndRecover) {
::testing::Pair( ::testing::Pair(
::testing::Pair(fallback_server.server_uri(), ::testing::Pair(fallback_server.server_uri(),
XdsFooResourceType::Get()->type_url()), XdsFooResourceType::Get()->type_url()),
2))); 2)),
::testing::_,
::testing::ElementsAre(::testing::Pair(kDefaultXdsServerUrl, 1))));
EXPECT_THAT(GetServerConnections(), ::testing::ElementsAre(::testing::Pair( EXPECT_THAT(GetServerConnections(), ::testing::ElementsAre(::testing::Pair(
kDefaultXdsServerUrl, true))); kDefaultXdsServerUrl, true)));
EXPECT_THAT(metrics_reporter_->server_failures(),
::testing::ElementsAre(::testing::Pair(kDefaultXdsServerUrl, 1)));
// Result (remote): The stream to the fallback server has been orphaned. // Result (remote): The stream to the fallback server has been orphaned.
EXPECT_TRUE(stream2->Orphaned()); EXPECT_TRUE(stream2->Orphaned());
// Result (local): Resources are delivered to watchers. // Result (local): Resources are delivered to watchers.
@ -4084,8 +4072,9 @@ TEST_F(XdsClientTest, FallbackReportsError) {
::testing::ElementsAre( ::testing::ElementsAre(
::testing::Pair(kDefaultXdsServerUrl, false), ::testing::Pair(kDefaultXdsServerUrl, false),
::testing::Pair(fallback_server.server_uri(), true))); ::testing::Pair(fallback_server.server_uri(), true)));
EXPECT_THAT(metrics_reporter_->server_failures(), EXPECT_TRUE(metrics_reporter_->WaitForMetricsReporterData(
::testing::ElementsAre(::testing::Pair(kDefaultXdsServerUrl, 1))); ::testing::_, ::testing::_,
::testing::ElementsAre(::testing::Pair(kDefaultXdsServerUrl, 1))));
// Fallback happens now // Fallback happens now
stream = WaitForAdsStream(fallback_server); stream = WaitForAdsStream(fallback_server);
ASSERT_NE(stream, nullptr); ASSERT_NE(stream, nullptr);
@ -4101,10 +4090,11 @@ TEST_F(XdsClientTest, FallbackReportsError) {
::testing::ElementsAre( ::testing::ElementsAre(
::testing::Pair(kDefaultXdsServerUrl, false), ::testing::Pair(kDefaultXdsServerUrl, false),
::testing::Pair(fallback_server.server_uri(), false))); ::testing::Pair(fallback_server.server_uri(), false)));
EXPECT_THAT( EXPECT_TRUE(metrics_reporter_->WaitForMetricsReporterData(
metrics_reporter_->server_failures(), ::testing::_, ::testing::_,
::testing::ElementsAre(::testing::Pair(kDefaultXdsServerUrl, 1), ::testing::ElementsAre(
::testing::Pair(fallback_server.server_uri(), 1))); ::testing::Pair(kDefaultXdsServerUrl, 1),
::testing::Pair(fallback_server.server_uri(), 1))));
auto error = watcher->WaitForNextError(); auto error = watcher->WaitForNextError();
ASSERT_TRUE(error.has_value()); ASSERT_TRUE(error.has_value());
EXPECT_THAT(error->code(), absl::StatusCode::kUnavailable); EXPECT_THAT(error->code(), absl::StatusCode::kUnavailable);
@ -4154,8 +4144,9 @@ TEST_F(XdsClientTest, FallbackOnStartup) {
::testing::ElementsAre( ::testing::ElementsAre(
::testing::Pair(kDefaultXdsServerUrl, false), ::testing::Pair(kDefaultXdsServerUrl, false),
::testing::Pair(fallback_server.server_uri(), true))); ::testing::Pair(fallback_server.server_uri(), true)));
EXPECT_THAT(metrics_reporter_->server_failures(), EXPECT_TRUE(metrics_reporter_->WaitForMetricsReporterData(
::testing::ElementsAre(::testing::Pair(kDefaultXdsServerUrl, 1))); ::testing::_, ::testing::_,
::testing::ElementsAre(::testing::Pair(kDefaultXdsServerUrl, 1))));
// XdsClient should have delivered the response to the watcher. // XdsClient should have delivered the response to the watcher.
auto resource = watcher->WaitForNextResource(); auto resource = watcher->WaitForNextResource();
ASSERT_NE(resource, nullptr); ASSERT_NE(resource, nullptr);

Loading…
Cancel
Save