2020#include " google/cloud/testing_util/assert_ok.h"
2121#include " google/cloud/testing_util/chrono_literals.h"
2222#include " google/cloud/testing_util/fake_completion_queue_impl.h"
23+ #include " google/cloud/testing_util/status_matchers.h"
2324#include " google/cloud/testing_util/validate_metadata.h"
2425#include " absl/memory/memory.h"
2526#include < google/protobuf/text_format.h>
@@ -37,9 +38,12 @@ namespace btadmin = ::google::bigtable::admin::v2;
3738using MockAdminClient =
3839 ::google::cloud::bigtable::testing::MockInstanceAdminClient;
3940using ::google::cloud::testing_util::IsContextMDValid;
41+ using ::google::cloud::testing_util::StatusIs;
4042using ::google::cloud::testing_util::chrono_literals::operator " " _ms;
4143using ::google::cloud::testing_util::FakeCompletionQueueImpl;
4244using ::testing::_;
45+ using ::testing::AtLeast;
46+ using ::testing::HasSubstr;
4347using ::testing::Return;
4448using ::testing::ReturnRef;
4549
@@ -312,6 +316,24 @@ TEST_F(InstanceAdminTest, ListInstancesUnrecoverableFailures) {
312316 EXPECT_FALSE (tested.ListInstances ());
313317}
314318
319+ /* *
320+ * @test Verify that `bigtable::InstanceAdmin::ListInstances` handles
321+ * too many transient failures.
322+ */
323+ TEST_F (InstanceAdminTest, ListInstancesTooManyTransients) {
324+ using ms = std::chrono::milliseconds;
325+ InstanceAdmin tested (client_, LimitedErrorCountRetryPolicy (3 ),
326+ ExponentialBackoffPolicy (ms (1 ), ms (2 )));
327+ EXPECT_CALL (*client_, ListInstances)
328+ .Times (AtLeast (2 ))
329+ .WillRepeatedly (
330+ Return (grpc::Status (grpc::StatusCode::UNAVAILABLE, " try-again" )));
331+
332+ // After all the setup, make the actual call we want to test.
333+ EXPECT_THAT (tested.ListInstances (),
334+ StatusIs (StatusCode::kUnavailable , HasSubstr (" try-again" )));
335+ }
336+
315337// / @test Verify that `bigtable::DeleteInstance` works in the positive case.
316338TEST_F (InstanceAdminTest, DeleteInstance) {
317339 using google::protobuf::Empty;
0 commit comments