@@ -41,6 +41,7 @@ using ::google::cloud::storage_mocks::MockAsyncWriterConnection;
4141using ::google::cloud::testing_util::IsOk;
4242using ::google::cloud::testing_util::IsOkAndHolds;
4343using ::google::cloud::testing_util::IsProtoEqual;
44+ using ::google::cloud::testing_util::StatusIs;
4445using ::google::protobuf::TextFormat;
4546using ::testing::ElementsAre;
4647using ::testing::Optional;
@@ -471,18 +472,37 @@ TEST(AsyncClient, ReadAll2) {
471472 EXPECT_THAT (payload->contents (), ElementsAre (" payload" ));
472473}
473474
474- TEST (AsyncClient, ReadAllFromReader) {
475+ TEST (AsyncClient, ReadAllRequestFailure) {
476+ auto constexpr kRequestText = R"pb(
477+ bucket: "projects/_/buckets/test-bucket"
478+ object: "test-object"
479+ )pb" ;
475480 auto mock = std::make_shared<MockAsyncConnection>();
476- EXPECT_CALL (*mock, options)
477- .WillRepeatedly (
478- Return (Options{}.set <TestOption<0 >>(" O0" ).set <TestOption<1 >>(" O1" )));
481+ EXPECT_CALL (*mock, options).WillRepeatedly (Return (Options{}));
479482
483+ EXPECT_CALL (*mock, ReadObject)
484+ .WillOnce ([&](AsyncConnection::ReadObjectParams const & p) {
485+ auto expected = google::storage::v2::ReadObjectRequest{};
486+ EXPECT_TRUE (TextFormat::ParseFromString (kRequestText , &expected));
487+ EXPECT_THAT (p.request , IsProtoEqual (expected));
488+ return make_ready_future (
489+ StatusOr<std::unique_ptr<AsyncReaderConnection>>(
490+ Status (StatusCode::kPermissionDenied , " uh-oh" )));
491+ });
492+
493+ auto client = AsyncClient (mock);
494+ auto request = google::storage::v2::ReadObjectRequest{};
495+ EXPECT_TRUE (TextFormat::ParseFromString (kRequestText , &request));
496+ auto payload = client.ReadAll (std::move (request)).get ();
497+ EXPECT_THAT (payload, StatusIs (StatusCode::kPermissionDenied , " uh-oh" ));
498+ }
499+
500+ TEST (AsyncClient, ReadAllFromReader) {
480501 auto reader_impl = MakeTestReaderConnection ({" test-" , " payload" });
481502 auto * reader_impl_ptr = reader_impl.get ();
482503 auto reader = AsyncReader (std::move (reader_impl));
483504 auto token = storage_internal::MakeAsyncToken (reader_impl_ptr);
484505
485- auto client = AsyncClient (mock);
486506 auto payload =
487507 AsyncClient::ReadAll (std::move (reader), std::move (token)).get ();
488508 ASSERT_STATUS_OK (payload);
0 commit comments