@@ -649,6 +649,56 @@ TEST(AsyncWriterConnectionTest, UnexpectedQueryFailsWithoutError) {
649649 EXPECT_THAT (query.get (), StatusIs (StatusCode::kInternal ));
650650}
651651
652+ TEST (AsyncWriterConnectionTest, FinalizeAppendableNoChecksum) {
653+ AsyncSequencer<bool > sequencer;
654+ auto mock = std::make_unique<MockStream>();
655+ EXPECT_CALL (*mock, Cancel).Times (1 );
656+ EXPECT_CALL (*mock, Write)
657+ .WillOnce ([&](Request const & request, grpc::WriteOptions wopt) {
658+ EXPECT_TRUE (request.finish_write ());
659+ EXPECT_TRUE (wopt.is_last_message ());
660+ EXPECT_EQ (request.common_object_request_params ().encryption_algorithm (),
661+ " test-only-algo" );
662+ EXPECT_FALSE (request.has_object_checksums ());
663+ return sequencer.PushBack (" Write" );
664+ });
665+ EXPECT_CALL (*mock, Read).WillOnce ([&]() {
666+ return sequencer.PushBack (" Read" ).then ([](auto f) {
667+ if (!f.get ()) return absl::optional<Response>();
668+ return absl::make_optional (MakeTestResponse ());
669+ });
670+ });
671+ EXPECT_CALL (*mock, Finish).WillOnce ([&] {
672+ return sequencer.PushBack (" Finish" ).then ([](auto f) {
673+ if (f.get ()) return Status{};
674+ return PermanentError ();
675+ });
676+ });
677+ auto hash = std::make_shared<MockHashFunction>();
678+ EXPECT_CALL (*hash, Update (_, An<absl::Cord const &>(), _)).Times (1 );
679+ EXPECT_CALL (*hash, Finish).Times (0 );
680+
681+ auto request = MakeRequest ();
682+ request.mutable_write_object_spec ()->set_appendable (true );
683+ auto tested = std::make_unique<AsyncWriterConnectionImpl>(
684+ TestOptions (), std::move (request), std::move (mock), hash, 1024 );
685+ auto response = tested->Finalize (WritePayload{});
686+ auto next = sequencer.PopFrontWithName ();
687+ ASSERT_THAT (next.second , " Write" );
688+ next.first .set_value (true );
689+ next = sequencer.PopFrontWithName ();
690+ ASSERT_THAT (next.second , " Read" );
691+ next.first .set_value (true );
692+ auto object = response.get ();
693+ EXPECT_THAT (object, IsOkAndHolds (IsProtoEqual (MakeTestObject ())))
694+ << " =" << object->DebugString ();
695+
696+ tested = {};
697+ next = sequencer.PopFrontWithName ();
698+ ASSERT_THAT (next.second , " Finish" );
699+ next.first .set_value (true );
700+ }
701+
652702TEST (AsyncWriterConnectionTest, WriteHandleIsUpdatedAfterQuery) {
653703 AsyncSequencer<bool > sequencer;
654704 auto mock = std::make_unique<MockStream>();
0 commit comments